344 lines
12 KiB
SQL
344 lines
12 KiB
SQL
-- Daily Mirror Database Schema
|
|
-- Quality Recticel Production Tracking System
|
|
-- Created: October 24, 2025
|
|
|
|
-- =============================================
|
|
-- ORDERS DATA TABLES
|
|
-- =============================================
|
|
|
|
-- Main Orders Table (from Vizual. Artic. Comenzi Deschise)
|
|
CREATE TABLE IF NOT EXISTS dm_orders (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
order_id VARCHAR(50) UNIQUE NOT NULL,
|
|
customer_code VARCHAR(50),
|
|
customer_name VARCHAR(255),
|
|
client_order VARCHAR(100),
|
|
article_code VARCHAR(50),
|
|
article_description TEXT,
|
|
quantity_requested INT,
|
|
delivery_date DATE,
|
|
order_status VARCHAR(50),
|
|
priority VARCHAR(20),
|
|
product_group VARCHAR(100),
|
|
order_date DATE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
INDEX idx_order_id (order_id),
|
|
INDEX idx_customer (customer_code),
|
|
INDEX idx_article (article_code),
|
|
INDEX idx_delivery_date (delivery_date),
|
|
INDEX idx_order_date (order_date),
|
|
INDEX idx_status (order_status)
|
|
);
|
|
|
|
-- =============================================
|
|
-- PRODUCTION DATA TABLES
|
|
-- =============================================
|
|
|
|
-- Production Orders Table (from Comenzi Productie - Production orders Data sheet)
|
|
CREATE TABLE IF NOT EXISTS dm_production_orders (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
-- Primary Identifiers
|
|
production_order VARCHAR(50) UNIQUE NOT NULL,
|
|
open_for_order_line VARCHAR(100), -- Concatenated: "Opened for Order" + "-" + "Linia"
|
|
client_order_line VARCHAR(100), -- Concatenated: "Com. Achiz. Client" + "-" + "Nr. linie com. client"
|
|
|
|
-- Customer Information
|
|
customer_code VARCHAR(50),
|
|
customer_name VARCHAR(255),
|
|
|
|
-- Article Information
|
|
article_code VARCHAR(100),
|
|
article_description TEXT,
|
|
quantity_requested INT,
|
|
unit_of_measure VARCHAR(20),
|
|
|
|
-- Dates
|
|
delivery_date DATE, -- SO Duedate
|
|
opening_date DATE, -- Data Deschiderii
|
|
closing_date DATE, -- Data Inchiderii
|
|
data_planificare DATE, -- Data Planific.
|
|
|
|
-- Production Status
|
|
production_status VARCHAR(50), -- Status (Inchis, etc.)
|
|
|
|
-- Machine Information
|
|
machine_code VARCHAR(50), -- Masina cusut
|
|
machine_type VARCHAR(50), -- Tip masina
|
|
machine_number VARCHAR(20), -- Machine Number
|
|
|
|
-- Production Timeline
|
|
end_of_quilting DATE, -- End of Quilting
|
|
end_of_sewing DATE, -- End of Sewing
|
|
|
|
-- Quality Control Phase T1 (Prepared)
|
|
phase_t1_prepared VARCHAR(50), -- Faza pregatit(T1)
|
|
t1_operator_name VARCHAR(100), -- Nume complet T1
|
|
t1_registration_date DATETIME, -- Data inregistrare T1
|
|
|
|
-- Quality Control Phase T2 (Cut/Quilted)
|
|
phase_t2_cut VARCHAR(50), -- Faza taiat/matlasat(T2)
|
|
t2_operator_name VARCHAR(100), -- Nume complet T2
|
|
t2_registration_date DATETIME, -- Data inregistrare T2
|
|
|
|
-- Quality Control Phase T3 (Sewing)
|
|
phase_t3_sewing VARCHAR(50), -- Faza cusut(T3)
|
|
t3_operator_name VARCHAR(100), -- Nume complet T3
|
|
t3_registration_date DATETIME, -- Data inregistrare T3
|
|
|
|
-- Additional Information
|
|
design_number INT, -- Design number
|
|
classification VARCHAR(100), -- Clasificare
|
|
model_description VARCHAR(255), -- Descriere Model
|
|
model_lb2 VARCHAR(255), -- Model Lb2
|
|
needle_position DECIMAL(5,1), -- Needle Position
|
|
needle_row VARCHAR(50), -- Needle row
|
|
priority INT DEFAULT 0, -- Prioritate executie
|
|
|
|
-- Metadata
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
-- Indexes for Performance
|
|
INDEX idx_production_order (production_order),
|
|
INDEX idx_open_for_order_line (open_for_order_line),
|
|
INDEX idx_client_order_line (client_order_line),
|
|
INDEX idx_customer (customer_code),
|
|
INDEX idx_article (article_code),
|
|
INDEX idx_delivery_date (delivery_date),
|
|
INDEX idx_status (production_status),
|
|
INDEX idx_machine (machine_code),
|
|
INDEX idx_quilting_date (end_of_quilting),
|
|
INDEX idx_sewing_date (end_of_sewing),
|
|
INDEX idx_data_planificare (data_planificare)
|
|
);
|
|
|
|
-- =============================================
|
|
-- DELIVERY DATA TABLES
|
|
-- =============================================
|
|
|
|
-- Delivery/Shipment Table (from Articole livrate)
|
|
CREATE TABLE IF NOT EXISTS dm_deliveries (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
shipment_id VARCHAR(50) UNIQUE NOT NULL,
|
|
order_id VARCHAR(50),
|
|
production_order VARCHAR(50),
|
|
customer_code VARCHAR(50),
|
|
customer_name VARCHAR(255),
|
|
article_code VARCHAR(50),
|
|
article_description TEXT,
|
|
quantity_delivered INT,
|
|
quantity_returned INT DEFAULT 0,
|
|
|
|
-- Delivery Timeline
|
|
shipment_date DATE,
|
|
delivery_date DATE,
|
|
return_date DATE,
|
|
|
|
-- Delivery Status
|
|
delivery_status VARCHAR(50), -- 'shipped', 'delivered', 'returned', 'partial'
|
|
shipping_method VARCHAR(100),
|
|
tracking_number VARCHAR(100),
|
|
shipping_address TEXT,
|
|
delivery_notes TEXT,
|
|
|
|
-- Financial
|
|
unit_price DECIMAL(10,2),
|
|
total_value DECIMAL(12,2),
|
|
currency VARCHAR(3) DEFAULT 'RON',
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
INDEX idx_shipment_id (shipment_id),
|
|
INDEX idx_order_id (order_id),
|
|
INDEX idx_production_order (production_order),
|
|
INDEX idx_customer (customer_code),
|
|
INDEX idx_article (article_code),
|
|
INDEX idx_shipment_date (shipment_date),
|
|
INDEX idx_delivery_date (delivery_date),
|
|
INDEX idx_status (delivery_status)
|
|
);
|
|
|
|
-- =============================================
|
|
-- DAILY MIRROR AGGREGATION TABLES
|
|
-- =============================================
|
|
|
|
-- Daily Summary Table (for fast reporting)
|
|
CREATE TABLE IF NOT EXISTS dm_daily_summary (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
report_date DATE UNIQUE NOT NULL,
|
|
|
|
-- Orders Metrics
|
|
orders_received INT DEFAULT 0,
|
|
orders_quantity INT DEFAULT 0,
|
|
orders_value DECIMAL(15,2) DEFAULT 0,
|
|
unique_customers INT DEFAULT 0,
|
|
|
|
-- Production Metrics
|
|
production_launched INT DEFAULT 0,
|
|
production_finished INT DEFAULT 0,
|
|
production_in_progress INT DEFAULT 0,
|
|
quilting_completed INT DEFAULT 0,
|
|
sewing_completed INT DEFAULT 0,
|
|
|
|
-- Delivery Metrics
|
|
orders_shipped INT DEFAULT 0,
|
|
orders_delivered INT DEFAULT 0,
|
|
orders_returned INT DEFAULT 0,
|
|
delivery_value DECIMAL(15,2) DEFAULT 0,
|
|
|
|
-- Efficiency Metrics
|
|
on_time_deliveries INT DEFAULT 0,
|
|
late_deliveries INT DEFAULT 0,
|
|
active_operators INT DEFAULT 0,
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
INDEX idx_report_date (report_date)
|
|
);
|
|
|
|
|
|
-- =============================================
|
|
-- CONFIGURATION AND LOOKUP TABLES
|
|
-- =============================================
|
|
|
|
-- Customer Master
|
|
CREATE TABLE IF NOT EXISTS dm_customers (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
customer_code VARCHAR(50) UNIQUE NOT NULL,
|
|
customer_name VARCHAR(255) NOT NULL,
|
|
customer_group VARCHAR(100),
|
|
country VARCHAR(50),
|
|
currency VARCHAR(3) DEFAULT 'RON',
|
|
payment_terms VARCHAR(100),
|
|
credit_limit DECIMAL(15,2),
|
|
active BOOLEAN DEFAULT TRUE,
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
INDEX idx_customer_code (customer_code),
|
|
INDEX idx_customer_name (customer_name),
|
|
INDEX idx_customer_group (customer_group)
|
|
);
|
|
|
|
-- Article Master
|
|
CREATE TABLE IF NOT EXISTS dm_articles (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
article_code VARCHAR(50) UNIQUE NOT NULL,
|
|
article_description TEXT NOT NULL,
|
|
product_group VARCHAR(100),
|
|
classification VARCHAR(100),
|
|
unit_of_measure VARCHAR(20),
|
|
standard_price DECIMAL(10,2),
|
|
standard_time DECIMAL(8,2),
|
|
active BOOLEAN DEFAULT TRUE,
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
INDEX idx_article_code (article_code),
|
|
INDEX idx_product_group (product_group),
|
|
INDEX idx_classification (classification)
|
|
);
|
|
|
|
-- Machine Master
|
|
CREATE TABLE IF NOT EXISTS dm_machines (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
machine_code VARCHAR(50) UNIQUE NOT NULL,
|
|
machine_name VARCHAR(255),
|
|
machine_type VARCHAR(50),
|
|
machine_number VARCHAR(20),
|
|
department VARCHAR(100),
|
|
capacity_per_hour DECIMAL(8,2),
|
|
active BOOLEAN DEFAULT TRUE,
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
INDEX idx_machine_code (machine_code),
|
|
INDEX idx_machine_type (machine_type),
|
|
INDEX idx_department (department)
|
|
);
|
|
|
|
-- =============================================
|
|
-- DATA IMPORT TRACKING
|
|
-- =============================================
|
|
|
|
-- Track file uploads and data imports
|
|
CREATE TABLE IF NOT EXISTS dm_import_log (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
file_name VARCHAR(255) NOT NULL,
|
|
file_type VARCHAR(50) NOT NULL, -- 'orders', 'production', 'delivery'
|
|
upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
uploaded_by VARCHAR(100),
|
|
records_processed INT DEFAULT 0,
|
|
records_successful INT DEFAULT 0,
|
|
records_failed INT DEFAULT 0,
|
|
status VARCHAR(50) DEFAULT 'processing', -- 'processing', 'completed', 'failed'
|
|
error_message TEXT,
|
|
processing_time DECIMAL(8,2), -- seconds
|
|
|
|
INDEX idx_upload_date (upload_date),
|
|
INDEX idx_file_type (file_type),
|
|
INDEX idx_status (status),
|
|
INDEX idx_uploaded_by (uploaded_by)
|
|
);
|
|
|
|
-- =============================================
|
|
-- VIEWS FOR DAILY MIRROR REPORTING
|
|
-- =============================================
|
|
|
|
-- View: Current Production Status
|
|
CREATE OR REPLACE VIEW v_daily_production_status AS
|
|
SELECT
|
|
DATE(p.data_planificare) as production_date,
|
|
COUNT(*) as total_orders,
|
|
SUM(p.quantity_requested) as total_quantity,
|
|
SUM(CASE WHEN p.production_status = 'Inchis' THEN 1 ELSE 0 END) as completed_orders,
|
|
SUM(CASE WHEN p.production_status != 'Inchis' THEN 1 ELSE 0 END) as pending_orders,
|
|
SUM(CASE WHEN p.end_of_quilting IS NOT NULL THEN 1 ELSE 0 END) as quilting_done,
|
|
SUM(CASE WHEN p.end_of_sewing IS NOT NULL THEN 1 ELSE 0 END) as sewing_done,
|
|
COUNT(DISTINCT p.customer_code) as unique_customers,
|
|
COUNT(DISTINCT p.machine_code) as machines_used
|
|
FROM dm_production_orders p
|
|
WHERE p.data_planificare >= CURDATE() - INTERVAL 30 DAY
|
|
GROUP BY DATE(p.data_planificare)
|
|
ORDER BY production_date DESC;
|
|
|
|
-- View: Quality Performance Summary
|
|
CREATE OR REPLACE VIEW v_daily_quality_summary AS
|
|
SELECT
|
|
DATE(p.t1_registration_date) as scan_date,
|
|
COUNT(*) as total_t1_scans,
|
|
SUM(CASE WHEN p.t1_status = 0 THEN 1 ELSE 0 END) as t1_approved,
|
|
ROUND(SUM(CASE WHEN p.t1_status = 0 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) as t1_approval_rate,
|
|
COUNT(CASE WHEN p.t2_registration_date IS NOT NULL THEN 1 END) as total_t2_scans,
|
|
SUM(CASE WHEN p.t2_status = 0 THEN 1 ELSE 0 END) as t2_approved,
|
|
ROUND(SUM(CASE WHEN p.t2_status = 0 THEN 1 ELSE 0 END) / COUNT(CASE WHEN p.t2_registration_date IS NOT NULL THEN 1 END) * 100, 2) as t2_approval_rate,
|
|
COUNT(DISTINCT p.t1_operator_name) as active_operators
|
|
FROM dm_production_orders p
|
|
WHERE p.t1_registration_date >= CURDATE() - INTERVAL 30 DAY
|
|
GROUP BY DATE(p.t1_registration_date)
|
|
ORDER BY scan_date DESC;
|
|
|
|
-- View: Delivery Performance
|
|
CREATE OR REPLACE VIEW v_daily_delivery_summary AS
|
|
SELECT
|
|
d.delivery_date,
|
|
COUNT(*) as total_deliveries,
|
|
SUM(d.quantity_delivered) as total_quantity_delivered,
|
|
SUM(d.total_value) as total_delivery_value,
|
|
SUM(CASE WHEN d.delivery_date <= o.delivery_date THEN 1 ELSE 0 END) as on_time_deliveries,
|
|
SUM(CASE WHEN d.delivery_date > o.delivery_date THEN 1 ELSE 0 END) as late_deliveries,
|
|
COUNT(DISTINCT d.customer_code) as unique_customers
|
|
FROM dm_deliveries d
|
|
LEFT JOIN dm_orders o ON d.order_id = o.order_id
|
|
WHERE d.delivery_date >= CURDATE() - INTERVAL 30 DAY
|
|
AND d.delivery_status = 'delivered'
|
|
GROUP BY d.delivery_date
|
|
ORDER BY d.delivery_date DESC; |