Modüllere Dön

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.

Şubat 2026 • Solen Kablo • Yaşayan Belge

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.

2
SAYFA
~20
API ENDPOINT
5
VERİTABANI TABLOSU
1900+
SATIR KOD

İÇİNDEKİLER

1. Laboratuvar Ne Yapar 2. Veri Akışı 3. Veritabanı Katmanı 4. Backend Mimarisi 5. Frontend 6. Lab Paneli (Dashboard) 7. Test Yönetimi 8. Sonuç

1. LABORATUVAR NE YAPAR

Laboratuvar modülü, tüm üretim sisteminin bağımlı olduğu dört soruyu yanıtlar:

  1. “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.
  2. “Ü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.
  3. “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_id ile takip edilir, böylece sistem bunun aynı çıkış için aynı testin 2. veya 3. denemesi olduğunu bilir.
  4. “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ü

Kablo Tasarımı (Teknik) Testler İş Kartına Gömülü Üretim oturumu başlar üretim_başı testleri oluşturulur
Çıkış kaydedilir (sepet) her_sepet_sonu testleri oluşturulur Bildirim → Lab kullanıcıları Lab testi yürütür
Üretim oturumu biter üretim_sonu testleri oluşturulur Tüm testler çıkışlara bağlanır Tam izlenebilirlik

2.2 Üç Test Aralığı

AralıkKod AdıNe Zaman OluşturulurKapsamBağ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_sonuHer Sepet SonuHer çıkış sonrasıBelirli sepet/makaraDoğrudan output_id ile bağlanır
üretim_sonuÜretim SonuOturum sonuTüm üretim lotuSon çı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

Lab testi BAŞARISIZ işaretler Sistem tekrar talebi oluşturur retry_count + 1, parent_request_id ayarlanır Bildirim → Operatör + Yöneticiler

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ü

OlayAlıcılarÖncelikDerin Bağlantı
Test talebi oluşturulduTüm lab_user + super_admin (talep eden hariç)Yüksek/lab/test session_id, work_card_id ile
Test geçtiTalep eden + super_admin (test eden hariç)Orta/lab/test test_request_id ile
Test başarısızTalep 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ütunTipDetay
idInteger PKOtomatik artan, indeksli
work_card_idInteger FKwork_cards.id referansı, indeksli
session_idInteger FKproduction_sessions.id referansı, indeksli
output_idInteger FKproduction_outputs.id referansı — her_sepet_sonu testleri için ayarlanır
linked_output_idsJSONLot düzeyindeki testler için çıkış ID dizisi (üretim_başı, üretim_sonu)
test_standard_idInteger FKtest_standards.id referansı
machine_typeString(50)Hangi makine: kabatel_cekme, kalaylama, incetel_cekme, buncher, extruder, ebeam
test_intervalString(50)üretim_başı / her_sepet_sonu / üretim_sonu
input_slotIntegerParalel üretim modu için 0 veya 1
retry_countIntegerVarsayılan 0. Her tekrarda artırılır.
parent_request_idInteger FKÖz-referans — orijinal başarısız teste işaret eder
statusEnumPENDING / PASSED / FAILED
measurementsJSONYapı: { samples: [{ sample_num, params: { name: value } }] }
requested_byInteger FKOluşturmayı tetikleyen kullanıcı (genellikle üretim operatörü)
requested_atDateTimeUTC
tested_byInteger FKTesti tamamlayan lab kullanıcısı
tested_atDateTimeTestin tamamlandığı zaman
notesTextLab kullanıcı notları
created_atDateTimeUTC
updated_atDateTimeOtomatik 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ütunDetay
standard_categoryIEC-EN, UL veya SLN (özel fabrika standardı)
test_name / test_name_enTürkçe ve İngilizce test adları
standard_numberReferans standardı (örn. “IEC 60228”)
test_samplesGerekli numune sayısı (≥ 1)
test_methodTestin 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ütunDetay
parameter_nameörn. “Çap”, “Direnç”, “Çekme Mukavemeti”
parameter_unitörn. “mm”, “Ω/km”, “N/mm²”
parameter_orderFormdaki 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ı

DosyaSatırÖnekEndpointAmaç
test_routes.py318/api/test-requests6Eski test talebi CRUD. Oluşturma, listeleme, getirme, tamamlama, güncelleme, silme.
test_integration_routes.py745/api/production/test-requests9Ü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)

MetotYolYetkiNe Yapar
POST/api/production/test-requests/create-for-intervalauthenticatedBelirli 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}authenticatedBir 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}authenticatedBir oturum için tüm bekleyen testleri getirir. test_standard ve talep edeni eager-load eder.
GET/api/production/test-requests/allauthenticatedTü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}authenticatedTam detaylarla belirli bir test talebini getirir: sıralanmış parametrelerle test standardı, iş kartı bilgisi.
POST/api/production/test-requests/{test_id}/completelab_user, super_adminTesti 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_adminTest talebini siler.
GET/api/production/test-requests/bonded-tests/output/{output_id}authenticatedBelirli 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}authenticatedYukarıdakiyle aynı ama çıkış koduna göre (örn. X1, X2). Kodu dahili olarak ID’ye çözer.

