Files
quality_app/py_app/app/static/docs/fg_scan.md
Quality App Developer 625179194d docs: Add comprehensive FG Scan workflow documentation in Romanian
- Added detailed FG Scan module documentation
- Includes scanning interface workflow (Step 1)
- Includes box assignment and label printing workflow (Step 2)
- Complete troubleshooting guide
- System requirements and keyboard shortcuts
- Image placeholders for visual workflow documentation
2026-01-04 21:36:41 +02:00

24 KiB

Modulul FG Scan - Fluxul de Scanare Produse Finite

Prezentare generală

Modulul FG Scan (Finish Good Scan) este interfața de scanare în timp real pentru înregistrarea produselor finite prin punctele de control de calitate. Sistemul permite o înregistrare rapidă și validare automată a produselor cu capabilități avansate de urmărire și asignare la cutii de depozitare.

Descriere generală a sistemului

Fluxul de lucru se bazează pe scannarea codurilor de bare în ordine specifică, cu validări în timp real și înregistrare automată a datelor. Sistemul suportă:

  • Înregistrarea rapidă a produselor scannate
  • Validarea automată a calității prin coduri de defecte
  • Urmărirea operatorilor care efectuează controalele
  • Asignarea produselor la cutii de depozitare (opțional)
  • Crearea și tiparirea etichetelor pentru cutii

1. Interfața de Scanare - Fluxul Principal

Interfața de Scanare - Pasul 1

Structura Formularului

Formularul de scanare conține 5 câmpuri de intrare obligatorii care trebuie completate în ordine:

┌─────────────────────────────────┐
│ MODULUL FG SCAN - FORMULAR      │
├─────────────────────────────────┤
│ 1. Operator Code (OP)       ← Prima validare
│    ├─ Exemplu: OP001
│    └─ Format: OP + 2-3 caractere
│
│ 2. CP Code (Produs)         ← A doua validare
│    ├─ Exemplu: CP123456
│    └─ Format: CP + numere/litere
│
│ 3. OC1 Code (Control Op. 1) ← A treia validare
│    ├─ Exemplu: OC001
│    └─ Format: OC + numere
│
│ 4. OC2 Code (Control Op. 2) ← A patra validare
│    ├─ Exemplu: OC002
│    └─ Format: OC + numere
│
│ 5. Defect Code (3 cifre)    ← Trigger de submit
│    ├─ Exemplu: 000 (OK) sau 001 (Defect)
│    └─ Format: Exact 3 cifre
│
│ ☐ Enable Scan-to-Boxes      [Opțional]
└─────────────────────────────────┘

Descrierea Câmpurilor

Camp Format Descriere Exemplu Notă
Operator Code OP + 2-3 caractere Codul operatorului de calitate care scanează OP001, OP123 Se salvează local după validare
CP Code CP + numere/litere Codul produsului finit CP123456 Produsul trebuie să existe în bază
OC1 Code OC + numere Primul operator de control OC001 Validație în bază de date
OC2 Code OC + numere Al doilea operator de control OC002 Validație în bază de date
Defect Code 3 cifre exacte Codul defectului (000=OK, 001-999=defect) 000, 001, 123 Trigger pentru submit automat

2. Etapele Detaliate de Scanare

Etapa 1: Introducerea Codului Operator

ACTION: Scannează sau introducă codul operator
INPUT:  OP001
VALIDARE: 
  ✓ Trebuie să înceapă cu "OP"
  ✓ Lungime: 4-6 caractere
  ✓ Se acceptă doar caractere alfanumerice
REZULTAT: 
  ✓ Acceptat - Focusul merge la CP Code
  ✗ Eroare - Mesaj roșu: "Please scan Quality Operator code (must start with OP)"
SALVARE: Codul se salvează local (localStorage) pentru utilizări viitoare

Etapa 2: Scanarea Codului Produs (CP)

ACTION: Scannează codul produsului finit
INPUT:  CP123456
VALIDARE:
  ✓ Trebuie să înceapă cu "CP"
  ✓ Produsul trebuie să existe în baza de date
  ✓ Se acceptă numere și litere după "CP"
