LABORATUVAR — KALİTE TESTİ & UYUMLULUK
Fabrikanın kalite bekçisi. Üretilen her kablo, bir sonraki üretim adımına geçmeden veya müşteriye gönderilmeden önce belirlenen aralıklarda laboratuvar testinden geçmelidir. Lab modülü Teknik (test standartları), Üretim (test talepleri) ve Kalite (geçti/kaldı ile ölçümler) arasında köprü kurar.
Laboratuvar modülü fabrikanın kalite vicdandır. İş yaratmaz — Üretim’den üç kritik aralıkta otomatik olarak üretilen test talepleri şeklinde iş alır: üretim başlangıcı, her sepet/makara çıkışı sonrası ve üretim sonu. Bu aralıklar rastgele değildir; Teknik aşamasında kablo tasarımında tanımlanır ve iş kartlarına gömülür. Bir test talebi geldiğinde, lab kullanıcısı alanları, birimleri, numune sayıları ve parametreleri tamamen test standardından çekilen dinamik olarak üretilmiş bir ölçüm formu açar — hiçbir iki test formu birbirine benzemez. Lab kullanıcısı ölçümleri kaydeder, testi geçti veya başarısız olarak işaretler ve sistem üretim operatörünü bilgilendirir. Test başarısız olursa sistem otomatik olarak yeniden deneme talebi oluşturur. Testler belirli üretim çıkışlarına bağlanır ve bitmiş kablo makarasından geçirdiği her kalite kontrolüne kadar tam izlenebilirlik oluşturur. Lab modülü, fabrikanın IEC-EN, UL ve özel SLN standartlarına uyumluluğu kanıtlayabilmesinin nedenidir.
İÇİNDEKİLER
1. LABORATUVAR NE YAPAR
Laboratuvar modülü, tüm üretim sisteminin bağımlı olduğu dört soruyu yanıtlar:
- “Bu malzeme standartı karşılıyor mu?” — Her kablo tasarımı hangi testlerin yapılması gerektiğini ve hangi sıklıkta yapılacağını belirtir. Lab bu testleri yürütür ve tanımlı parametrelere göre nicel ölçümleri kaydeder.
- “Üretim devam edebilir mi?” — Üretim sayfaları her 5 saniyede test durumunu yoklar. Belirli bir aralık için testler hala beklemedeyse veya başarısız olduysa operatör durumu görür. Tüm testlerin geçmesi sonraki adımın yolunu açar.
- “Bir test başarısız olduğunda ne oldu?” — Başarısız testler otomatik olarak yeniden deneme talepleri oluşturur. Yeniden deneme zinciri
parent_request_idile takip edilir, böylece sistem bunun aynı çıkış için aynı testin 2. veya 3. denemesi olduğunu bilir. - “Uyumluluğu kanıtlayabilir miyiz?” — Her test sonucu, kapsadığı belirli üretim çıkışına (sepet/makara) kalıcı olarak bağlanır. Testler çıkışlara doğrudan (
output_id) veya lot düzeyinde (linked_output_ids) bağlanır. Bu, bitmiş üründen her kalite kontrolüne kadar kesintisiz bir izlenebilirlik zinciri oluşturur.
Temel mimari içgörü: Lab modülü hangi testlerin çalıştırılacağını tanımlamaz — bu Teknik modülünün test standartlarından ve kablo tasarımından gelir. Lab modülü ne zaman çalıştırılacağına karar vermez — bu, tasarımda belirtilen aralıklarda test talepleri oluşturan Üretim modülünden gelir. Lab modülünün tek sorumluluğu yürütme ve kayıttır: test talebini al, ölçüm formunu üret, sonuçları yakala ve geri bildir. Bu ayrım, üretimin gerekli bir testi atlamasını imkansız kılar, çünkü testler tasarımın kendisine gömülüdür.
2. VERİ AKIŞI
Lab modülü üç diğer modülün kesişim noktasında yer alır. Veri, Teknik ve Üretim’den Lab’a girer, sonuçlar ise Üretim’e ve bildirim sistemine geri çıkar.
2.1 Test Talebi Yaşam Döngüsü
2.2 Üç Test Aralığı
| Aralık | Kod Adı | Ne Zaman Oluşturulur | Kapsam | Bağlama |
|---|---|---|---|---|
| üretim_başı | Üretim Başı | Oturum başlangıcı | Tüm üretim lotu | İlk çıkışa bağlanır (veya linked_output_ids ile tüm çıkışlara) |
| her_sepet_sonu | Her Sepet Sonu | Her çıkış sonrası | Belirli sepet/makara | Doğrudan output_id ile bağlanır |
| üretim_sonu | Üretim Sonu | Oturum sonu | Tüm üretim lotu | Son çıkışa bağlanır (veya linked_output_ids ile tüm çıkışlara) |
Bu aralıklar Lab modülünde sabit kodlanmış değildir. Kablo tasarımının material_details.tests[].frequency alanından gelirler ve virgülle ayrılmış değerleri destekler (örn. "üretim_başı,her_sepet_sonu" testin hem başlangıçta hem de her sepet sonunda çalışacağı anlamına gelir).
2.3 Test Başarısız Olduğunda Ne Olur
Tekrar deneme mekanizması otomatiktir. Lab kullanıcısı bir testi başarısız olarak işaretlediğinde, backend hemen retry_count = orijinal + 1 ve parent_request_id = orijinal.id ile yeni bir ProductionTestRequest oluşturur. Bu, tam denetim geçmişi için tekrar denemeleri birbirine zincirler. Yeni talep Lab’ın bekleyen kuyruğunda görünür ve üretim operatörü yüksek öncelikli bir bildirim alır.
2.4 Bildirim Köprüsü
| Olay | Alıcılar | Öncelik | Derin Bağlantı |
|---|---|---|---|
| Test talebi oluşturuldu | Tüm lab_user + super_admin (talep eden hariç) | Yüksek | /lab/test session_id, work_card_id ile |
| Test geçti | Talep eden + super_admin (test eden hariç) | Orta | /lab/test test_request_id ile |
| Test başarısız | Talep eden + super_admin (test eden hariç) | Yüksek | /lab/test test_request_id, retry_request_id ile |
3. VERİTABANI KATMANI
Lab modülü 5 tablo kullanır. İkisi temel test talebi tablolarıdır (eski + üretim entegreli), üçü Teknik modülünün test standartları sisteminden gelir.
3.1 production_test_requests (20 sütun) — Ana Tablo
Asıl iş yükünü taşıyan tablo budur. Üretim tarafından oluşturulan her test talebi burada yaşar.
| Sütun | Tip | Detay |
|---|---|---|
id | Integer PK | Otomatik artan, indeksli |
work_card_id | Integer FK | work_cards.id referansı, indeksli |
session_id | Integer FK | production_sessions.id referansı, indeksli |
output_id | Integer FK | production_outputs.id referansı — her_sepet_sonu testleri için ayarlanır |
linked_output_ids | JSON | Lot düzeyindeki testler için çıkış ID dizisi (üretim_başı, üretim_sonu) |
test_standard_id | Integer FK | test_standards.id referansı |
machine_type | String(50) | Hangi makine: kabatel_cekme, kalaylama, incetel_cekme, buncher, extruder, ebeam |
test_interval | String(50) | üretim_başı / her_sepet_sonu / üretim_sonu |
input_slot | Integer | Paralel üretim modu için 0 veya 1 |
retry_count | Integer | Varsayılan 0. Her tekrarda artırılır. |
parent_request_id | Integer FK | Öz-referans — orijinal başarısız teste işaret eder |
status | Enum | PENDING / PASSED / FAILED |
measurements | JSON | Yapı: { samples: [{ sample_num, params: { name: value } }] } |
requested_by | Integer FK | Oluşturmayı tetikleyen kullanıcı (genellikle üretim operatörü) |
requested_at | DateTime | UTC |
tested_by | Integer FK | Testi tamamlayan lab kullanıcısı |
tested_at | DateTime | Testin tamamlandığı zaman |
notes | Text | Lab kullanıcı notları |
created_at | DateTime | UTC |
updated_at | DateTime | Otomatik güncellenen |
3.2 test_requests (15 sütun) — Eski Tablo
Orijinal test talebi sistemi, geriye dönük uyumluluk için hala çalışır durumda. İş kartı/oturum bağlantısı yerine material_id ve material_qr kullanır. Durum enum’u farklıdır: test_bekleniyor, test_basarili, test_basarisiz, iptal. Üretim entegreli production_test_requests tablosu bundan sonra birincil sistemdir.
3.3 test_standards (Teknik modülünden)
Neyin test edileceğini tanımlar. Her standardın bir kategorisi (IEC-EN, UL, SLN), test adı, gerekli numune sayısı, test yöntemi ve parametre seti vardır. Lab, dinamik ölçüm formları üretmek için bunu okur.
| Sütun | Detay |
|---|---|
standard_category | IEC-EN, UL veya SLN (özel fabrika standardı) |
test_name / test_name_en | Türkçe ve İngilizce test adları |
standard_number | Referans standardı (örn. “IEC 60228”) |
test_samples | Gerekli numune sayısı (≥ 1) |
test_method | Testin nasıl yapılacağının açıklaması |
3.4 test_parameters (Teknik modülünden)
Her test standardının bir veya daha fazla parametresi vardır. Bunlar lab’ın dinamik formunda görünen gerçek ölçüm alanlarıdır.
| Sütun | Detay |
|---|---|
parameter_name | örn. “Çap”, “Direnç”, “Çekme Mukavemeti” |
parameter_unit | örn. “mm”, “Ω/km”, “N/mm²” |
parameter_order | Formdaki görüntülenme sırası |
is_required | Ölçümün zorunlu olup olmadığı |
3.5 test_results (Teknik modülünden)
Kablo partilerine bağlı tarihsel test sonuçlarını saklar. pass_fail durumunu (PASS/FAIL/PENDING), measurements JSON’ını ve test standardı ile üretim oturumuna bağlantıları içerir.
Çift sistem mimarisi: Veritabanında hem test_requests (eski, malzeme bazlı) hem de production_test_requests (güncel, üretim bazlı) bulunur. Eski sistem, testleri hammaddelere bağlayan ilk uygulamaydı. Üretim sistemi, testleri iş kartlarına, oturumlara ve belirli çıkışlara bağlamak üzere evrildi. İkisi bir arada yaşar — eski endpoint’ler hala çalışır ancak fabrika zeminini bugün yönlendiren üretim entegreli sistemdir.
4. BACKEND MİMARİSİ
4.1 Route Dosyaları
| Dosya | Satır | Önek | Endpoint | Amaç |
|---|---|---|---|---|
test_routes.py | 318 | /api/test-requests | 6 | Eski test talebi CRUD. Oluşturma, listeleme, getirme, tamamlama, güncelleme, silme. |
test_integration_routes.py | 745 | /api/production/test-requests | 9 | Üretim entegreli test sistemi. Aralık için oluşturma, durum kontrolü, bekleyen, tümü, detaylar, tamamlama, silme, çıkış ID ve çıkış koduna göre bağlı testler. |
4.2 API Sözleşmesi — Üretim Test Endpoint’leri (9)
| Metot | Yol | Yetki | Ne Yapar |
|---|---|---|---|
POST | /api/production/test-requests/create-for-interval | authenticated | Belirli bir aralık için test talepleri oluşturur. İş kartının material_details.tests’inden testleri okur, frekansa göre filtreler, eşleşen test başına ProductionTestRequest oluşturur. Lab kullanıcılarına bildirim gönderir. |
GET | /api/production/test-requests/check-status/{session_id}/{interval} | authenticated | Bir aralık için tüm testlerin geçip geçmediğini kontrol eder. all_passed boolean, bekleyen/başarısız/geçen sayıları ve bekleyen/başarısız test listelerini döner. Üretim frontend’i tarafından durum yoklaması için kullanılır. |
GET | /api/production/test-requests/pending/{session_id} | authenticated | Bir oturum için tüm bekleyen testleri getirir. test_standard ve talep edeni eager-load eder. |
GET | /api/production/test-requests/all | authenticated | Tüm üretim test taleplerini getirir (Lab sayfası için). Makine adları, test standardı bilgilerini içerir. Duruma göre filtrelenebilir. Varsayılan limit 50. |
GET | /api/production/test-requests/{test_id} | authenticated | Tam detaylarla belirli bir test talebini getirir: sıralanmış parametrelerle test standardı, iş kartı bilgisi. |
POST | /api/production/test-requests/{test_id}/complete | lab_user, super_admin | Testi tamamlar. Durumu GEÇTİ veya BAŞARISIZ olarak ayarlar, ölçüm JSON’ını saklar, test edeni kaydeder. Başarısız ise: otomatik tekrar talebi oluşturur. Bildirim gönderir. |
DELETE | /api/production/test-requests/{test_id} | super_admin | Test talebini siler. |
GET | /api/production/test-requests/bonded-tests/output/{output_id} | authenticated | Belirli bir çıkışa bağlı tüm testleri getirir. Doğrudan (output_id eşleşmesi), lot düzeyinde (linked_output_ids içerir) ve eski (oturum eşleşmesi) dahil. Aralığa göre gruplar. |
GET | /api/production/test-requests/bonded-tests/output-code/{output_code} | authenticated | Yukarıdakiyle aynı ama çıkış koduna göre (örn. X1, X2). Kodu dahili olarak ID’ye çözer. |
4.3 Eski Test Endpoint’leri (6)
| Metot | Yol | Yetki | Ne Yapar |
|---|---|---|---|
POST | /api/test-requests/ | authenticated | Eski test talebi oluşturur (malzeme bazlı). |
GET | /api/test-requests/ | authenticated | Filtrelerle eski test taleplerini listeler. |
GET | /api/test-requests/{id} | authenticated | Belirli eski test talebini getirir. |
POST | /api/test-requests/{id}/complete | lab_user, super_admin | Eski testi geçti/kaldı ve sonuçlarla tamamlar. |
PUT | /api/test-requests/{id} | super_admin | Eski test talebini günceller. |
DELETE | /api/test-requests/{id} | super_admin | Eski test talebini siler. |
4.4 Üretim Test Taleplerini Nasıl Oluşturur
Test talepleri Lab modülü tarafından oluşturulmaz. Oturum yaşam döngüsünün üç noktasında Üretim tarafından oluşturulur:
- Oturum başlangıcı (
POST /api/production/start-session):work_card.material_details.tests’i okur,üretim_başıfrekansına göre filtreler, eşleşen test başına birProductionTestRequestoluşturur (paralel modda slot başına bir tane). - Çıkış kaydı (
POST /api/production/record-output):her_sepet_sonufrekansına göre filtreler, belirlioutput_id’ye bağlı test talepleri oluşturur. - Oturum sonu (
POST /api/production/end-session):üretim_sonufrekansına göre filtreler, test talepleri oluşturur, ardından lot düzeyindeki testleri (üretim_başı ve üretim_sonu)linked_output_idsaracılığıyla tüm ilgili çıkışlara bağlar.
4.5 Bağlı Test Sistemi
Testler üretim çıkışlarına üç şekilde bağlanır, bu sırayla kontrol edilir:
- Doğrudan bağ:
output_idçıkışla eşleşir — tek bir sepet/makaraya uygulananher_sepet_sonutestleri için kullanılır. - Lot düzeyinde bağ:
session_ideşleşir VEtest_intervalüretim_başıveyaüretim_sonu— bu lot düzeyindeki testler oturumdaki tüm çıkışlara uygulanır. - Eski bağ:
session_ideşleşir VEoutput_id IS NULLVElinked_output_ids IS NULL— eski test talepleri için geriye dönük uyumluluk.
GET /bonded-tests/output/{output_id} endpoint’i testleri aralığa göre gruplanmış olarak döner ve herhangi bir tek çıkış için eksiksiz kalite tablosu sunar.
4.6 Paralel Üretim Desteği
Bazı makineler (örn. OTOMEC Kalaylama, CGN E-beam) iki giriş yuvsıyla paralel işlemeyi destekler. Lab modülü bunu input_slot alanı (0 veya 1) aracılığıyla yönetir. Oturum başlangıcı ve sonunda, lot düzeyindeki testler için slot başına bir test talebi oluşturulur. Yuvaya özgü çıkışlar HalfProductStock’taki source_qr_codes ile bağlanır.
5. FRONTEND
5.1 Sayfa Yapısı
| Rota | Bileşen | Satır | Amaç |
|---|---|---|---|
/lab/dashboard | Lab/Dashboard/index.tsx | 133 | İstatistik kartları ve uyarı/test tabloları ile genel bakış paneli. Şu anda sahte veri kullanıyor — gerçek API’lere bağlanacak. |
/lab/test | Lab/Test/index.tsx | 803 | Birincil Lab sayfası. Dinamik ölçüm formları, tamamlama iş akışı ve sonuç görüntüleme ile tüm üretim test taleplerinin ProTable’ı. |
5.2 Test Sayfası — Temel Lab Arayüzü
Lab kullanıcılarının zamanlarının çoğunu geçirdiği yer burasıdır. 9 sütunlu bir ProTable’da tüm üretim test taleplerini gösterir ve tam test yaşam döngüsünü destekler.
ProTable Sütunları (9)
| # | Sütun | Genişlik | Detay |
|---|---|---|---|
| 1 | Kod | 70px, sola sabit | Mor etiket: L{id} |
| 2 | Test | otomatik | Test adı + standart numarası |
| 3 | İş Kartı | 80px | Mavi etiket: #{work_card_id} |
| 4 | Makine | 150px | Makine adı (Türkçe) |
| 5 | Aralık | 100px | Aralık etiketi: Üretim Başı / Her Sepet / Üretim Sonu |
| 6 | Talep | 130px | Talep tarihi (GG.AA.YY SS:dd, Türkiye saat dilimi) |
| 7 | Durum | 100px | Durum etiketi: Beklemede (turuncu), Onaylandı (yeşil + ✓), Başarısız (kırmızı + X) |
| 8 | Test Eden | 100px | Test eden adı veya “-” |
| 9 | İşlemler | 140px, sağa sabit | Koşullu: “Test Başlat” (beklemede + lab_user), “Görüntüle” (tamamlanmış), Sil (super_admin) |
Dinamik Test Formları
Lab kullanıcısı “Test Başlat”a tıkladığında, sistem tüm parametreleri dahil tam test standardını GET /api/teknik/standards/tests/{id}/full’dan çeker. Form dinamik olarak üretilir:
- Her numune için (1’den
test_samples’a): “Numune {n}” bölücüsü - Her numune içindeki her parametre için: parametre adı etiket, birim ek olarak, min/maks sınırlar, adım 0.01 ve zorunlu bayrağı ile bir
InputNumberalanı - Altta bir notlar metin alanı
- Üç eylem düğmesi: İptal, Başarısız (tehlike), Onaylandı (birincil)
Ölçüm verileri yapılandırılmış JSON’a dönüştürülür: { samples: [{ sample_num: 1, params: { "Çap": 1.82, "Direnç": 9.45 } }] }
Gerçek Zamanlı Güncellemeler
Test listesi setInterval(fetchTestRequests, 5000) ile her 5 saniyede yoklar. Lab sayfası için WebSocket kullanılmaz — basitlik ve güvenilirlik için yoklama tercih edilmiştir.
Sonuç Görüntüleme
Tamamlanmış bir testte “Görüntüle”ye tıklamak, kompakt bir ölçüm tablosuyla salt okunur modal açar: sütun başlıkları parametre adları (birimlerle), satırlar numuneler, hücreler kaydedilen değerlerdir. Notlar tablonun altında gösterilir.
5.3 Dashboard — Genel Bakış Paneli
Şu anda 4 istatistik kartı (Bekleyen Uyarılar, Aktif Testler, Tamamlanan Testler, Bugünün Testleri) ve iki tablo (Bekleyen Lab Uyarıları, Aktif Test Süreçleri) gösterir. Tüm veriler şu anda sahte/sabit kodlanmış — Lab modülü olgunlaştıkça gerçek API’lere bağlanacak hazır bir kabuktur.
5.4 İstemci Taraflı Arama
Test sayfası şu alanlarda kapsamlı istemci taraflı arama filtrelemesi uygular: test kodu (L{id}), test adı, standart numarası, iş kartı ID, makine adı/tipi, aralık metni, test eden adı ve durum (Türkçe).
5.5 Yetki Sistemi
| Sayfa | Rota Koruması | Manifest’teki Düğmeler |
|---|---|---|
| Lab Dashboard | canLab | access_page, view_stats |
| Lab Test | canLab | access_page, create_test, view_tests |
Test sayfasındaki kullanıcı tipi kontrolleri: isLabUser (lab_user veya super_admin) testleri başlatabilir/tamamlayabilir. isSuperAdmin test taleplerini silebilir. Normal kullanıcılar salt okunur erişime sahiptir.
6. LAB PANELİ (DASHBOARD)
6.1 Amaç
Lab Paneli, laboratuvar kullanıcıları için /lab/dashboard adresindeki giriş sayfasıdır. Amacı, lab’ın iş yükünün genel bir görünümünü sunmaktır: kaç uyarı bekliyor, kaç test aktif, kaç tanesi tamamlandı ve bugün ne oldu. Lab kullanıcısının giriş yaptıktan sonra gördüğü ilk sayfadır.
6.2 Mevcut Durum — Hazırlanmış Kabuk
Dashboard şu anda sahte verilerle hazırlanmış bir kabuktur. Tüm istatistikler ve tablo satırları sabit kodlanmıştır — hiçbir API çağrısı yapılmaz. Bu bilinçli bir tercihtir: düzen ve bilgi mimarisini tanımlamak için önce kabuk oluşturulmuştur ve Lab modülü olgunlaştıkça gerçek endpoint’lere bağlanacaktır. Bileşen, 133 satır temiz React kodundan oluşur, tamamen stillendirilmiş ve entegrasyona hazırdır.
6.3 Düzen ve Bileşenler
Sayfa, “Lab Kontrol Paneli” başlığını ve giriş yapmış kullanıcının adını gösteren kişiselleştirilmiş bir selamlama ile bir PageContainer sarıcısı içinde Ant Design grid sistemini kullanır.
İstatistik Satırı (4 kart)
Dört Statistic kartı duyarlı 4 sütunlu gridde (Col lg={6}), her biri ikon ve renk kodlu değerle:
| # | Kart Başlığı | Sahte Değer | İkon | Renk |
|---|---|---|---|---|
| 1 | Bekleyen Uyarılar | 2 | AlertOutlined | Hata (kırmızı) |
| 2 | Aktif Testler | 2 | ExperimentOutlined | Uyarı (turuncu) |
| 3 | Tamamlanan Testler | 15 | CheckCircleOutlined | Başarılı (yeşil) |
| 4 | Bugünkü Testler | 8 | ClockCircleOutlined | Birincil (mavi) |
Veri Tabloları (2 yan yana)
İstatistiklerin altında, iki tablo duyarlı 2 sütunlu düzende (Col lg={12}) yer alır:
| Tablo | Kart Başlığı | Rozet | Sütunlar | Sahte Satırlar |
|---|---|---|---|---|
| Bekleyen Lab Uyarıları | Bekleyen Lab Uyarıları | Acil (kırmızı etiket) | Makine, Uyarı, Saat, İşlem | 2 satır: Kabatel Çekme 01 (yeni üretim uyarısı), Kalaylama 01 (yavaş mod onayı) |
| Aktif Test Süreçleri | Aktif Test Süreçleri | Devam Ediyor (işlem etiketi) | Test Kodu, Ürün, Durum, Öncelik, İşlem | 2 satır: SLHT001 - 1.8mm Tel (test ediliyor, yüksek), SLDT002 - Kalay Tel (onay bekliyor, normal) |
Her tablonun bir eylem düğmesi sütunu vardır: uyarılar için “Test Başlat”, aktif testler için “Onayla”. Bu düğmeler şu anda işlevsiz yer tutuculardir.
6.4 Kimlik Doğrulama Entegrasyonu
Sahte olmasına rağmen, Dashboard zaten gerçek kimlik doğrulama sistemiyle entegredir. Giriş yapmış kullanıcının adını alt başlıkta göstermek için RealAuthService.getCurrentUser() çağrır. Rota, rota yapılandırmasındaki canLab yetkisiyle korunur.
6.5 Yol Haritası
Gerçek API’lere bağlandığında, Dashboard canlı verileri şuralardan çekecektir:
GET /api/production/test-requests/all?status=pending→ Bekleyen sayısı ve uyarı tablosuGET /api/production/test-requests/all?status=passed→ Tamamlanan sayısı- Test talebi zaman damgalarından toplu günlük istatistikler
- Bildirim sistemiyle gerçek zamanlı uyarı entegrasyonu
Neden sahte sayfa gönderilir? Bir fabrika ERP’sinde, dashboard düzeni kullanıcı benimsemesi için kritiktir. Önce kabuğu oluşturmak — gerçekçi sahte veriler ve tam kart/tablo yapısıyla — herhangi bir backend çalışması bağlanmadan önce paydaşların bilgi hiyerarşisini doğrulamasına olanak tanır. 133 satırlık bileşen, sahte verileri gerçek API çağrılarıyla değiştirmenin basit bir entegrasyon görevi olması için kasitlı olarak minimaldedir.
7. TEST YÖNETİMİ
7.1 Amaç ve Ölçek
Test Yönetimi, Laboratuvar modülünün operasyonel kalbidir. /lab/test adresinde yer alır ve lab kullanıcılarının fabrikanın çalıştırdığı her kalite testini aldığı, yürüttüğü ve kaydettiği yerdir. Frontend bileşeni 803 satır React/TypeScript, backend rota dosyası 745 satır Python/FastAPI’dir ve birlikte 9 üretim entegreli API endpoint’i ile 6 eski endpoint’i yönetirler. Üretim ve Lab arasındaki her etkileşim bu sayfa üzerinden akar.
7.2 Sayfa Başlığı ve Rozet
Sayfa başlığı “Test Talepleri”dir ve bir PageContainer içinde görüntülenir. Başlığın yanında canlı bir Badge bekleyen test sayısını gösterir. Bu rozet verilerle birlikte her 5 saniyede güncellenir ve lab kullanıcısına sayfa kaydırmadan anlık görsel bir iş yükü ipucu verir.
7.3 ProTable — 9 Sütunlu Test Kuyruğu
Sayfanın çekirdeği, yatay kaydırma (x: 1100), yerleşik sayfalama, yoğunluk geçişi, sütun görünürlük ayarları ve manuel yenileme ile yapılandırılmış Ant Design Pro ProTable’ıdır. Tablo GET /api/production/test-requests/all’dan 100’e kadar kayıt çeker ve 9 sütunda görüntüler:
| # | Sütun | Genişlik | Sabit | Görüntüleme Detayları |
|---|---|---|---|---|
| 1 | Kod | 70px | Sol | Mor monospace Tag: L{id}. Test talebi başına benzersiz tanımlayıcı. |
| 2 | Test | otomatik | — | İki satır: test_standard.test_name’den test adı (kalın), altında küçük gri metin olarak standart numarası. |
| 3 | İş Kartı | 80px | — | Mavi Tag: #{work_card_id}. Testi üretim iş kartına bağlar. |
| 4 | Makine | 150px | — | Makine görüntü adı. Backend’den machine_name (marka – model) kullanır veya machine_type kodlarını Türkçe adlara eşleyen istemci taraflı aramaya düşer (Kabatel Çekme, Kalaylama, İncetel Çekme, Buncher, Extruder, E-Beam, Aktarma, Paletleme). |
| 5 | Aralık | 100px | — | Aralık Tag’i: üretim_başı → “Üretim Başı”, her_sepet_sonu → “Her Sepet”, üretim_sonu → “Üretim Sonu”. |
| 6 | Talep | 130px | — | Talep zaman damgası Türkiye saat diliminde (Europe/Istanbul) DD.MM.YY HH:mm formatında. UTC-yerel dönüşümüyle dayjs kullanır. |
| 7 | Durum | 100px | — | Durum etiketi: Beklemede (turuncu), Onaylandı (yeşil + ✓ ikonu), Başarısız (kırmızı + X ikonu). |
| 8 | Test Eden | 100px | — | Tamamlandıysa test edenin adı, beklemedeyse “–”. |
| 9 | İşlemler | 140px | Sağ | Koşullu düğmeler: ExperimentOutlined (test başlat — yalnızca beklemede + lab_user), EyeOutlined (sonuçları gör — tamamlanmış testler), DeleteOutlined ile Popconfirm (yalnızca super_admin). |
7.4 İstemci Taraflı Arama
Araç çubuğu SearchOutlined ikonlu bir arama girdisi (200px geniş, yuvarlatılmış) görüntüler. Arama useMemo ile tamamen istemci taraflıdır: tüm veri setini 10’dan fazla alana karşı eş zamanlı filtreler:
- Test kodu (
L{id}) - Test adı ve standart numarası
- İş kartı ID
- Makine adı (API’den) ve makine tipi (istemci taraflı eşlemeden)
- Aralık metni (Türkçe görüntü adları)
- Test eden adı
- Türkçe durum: “beklemede”, “onaylandı”, “başarısız”
7.5 Gerçek Zamanlı Yoklama
Bileşen yüklendiğinde fetchTestRequests()’i çağırır ve 5 saniyelik aralıklarla bir setInterval başlatır. Temizleme fonksiyonu sökülürken aralığı temizler. Bu, WebSocket karmaşıklığı olmadan neredeyse gerçek zamanlı güncellemeler sağlar. Üretim’den yeni bir test talebi geldiğinde tabloda 5 saniye içinde görünür.
7.6 Bildirim Derin Bağlantı Desteği
Bileşen yüklendiğinde useLocation() ile URL sorgu parametrelerini okur. Lab kullanıcısı bir bildirime tıkladığında (örn. “Test Talebi: Direnç Testi”), /lab/test?test_request_id=42’ye yönlendirilir. Sayfa bilgi mesajı gösterir: “Test talebi görüntüleniyor: #42”. Bu, bildirimden eyleme kesintisiz bir akış oluşturur.
7.7 Dinamik Test Formu
Lab modülünün teknik olarak en gelişmiş kısmı budur. Lab kullanıcısı bekleyen bir testte deney ikonuna tıkladığında, ortalı bir Modal (700px geniş, bulanık arka plan) açılır. Modal başlığı test adını, alt başlık olarak “İş Kartı #{work_card_id} • {aralık}” gösterir. Form tamamen test standardının parametre tanımlarından üretilir.
Adım 1: Test Standardını Getir
Sistem, parameter_order’a göre sıralanmış tüm parametreleri dahil tam test standardını almak için GET /api/teknik/standards/tests/{id}/full’u çağırır. Yüklenirken “Test standardı yükleniyor...” ile bir Spin bileşeni görüntülenir.
Adım 2: Form Alanlarını Üret
Form üretme algoritması test_samples (numune sayısı) × parameters (ölçüm alanları) üzerinde yineler:
Her numune için (1’den test_samples’a):
Birden fazla numune varsa → "Çizgi" "Numune {n}" görüntüle
test_standard.parameters içindeki her parametre için:
InputNumber görüntüle:
• ad: "sample_{s}_param_{param.id}"
• etiket: parameter_name (örn. "Çap", "Direnç")
• addonAfter: parameter_unit (örn. "mm", "Ω/km")
• placeholder: "Hedef: {target_value}" tanımlıysa
• parametre tanımından min/maks sınırlar
• adım: 0.01
• is_required bayrağı
• flex düzen: 200px min genişlik, kaydırmalı
Bu, 3 parametreli ve 2 numuneli bir test standardının 2 numune grubu boyunca 6 giriş alanı ürettiği anlamına gelir. 1 parametreli ve 1 numuneli bir standart tek bir alan üretir. Form her zaman uyum sağlar — hiçbir iki test formu birbirine benzemez.
Adım 3: Uç Durumlar
- Parametre tanımlanmamış: “Bu test için parametre tanımlanmamış” mesajını yalnızca test adıyla gösterir. Kullanıcı yine de ölçüm olmadan testi geçirebilir/kalabilir.
- Standart bulunamadı: “Test standardı bulunamadı” gösterir.
Adım 4: Notlar Alanı
Tüm ölçüm alanlarının altında, “Notlar” etiketli ve “Test ile ilgili notlar...” yer tutuculu bir TextArea (2 satır) lab kullanıcısının gözlem eklemesine olanak tanır.
Adım 5: Eylem Düğmeleri
Altta flex satırda üç düğme:
| Düğme | Stil | İkon | Eylem |
|---|---|---|---|
| İptal | Varsayılan | — | Modalı kapatır, formu sıfırlar |
| Başarısız | Tehlike (kırmızı) | CloseCircleOutlined | handleTestComplete(false) çağırır |
| Onaylandı | Birincil (yeşil, token.colorSuccess) | CheckCircleOutlined | handleTestComplete(true) çağırır |
7.8 Test Tamamlama ve Ölçüm Montajı
Lab kullanıcısı “Başarısız” veya “Onaylandı”ya tıkladığında sistem:
form.validateFields()ile tüm zorunlu form alanlarını doğrular- Dinamik alan adlarından ölçüm JSON’ını monte eder:
{ "samples": [ { "sample_num": 1, "params": { "Çap": 1.82, "Direnç": 9.45 } }, { "sample_num": 2, "params": { "Çap": 1.81, "Direnç": 9.52 } } ] } POST /api/production/test-requests/{id}/complete’e{ passed: true/false, measurements: {...}, notes: "..." }gönderir- Başarılıysa: “Test onaylandı” veya “Test başarısız” gösterir, modalı kapatır, formu sıfırlar, tabloyu yeniler
7.9 Başarısızlıkta Otomatik Tekrar Deneme
Backend passed: false tamamlaması aldığında, tek bir veritabanı işleminde üç şeyi atomik olarak yapar:
- Orijinali günceller: Durumu
FAILEDyapar, test edeni, zaman damgasını ve ölçümleri kaydeder - Tekrar oluşturur: Aynı
work_card_id,session_id,output_id,test_standard_id,machine_typevetest_intervalile yeni birProductionTestRequest— ancakretry_count = orijinal + 1veparent_request_id = orijinal.id - Bildirim gönderir: Orijinal talep edene ve tüm super admin’lere yüksek öncelikli bildirimler, test sayfasına derin bağlantı ve ek veride
retry_request_idile
Tekrar talebi 5 saniye içinde (sonraki yoklama döngüsü) Lab kuyruğunda yeni bekleyen test olarak görünür. API yanıtı retry_created: true ve retry_request_id içerir.
7.10 Tamamlanmış Test Sonuçlarını Görüntüleme
Tamamlanmış testler (geçti veya başarısız) için göz ikonu salt okunur bir Modal (480px geniş, bulanık arka plan) açar. Başlık, geçti/kaldı etiketiyle test adını, artı meta verileri gösterir: L{id} • #{work_card_id} • GG.AA SS:dd.
Sonuç görüntüsü kompakt bir ölçüm tablosu sunar:
- Başlık satırı:
#sütunu (numune numarası) ardından parametre adı başına bir sütun, birim altında küçük metinle - Veri satırları: Numune başına bir satır, her parametrenin altında hizalanmış monospace değerlerle
- Notlar: Lab kullanıcısı not yazdıysa tablonun altında gri kutuda görünür
- Ölçüm yok: Parametre ölçümü kaydedilmediyse “Parametre ölçümü kaydedilmemiş” gösterir
7.11 Silme İşlevi
Yalnızca super_admin kullanıcılar silme düğmesini (kırmızı çöp ikonu) görür. Tıklamak bir Popconfirm gösterir: “Silmek istediğinize emin misiniz?” Evet/Hayır seçenekleriyle. Onaylanan silmeler DELETE /api/production/test-requests/{id}’yi çağırır ve satırı iyimser bir şekilde state’den kaldırır.
7.12 Yetki Modeli
| Eylem | Gerekli Rol | Uygulama |
|---|---|---|
| Test listesini görüntüle | canLab yetkili herhangi bir kimlik doğrulanmış kullanıcı | routes.ts’de rota koruması |
| Test başlat / tamamla | lab_user veya super_admin | Frontend: isLabUser kontrolü düğmeyi gizler. Backend: user_type not in [’lab_user’, ’super_admin’] 403 döner. |
| Test talebi sil | super_admin | Frontend: isSuperAdmin kontrolü düğmeyi gizler. Backend: user_type != ’super_admin’ 403 döner. |
7.13 Backend: Üretim Test Taleplerini Nasıl Oluşturur
Test talepleri Lab modülünden değil, Üretim modülünden kaynaklanır. POST /api/production/test-requests/create-for-interval endpoint’i oturum yaşam döngüsünün üç noktasında çağrılır:
Frekans alanı virgülle ayrılmış değerleri destekler (örn. "üretim_başı,her_sepet_sonu"), yani tek bir test birden fazla aralıkta tetiklenebilir. Her eşleşen test için sistem, talebi oluşturmadan önce TestStandard’ın veritabanında var olduğunu doğrular.
7.14 Backend: “Tüm Testler” Endpoint’i
GET /api/production/test-requests/all endpoint’i Lab sayfasını besler. Tek bir sorguda 5 ilişkiyi eager-load eder (test_standard, work_card, session, requester, tester), durum filtrelemeyi destekler, varsayılan 50 ile sınırlar (frontend 100 ister), ve oturumun machine_id’sini machine_type için doğru makine tablosuna bakarak makine adlarını çözer. Yanıt ayrıca başlık rozeti için genel pending_count içerir.
7.15 Backend: Bağlı Test Sistemi
İki endpoint bağlı test sorgularına hizmet eder — çıkış ID’sine ve çıkış koduna (örn. X1, X2) göre. Belirli bir üretim çıkışına uygulanan tüm testleri aralığa göre gruplanmış olarak dönerler. Bağlama mantığı üç seviyeyi kontrol eder:
- Doğrudan bağ:
output_ideşleşir — belirli bir sepet/makaraya bağlıher_sepet_sonutestleri - Lot düzeyinde bağ: Aynı oturum + aralık
üretim_başıveyaüretim_sonu— bu lot düzeyindeki testler oturumdaki her çıkışa uygulanır - Eski bağ: Aynı oturum +
output_id IS NULL+linked_output_ids IS NULL— geriye dönük uyumluluk
Yanıt testleri { "üretim_başı": [...], "her_sepet_sonu": [...], "üretim_sonu": [...] } şeklinde gruplar ve aralık başına sayılar içeren bir özet nesnesi ile. Bu, herhangi bir tüketiciye (Üretim sayfası, QR tarayıcı, raporlar) tek bir çıkış için eksiksiz kalite tablosu sunar.
7.16 CRUD Akışı
OLUŞTUR (Test Talebi)
- Üretim operatörü oturum başlatır, çıkış kaydeder veya oturumu bitirir
- Üretim backend’i
work_card.material_details.tests’i okur - Mevcut aralığın frekansına göre filtreler
POST /api/production/test-requests/create-for-interval’i çağırır- Her eşleşen test için:
PENDINGdurumluProductionTestRequestoluşturur - Tüm
lab_uservesuper_admin’e yüksek öncelikli bildirimler gönderir (talep eden hariç) - Yeni talep 5 saniye içinde Lab kuyruğunda görünür
OKU (Test Kuyruğu ve Sonuçlar)
- Lab sayfası yüklenir →
GET /api/production/test-requests/all?limit=100 - Backend 5 ilişkiyi eager-load eder, makine adlarını çözer
- Güncellemeler için her 5 saniyede yoklar
- İstemci taraflı arama ek API çağrısı olmadan 10’dan fazla alanda filtreler
- Bireysel test detayları: tam parametre listesiyle
GET /api/production/test-requests/{id} - Çıkış başına bağlı testler: aralığa göre gruplanmış
GET /bonded-tests/output/{id}
GÜNCELLE (Test Tamamlama)
- Lab kullanıcısı bekleyen testte deney ikonuna tıklar
- Sistem
GET /api/teknik/standards/tests/{id}/full’dan parametrelerle tam test standardını getirir - Dinamik form görüntülenir: numuneler × parametreler → InputNumber alanları
- Lab kullanıcısı ölçümleri doldurur, isteğe bağlı notlar ekler
- “Onaylandı” (geçti) veya “Başarısız” (kaldı) tıklar
POST /api/production/test-requests/{id}/completeile{ passed, measurements, notes }- Backend doğrular: beklemede olmalı, kullanıcı lab_user/super_admin olmalı
- Durumu günceller,
tested_by,tested_atkaydeder, ölçüm JSON’ını saklar - Başarısızsa: atomik olarak tekrar talebi oluşturur (retry_count + 1, parent_request_id ayarlanır)
- Talep edene + super admin’lere bildirim gönderir (geçti için orta, kaldı için yüksek öncelik)
- Frontend tabloyu yeniler, modal kapanır
SİL
- Super admin herhangi bir test talebinde çöp ikonuna tıklar
Popconfirm: “Silmek istediğinize emin misiniz?”- Onaylandı →
DELETE /api/production/test-requests/{id} - Backend:
super_admindoğrular, kaydı siler - Frontend: satırı iyimser bir şekilde state’den kaldırır
Dinamik formlar neden önemlidir: Bir kablo fabrikası düzinelerce farklı standart test eder — IEC 60228 iletken direncinden UL alev testlerine, özel SLN fabrika özelliklerine kadar. Her standardın farklı parametreleri, farklı numune sayıları ve farklı birimleri vardır. Her standart için formları sabit kodlamak sürdürülemez olurdu. Bunun yerine sistem, test standardı tanımını (Teknik modülünde saklanır) okur ve formu çalışma zamanında üretir. Yeni parametrelerle yeni bir test standardı eklemek sıfır frontend değişikliği gerektirir — form veritabanı tanımından otomatik olarak uyum sağlar. Lab modülünü herhangi bir sayıda kalite standardına ölçeklenebilir kılan budur.
8. SONUÇ
Laboratuvar modülü kapsam olarak aldatıcı bir şekilde basittir — iki sayfa, beş tablo, on beş endpoint — ancak orantısız bir sorumluluk taşır. “Evet, bu kablo standartı karşılıyor” veya “hayır, durun ve yeniden test edin” diyebilen tek sistemdir. Onsuz, üretim çıkışları doğrulanmamış metaldir.
Üç tasarım kararı bu modülü tanımlar:
- Testler Teknik’te tanımlanır, Üretim tarafından tetiklenir, Lab tarafından yürütülür. Bu sorumluluk ayrımı, kimsenin gerekli bir testi atlayamayacağı anlamına gelir — test gereksinimleri kablo tasarımının kendisine gömülüdür ve her üretim aralığında otomatik olarak uygulanır.
- Formlar veriden üretilir, kodlanmaz. Dinamik form sistemi, yeni parametreler, birimler ve numune sayılarıyla yeni bir test standardı eklemenin sıfır frontend değişikliği gerektirdiği anlamına gelir. Form veritabanı tanımından görüntülenir, sistemi herhangi bir sayıda kalite standardına ölçeklenebilir kılar.
- Başarısız testler kendi haleflerini oluşturur.
parent_request_idzincirlemeyle otomatik tekrar mekanizması, başarısız bir testin asla unutulmamasını sağlar — kuyruğa hemen yeni bir bekleyen talep görünür ve tam tekrar geçmişi denetim için korunur.
Modül şu anda WebSocket yerine yoklama (5 saniyelik aralıklar) ile çalışır ve Dashboard sayfası sahte veri kullanır. Bunlar, erken dağıtım aşamasında basitlik ve doğruluğa öncelik veren bilinçli kararlardır. Mimari, fabrikanın test hacmi gerektirdiğinde gerçek zamanlı yükseltmelere ve canlı dashboard entegrasyonuna hazırdır.
Teknik (standartlar), Üretim (tetikleyiciler) ve Yönetim (yetkiler) ile birlikte Lab modülü, fabrikanın IEC-EN, UL ve özel SLN standartlarına uyumluluğu kanıtlamasına olanak tanıyan kalite güvence döngüsünü tamamlar — hammaddeden bitmiş kabloya.