4.3 Eski Test Endpoint’leri (6)

MetotYolYetkiNe Yapar
POST/api/test-requests/authenticatedEski test talebi oluşturur (malzeme bazlı).
GET/api/test-requests/authenticatedFiltrelerle eski test taleplerini listeler.
GET/api/test-requests/{id}authenticatedBelirli eski test talebini getirir.
POST/api/test-requests/{id}/completelab_user, super_adminEski testi geçti/kaldı ve sonuçlarla tamamlar.
PUT/api/test-requests/{id}super_adminEski test talebini günceller.
DELETE/api/test-requests/{id}super_adminEski 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:

  1. 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 bir ProductionTestRequest oluşturur (paralel modda slot başına bir tane).
  2. Çıkış kaydı (POST /api/production/record-output): her_sepet_sonu frekansına göre filtreler, belirli output_id’ye bağlı test talepleri oluşturur.
  3. Oturum sonu (POST /api/production/end-session): üretim_sonu frekansına göre filtreler, test talepleri oluşturur, ardından lot düzeyindeki testleri (üretim_başı ve üretim_sonu) linked_output_ids aracı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:

  1. Doğrudan bağ: output_id çıkışla eşleşir — tek bir sepet/makaraya uygulanan her_sepet_sonu testleri için kullanılır.
  2. Lot düzeyinde bağ: session_id eşleşir VE test_interval üretim_başı veya üretim_sonu — bu lot düzeyindeki testler oturumdaki tüm çıkışlara uygulanır.
  3. Eski bağ: session_id eşleşir VE output_id IS NULL VE linked_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ı

RotaBileşenSatırAmaç
/lab/dashboardLab/Dashboard/index.tsx133İstatistik kartları ve uyarı/test tabloları ile genel bakış paneli. Şu anda sahte veri kullanıyor — gerçek API’lere bağlanacak.
/lab/testLab/Test/index.tsx803Birincil 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ütunGenişlikDetay
1Kod70px, sola sabitMor etiket: L{id}
2TestotomatikTest adı + standart numarası
3İş Kartı80pxMavi etiket: #{work_card_id}
4Makine150pxMakine adı (Türkçe)
5Aralık100pxAralık etiketi: Üretim Başı / Her Sepet / Üretim Sonu
6Talep130pxTalep tarihi (GG.AA.YY SS:dd, Türkiye saat dilimi)
7Durum100pxDurum etiketi: Beklemede (turuncu), Onaylandı (yeşil + ✓), Başarısız (kırmızı + X)
8Test Eden100pxTest eden adı veya “-”
9İşlemler140px, sağa sabitKoş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:

Ö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

SayfaRota KorumasıManifest’teki Düğmeler
Lab DashboardcanLabaccess_page, view_stats
Lab TestcanLabaccess_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İkonRenk
1Bekleyen Uyarılar2AlertOutlinedHata (kırmızı)
2Aktif Testler2ExperimentOutlinedUyarı (turuncu)
3Tamamlanan Testler15CheckCircleOutlinedBaşarılı (yeşil)
4Bugünkü Testler8ClockCircleOutlinedBirincil (mavi)

Veri Tabloları (2 yan yana)

İstatistiklerin altında, iki tablo duyarlı 2 sütunlu düzende (Col lg={12}) yer alır:

TabloKart BaşlığıRozetSütunlarSahte Satırlar
Bekleyen Lab UyarılarıBekleyen Lab UyarılarıAcil (kırmızı etiket)Makine, Uyarı, Saat, İşlem2 satır: Kabatel Çekme 01 (yeni üretim uyarısı), Kalaylama 01 (yavaş mod onayı)
Aktif Test SüreçleriAktif Test SüreçleriDevam Ediyor (işlem etiketi)Test Kodu, Ürün, Durum, Öncelik, İşlem2 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:

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ütunGenişlikSabitGörüntüleme Detayları
1Kod70pxSolMor monospace Tag: L{id}. Test talebi başına benzersiz tanımlayıcı.
2Testotomatikİki satır: test_standard.test_name’den test adı (kalın), altında küçük gri metin olarak standart numarası.
3İş Kartı80pxMavi Tag: #{work_card_id}. Testi üretim iş kartına bağlar.
4Makine150pxMakine 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).
5Aralık100pxAralık Tag’i: üretim_başı → “Üretim Başı”, her_sepet_sonu → “Her Sepet”, üretim_sonu → “Üretim Sonu”.
6Talep130pxTalep zaman damgası Türkiye saat diliminde (Europe/Istanbul) DD.MM.YY HH:mm formatında. UTC-yerel dönüşümüyle dayjs kullanır.
7Durum100pxDurum etiketi: Beklemede (turuncu), Onaylandı (yeşil + ✓ ikonu), Başarısız (kırmızı + X ikonu).
8Test Eden100pxTamamlandıysa test edenin adı, beklemedeyse “–”.
9İşlemler140pxSağ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:

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

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üğmeStilİkonEylem
İptalVarsayılanModalı kapatır, formu sıfırlar
BaşarısızTehlike (kırmızı)CloseCircleOutlinedhandleTestComplete(false) çağırır
OnaylandıBirincil (yeşil, token.colorSuccess)CheckCircleOutlinedhandleTestComplete(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:

  1. form.validateFields() ile tüm zorunlu form alanlarını doğrular
  2. 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 } }
      ]
    }
  3. POST /api/production/test-requests/{id}/complete’e { passed: true/false, measurements: {...}, notes: "..." } gönderir
  4. 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:

  1. Orijinali günceller: Durumu FAILED yapar, test edeni, zaman damgasını ve ölçümleri kaydeder
  2. Tekrar oluşturur: Aynı work_card_id, session_id, output_id, test_standard_id, machine_type ve test_interval ile yeni bir ProductionTestRequest — ancak retry_count = orijinal + 1 ve parent_request_id = orijinal.id
  3. 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_id ile

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:

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