REZULTAT:
  ✓ Acceptat - Focusul merge la OC1 Code
  ✗ Eroare - Mesaj roșu: "Please scan a valid CP"

Etapa 3: Scanarea Operatorului de Control 1 (OC1)

ACTION: Scannează primul operator de control
INPUT:  OC001
VALIDARE:
  ✓ Trebuie să înceapă cu "OC"
  ✓ Trebuie să fie valid în baza de date
  ✓ Diferit de OC2 (pot fi aceiași oameni)
REZULTAT:
  ✓ Acceptat - Focusul merge la OC2 Code
  ✗ Eroare - Mesaj roșu: "Please scan a valid OC (must start with OC)"

Etapa 4: Scanarea Operatorului de Control 2 (OC2)

ACTION: Scannează al doilea operator de control
INPUT:  OC002
VALIDARE:
  ✓ Trebuie să înceapă cu "OC"
  ✓ Trebuie să fie valid în baza de date
REZULTAT:
  ✓ Acceptat - Focusul merge la Defect Code
  ✗ Eroare - Mesaj roșu: "Please scan a valid OC (must start with OC)"

Etapa 5: Introducerea Codului de Defect

ACTION: Introduceți/scannați codul de defect (3 cifre)
INPUT:  000 (pentru OK) sau 001-999 (pentru defecte)
VALIDARE:
  ✓ Exact 3 cifre
  ✓ Numai caractere numerice
  ✓ Valori valide: 000 (OK) sau 001-999 (defect)
REZULTAT:
  ✓ Acceptat la 3 cifre - SUBMIT AUTOMAT
  ✗ Eroare - Mesaj roșu: "Defect code must be a 3-digit number (e.g., 000, 001, 123)"

Etapa 6: Înregistrare Automată și Feedback

ACTION: Sistemul finalizează scanarea automat
PROCES:
  1. Salvează datele în baza de date
  2. Afișează notificare de succes
  3. Resetează formularul (minus Operator Code)
  4. Focusul merge la CP Code pentru următoarea scanare

FEEDBACK UTILIZATOR:
  ✅ Notificare verde: "✅ Scan recorded successfully!"
  ⏱️  Durata: 4 secunde (apoi dispare)
  🔄 Formularul se resetează automat

3. Fluxul de Asignare la Cutii (Save to Box)

Modal de Asignare la Cutii - Pasul 2

Condiții de Declanșare a Modalului

Modalul de asignare la cutie apare automat și obligatoriu atunci când sunt SIMULTAN îndeplinite:

  1. Opțiunea "Enable Scan-to-Boxes" este BIFATĂ
  2. Codul de defect este EXACT 000 (Produs fără defecte)
  3. Scanarea s-a FINALIZAT cu SUCCES
IF (scanToBoxesEnabled == TRUE) AND (defectCode == "000") THEN
  SHOW box_assignment_modal
ELSE
  RELOAD page normally
END IF

Structura Modalului

┌────────────────────────────────────────┐
│  ASIGNARE PRODUS LA CUTIE             │
├────────────────────────────────────────┤
│ CP Code: CP123456                      │
│                                        │
│ Opțiuni:                              │
│  [🔲] Create New Box                   │
│  [📥] Scan Existing Box Label          │
│                                        │
│ Input: "Scan the printed label now..." │
│        [________________]              │
│                                        │
│  [Anulare]  [Salvare]                 │
└────────────────────────────────────────┘

Etapa 1: Deschiderea Modalului

TRIGGER: După scanarea cu defect code = 000
AFIȘARE:
  - Modalul se deschide centrat pe ecran
  - Se afișează codul produsului (CP123456)
  - Focusul este pe câmpul de input pentru cutie
  - Placeholder: "Scan the printed label now..."
OPȚIUNI:
  a) Create New Box - Creează o nouă cutie
  b) Scan Box - Scannează o cutie existentă

Etapa 2: Crearea Unei Noi Cutii

ACTION: Apasă butonul "Create New Box"
PROCES:
  1. Sistemul crează o nouă cutie în baza de date
  2. Generează automat un cod unic (ex: BOX12345)
  3. Conectează la serviciul QZ Tray
  4. Generează etichetă în format ZPL (Zebra)

