Files
quality_app/DATABASE_VISUAL_STRUCTURE.md
Quality App System f590d9006c updated documentation
2026-01-15 19:27:58 +02:00

734 lines
31 KiB
Markdown

# Instalare Quality Miercurea
# user : adminviorica
# parola admin : 7aTwBPA7Z6bZ
# folder de instalare : /opt/quality-app
# multiple request are blocking the socket
# Database Visual Structure - Trasabilitate Quality App
**Database**: `trasabilitate` (MariaDB 11.8.3)
**Total Tables**: 17
**Character Set**: utf8mb4
**Date**: January 10, 2026
---
## 1. Database Schema Overview
```
╔═══════════════════════════════════════════════════════════════════════════╗
║ TRASABILITATE DATABASE ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌─────────────────────────────────────────────────────────────────────┐ ║
║ │ USER MANAGEMENT & ACCESS CONTROL (6 tables) │ ║
║ │ │ ║
║ │ • users • roles │ ║
║ │ • role_hierarchy • permissions │ ║
║ │ • role_permissions • permission_audit_log │ ║
║ └─────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─────────────────────────────────────────────────────────────────────┐ ║
║ │ QUALITY MANAGEMENT / PRODUCTION SCANNING (2 tables) │ ║
║ │ │ ║
║ │ • scan1_orders (Phase 1 - Quilting) │ ║
║ │ • scanfg_orders (Final Goods Quality) │ ║
║ └─────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─────────────────────────────────────────────────────────────────────┐ ║
║ │ DAILY MIRROR / BUSINESS INTELLIGENCE (7 tables) │ ║
║ │ │ ║
║ │ • dm_articles • dm_machines │ ║
║ │ • dm_customers • dm_orders │ ║
║ │ • dm_production_orders • dm_deliveries │ ║
║ │ • dm_daily_summary │ ║
║ └─────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─────────────────────────────────────────────────────────────────────┐ ║
║ │ LABELS & WAREHOUSE (2 tables) │ ║
║ │ │ ║
║ │ • order_for_labels • warehouse_locations │ ║
║ └─────────────────────────────────────────────────────────────────────┘ ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════╝
```
---
## 2. Entity Relationship Diagram (ERD)
```
┌──────────────────────────────────────────────────────────────────────────────────┐
│ USER MANAGEMENT HIERARCHY │
└──────────────────────────────────────────────────────────────────────────────────┘
┌─────────────┐ ┌──────────────┐ ┌────────────────┐
│ users │─────────│ roles │───────│ role_hierarchy │
└─────────────┘ └──────────────┘ └────────────────┘
(id) (id) (id)
username name (referenced) role_name (PK)
password access_level level (100-50)
role ←─────────────────────┐ parent_role
email │ description
modules (JSON) │
└─── hierarchy level
(100=superadmin)
(90=admin)
(70=manager)
(50=worker)
┌────────────────┐ ┌──────────────┐ ┌─────────────────────┐
│ permissions │ │ role_ │ │ permission_ │
└────────────────┘ │ permissions │ │ audit_log │
(id) ◄──────└──────────────┘──────►└─────────────────────┘
permission_key (M:M mapping) (audit trail)
page role_name ──┐
section permission_ │
action id │
description granted_at │
granted_by │
Tracks permission
changes for security
┌──────────────────────────────────────────────────────────────────────────────────┐
│ BUSINESS INTELLIGENCE / DAILY MIRROR (DM) │
└──────────────────────────────────────────────────────────────────────────────────┘
MASTER DATA (Reference Tables)
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ dm_articles │ │ dm_customers │ │ dm_machines │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ article_code │ │customer_code │ │machine_code │
│ description │ │customer_name │ │machine_name │
│ product_ │ │customer_group│ │machine_type │
│ group │ │country │ │department │
│ unit_of_ │ │currency │ │capacity_per_ │
│ measure │ │credit_limit │ │ hour │
└──────────────┘ └──────────────┘ └──────────────┘
△ △ △
│ │ │
│ │ │
┌──────┴──────────────────────┴──────────────────┬──────────┐
│ │ │
│ TRANSACTIONAL DATA │ │
│ │ │
│ ┌─────────────────────┐ ┌──────────────────┴────────┐ │
│ │ dm_orders │ │ dm_production_orders │ │
│ ├─────────────────────┤ ├───────────────────────────┤ │
│ │ order_id │ │ production_order (PK) │ │
│ │ order_line │ │ production_order_line │ │
│ │ customer_code ◄─────┼────│ customer_code ◄──────────┤ │
│ │ article_code ◄──────┼────│ article_code ◄────────────┤ │
│ │ quantity_requested │ │ machine_code ◄────────────┤ │
│ │ delivery_date │ │ quantity_requested │ │
│ │ order_status │ │ opening_date │ │
│ │ production_order │────│ closing_date │ │
│ │ (links to PO) ────┘ │ production_status │ │
│ │ production_status │ │ PHASE TRACKING: │ │
│ │ created_at │ │ • phase_t1_prepared │ │
│ └─────────────────────┘ │ • phase_t2_cut │ │
│ │ • phase_t3_sewing │ │
│ │ (with operator names & │ │
│ │ registration dates) │ │
│ │ created_at │ │
│ └───────────────────────────┘ │
│ │ │
│ │ │
│ ┌──────────────────┴────────┐ │
│ │ │ │
│ ┌──────────────────┴──┐ ┌───────────┴────────┐ │
│ │ dm_deliveries │ │ QUALITY SCANS │ │
│ ├─────────────────────┤ │ │ │
│ │ shipment_id │ │ • scan1_orders │ │
│ │ order_id ◄──────────┼───────────┤ (T1/Quilting) │ │
│ │ customer_code ◄─────┼───────────┤ │ │
│ │ article_code ◄──────┼───────────┤ • scanfg_orders │ │
│ │ quantity_delivered │ │ (Final Goods) │ │
│ │ shipment_date │ │ │ │
│ │ delivery_date │ │ COMMON FIELDS: │ │
│ │ delivery_status │ │ • operator_code │ │
│ │ total_value │ │ • CP_full_code ───┼──┐
│ │ created_at │ │ • quality_code │ │
│ └─────────────────────┘ │ • approved_qty │ │
│ │ • rejected_qty │ │
│ │ • date, time │ │
│ └───────────────────┘ │
│ │
│ AGGREGATED KPIs │
│ │
│ ┌──────────────────────────┐ │
│ │ dm_daily_summary │ │
│ ├──────────────────────────┤ │
│ │ report_date (PK) │ │
│ │ orders_received │ │
│ │ production_launched │ │
│ │ production_finished │ │
│ │ t1_scans_total │ │
│ │ t1_scans_approved │ │
│ │ t1_approval_rate │ │
│ │ t2_scans_total │ │
│ │ t2_approval_rate │ │
│ │ t3_scans_total │ │
│ │ t3_approval_rate │ │
│ │ orders_shipped │ │
│ │ orders_delivered │ │
│ │ on_time_deliveries │ │
│ │ delivery_value │ │
│ │ active_operators │ │
│ │ (aggregated daily via │ │
│ │ batch process) │ │
│ └──────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────┐
│ LABELS & WAREHOUSE MANAGEMENT │
└──────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────┐
│ order_for_labels │
├──────────────────────┤
│ id │
│ comanda_productie │──────────────┐
│ cod_articol │ │
│ descr_com_prod │ │
│ cantitate │ │
│ com_achiz_client │ │ Links to
│ nr_linie_com_client │ │ dm_production_orders
│ customer_name │ │ (production_order)
│ customer_article_num │ │
│ open_for_order │ │
│ printed_labels (0/1) │ │
│ data_livrare │ │
│ dimensiune │ │
│ created_at │ │
│ updated_at │ │
└──────────────────────┘ │
┌──────────────────────────┐
│ dm_production_orders │
│ (production_order field) │
└──────────────────────────┘
┌──────────────────────┐
│warehouse_locations │
├──────────────────────┤
│ id │
│ location_code │
│ size │
│ description │
└──────────────────────┘
(standalone)
```
---
## 3. Table Summary by Category
### 📋 User Management & Access Control (6 tables)
| Table | Records | Purpose | Key Field |
|-------|---------|---------|-----------|
| **users** | ~50-100 | User accounts & authentication | `id`, `username` |
| **roles** | 4 | Role definitions | `id`, `name` |
| **role_hierarchy** | 4 | Hierarchical role structure | `role_name` |
| **permissions** | 50-100+ | Granular permission definitions | `id`, `permission_key` |
| **role_permissions** | 100-200 | Role→Permission mapping | `role_name`, `permission_id` |
| **permission_audit_log** | 1000+ | Permission change audit trail | `id` |
**Access Levels**:
- 100 = superadmin (Full access)
- 90 = admin (Administrative)
- 70 = manager (Module management)
- 50 = worker (Basic operations)
---
### 🔍 Quality Management / Production Scanning (2 tables)
| Table | Records | Purpose | Key Field |
|-------|---------|---------|-----------|
| **scan1_orders** | 10,000+ | Phase 1 quality scans (T1/Quilting) | `Id` (PK), `CP_full_code` (FK) |
| **scanfg_orders** | 5,000+ | Final goods quality scans | `Id` (PK), `CP_full_code` (FK) |
**Common Fields** (both tables):
- `operator_code` - Worker identifier (4 char)
- `CP_full_code` - Production order reference
- `quality_code` - 0=Rejected, 1=Approved
- `date`, `time` - Scan timestamp
- `approved_quantity`, `rejected_quantity` - Count
**Production Phases**:
- T1 = Quilting preparation
- T2 = Cutting
- T3 = Sewing/Assembly
---
### 📊 Business Intelligence / Daily Mirror (7 tables)
#### Master Data Tables (Reference/Lookup)
| Table | Records | Purpose | Unique Key |
|-------|---------|---------|------------|
| **dm_articles** | 500-2000 | Product catalog | `article_code` |
| **dm_customers** | 100-500 | Customer master data | `customer_code` |
| **dm_machines** | 20-50 | Production equipment | `machine_code` |
#### Transactional Data Tables
| Table | Records | Purpose | Unique Key |
|-------|---------|---------|------------|
| **dm_orders** | 5,000+ | Sales orders & line items | `order_line` |
| **dm_production_orders** | 3,000+ | Manufacturing orders | `production_order_line` |
| **dm_deliveries** | 5,000+ | Shipment & delivery tracking | `shipment_id` |
#### Aggregated Data Table
| Table | Records | Purpose | Unique Key |
|-------|---------|---------|------------|
| **dm_daily_summary** | 365+ | Daily KPI aggregations | `report_date` |
**Daily Metrics Tracked**:
- Orders (received, quantity, value)
- Production (launched, finished, in-progress)
- Quality (T1/T2/T3 scans & approval rates)
- Deliveries (shipped, delivered, late)
- Operations (active operators)
---
### 🏷️ Labels & Warehouse (2 tables)
| Table | Records | Purpose | Key Field |
|-------|---------|---------|-----------|
| **order_for_labels** | 2,000+ | Label printing queue | `id`, `comanda_productie` (FK) |
| **warehouse_locations** | 50-200 | Storage location definitions | `location_code` |
---
## 4. Data Flow & Relationships
```
USER INTERACTION
┌──────────────────┐
│ QUALITY SCANS │
│ (scan1_orders, │
│ scanfg_orders) │
└────────┬─────────┘
│ Uses
┌────────────────────────────────┐
│ dm_production_orders (T1 data) │
│ │
│ Links to: │
│ • dm_articles │
│ • dm_customers │
│ • dm_machines │
└────────┬───────────────────────┘
├─────────────────────────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌──────────────────┐
│ dm_orders │ │ order_for_labels │
│ (sales orders) │ │ (label printing) │
└────────┬────────┘ └──────────────────┘
┌─────────────────┐
│ dm_deliveries │
│ (shipments) │
└─────────────────┘
└─ Aggregates into
┌──────────────────┐
│ dm_daily_summary │
│ (KPI Dashboard) │
└──────────────────┘
```
---
## 5. Key Relationships Matrix
### Foreign Key References
```
dm_orders
├─→ dm_customers.customer_code
├─→ dm_articles.article_code
└─→ dm_production_orders.production_order
dm_production_orders
├─→ dm_customers.customer_code
├─→ dm_articles.article_code
└─→ dm_machines.machine_code
dm_deliveries
├─→ dm_orders.order_id
├─→ dm_customers.customer_code
└─→ dm_articles.article_code
scan1_orders & scanfg_orders
└─→ dm_production_orders.production_order (via CP_full_code)
order_for_labels
└─→ dm_production_orders.production_order (via comanda_productie)
role_permissions
├─→ role_hierarchy.role_name
└─→ permissions.id
users
└─→ roles.name (via role field)
```
---
## 6. Database Statistics
### Table Size Estimation
| Category | Count | Est. Records | Est. Size |
|----------|-------|--------------|-----------|
| User Management | 6 | ~5,000 | ~50 MB |
| Quality Scans | 2 | ~15,000 | ~150 MB |
| Daily Mirror (Master) | 3 | ~3,000 | ~30 MB |
| Daily Mirror (Transactional) | 3 | ~13,000 | ~350 MB |
| Daily Mirror (Aggregated) | 1 | ~365 | ~5 MB |
| Labels & Warehouse | 2 | ~2,250 | ~50 MB |
| **TOTAL** | **17** | **~38,000+** | **~635 MB** |
---
## 7. Critical Indexes
### Primary Keys (All Tables)
- Every table has `id` or equivalent as PRIMARY KEY
### Unique Constraints
```
users.username
dm_articles.article_code
dm_customers.customer_code
dm_machines.machine_code
dm_orders.order_line
dm_production_orders.production_order_line
warehouse_locations.location_code
permissions.permission_key
role_hierarchy.role_name
dm_daily_summary.report_date
```
### Foreign Key Indexes
```
dm_orders
├─ customer_code
├─ article_code
├─ delivery_date
└─ order_status
dm_production_orders
├─ customer_code
├─ article_code
├─ delivery_date
└─ production_status
dm_deliveries
├─ order_id
├─ customer_code
├─ article_code
├─ shipment_date
├─ delivery_date
└─ delivery_status
dm_articles
├─ product_group
└─ classification
dm_customers
├─ customer_name
└─ customer_group
dm_machines
├─ machine_type
└─ department
role_permissions
├─ role_name
└─ permission_id
```
---
## 8. Data Types Summary
### Numeric Types
- `INT(11)` - IDs, counts, priorities
- `BIGINT(20)` - Large IDs (order_for_labels)
- `DECIMAL(10,2)` - Prices, measurements
- `DECIMAL(15,2)` - Large values, order totals
- `TINYINT(1)` - Boolean flags (0/1)
### String Types
- `VARCHAR(4)` - Operator codes
- `VARCHAR(15)` - Production codes
- `VARCHAR(50)` - Article/customer/machine codes
- `VARCHAR(100)` - Names, descriptions
- `VARCHAR(255)` - Long fields (email, descriptions)
- `TEXT` - Large text (descriptions, JSON arrays)
### Date/Time Types
- `DATE` - Calendar dates
- `TIME` - Time-of-day
- `TIMESTAMP` - Creation/update timestamps
- `DATETIME` - Precise date+time values
---
## 9. Application Modules & Table Usage
```
LOGIN PAGE (/)
└─→ users
DASHBOARD (/dashboard)
├─→ users
├─→ scan1_orders (statistics)
├─→ scanfg_orders (statistics)
├─→ dm_production_orders (status)
└─→ dm_orders (metrics)
SETTINGS (/settings)
├─→ users
├─→ roles
├─→ role_hierarchy
├─→ permissions
└─→ role_permissions
QUALITY SCANNING
├─ Quality Scan 1 (/scan1)
│ ├─→ scan1_orders (insert/read)
│ └─→ dm_production_orders (lookup)
├─ Quality Scan FG (/scanfg)
│ ├─→ scanfg_orders (insert/read)
│ └─→ dm_production_orders (lookup)
├─ Quality Reports (/reports_for_quality)
│ └─→ scan1_orders (analytics)
└─ Quality Reports FG (/reports_for_quality_fg)
└─→ scanfg_orders (analytics)
LABEL PRINTING (/print)
├─→ order_for_labels (manage queue)
└─→ dm_production_orders (lookup)
WAREHOUSE (/warehouse)
└─→ warehouse_locations (locations)
DAILY MIRROR / BI (/daily_mirror)
├─ Dashboard
│ └─→ dm_daily_summary (KPIs)
├─ Articles (/daily_mirror/articles)
│ └─→ dm_articles
├─ Customers (/daily_mirror/customers)
│ └─→ dm_customers
├─ Machines (/daily_mirror/machines)
│ └─→ dm_machines
├─ Orders (/daily_mirror/orders)
│ ├─→ dm_orders
│ ├─→ dm_customers (lookup)
│ └─→ dm_articles (lookup)
├─ Production Orders (/daily_mirror/production_orders)
│ ├─→ dm_production_orders
│ ├─→ dm_customers (lookup)
│ ├─→ dm_articles (lookup)
│ └─→ dm_machines (lookup)
└─ Deliveries (/daily_mirror/deliveries)
├─→ dm_deliveries
├─→ dm_customers (lookup)
└─→ dm_articles (lookup)
```
---
## 10. Data Maintenance & Optimization
### Performance Optimization
1. **Regular Index Analysis**: Monitor slow queries
2. **Table Optimization**: `OPTIMIZE TABLE` for tables > 100MB
3. **Partition Strategy**: Consider date-based partitioning for scan tables
4. **Archiving**: Archive quality scans older than 2 years
### Backup Strategy
- **Daily automated backups** → `/srv/quality_app/backups/`
- **Retention**: 30 days (configurable)
- **Backup types**: Full + data-only incremental backups
### Data Cleanup Recommendations
```
scan1_orders, scanfg_orders
└─→ Archive data older than 2 years
permission_audit_log
└─→ Archive quarterly
dm_daily_summary
└─→ Keep all historical data
```
---
## 11. Production Phases Tracking
The system tracks three phases of production:
### Phase T1: Quilting Preparation
- Table: `scan1_orders`
- Fields in `dm_production_orders`:
- `phase_t1_prepared` (status)
- `t1_operator_name` (who performed)
- `t1_registration_date` (when scanned)
- `end_of_quilting` (completion date)
### Phase T2: Cutting
- Fields in `dm_production_orders`:
- `phase_t2_cut` (status)
- `t2_operator_name`
- `t2_registration_date`
### Phase T3: Sewing/Assembly
- Fields in `dm_production_orders`:
- `phase_t3_sewing` (status)
- `t3_operator_name`
- `t3_registration_date`
- `end_of_sewing` (completion date)
### Final Goods (FG) Quality
- Table: `scanfg_orders`
- After all phases complete
---
## 12. Key Metrics & KPIs
Tracked in `dm_daily_summary`:
```
PRODUCTION METRICS
├─ Orders Received
├─ Production Launched
├─ Production Finished
├─ Production In-Progress
└─ Active Operators
QUALITY METRICS (by phase)
├─ T1 (Quilting)
│ ├─ Total Scans
│ ├─ Approved Count
│ └─ Approval Rate (%)
├─ T2 (Cutting)
│ ├─ Total Scans
│ ├─ Approved Count
│ └─ Approval Rate (%)
└─ T3 (Sewing)
├─ Total Scans
├─ Approved Count
└─ Approval Rate (%)
DELIVERY METRICS
├─ Orders Shipped
├─ Orders Delivered
├─ Orders Returned
├─ On-Time Deliveries
├─ Late Deliveries
└─ Delivery Value
ORDER METRICS
├─ Orders Quantity
├─ Orders Value
├─ Unique Customers
└─ Quilting Completed
```
---
## 13. Future Enhancements
### Planned Tables
1. **production_schedule** - Production planning calendar
2. **quality_issues** - Defect tracking & analysis
3. **inventory_movements** - Stock tracking
4. **operator_performance** - Worker productivity
### Planned Improvements
- Composite indexes for frequent joins
- Table partitioning by date (scan tables)
- Materialized views for complex reports
- Full-text search indexes
---
## Database Health Check Query
```sql
-- View database size
SELECT
table_name,
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)'
FROM information_schema.TABLES
WHERE table_schema = 'trasabilitate'
ORDER BY (data_length + index_length) DESC;
-- Check row counts
SELECT
table_name,
table_rows
FROM information_schema.TABLES
WHERE table_schema = 'trasabilitate'
ORDER BY table_rows DESC;
-- List all indexes
SELECT
table_name,
index_name,
seq_in_index,
column_name
FROM information_schema.STATISTICS
WHERE table_schema = 'trasabilitate'
ORDER BY table_name, index_name, seq_in_index;
```
---
**Last Updated**: January 10, 2026
**Database Version**: MariaDB 11.8.3
**Total Tables**: 17
**Total Estimated Records**: 38,000+
**Total Estimated Size**: ~635 MB