Files
Aislo/B08_wf5_Quantity/B08_wf5_Quantity_Database_Calculation.py
T

39 lines
2.6 KiB
Python

CALCULATION_DDL = (
"""CREATE TABLE IF NOT EXISTS b08_calculation_runs (
id CHAR(36) PRIMARY KEY, project_id CHAR(36) NOT NULL, calculation_type VARCHAR(30) NOT NULL,
basis_version VARCHAR(50) NOT NULL, price_version VARCHAR(50) NOT NULL,
quantity_version INT NOT NULL, rule_version VARCHAR(50) NOT NULL,
input_hash CHAR(64) NOT NULL, status VARCHAR(20) NOT NULL,
error_json LONGTEXT NOT NULL, created_by BIGINT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY ix_b08_calc_run(project_id,created_at))""",
"""CREATE TABLE IF NOT EXISTS b08_calculation_inputs (
id BIGINT AUTO_INCREMENT PRIMARY KEY, run_id CHAR(36) NOT NULL,
input_type VARCHAR(30) NOT NULL, reference_id VARCHAR(80) NOT NULL,
snapshot_json LONGTEXT NOT NULL, KEY ix_b08_calc_input(run_id))""",
"""CREATE TABLE IF NOT EXISTS b08_estimate_lines (
id BIGINT AUTO_INCREMENT PRIMARY KEY, run_id CHAR(36) NOT NULL,
quantity_item_id CHAR(36) NOT NULL, wbs_id CHAR(36) NOT NULL,
quantity DECIMAL(20,6) NOT NULL, unit_labor DECIMAL(20,4) NOT NULL,
unit_material DECIMAL(20,4) NOT NULL, unit_expense DECIMAL(20,4) NOT NULL,
labor_amount BIGINT NOT NULL, material_amount BIGINT NOT NULL,
expense_amount BIGINT NOT NULL, total_amount BIGINT NOT NULL,
trace_json LONGTEXT NOT NULL, KEY ix_b08_estimate_line(run_id,wbs_id))""",
"""CREATE TABLE IF NOT EXISTS b08_cost_aggregates (
id BIGINT AUTO_INCREMENT PRIMARY KEY, run_id CHAR(36) NOT NULL,
aggregate_type VARCHAR(30) NOT NULL, group_key VARCHAR(100) NOT NULL,
labor_amount BIGINT NOT NULL, material_amount BIGINT NOT NULL,
expense_amount BIGINT NOT NULL, total_amount BIGINT NOT NULL,
UNIQUE KEY uq_b08_aggregate(run_id,aggregate_type,group_key))""",
"""CREATE TABLE IF NOT EXISTS b08_indirect_cost_results (
id BIGINT AUTO_INCREMENT PRIMARY KEY, run_id CHAR(36) NOT NULL,
rule_code VARCHAR(80) NOT NULL, base_amount BIGINT NOT NULL,
rate_value DECIMAL(20,10) NULL, result_amount BIGINT NOT NULL,
trace_json LONGTEXT NOT NULL, sort_order INT NOT NULL,
UNIQUE KEY uq_b08_indirect(run_id,rule_code))""",
"""CREATE TABLE IF NOT EXISTS b08_final_cost_results (
run_id CHAR(36) PRIMARY KEY, direct_cost BIGINT NOT NULL, net_cost BIGINT NOT NULL,
general_admin BIGINT NOT NULL, profit BIGINT NOT NULL, total_cost BIGINT NOT NULL,
vat BIGINT NOT NULL, contract_cost BIGINT NOT NULL, government_material BIGINT NOT NULL,
procurement_fee BIGINT NOT NULL, total_project_cost BIGINT NOT NULL,
trace_json LONGTEXT NOT NULL)""",
)