ETICHETĂ GENERATĂ:
  ┌──────────────────┐
  │ Box: BOX12345    │
  │                  │
  │  ║│││┌─┐    │  │
  │  ║│ │ │ │    │  │  ← Cod de bare generat
  │  ║│ │ │ │    │  │
  │  ║││ │ │    │  │
  │  BOX12345         │
  └──────────────────┘

FORMAT: ZPL (Zebra Programming Language)
CONȚINUT:
  - Textul "Box: BOX12345"
  - Cod de bare 1D (CODE128 sau similar)
  - Copie text cod box pentru scanare manuală

Etapa 3: Tipărirea Automată a Etichetei

ACTION: Etichetă generată → Tipărire automată
CERINȚE SISTEM:
  ✓ QZ Tray instalat și activ
  ✓ Imprimantă configurată și conectată
  ✓ Hârtie de etichetă (de obicei 4x6 inch)

PROCES TIPĂRIRE:
  1. Conectare la QZ Tray
  2. Detectare imprimantă disponibilă
  3. Trimitere job tipărire în format ZPL
  4. Imprimantă primește și procesează comanda
  5. Se tipărește eticheta

FEEDBACK UTILIZATOR:
  ✅ Notificare: "✅ Box 12345 created and label printed!"
  ⏱️  Durata: 3-5 secunde
  📥 Câmpul de input devine activ pentru scannare etichetă
  Placeholder se schimbă în: "Scan the printed label now..."

Etapa 4: Scannarea Etichetei Tipărite

ACTION: Scannează eticheta nou tipărită
PROCES:
  1. Scaneaza codul de bare de pe etichetă
  2. Sistemul validează: BOX12345
  3. Asociază produsul (CP123456) la cutie (BOX12345)
  4. Setează status "Packed" pentru produs
  5. Salvează relația în baza de date

VALIDĂRI:
  ✓ Codul scanned trebuie să coincidă cu BOX generat
  ✓ Produsul nu trebuie să fie deja asignat
  ✓ Cutia trebuie să existe în baza de date

FEEDBACK UTILIZATOR:
  ✅ Notificare verde: "✅ CP123456 assigned to Box BOX12345!"

Etapa 5: Finalizare și Revenire

ACTION: După scannare validă a etichetei
PROCES:
  1. Modalul se închide automat
  2. Pagina se reîncarcă complet
  3. Se resetează formularul
  4. Se prepară pentru următoarea scanare

REZULTAT FINAL:
  ✅ Produs înregistrat în sistem
  ✅ Produs asignat la cutie
  ✅ Etichetă tipărită și validată
  🔄 Sistem gata pentru următoarea scanare

4. Situații Speciale și Comportament

Scenariul 1: Produs OK - Cu Asignare la Cutie

SECVENȚĂ COMPLETĂ:
┌─────────────────────────────────────────────────┐
│ 1. Scannează OP001                → ✓ Valid    │
│ 2. Scannează CP123456             → ✓ Valid    │
│ 3. Scannează OC001                → ✓ Valid    │
│ 4. Scannează OC002                → ✓ Valid    │
│ 5. Introduceți 000                → ✓ Valid    │
│                                                 │
│    ✅ "Scan recorded successfully!"            │
│    🎬 MODAL APARE: "Scan-to-Boxes enabled"     │
│                                                 │
│ 6. Click "Create New Box"         → BOX12345   │
│    ✅ "Box created and label printed!"         │
│    🖨️  Etichetă tipărită                       │
│                                                 │
│ 7. Scannează eticheta BOX12345    → ✓ Valid    │
│    ✅ "CP123456 assigned to Box 12345!"        │
│                                                 │
│ 🔄 Pagina se reîncarcă                         │
│    → Gata pentru următoarea scanare            │
└─────────────────────────────────────────────────┘

Scenariul 2: Produs cu Defect - Fără Modal ⚠️

