diff --git a/documentation/DATABASE_STRUCTURE.md b/documentation/DATABASE_STRUCTURE.md new file mode 100644 index 0000000..65bedb7 --- /dev/null +++ b/documentation/DATABASE_STRUCTURE.md @@ -0,0 +1,789 @@ +# Database Structure Documentation + +## Overview +This document provides a comprehensive overview of the **trasabilitate** database structure, including all tables, their fields, purposes, and which application pages/modules use them. + +**Database**: `trasabilitate` +**Type**: MariaDB 11.8.3 +**Character Set**: utf8mb4 +**Collation**: utf8mb4_uca1400_ai_ci + +## Table Categories + +### 1. User Management & Access Control +- [users](#users) - User accounts and authentication +- [roles](#roles) - User role definitions +- [role_hierarchy](#role_hierarchy) - Role levels and inheritance +- [permissions](#permissions) - Granular permission definitions +- [role_permissions](#role_permissions) - Permission assignments to roles +- [permission_audit_log](#permission_audit_log) - Audit trail for permission changes + +### 2. Quality Management (Production Scanning) +- [scan1_orders](#scan1_orders) - Phase 1 quality scans (quilting preparation) +- [scanfg_orders](#scanfg_orders) - Final goods quality scans + +### 3. Daily Mirror (Business Intelligence) +- [dm_articles](#dm_articles) - Product catalog +- [dm_customers](#dm_customers) - Customer master data +- [dm_machines](#dm_machines) - Production equipment +- [dm_orders](#dm_orders) - Sales orders +- [dm_production_orders](#dm_production_orders) - Manufacturing orders +- [dm_deliveries](#dm_deliveries) - Shipment tracking +- [dm_daily_summary](#dm_daily_summary) - Daily KPI aggregations + +### 4. Labels & Warehouse +- [order_for_labels](#order_for_labels) - Label printing queue +- [warehouse_locations](#warehouse_locations) - Storage location master + +--- + +## Detailed Table Descriptions + +### users +**Purpose**: Stores user accounts, credentials, and access permissions + +**Structure**: +| Field | Type | Null | Key | Description | +|----------|--------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique user ID | +| username | varchar(50) | NO | UNI | Login username | +| password | varchar(255) | NO | | Password (hashed) | +| role | varchar(50) | NO | | User role (superadmin, admin, manager, worker) | +| email | varchar(255) | YES | | Email address | +| modules | text | YES | | Accessible modules (JSON array) | + +**Access Levels**: +- **superadmin** (Level 100): Full system access +- **admin** (Level 90): Administrative access +- **manager** (Level 70): Module management +- **worker** (Level 50): Basic operations + +**Used By**: +- **Pages**: Login (`/`), Dashboard (`/dashboard`), Settings (`/settings`) +- **Routes**: `login()`, `dashboard()`, `get_users()`, `create_user()`, `edit_user()`, `delete_user()` +- **Access Control**: All pages via `@login_required`, role checks + +**Relationships**: +- **role** references **roles.name** +- **modules** contains JSON array of accessible modules + +--- + +### roles +**Purpose**: Defines available user roles and their access levels + +**Structure**: +| Field | Type | Null | Key | Description | +|--------------|--------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique role ID | +| name | varchar(100) | NO | UNI | Role name | +| access_level | varchar(50) | NO | | Access level description | +| description | text | YES | | Role description | +| created_at | timestamp | YES | | Creation timestamp | + +**Default Roles**: +1. **superadmin**: Full system access, all permissions +2. **admin**: Can manage users and settings +3. **manager**: Can oversee production and quality +4. **worker**: Can perform scans and basic operations + +**Used By**: +- **Pages**: Settings (`/settings`) +- **Routes**: Role management, user creation + +--- + +### role_hierarchy +**Purpose**: Defines hierarchical role structure with levels and inheritance + +**Structure**: +| Field | Type | Null | Key | Description | +|-------------------|--------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique ID | +| role_name | varchar(100) | NO | UNI | Role identifier | +| role_display_name | varchar(255) | NO | | Display name | +| level | int(11) | NO | | Hierarchy level (100=highest) | +| parent_role | varchar(100) | YES | | Parent role in hierarchy | +| description | text | YES | | Role description | +| is_active | tinyint(1) | YES | | Active status | +| created_at | timestamp | YES | | Creation timestamp | + +**Hierarchy Levels**: +- **100**: superadmin (root) +- **90**: admin +- **70**: manager +- **50**: worker + +**Used By**: +- **Pages**: Settings (`/settings`), Role Management +- **Routes**: Permission management, role assignment + +--- + +### permissions +**Purpose**: Defines granular permissions for pages, sections, and actions + +**Structure**: +| Field | Type | Null | Key | Description | +|----------------|--------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique permission ID | +| permission_key | varchar(255) | NO | UNI | Unique key (page.section.action) | +| page | varchar(100) | NO | | Page identifier | +| page_name | varchar(255) | NO | | Display page name | +| section | varchar(100) | NO | | Section identifier | +| section_name | varchar(255) | NO | | Display section name | +| action | varchar(50) | NO | | Action (view, create, edit, delete) | +| action_name | varchar(255) | NO | | Display action name | +| description | text | YES | | Permission description | +| created_at | timestamp | YES | | Creation timestamp | + +**Permission Structure**: `page.section.action` +- Example: `quality.scan1.view`, `daily_mirror.orders.edit` + +**Used By**: +- **Pages**: Settings (`/settings`), Permission Management +- **Routes**: Permission checks via decorators + +--- + +### role_permissions +**Purpose**: Maps permissions to roles (many-to-many relationship) + +**Structure**: +| Field | Type | Null | Key | Description | +|---------------|--------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique mapping ID | +| role_name | varchar(100) | NO | MUL | Role identifier | +| permission_id | int(11) | NO | MUL | Permission ID | +| granted_at | timestamp | YES | | Grant timestamp | +| granted_by | varchar(100) | YES | | User who granted | + +**Used By**: +- **Pages**: Settings (`/settings`), Permission Management +- **Routes**: `check_permission()`, permission decorators +- **Access Control**: All protected pages + +--- + +### permission_audit_log +**Purpose**: Tracks all permission changes for security auditing + +**Structure**: +| Field | Type | Null | Key | Description | +|----------------|--------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique log ID | +| action | varchar(50) | NO | | Action (grant, revoke, modify) | +| role_name | varchar(100) | YES | | Affected role | +| permission_key | varchar(255) | YES | | Affected permission | +| user_id | varchar(100) | YES | | User who performed action | +| timestamp | timestamp | YES | | Action timestamp | +| details | text | YES | | Additional details (JSON) | +| ip_address | varchar(45) | YES | | IP address of user | + +**Used By**: +- **Pages**: Audit logs (future feature) +- **Routes**: Automatically logged by permission management functions + +--- + +### scan1_orders +**Purpose**: Stores Phase 1 (T1) quality scan data for quilting preparation + +**Structure**: +| Field | Type | Null | Key | Description | +|-------------------|-------------|------|-----|-------------| +| Id | int(11) | NO | PRI | Unique scan ID | +| operator_code | varchar(4) | NO | | Worker identifier | +| CP_full_code | varchar(15) | NO | | Full production order code | +| OC1_code | varchar(4) | NO | | Customer order code 1 | +| OC2_code | varchar(4) | NO | | Customer order code 2 | +| CP_base_code | varchar(10) | YES | | Base production code (generated) | +| quality_code | int(3) | NO | | Quality check result | +| date | date | NO | | Scan date | +| time | time | NO | | Scan time | +| approved_quantity | int(11) | YES | | Approved items | +| rejected_quantity | int(11) | YES | | Rejected items | + +**Quality Codes**: +- **0**: Rejected +- **1**: Approved + +**Used By**: +- **Pages**: + - Quality Scan 1 (`/scan1`) + - Quality Reports (`/reports_for_quality`) + - Daily Reports (`/daily_scan`) + - Production Scan 1 (`/productie_scan_1`) +- **Routes**: `scan1()`, `insert_scan1()`, `reports_for_quality()`, `daily_scan()`, `productie_scan_1()` +- **Dashboard**: Phase 1 statistics widget + +**Related Tables**: +- Linked to **dm_production_orders** via **CP_full_code** + +--- + +### scanfg_orders +**Purpose**: Stores final goods (FG) quality scan data + +**Structure**: +| Field | Type | Null | Key | Description | +|-------------------|-------------|------|-----|-------------| +| Id | int(11) | NO | PRI | Unique scan ID | +| operator_code | varchar(4) | NO | | Worker identifier | +| CP_full_code | varchar(15) | NO | | Full production order code | +| OC1_code | varchar(4) | NO | | Customer order code 1 | +| OC2_code | varchar(4) | NO | | Customer order code 2 | +| CP_base_code | varchar(10) | YES | | Base production code (generated) | +| quality_code | int(3) | NO | | Quality check result | +| date | date | NO | | Scan date | +| time | time | NO | | Scan time | +| approved_quantity | int(11) | YES | | Approved items | +| rejected_quantity | int(11) | YES | | Rejected items | + +**Used By**: +- **Pages**: + - Quality Scan FG (`/scanfg`) + - Quality Reports FG (`/reports_for_quality_fg`) + - Daily Scan FG (`/daily_scan_fg`) + - Production Scan FG (`/productie_scan_fg`) +- **Routes**: `scanfg()`, `insert_scanfg()`, `reports_for_quality_fg()`, `daily_scan_fg()`, `productie_scan_fg()` +- **Dashboard**: Final goods statistics widget + +**Related Tables**: +- Linked to **dm_production_orders** via **CP_full_code** + +--- + +### order_for_labels +**Purpose**: Manages label printing queue for production orders + +**Structure**: +| Field | Type | Null | Key | Description | +|-------------------------|-------------|------|-----|-------------| +| id | bigint(20) | NO | PRI | Unique ID | +| comanda_productie | varchar(15) | NO | | Production order | +| cod_articol | varchar(15) | YES | | Article code | +| descr_com_prod | varchar(50) | NO | | Description | +| cantitate | int(3) | NO | | Quantity | +| com_achiz_client | varchar(25) | YES | | Customer order | +| nr_linie_com_client | int(3) | YES | | Order line number | +| customer_name | varchar(50) | YES | | Customer name | +| customer_article_number | varchar(25) | YES | | Customer article # | +| open_for_order | varchar(25) | YES | | Open order reference | +| line_number | int(3) | YES | | Line number | +| created_at | timestamp | YES | | Creation timestamp | +| updated_at | timestamp | YES | | Update timestamp | +| printed_labels | int(1) | YES | | Print status (0/1) | +| data_livrare | date | YES | | Delivery date | +| dimensiune | varchar(20) | YES | | Dimensions | + +**Print Status**: +- **0**: Not printed +- **1**: Printed + +**Used By**: +- **Pages**: + - Label Printing (`/print`) + - Print All Labels (`/print_all`) +- **Routes**: `print_module()`, `print_all()`, `get_available_labels()` +- **Module**: Labels Module + +**Related Tables**: +- **comanda_productie** references **dm_production_orders.production_order** + +--- + +### warehouse_locations +**Purpose**: Stores warehouse storage location definitions + +**Structure**: +| Field | Type | Null | Key | Description | +|---------------|--------------|------|-----|-------------| +| id | bigint(20) | NO | PRI | Unique location ID | +| location_code | varchar(12) | NO | UNI | Location identifier | +| size | int(11) | YES | | Storage capacity | +| description | varchar(250) | YES | | Location description | + +**Used By**: +- **Pages**: Warehouse Management (`/warehouse`) +- **Module**: Warehouse Module +- **Routes**: Warehouse location management + +--- + +### dm_articles +**Purpose**: Product catalog and article master data + +**Structure**: +| Field | Type | Null | Key | Description | +|---------------------|---------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique article ID | +| article_code | varchar(50) | NO | UNI | Article code | +| article_description | text | NO | | Full description | +| product_group | varchar(100) | YES | MUL | Product group | +| classification | varchar(100) | YES | MUL | Classification | +| unit_of_measure | varchar(20) | YES | | Unit (PC, KG, M) | +| standard_price | decimal(10,2) | YES | | Standard price | +| standard_time | decimal(8,2) | YES | | Production time | +| active | tinyint(1) | YES | | Active status | +| created_at | timestamp | YES | | Creation timestamp | +| updated_at | timestamp | YES | | Update timestamp | + +**Used By**: +- **Pages**: Daily Mirror - Articles (`/daily_mirror/articles`) +- **Module**: Daily Mirror BI Module +- **Routes**: Article management, reporting +- **Dashboard**: Product statistics + +**Related Tables**: +- Referenced by **dm_orders**, **dm_production_orders**, **dm_deliveries** + +--- + +### dm_customers +**Purpose**: Customer master data and relationship management + +**Structure**: +| Field | Type | Null | Key | Description | +|----------------|---------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique customer ID | +| customer_code | varchar(50) | NO | UNI | Customer code | +| customer_name | varchar(255) | NO | MUL | Customer name | +| customer_group | varchar(100) | YES | MUL | Customer group | +| country | varchar(50) | YES | | Country | +| currency | varchar(3) | YES | | Currency (RON, EUR) | +| payment_terms | varchar(100) | YES | | Payment terms | +| credit_limit | decimal(15,2) | YES | | Credit limit | +| active | tinyint(1) | YES | | Active status | +| created_at | timestamp | YES | | Creation timestamp | +| updated_at | timestamp | YES | | Update timestamp | + +**Used By**: +- **Pages**: Daily Mirror - Customers (`/daily_mirror/customers`) +- **Module**: Daily Mirror BI Module +- **Routes**: Customer management, reporting +- **Dashboard**: Customer statistics + +**Related Tables**: +- Referenced by **dm_orders**, **dm_production_orders**, **dm_deliveries** + +--- + +### dm_machines +**Purpose**: Production equipment and machine master data + +**Structure**: +| Field | Type | Null | Key | Description | +|-------------------|--------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique machine ID | +| machine_code | varchar(50) | NO | UNI | Machine code | +| machine_name | varchar(255) | YES | | Machine name | +| machine_type | varchar(50) | YES | MUL | Type (Quilting, Sewing) | +| machine_number | varchar(20) | YES | | Machine number | +| department | varchar(100) | YES | MUL | Department | +| capacity_per_hour | decimal(8,2) | YES | | Hourly capacity | +| active | tinyint(1) | YES | | Active status | +| created_at | timestamp | YES | | Creation timestamp | +| updated_at | timestamp | YES | | Update timestamp | + +**Machine Types**: +- **Quilting**: Quilting machines +- **Sewing**: Sewing machines +- **Cutting**: Cutting equipment + +**Used By**: +- **Pages**: Daily Mirror - Machines (`/daily_mirror/machines`) +- **Module**: Daily Mirror BI Module +- **Routes**: Machine management, production planning + +**Related Tables**: +- Referenced by **dm_production_orders** + +--- + +### dm_orders +**Purpose**: Sales orders and order line management + +**Structure**: +| Field | Type | Null | Key | Description | +|---------------------|--------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique ID | +| order_id | varchar(50) | NO | MUL | Order number | +| order_line | varchar(120) | NO | UNI | Unique order line | +| line_number | varchar(20) | YES | | Line number | +| client_order_line | varchar(100) | YES | | Customer line ref | +| customer_code | varchar(50) | YES | MUL | Customer code | +| customer_name | varchar(255) | YES | | Customer name | +| article_code | varchar(50) | YES | MUL | Article code | +| article_description | text | YES | | Article description | +| quantity_requested | int(11) | YES | | Ordered quantity | +| balance | int(11) | YES | | Remaining quantity | +| unit_of_measure | varchar(20) | YES | | Unit | +| delivery_date | date | YES | MUL | Delivery date | +| order_date | date | YES | | Order date | +| order_status | varchar(50) | YES | MUL | Order status | +| article_status | varchar(50) | YES | | Article status | +| priority | varchar(20) | YES | | Priority level | +| product_group | varchar(100) | YES | | Product group | +| production_order | varchar(50) | YES | | Linked prod order | +| production_status | varchar(50) | YES | | Production status | +| model | varchar(100) | YES | | Model/design | +| closed | varchar(10) | YES | | Closed status | +| created_at | timestamp | YES | | Creation timestamp | +| updated_at | timestamp | YES | | Update timestamp | + +**Order Status Values**: +- **Open**: Active order +- **In Production**: Manufacturing started +- **Completed**: Finished +- **Shipped**: Delivered + +**Used By**: +- **Pages**: Daily Mirror - Orders (`/daily_mirror/orders`) +- **Module**: Daily Mirror BI Module +- **Routes**: Order management, reporting, dashboard +- **Dashboard**: Order statistics and KPIs + +**Related Tables**: +- **customer_code** references **dm_customers.customer_code** +- **article_code** references **dm_articles.article_code** +- **production_order** references **dm_production_orders.production_order** + +--- + +### dm_production_orders +**Purpose**: Manufacturing orders and production tracking + +**Structure**: +| Field | Type | Null | Key | Description | +|-----------------------|---------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique ID | +| production_order | varchar(50) | NO | MUL | Production order # | +| production_order_line | varchar(120) | NO | UNI | Unique line | +| line_number | varchar(20) | YES | | Line number | +| open_for_order_line | varchar(100) | YES | | Sales order line | +| client_order_line | varchar(100) | YES | | Customer line ref | +| customer_code | varchar(50) | YES | MUL | Customer code | +| customer_name | varchar(200) | YES | | Customer name | +| article_code | varchar(50) | YES | MUL | Article code | +| article_description | varchar(255) | YES | | Description | +| quantity_requested | int(11) | YES | | Quantity to produce | +| unit_of_measure | varchar(20) | YES | | Unit | +| delivery_date | date | YES | MUL | Delivery date | +| opening_date | date | YES | | Start date | +| closing_date | date | YES | | Completion date | +| data_planificare | date | YES | | Planning date | +| production_status | varchar(50) | YES | MUL | Status | +| machine_code | varchar(50) | YES | | Assigned machine | +| machine_type | varchar(50) | YES | | Machine type | +| machine_number | varchar(50) | YES | | Machine number | +| end_of_quilting | date | YES | | Quilting end date | +| end_of_sewing | date | YES | | Sewing end date | +| phase_t1_prepared | varchar(50) | YES | | T1 phase status | +| t1_operator_name | varchar(100) | YES | | T1 operator | +| t1_registration_date | datetime | YES | | T1 scan date | +| phase_t2_cut | varchar(50) | YES | | T2 phase status | +| t2_operator_name | varchar(100) | YES | | T2 operator | +| t2_registration_date | datetime | YES | | T2 scan date | +| phase_t3_sewing | varchar(50) | YES | | T3 phase status | +| t3_operator_name | varchar(100) | YES | | T3 operator | +| t3_registration_date | datetime | YES | | T3 scan date | +| design_number | int(11) | YES | | Design reference | +| classification | varchar(50) | YES | | Classification | +| model_description | varchar(255) | YES | | Model description | +| model_lb2 | varchar(100) | YES | | LB2 model | +| needle_position | decimal(10,2) | YES | | Needle position | +| needle_row | varchar(50) | YES | | Needle row | +| priority | int(11) | YES | | Priority (0-10) | +| created_at | timestamp | YES | | Creation timestamp | +| updated_at | timestamp | YES | | Update timestamp | + +**Production Status Values**: +- **Planned**: Scheduled +- **In Progress**: Manufacturing +- **T1 Complete**: Phase 1 done +- **T2 Complete**: Phase 2 done +- **T3 Complete**: Phase 3 done +- **Finished**: Completed + +**Production Phases**: +- **T1**: Quilting preparation +- **T2**: Cutting +- **T3**: Sewing/Assembly + +**Used By**: +- **Pages**: + - Daily Mirror - Production Orders (`/daily_mirror/production_orders`) + - Quality Scan pages (linked via production_order) + - Label printing (comanda_productie) +- **Module**: Daily Mirror BI Module +- **Routes**: Production management, quality scans, reporting +- **Dashboard**: Production statistics and phase tracking + +**Related Tables**: +- **customer_code** references **dm_customers.customer_code** +- **article_code** references **dm_articles.article_code** +- **machine_code** references **dm_machines.machine_code** +- Referenced by **scan1_orders**, **scanfg_orders**, **order_for_labels** + +--- + +### dm_deliveries +**Purpose**: Shipment and delivery tracking + +**Structure**: +| Field | Type | Null | Key | Description | +|---------------------|---------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique ID | +| shipment_id | varchar(50) | NO | | Shipment number | +| order_id | varchar(50) | YES | MUL | Order reference | +| client_order_line | varchar(100) | YES | | Customer line ref | +| customer_code | varchar(50) | YES | MUL | Customer code | +| customer_name | varchar(255) | YES | | Customer name | +| article_code | varchar(50) | YES | MUL | Article code | +| article_description | text | YES | | Description | +| quantity_delivered | int(11) | YES | | Delivered quantity | +| shipment_date | date | YES | MUL | Shipment date | +| delivery_date | date | YES | MUL | Delivery date | +| delivery_status | varchar(50) | YES | MUL | Status | +| total_value | decimal(12,2) | YES | | Shipment value | +| created_at | timestamp | YES | | Creation timestamp | +| updated_at | timestamp | YES | | Update timestamp | + +**Delivery Status Values**: +- **Pending**: Awaiting shipment +- **Shipped**: In transit +- **Delivered**: Completed +- **Returned**: Returned by customer + +**Used By**: +- **Pages**: Daily Mirror - Deliveries (`/daily_mirror/deliveries`) +- **Module**: Daily Mirror BI Module +- **Routes**: Delivery tracking, reporting +- **Dashboard**: Delivery statistics + +**Related Tables**: +- **order_id** references **dm_orders.order_id** +- **customer_code** references **dm_customers.customer_code** +- **article_code** references **dm_articles.article_code** + +--- + +### dm_daily_summary +**Purpose**: Daily aggregated KPIs and performance metrics + +**Structure**: +| Field | Type | Null | Key | Description | +|------------------------|---------------|------|-----|-------------| +| id | int(11) | NO | PRI | Unique ID | +| report_date | date | NO | UNI | Summary date | +| orders_received | int(11) | YES | | New orders | +| orders_quantity | int(11) | YES | | Total quantity | +| orders_value | decimal(15,2) | YES | | Total value | +| unique_customers | int(11) | YES | | Customer count | +| production_launched | int(11) | YES | | Started orders | +| production_finished | int(11) | YES | | Completed orders | +| production_in_progress | int(11) | YES | | Active orders | +| quilting_completed | int(11) | YES | | Quilting done | +| sewing_completed | int(11) | YES | | Sewing done | +| t1_scans_total | int(11) | YES | | T1 total scans | +| t1_scans_approved | int(11) | YES | | T1 approved | +| t1_approval_rate | decimal(5,2) | YES | | T1 rate (%) | +| t2_scans_total | int(11) | YES | | T2 total scans | +| t2_scans_approved | int(11) | YES | | T2 approved | +| t2_approval_rate | decimal(5,2) | YES | | T2 rate (%) | +| t3_scans_total | int(11) | YES | | T3 total scans | +| t3_scans_approved | int(11) | YES | | T3 approved | +| t3_approval_rate | decimal(5,2) | YES | | T3 rate (%) | +| orders_shipped | int(11) | YES | | Shipped orders | +| orders_delivered | int(11) | YES | | Delivered orders | +| orders_returned | int(11) | YES | | Returns | +| delivery_value | decimal(15,2) | YES | | Delivery value | +| on_time_deliveries | int(11) | YES | | On-time count | +| late_deliveries | int(11) | YES | | Late count | +| active_operators | int(11) | YES | | Active workers | +| created_at | timestamp | YES | | Creation timestamp | +| updated_at | timestamp | YES | | Update timestamp | + +**Calculation**: Automatically updated daily via batch process + +**Used By**: +- **Pages**: Daily Mirror - Dashboard (`/daily_mirror`) +- **Module**: Daily Mirror BI Module +- **Routes**: Daily reporting, KPI dashboard +- **Dashboard**: Main KPI widgets + +**Data Source**: Aggregated from all other tables + +--- + +## Table Relationships + +### Entity Relationship Diagram (Text) + +``` +users + ├── role → roles.name + └── modules (JSON array) + +roles + └── Used by: users, role_hierarchy + +role_hierarchy + ├── role_name → roles.name + └── parent_role → role_hierarchy.role_name + +permissions + └── Used by: role_permissions + +role_permissions + ├── role_name → role_hierarchy.role_name + └── permission_id → permissions.id + +dm_articles + ├── Used by: dm_orders.article_code + ├── Used by: dm_production_orders.article_code + └── Used by: dm_deliveries.article_code + +dm_customers + ├── Used by: dm_orders.customer_code + ├── Used by: dm_production_orders.customer_code + └── Used by: dm_deliveries.customer_code + +dm_machines + └── Used by: dm_production_orders.machine_code + +dm_orders + ├── customer_code → dm_customers.customer_code + ├── article_code → dm_articles.article_code + └── production_order → dm_production_orders.production_order + +dm_production_orders + ├── customer_code → dm_customers.customer_code + ├── article_code → dm_articles.article_code + ├── machine_code → dm_machines.machine_code + ├── Used by: scan1_orders.CP_full_code + ├── Used by: scanfg_orders.CP_full_code + └── Used by: order_for_labels.comanda_productie + +dm_deliveries + ├── order_id → dm_orders.order_id + ├── customer_code → dm_customers.customer_code + └── article_code → dm_articles.article_code + +scan1_orders + └── CP_full_code → dm_production_orders.production_order + +scanfg_orders + └── CP_full_code → dm_production_orders.production_order + +order_for_labels + └── comanda_productie → dm_production_orders.production_order + +dm_daily_summary + └── Aggregated from: all other tables +``` + +--- + +## Pages and Table Usage Matrix + +| Page/Module | Tables Used | +|-------------|-------------| +| **Login** (`/`) | users | +| **Dashboard** (`/dashboard`) | users, scan1_orders, scanfg_orders, dm_production_orders, dm_orders | +| **Settings** (`/settings`) | users, roles, role_hierarchy, permissions, role_permissions | +| **Quality Scan 1** (`/scan1`) | scan1_orders, dm_production_orders | +| **Quality Scan FG** (`/scanfg`) | scanfg_orders, dm_production_orders | +| **Quality Reports** (`/reports_for_quality`) | scan1_orders | +| **Quality Reports FG** (`/reports_for_quality_fg`) | scanfg_orders | +| **Label Printing** (`/print`) | order_for_labels, dm_production_orders | +| **Warehouse** (`/warehouse`) | warehouse_locations | +| **Daily Mirror** (`/daily_mirror`) | dm_daily_summary, dm_orders, dm_production_orders, dm_customers | +| **DM - Articles** | dm_articles | +| **DM - Customers** | dm_customers | +| **DM - Machines** | dm_machines | +| **DM - Orders** | dm_orders, dm_customers, dm_articles | +| **DM - Production** | dm_production_orders, dm_customers, dm_articles, dm_machines | +| **DM - Deliveries** | dm_deliveries, dm_customers, dm_articles | + +--- + +## Indexes and Performance + +### Primary Indexes +- All tables have **PRIMARY KEY** on `id` field + +### Unique Indexes +- **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 + +--- + +## Database Maintenance + +### Backup Strategy +- **Manual Backups**: Via Settings page → Database Backup Management +- **Automatic Backups**: Scheduled daily backups (configurable) +- **Backup Location**: `/srv/quality_app/backups/` +- **Retention**: 30 days (configurable) + +See: [DATABASE_BACKUP_GUIDE.md](DATABASE_BACKUP_GUIDE.md) + +### Data Cleanup +- **scan1_orders, scanfg_orders**: Consider archiving data older than 2 years +- **permission_audit_log**: Archive quarterly +- **dm_daily_summary**: Keep all historical data + +### Performance Optimization +1. Regularly analyze slow queries +2. Keep indexes updated: `OPTIMIZE TABLE table_name` +3. Monitor table sizes: `SELECT table_name, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.TABLES WHERE table_schema = "trasabilitate"` + +--- + +## Future Enhancements + +### Planned Tables +- **production_schedule**: Production planning calendar +- **quality_issues**: Defect tracking and analysis +- **inventory_movements**: Stock movement tracking +- **operator_performance**: Worker productivity metrics + +### Planned Improvements +- Add more composite indexes for frequently joined tables +- Implement table partitioning for scan tables (by date) +- Create materialized views for complex reports +- Add full-text search indexes for descriptions + +--- + +## Related Documentation +- [PRODUCTION_STARTUP_GUIDE.md](PRODUCTION_STARTUP_GUIDE.md) - Application management +- [DATABASE_BACKUP_GUIDE.md](DATABASE_BACKUP_GUIDE.md) - Backup procedures +- [DATABASE_RESTORE_GUIDE.md](DATABASE_RESTORE_GUIDE.md) - Restore and migration +- [DOCKER_DEPLOYMENT.md](../old%20code/DOCKER_DEPLOYMENT.md) - Deployment guide + +--- + +**Last Updated**: November 3, 2025 +**Database Version**: MariaDB 11.8.3 +**Application Version**: 1.0.0 +**Total Tables**: 17 diff --git a/documentation/README.md b/documentation/README.md index f219ed5..831441a 100644 --- a/documentation/README.md +++ b/documentation/README.md @@ -31,6 +31,15 @@ This folder contains all development and deployment documentation for the Qualit - Restore troubleshooting - Safety features and confirmations +### Database Documentation + +- **[DATABASE_STRUCTURE.md](./DATABASE_STRUCTURE.md)** - Complete database structure documentation + - All 17 tables with field definitions + - Table purposes and descriptions + - Page-to-table usage matrix + - Relationships and foreign keys + - Indexes and performance notes + ## Quick Links ### Application Structure diff --git a/logs/access.log b/logs/access.log index 7b83ba8..8c16421 100644 --- a/logs/access.log +++ b/logs/access.log @@ -558,3 +558,7 @@ 192.168.0.132 - - [03/Nov/2025:22:19:45 +0200] "GET /warehouse HTTP/1.1" 200 2987 "https://quality.moto-adv.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" 8615 µs 192.168.0.132 - - [03/Nov/2025:22:19:50 +0200] "GET /etichete HTTP/1.1" 200 3204 "https://quality.moto-adv.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" 9249 µs 192.168.0.132 - - [03/Nov/2025:22:20:06 +0200] "GET /upload_data HTTP/1.1" 200 11226 "https://quality.moto-adv.com/etichete" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" 22296 µs +192.168.0.132 - - [03/Nov/2025:22:26:24 +0200] "GET / HTTP/1.1" 200 1688 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" 8746 µs +192.168.0.132 - - [03/Nov/2025:22:26:31 +0200] "POST / HTTP/1.1" 302 207 "https://quality.moto-adv.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" 10914 µs +192.168.0.132 - - [03/Nov/2025:22:26:31 +0200] "GET /dashboard HTTP/1.1" 200 3827 "https://quality.moto-adv.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" 2747 µs +192.168.0.132 - - [03/Nov/2025:22:26:39 +0200] "GET /daily_mirror/main HTTP/1.1" 200 10549 "https://quality.moto-adv.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" 19051 µs diff --git a/logs/error.log b/logs/error.log index bca606f..8bbbdb7 100644 --- a/logs/error.log +++ b/logs/error.log @@ -1742,3 +1742,8 @@ Backup directory ensured: /srv/quality_app/backups Backup directory ensured: /srv/quality_app/backups Backup directory ensured: /srv/quality_app/backups Session user: superadmin superadmin +All form data received: {'username': 'superadmin', 'password': 'Vanessa_13/05'} +Raw form input: 'superadmin' 'Vanessa_13/05' +External DB query result (with modules): ('superadmin', 'Vanessa_13/05', 'superadmin', 'quality,warehouse,labels,daily_mirror') +Logged in as: superadmin superadmin modules: ['quality', 'warehouse', 'labels', 'daily_mirror'] +Session user: superadmin superadmin