botserver/templates/erp.gbai/erp.gbdialog/tables.bas

509 lines
16 KiB
QBasic

' ERP Database Tables Definition
' This file defines all ERP tables using the TABLE keyword
' Tables cover inventory, purchasing, manufacturing, finance, and HR modules
' === INVENTORY MANAGEMENT ===
' Items/Products master table
TABLE items
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
item_code VARCHAR(50) UNIQUE NOT NULL
barcode VARCHAR(50) UNIQUE
name VARCHAR(255) NOT NULL
description TEXT
category VARCHAR(100)
subcategory VARCHAR(100)
unit_of_measure VARCHAR(20) DEFAULT 'EACH'
weight DECIMAL(10,3)
dimensions_length DECIMAL(10,2)
dimensions_width DECIMAL(10,2)
dimensions_height DECIMAL(10,2)
minimum_stock_level INTEGER DEFAULT 0
reorder_point INTEGER
reorder_quantity INTEGER
lead_time_days INTEGER DEFAULT 0
is_active BOOLEAN DEFAULT TRUE
is_purchasable BOOLEAN DEFAULT TRUE
is_saleable BOOLEAN DEFAULT TRUE
is_manufactured BOOLEAN DEFAULT FALSE
standard_cost DECIMAL(15,4)
last_cost DECIMAL(15,4)
average_cost DECIMAL(15,4)
selling_price DECIMAL(15,4)
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Warehouses table
TABLE warehouses
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
code VARCHAR(20) UNIQUE NOT NULL
name VARCHAR(100) NOT NULL
type VARCHAR(50) DEFAULT 'standard'
address TEXT
city VARCHAR(100)
state VARCHAR(50)
country VARCHAR(50)
postal_code VARCHAR(20)
contact_person VARCHAR(100)
contact_phone VARCHAR(50)
contact_email VARCHAR(100)
capacity_units INTEGER
current_occupancy INTEGER DEFAULT 0
is_active BOOLEAN DEFAULT TRUE
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' Inventory stock levels
TABLE inventory_stock
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
item_id UUID REFERENCES items(id)
warehouse_id UUID REFERENCES warehouses(id)
location_code VARCHAR(50)
quantity_on_hand DECIMAL(15,3) DEFAULT 0
quantity_reserved DECIMAL(15,3) DEFAULT 0
quantity_available DECIMAL(15,3) GENERATED ALWAYS AS (quantity_on_hand - quantity_reserved) STORED
quantity_on_order DECIMAL(15,3) DEFAULT 0
last_counted_date DATE
last_movement_date TIMESTAMP
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
UNIQUE(item_id, warehouse_id, location_code)
END TABLE
' Inventory transactions
TABLE inventory_transactions
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
transaction_type VARCHAR(50) NOT NULL
transaction_number VARCHAR(50) UNIQUE
item_id UUID REFERENCES items(id)
warehouse_id UUID REFERENCES warehouses(id)
location_code VARCHAR(50)
quantity DECIMAL(15,3) NOT NULL
unit_cost DECIMAL(15,4)
total_cost DECIMAL(15,2)
reference_type VARCHAR(50)
reference_id UUID
notes TEXT
created_by VARCHAR(100)
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' === PURCHASING MODULE ===
' Vendors/Suppliers table
TABLE vendors
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
vendor_code VARCHAR(50) UNIQUE NOT NULL
name VARCHAR(255) NOT NULL
legal_name VARCHAR(255)
tax_id VARCHAR(50)
vendor_type VARCHAR(50)
status VARCHAR(20) DEFAULT 'active'
rating INTEGER CHECK (rating >= 1 AND rating <= 5)
payment_terms VARCHAR(50)
credit_limit DECIMAL(15,2)
currency_code VARCHAR(3) DEFAULT 'USD'
address TEXT
city VARCHAR(100)
state VARCHAR(50)
country VARCHAR(50)
postal_code VARCHAR(20)
phone VARCHAR(50)
email VARCHAR(100)
website VARCHAR(255)
contact_person VARCHAR(100)
bank_account_number VARCHAR(50)
bank_name VARCHAR(100)
notes TEXT
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Purchase orders
TABLE purchase_orders
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
po_number VARCHAR(50) UNIQUE NOT NULL
vendor_id UUID REFERENCES vendors(id)
order_date DATE NOT NULL
expected_date DATE
status VARCHAR(50) DEFAULT 'draft'
buyer_id VARCHAR(100)
ship_to_warehouse_id UUID REFERENCES warehouses(id)
shipping_method VARCHAR(50)
payment_terms VARCHAR(50)
currency_code VARCHAR(3) DEFAULT 'USD'
exchange_rate DECIMAL(10,6) DEFAULT 1.0
subtotal DECIMAL(15,2)
tax_amount DECIMAL(15,2)
shipping_cost DECIMAL(15,2)
total_amount DECIMAL(15,2)
notes TEXT
approved_by VARCHAR(100)
approved_date TIMESTAMP
created_by VARCHAR(100)
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Purchase order lines
TABLE purchase_order_lines
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
po_id UUID REFERENCES purchase_orders(id) ON DELETE CASCADE
line_number INTEGER NOT NULL
item_id UUID REFERENCES items(id)
description TEXT
quantity_ordered DECIMAL(15,3) NOT NULL
quantity_received DECIMAL(15,3) DEFAULT 0
quantity_remaining DECIMAL(15,3) GENERATED ALWAYS AS (quantity_ordered - quantity_received) STORED
unit_price DECIMAL(15,4) NOT NULL
discount_percent DECIMAL(5,2) DEFAULT 0
tax_rate DECIMAL(5,2) DEFAULT 0
line_total DECIMAL(15,2) GENERATED ALWAYS AS (quantity_ordered * unit_price * (1 - discount_percent/100)) STORED
expected_date DATE
created_at TIMESTAMP DEFAULT NOW()
UNIQUE(po_id, line_number)
END TABLE
' === SALES MODULE ===
' Customers table
TABLE customers
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
customer_code VARCHAR(50) UNIQUE NOT NULL
name VARCHAR(255) NOT NULL
legal_name VARCHAR(255)
tax_id VARCHAR(50)
customer_type VARCHAR(50)
status VARCHAR(20) DEFAULT 'active'
credit_rating VARCHAR(10)
credit_limit DECIMAL(15,2)
payment_terms VARCHAR(50)
discount_percent DECIMAL(5,2) DEFAULT 0
currency_code VARCHAR(3) DEFAULT 'USD'
billing_address TEXT
shipping_address TEXT
city VARCHAR(100)
state VARCHAR(50)
country VARCHAR(50)
postal_code VARCHAR(20)
phone VARCHAR(50)
email VARCHAR(100)
website VARCHAR(255)
sales_person_id VARCHAR(100)
notes TEXT
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Sales orders
TABLE sales_orders
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
order_number VARCHAR(50) UNIQUE NOT NULL
customer_id UUID REFERENCES customers(id)
order_date DATE NOT NULL
required_date DATE
promised_date DATE
status VARCHAR(50) DEFAULT 'draft'
sales_person_id VARCHAR(100)
ship_from_warehouse_id UUID REFERENCES warehouses(id)
shipping_method VARCHAR(50)
payment_terms VARCHAR(50)
payment_method VARCHAR(50)
currency_code VARCHAR(3) DEFAULT 'USD'
exchange_rate DECIMAL(10,6) DEFAULT 1.0
subtotal DECIMAL(15,2)
discount_amount DECIMAL(15,2) DEFAULT 0
tax_amount DECIMAL(15,2)
shipping_cost DECIMAL(15,2)
total_amount DECIMAL(15,2)
notes TEXT
approved_by VARCHAR(100)
approved_date TIMESTAMP
created_by VARCHAR(100)
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Sales order lines
TABLE sales_order_lines
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
order_id UUID REFERENCES sales_orders(id) ON DELETE CASCADE
line_number INTEGER NOT NULL
item_id UUID REFERENCES items(id)
description TEXT
quantity_ordered DECIMAL(15,3) NOT NULL
quantity_shipped DECIMAL(15,3) DEFAULT 0
quantity_invoiced DECIMAL(15,3) DEFAULT 0
unit_price DECIMAL(15,4) NOT NULL
discount_percent DECIMAL(5,2) DEFAULT 0
tax_rate DECIMAL(5,2) DEFAULT 0
line_total DECIMAL(15,2) GENERATED ALWAYS AS (quantity_ordered * unit_price * (1 - discount_percent/100)) STORED
cost_of_goods_sold DECIMAL(15,2)
margin DECIMAL(15,2) GENERATED ALWAYS AS (line_total - cost_of_goods_sold) STORED
warehouse_id UUID REFERENCES warehouses(id)
promised_date DATE
created_at TIMESTAMP DEFAULT NOW()
UNIQUE(order_id, line_number)
END TABLE
' === MANUFACTURING MODULE ===
' Bill of Materials (BOM) header
TABLE bill_of_materials
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
bom_number VARCHAR(50) UNIQUE NOT NULL
item_id UUID REFERENCES items(id)
revision VARCHAR(20) DEFAULT 'A'
description TEXT
quantity_per_assembly DECIMAL(15,3) DEFAULT 1
unit_of_measure VARCHAR(20)
status VARCHAR(20) DEFAULT 'active'
effective_date DATE
expiration_date DATE
total_cost DECIMAL(15,4)
labor_cost DECIMAL(15,4)
overhead_cost DECIMAL(15,4)
created_by VARCHAR(100)
approved_by VARCHAR(100)
approved_date DATE
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' BOM components
TABLE bom_components
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
bom_id UUID REFERENCES bill_of_materials(id) ON DELETE CASCADE
component_item_id UUID REFERENCES items(id)
line_number INTEGER NOT NULL
quantity_required DECIMAL(15,6) NOT NULL
unit_of_measure VARCHAR(20)
scrap_percent DECIMAL(5,2) DEFAULT 0
total_quantity DECIMAL(15,6) GENERATED ALWAYS AS (quantity_required * (1 + scrap_percent/100)) STORED
cost_per_unit DECIMAL(15,4)
total_cost DECIMAL(15,4) GENERATED ALWAYS AS (total_quantity * cost_per_unit) STORED
notes TEXT
created_at TIMESTAMP DEFAULT NOW()
UNIQUE(bom_id, line_number)
END TABLE
' Work orders
TABLE work_orders
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
wo_number VARCHAR(50) UNIQUE NOT NULL
item_id UUID REFERENCES items(id)
bom_id UUID REFERENCES bill_of_materials(id)
quantity_to_produce DECIMAL(15,3) NOT NULL
quantity_completed DECIMAL(15,3) DEFAULT 0
quantity_scrapped DECIMAL(15,3) DEFAULT 0
status VARCHAR(50) DEFAULT 'planned'
priority VARCHAR(20) DEFAULT 'normal'
planned_start_date TIMESTAMP
planned_end_date TIMESTAMP
actual_start_date TIMESTAMP
actual_end_date TIMESTAMP
warehouse_id UUID REFERENCES warehouses(id)
work_center VARCHAR(50)
labor_hours_estimated DECIMAL(10,2)
labor_hours_actual DECIMAL(10,2)
notes TEXT
created_by VARCHAR(100)
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' === FINANCIAL MODULE ===
' General ledger accounts
TABLE gl_accounts
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
account_number VARCHAR(20) UNIQUE NOT NULL
account_name VARCHAR(100) NOT NULL
account_type VARCHAR(50) NOT NULL
parent_account_id UUID REFERENCES gl_accounts(id)
currency_code VARCHAR(3) DEFAULT 'USD'
normal_balance VARCHAR(10) CHECK (normal_balance IN ('debit', 'credit'))
is_active BOOLEAN DEFAULT TRUE
is_control_account BOOLEAN DEFAULT FALSE
allow_manual_entry BOOLEAN DEFAULT TRUE
description TEXT
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Journal entries header
TABLE journal_entries
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
journal_number VARCHAR(50) UNIQUE NOT NULL
journal_date DATE NOT NULL
posting_date DATE NOT NULL
period VARCHAR(20)
journal_type VARCHAR(50)
description TEXT
reference_type VARCHAR(50)
reference_number VARCHAR(50)
status VARCHAR(20) DEFAULT 'draft'
total_debit DECIMAL(15,2)
total_credit DECIMAL(15,2)
is_balanced BOOLEAN GENERATED ALWAYS AS (total_debit = total_credit) STORED
posted_by VARCHAR(100)
posted_at TIMESTAMP
reversed_by_id UUID REFERENCES journal_entries(id)
created_by VARCHAR(100)
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' Journal entry lines
TABLE journal_entry_lines
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
journal_entry_id UUID REFERENCES journal_entries(id) ON DELETE CASCADE
line_number INTEGER NOT NULL
account_id UUID REFERENCES gl_accounts(id)
debit_amount DECIMAL(15,2) DEFAULT 0
credit_amount DECIMAL(15,2) DEFAULT 0
description TEXT
dimension1 VARCHAR(50)
dimension2 VARCHAR(50)
dimension3 VARCHAR(50)
created_at TIMESTAMP DEFAULT NOW()
UNIQUE(journal_entry_id, line_number)
CHECK (debit_amount = 0 OR credit_amount = 0)
END TABLE
' Invoices
TABLE invoices
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
invoice_number VARCHAR(50) UNIQUE NOT NULL
invoice_type VARCHAR(20) DEFAULT 'standard'
customer_id UUID REFERENCES customers(id)
vendor_id UUID REFERENCES vendors(id)
order_id UUID
invoice_date DATE NOT NULL
due_date DATE NOT NULL
status VARCHAR(20) DEFAULT 'draft'
currency_code VARCHAR(3) DEFAULT 'USD'
exchange_rate DECIMAL(10,6) DEFAULT 1.0
subtotal DECIMAL(15,2)
discount_amount DECIMAL(15,2) DEFAULT 0
tax_amount DECIMAL(15,2)
total_amount DECIMAL(15,2)
amount_paid DECIMAL(15,2) DEFAULT 0
balance_due DECIMAL(15,2) GENERATED ALWAYS AS (total_amount - amount_paid) STORED
payment_terms VARCHAR(50)
notes TEXT
created_by VARCHAR(100)
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' === HUMAN RESOURCES MODULE ===
' Employees table
TABLE employees
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
employee_number VARCHAR(50) UNIQUE NOT NULL
first_name VARCHAR(100) NOT NULL
last_name VARCHAR(100) NOT NULL
middle_name VARCHAR(100)
full_name VARCHAR(255) GENERATED ALWAYS AS (first_name || ' ' || COALESCE(middle_name || ' ', '') || last_name) STORED
email VARCHAR(100) UNIQUE
phone VARCHAR(50)
mobile VARCHAR(50)
address TEXT
city VARCHAR(100)
state VARCHAR(50)
country VARCHAR(50)
postal_code VARCHAR(20)
date_of_birth DATE
gender VARCHAR(20)
marital_status VARCHAR(20)
national_id VARCHAR(50)
passport_number VARCHAR(50)
department_id UUID
position_title VARCHAR(100)
manager_id UUID REFERENCES employees(id)
hire_date DATE NOT NULL
employment_status VARCHAR(50) DEFAULT 'active'
employment_type VARCHAR(50) DEFAULT 'full-time'
salary DECIMAL(15,2)
hourly_rate DECIMAL(10,2)
commission_percent DECIMAL(5,2)
bank_account_number VARCHAR(50)
bank_name VARCHAR(100)
emergency_contact_name VARCHAR(100)
emergency_contact_phone VARCHAR(50)
notes TEXT
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Payroll records
TABLE payroll
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
payroll_number VARCHAR(50) UNIQUE NOT NULL
employee_id UUID REFERENCES employees(id)
pay_period_start DATE NOT NULL
pay_period_end DATE NOT NULL
payment_date DATE NOT NULL
hours_worked DECIMAL(10,2)
overtime_hours DECIMAL(10,2)
regular_pay DECIMAL(15,2)
overtime_pay DECIMAL(15,2)
commission DECIMAL(15,2)
bonus DECIMAL(15,2)
gross_pay DECIMAL(15,2)
tax_deductions DECIMAL(15,2)
other_deductions DECIMAL(15,2)
net_pay DECIMAL(15,2)
payment_method VARCHAR(50)
payment_reference VARCHAR(100)
status VARCHAR(20) DEFAULT 'pending'
approved_by VARCHAR(100)
approved_date TIMESTAMP
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' === SYSTEM TABLES ===
' Audit trail
TABLE erp_audit_log
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
table_name VARCHAR(50) NOT NULL
record_id UUID NOT NULL
action VARCHAR(20) NOT NULL
changed_fields JSONB
old_values JSONB
new_values JSONB
user_id VARCHAR(100)
user_ip VARCHAR(45)
user_agent TEXT
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' System settings
TABLE erp_settings
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
module VARCHAR(50) NOT NULL
setting_key VARCHAR(100) NOT NULL
setting_value TEXT
data_type VARCHAR(20)
description TEXT
is_encrypted BOOLEAN DEFAULT FALSE
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
UNIQUE(module, setting_key)
END TABLE
' Create indexes for performance
CREATE INDEX idx_inventory_item_warehouse ON inventory_stock(item_id, warehouse_id)
CREATE INDEX idx_po_vendor ON purchase_orders(vendor_id)
CREATE INDEX idx_po_status ON purchase_orders(status)
CREATE INDEX idx_so_customer ON sales_orders(customer_id)
CREATE INDEX idx_so_status ON sales_orders(status)
CREATE INDEX idx_wo_status ON work_orders(status)
CREATE INDEX idx_invoice_customer ON invoices(customer_id)
CREATE INDEX idx_invoice_status ON invoices(status)
CREATE INDEX idx_employee_manager ON employees(manager_id)
CREATE INDEX idx_journal_date ON journal_entries(journal_date)
CREATE INDEX idx_audit_table_record ON erp_audit_log(table_name, record_id)