SECVENȚĂ CU DEFECT:
┌─────────────────────────────────────────────────┐
│ 1. Scannează OP001                → ✓ Valid    │
│ 2. Scannează CP789999             → ✓ Valid    │
│ 3. Scannează OC001                → ✓ Valid    │
│ 4. Scannează OC002                → ✓ Valid    │
│ 5. Introduceți 001                → ✓ Valid    │
│                                                 │
│    ✅ "Scan recorded successfully!"            │
│    ⚠️  Defect code detected                    │
│    ❌ NO BOX MODAL (porque defect ≠ 000)      │
│                                                 │
│ 🔄 Pagina se reîncarcă automat după 1s        │
│    → Produs înregistrat cu defect              │
│    → Fără asignare la cutie                    │
│    → Gata pentru următoarea scanare            │
└─────────────────────────────────────────────────┘

Scenariul 3: Eroare de Validare

SECVENȚĂ CU EROARE:
┌─────────────────────────────────────────────────┐
│ 1. Scannează XX001                → ❌ EROARE  │
│    "Must start with OP"                        │
│    🔴 Mesajul apare în roșu                    │
│    👆 Focusul revine la Operator Code          │
│                                                 │
│ 2. Reîncercați scannarea          → ✓ Valid    │
│    Mesajul de eroare dispare                   │
│                                                 │
│ (Continuă fluxul normal...)                   │
└─────────────────────────────────────────────────┘

Scenariul 4: QZ Tray Inactiv - La Tipărire

SITUAȚIE: Utilizatorul apasă "Create New Box" 
         dar QZ Tray nu este conectat

REZULTAT:
  ❌ Eroare: "QZ Tray not connected. 
              Please ensure QZ Tray is running."
  
  🔘 Butonul "Create New Box" devine inactiv
  
SOLUȚIE:
  1. Pornește serviciul QZ Tray pe computer
  2. Verifică conexiunea la imprimantă
  3. Reîncarcă pagina
  4. Încearcă din nou

5. Configurația - Opțiunea "Enable Scan-to-Boxes"

Activarea/Dezactivarea Funcției

UI ELEMENT:
┌────────────────────────────────┐
│ ☐ Enable Scan-to-Boxes         │
│   ← Click pentru a activa       │
└────────────────────────────────┘

Comportament Comparativ

Stare Comportament Rezultat
DEZACTIVAT După scanare, formular se resetează Fără modal; Produs doar înregistrat
ACTIVAT După scanare cu defect=000, apare modal Modal pentru asignare la cutie

Persistență și Salvare

COMPORTAMENT:
  1. Starea opțiunii este salvată LOCAL (în browser)
  2. Folosește localStorage pentru persistență
  3. Rămâne activă după reîncărcarea paginii
  4. Se resetează la ștergerea cache-ului

SETARE: localStorage.setItem('scan_to_boxes_enabled', true/false)

IMPLICAȚII:
  ✓ Fiecare utilizator poate avea preferințe diferite
  ✓ Preferințele se salvează per computer/browser
  ✗ Se pierd dacă se șterge localStorage

6. Validări în Timp Real

Mesajele de Eroare Înroșite

┌─────────────────────────────────────────────────┐
│ MESAJE DE VALIDARE - Display în Timp Real      │
├─────────────────────────────────────────────────┤
│ 🔴 Operator Code:                               │
│    "Please scan Quality Operator code            │
│     (must start with OP)"                       │
│                                                 │
│ 🔴 CP Code:                                     │
│    "Please scan a valid CP"                    │
│                                                 │
│ 🔴 OC1 Code:                                    │
│    "Please scan a valid OC                      │
│     (must start with OC)"                       │
│                                                 │
│ 🔴 OC2 Code:                                    │
│    "Please scan a valid OC                      │
│     (must start with OC)"                       │
│                                                 │
│ 🔴 Defect Code:                                 │
│    "Defect code must be a 3-digit number        │
│     (e.g., 000, 001, 123)"                      │
└─────────────────────────────────────────────────┘

Auto-Advance între Câmpuri

