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
This commit is contained in:
Quality App Developer
2026-01-04 21:36:41 +02:00
parent d4283098a6
commit 625179194d

View File

@@ -0,0 +1,757 @@
# 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](images/fg_scan_interface_step1.png)
### 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](images/fg_scan_box_assignment_step2.png)
### 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