CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(100) UNIQUE NOT NULL, password_hash TEXT NOT NULL, role VARCHAR(50) NOT NULL, -- contoh: 'admin', 'sales', 'warehouse' created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() ); CREATE TABLE product_categories ( id SERIAL PRIMARY KEY, code VARCHAR(50), name VARCHAR(100), description TEXT ); CREATE TABLE master_collection ( id SERIAL PRIMARY KEY, code VARCHAR(50), name VARCHAR(100), description TEXT ); CREATE TABLE master_colour ( id SERIAL PRIMARY KEY, code VARCHAR(50), name VARCHAR(100), hex VARCHAR(7), ); CREATE TABLE master_size ( id SERIAL PRIMARY KEY, code VARCHAR(50), name VARCHAR(100), description TEXT ); CREATE TABLE master_warehouse ( id SERIAL PRIMARY KEY, kode VARCHAR(50), name VARCHAR(100), type VARCHAR(50), address TEXT, stackholder VARCHAR(100), number VARCHAR(50), description TEXT ); CREATE TABLE master_product ( id SERIAL PRIMARY KEY, category_id INT REFERENCES master_product_category(id), collection_id INT REFERENCES master_collection(id), colour_id INT REFERENCES master_colour(id), size_id INT REFERENCES master_size(id), sku VARCHAR(50), name VARCHAR(100), description TEXT, price float, hpp float, unit_of_measure VARCHAR(50), is_raw_material BOOLEAN, is_finished_good BOOLEAN ); CREATE TABLE stock_movement ( id SERIAL PRIMARY KEY, product_id INT REFERENCES master_product(id), origin_warehouse_id INT REFERENCES master_warehouse(id), stock_type VARCHAR(50), destination_warehouse_id INT REFERENCES master_warehouse(id), date DATE, note TEXT ); CREATE TABLE master_product_componen ( id SERIAL PRIMARY KEY, product_id INT REFERENCES master_product(id), componen_id INT REFERENCES master_product(id), quantity NUMERIC, unit VARCHAR(10), note TEXT ); CREATE TABLE production_order ( id SERIAL PRIMARY KEY, product_id INT REFERENCES master_product(id), production_id INT REFERENCES master_warehouse(id), target_quantity NUMERIC, status VARCHAR(50), start_date DATE, end_date DATE, note TEXT ); CREATE TABLE customer ( id SERIAL PRIMARY KEY, name VARCHAR(100), address TEXT, phone VARCHAR(20), email VARCHAR(100), type VARCHAR(20), ); CREATE TABLE sales_order ( id SERIAL PRIMARY KEY, customer_id INT REFERENCES customer(id), order_date DATE, status VARCHAR(50), total_amount NUMERIC, note TEXT, payment_terms VARCHAR(100), due_date DATE ); CREATE TABLE sales_order_item ( id SERIAL PRIMARY KEY, sales_order_id INT REFERENCES sales_order(id), product_id INT REFERENCES master_product(id), quantity NUMERIC, unit_price NUMERIC, sub_total NUMERIC ); CREATE TABLE invoice ( id SERIAL PRIMARY KEY, sales_order_id INT REFERENCES sales_order(id), invoice_number VARCHAR(100), invoice_date DATE, due_date DATE, status VARCHAR(50), total_amount NUMERIC, note TEXT, is_dp_invoice BOOLEAN, is_full_invoice BOOLEAN, parent_invoice_id INT ); CREATE TABLE invoice_line ( id SERIAL PRIMARY KEY, invoice_id INT REFERENCES invoice(id), product_id INT REFERENCES master_product(id), quantity NUMERIC, unit_price NUMERIC, sub_total NUMERIC ); CREATE TABLE payment ( id SERIAL PRIMARY KEY, invoice_id INT REFERENCES invoice(id), payment_at TIMESTAMP, amount NUMERIC, payment_method VARCHAR(100), file_path VARCHAR(250), notes TEXT );