MECANISMUL DE AUTO-ADVANCE:
  1. Operator Code: După 4 caractere valide → Auto-advance la CP Code
  2. CP Code: După scanare validă → Auto-advance la OC1 Code
  3. OC1 Code: După scanare validă → Auto-advance la OC2 Code
  4. OC2 Code: După scanare validă → Auto-advance la Defect Code
  5. Defect Code: După 3 cifre valide → AUTO-SUBMIT FORMULAR

COMPORTAMENT:
  ✓ Crește viteza de lucru
  ✓ Eliminate nevoia de click manual
  ✓ Reduce erori de introducere
  ✓ Optimizat pentru scanere barcode

7. Salvare și Persistență de Date

Ce se Salvează Local

LOCALSTORAGE ITEMS:
  1. fg_scan_operator_code
     - Salvează: Codul operator valid
     - Scop: Reîncarcă codul la revenire pe pagină
     - Trigger: După validare OP Code
     - Durata: Persistent (până la ștergere manuală)

  2. scan_to_boxes_enabled
     - Salvează: TRUE/FALSE
     - Scop: Ține minte preferința utilizatorului
     - Trigger: La click bifă
     - Durata: Persistent (până la ștergere manuală)

  3. fg_scan_clear_after_submit
     - Salvează: TRUE (flag)
     - Scop: Semnalizează dacă să reseteze după reload
     - Trigger: Înainte de submit
     - Durata: Temporară (se șterge după reload)

Comportament După Reîncărcare

SCENARIUL: Utilizatorul reîncarcă pagina
REZULTAT:
  1. Se restaurează Operator Code din localStorage
  2. Se restaurează starea "Enable Scan-to-Boxes"
  3. Alte câmpuri rămân goale (din motive de securitate)
  4. Focusul merge pe CP Code
  5. Sistemul este gata pentru scanare

8. Coduri și Format Special

Coduri de Prefix Obligatorii

┌──────────────────────────────────────────┐
│ CODURI SPECIALE - Format Strict          │
├──────────────────────────────────────────┤
│ OP = Operator Code (Calitate)            │
│      Format: OP + 2-3 caractere          │
│      Ex: OP001, OP123, OPA01             │
│      Lungime totală: 4-6 caractere       │
│                                          │
│ CP = Cod Produs (Product Code)           │
│      Format: CP + numere/litere          │
│      Ex: CP123456, CP-ABC-999            │
│      Lungime variabilă (min 4)           │
│                                          │
│ OC = Operator Control (Calitate)         │
│      Format: OC + numere                 │
│      Ex: OC001, OC999                    │
│      Lungime: 5-6 caractere              │
│                                          │
│ 000 = Status OK (Fără defecte)           │
│ 001-999 = Coduri de defecte specifice    │
└──────────────────────────────────────────┘

Numerele de Cutie

GENERARE AUTOMATĂ:
  Format: BOX + numere incrementale
  Exemplu: BOX00001, BOX00002, BOX12345
  
ETICHETA TIPĂRITĂ:
  - Conținut: "Box: BOX12345"
  - Cod de bare: 1D barcode (scanabil)
  - Format: ZPL (Zebra Programming Language)

9. Tastele Rapid și Navigare

Comenzi Tastatură

Tasta Funcție
Tab Navigare între câmpuri (în ordine)
Enter Avansare la câmpul următor (dacă valid)
Backspace Ștergere caractere
Scan Barcode Completează câmpul și avansează automat
Escape Închide modalul (nu-l recomand)

Flux Recomandat

1. Scannez barcode operator
   ↓ (automat cu 4 char)
2. Scannez barcode produs
   ↓ (automat după validare)
3. Scannez barcode operator 1
   ↓ (automat după validare)
4. Scannez barcode operator 2
   ↓ (automat după validare)
5. Scannez/introduc cod defect (3 cifre)
   ↓ (automat la 3 cifre)
6. SUBMIT AUTOMAT
   ↓
7. [Dacă Enable Scan-to-Boxes] MODAL APARE
   └→ Asignare la cutie

10. Troubleshooting și Rezolvare Probleme

Problemă: "Scan not submitted"