EylemGerekli RolUygulama
Test listesini görüntülecanLab yetkili herhangi bir kimlik doğrulanmış kullanıcıroutes.ts’de rota koruması
Test başlat / tamamlalab_user veya super_adminFrontend: isLabUser kontrolü düğmeyi gizler. Backend: user_type not in [’lab_user’, ’super_admin’] 403 döner.
Test talebi silsuper_adminFrontend: 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:

Oturum Başlangıcı work_card.material_details.tests oku üretim_başı frekansına göre filtrele Eşleşme başına ProductionTestRequest oluştur
Çıkış Kaydedildi her_sepet_sonu frekansına göre filtrele output_id bağlantılı oluştur Tüm lab_user + super_admin’e bildir
Oturum Sonu üretim_sonu frekansına göre filtrele Lot testlerini linked_output_ids ile bağla Tam izlenebilirlik kuruldu

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:

  1. Doğrudan bağ: output_id eşleşir — belirli bir sepet/makaraya bağlı her_sepet_sonu testleri
  2. Lot düzeyinde bağ: Aynı oturum + aralık üretim_başı veya üretim_sonu — bu lot düzeyindeki testler oturumdaki her çıkışa uygulanır
  3. 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)

  1. Üretim operatörü oturum başlatır, çıkış kaydeder veya oturumu bitirir
  2. Üretim backend’i work_card.material_details.tests’i okur
  3. Mevcut aralığın frekansına göre filtreler
  4. POST /api/production/test-requests/create-for-interval’i çağırır
  5. Her eşleşen test için: PENDING durumlu ProductionTestRequest oluşturur
  6. Tüm lab_user ve super_admin’e yüksek öncelikli bildirimler gönderir (talep eden hariç)
  7. Yeni talep 5 saniye içinde Lab kuyruğunda görünür

OKU (Test Kuyruğu ve Sonuçlar)

  1. Lab sayfası yüklenir → GET /api/production/test-requests/all?limit=100
  2. Backend 5 ilişkiyi eager-load eder, makine adlarını çözer
  3. Güncellemeler için her 5 saniyede yoklar
  4. İstemci taraflı arama ek API çağrısı olmadan 10’dan fazla alanda filtreler
  5. Bireysel test detayları: tam parametre listesiyle GET /api/production/test-requests/{id}
  6. Çıkış başına bağlı testler: aralığa göre gruplanmış GET /bonded-tests/output/{id}

GÜNCELLE (Test Tamamlama)

  1. Lab kullanıcısı bekleyen testte deney ikonuna tıklar
  2. Sistem GET /api/teknik/standards/tests/{id}/full’dan parametrelerle tam test standardını getirir
  3. Dinamik form görüntülenir: numuneler × parametreler → InputNumber alanları
  4. Lab kullanıcısı ölçümleri doldurur, isteğe bağlı notlar ekler
  5. “Onaylandı” (geçti) veya “Başarısız” (kaldı) tıklar
  6. POST /api/production/test-requests/{id}/complete ile { passed, measurements, notes }
  7. Backend doğrular: beklemede olmalı, kullanıcı lab_user/super_admin olmalı
  8. Durumu günceller, tested_by, tested_at kaydeder, ölçüm JSON’ını saklar
  9. Başarısızsa: atomik olarak tekrar talebi oluşturur (retry_count + 1, parent_request_id ayarlanır)
  10. Talep edene + super admin’lere bildirim gönderir (geçti için orta, kaldı için yüksek öncelik)
  11. Frontend tabloyu yeniler, modal kapanır

SİL

  1. Super admin herhangi bir test talebinde çöp ikonuna tıklar
  2. Popconfirm: “Silmek istediğinize emin misiniz?”
  3. Onaylandı → DELETE /api/production/test-requests/{id}
  4. Backend: super_admin doğrular, kaydı siler
  5. 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:

  1. 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.
  2. 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.
  3. Başarısız testler kendi haleflerini oluşturur. parent_request_id zincirlemeyle 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.