Cauze:

  • Operator Code nu începe cu OP
  • CP Code nu începe cu CP
  • OC1/OC2 Code nu încep cu OC
  • Defect code nu are exact 3 cifre

Soluție:

1. Verificați formatul fiecărui cod
2. Asigurați-vă că codurile încep cu literele corecte
3. Pentru defect, introduceți EXACT 3 cifre (001, nu 1 sau 0001)
4. Resetați formularul și reîncercați

Problemă: "QZ Tray not connected"

Cauze:

  • QZ Tray nu este instalat
  • QZ Tray nu este activ/pornit
  • Firewall blochează conexiunea

Soluție:

1. Descărcați și instalați QZ Tray de la qz.io
2. Porniți serviciul QZ Tray (din tasktray)
3. Verificați conexiunea la localhost:8383
4. Reîncărcați pagina
5. Încercați din nou "Create New Box"

Problemă: "No printers found"

Cauze:

  • Nicio imprimantă conectată
  • Imprimantă nu este configurată
  • Driver-ul imprimantei este defect

Soluție:

1. Conectați imprimanta fizic (USB sau rețea)
2. Instalați driver-ii necesari
3. Configurați imprimanta în setările sistemului
4. Testați tipărirea din alt program
5. Reîncărcați pagina FG Scan
6. Încercați din nou

Problemă: "Defect code must be 3 digits"

Cauze:

  • Introdusă mai puțin de 3 cifre (ex: 00, 1)
  • Introdusă mai mult de 3 cifre (ex: 0000)
  • Introduse caractere non-numerice

Soluție:

Introduceți EXACT 3 CIFRE NUMERICE:
  ✓ CORECT: 000, 001, 123, 999
  ✗ GREȘIT: 00, 1, 0001, 12a, defect

Problemă: Etichetele nu se tipăresc

Verificări:

1. QZ Tray conectat?           → Verificați status
2. Imprimanta selectată?       → Setări sistem
3. Hârtie în imprimantă?       → Reîncărcați hârtie
4. Driver corect?              → Reinstalați driver
5. Format ZPL acceptat?        → Imprimanta suportă ZPL?

11. Cerințe Sistem și Configurație

Hardware Necesar

✓ Computer/Server cu browser modern
✓ Imprimantă etichetă (cu suport ZPL de preferință)
✓ Scannere barcode (pentru eficiență)
✓ Conexiune rețea (pentru baza de date)

Software Necesar

✓ Browser: Chrome, Firefox, Edge (versiuni recente)
✓ QZ Tray: v2.2.0 sau mai nou (pentru tipărire)
✓ Java Runtime Environment (pentru QZ Tray)
✓ Driver imprimantă compatibil

Setări Browser

✓ JavaScript activat
✓ LocalStorage activat
✓ Pop-ups dezblocate pentru QZ Tray
✓ Certificate SSL valid (dacă HTTPS)

12. Informații Suplimentare

Integrare Bază de Date

TABELE IMPLICITE:
  1. fg_scans - Înregistrează scanări
  2. boxes - Stochează cutii create
  3. cp_to_box - Relații produs-cutie
  4. operators - Informații operatori
  5. products - Informații produse

Fluxul Datelor

INPUT (Barcode/Tastatură)
    ↓
VALIDARE (în client + server)
    ↓
SALVARE DB (fg_scans table)
    ↓
[IF Scan-to-Boxes AND defect=000]
    ├→ CREATE BOX (boxes table)
    ├→ PRINT LABEL (QZ Tray)
    ├→ SCAN LABEL (verficare)
    └→ CREATE RELATION (cp_to_box table)
    ↓
CONFIRMAȚIE (notificare utilizator)
    ↓
RESET & READY (pentru următoarea scanare)

13. Suport și Contact

Pentru probleme sau întrebări:

  • Administrator Sistem: Contactați dept. IT
  • Documentație QZ Tray: https://qz.io
  • Report Bug: Contactați manager-ul modulului
  • Training: Consultați alte pagini de ajutor din aplicație

Document: Ghid Utilizare FG Scan Module
Versiune: 1.0
Dată Actualizare: 4 Ianuarie 2026
Limbă: Română
Status: Activ