|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS predictions_log; |
|
|
DROP TABLE IF EXISTS business_code_aggregates; |
|
|
DROP TABLE IF EXISTS payment_terms_aggregates; |
|
|
DROP TABLE IF EXISTS customer_aggregates; |
|
|
DROP TABLE IF EXISTS invoices_history; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE invoices_history ( |
|
|
invoice_id INTEGER PRIMARY KEY, |
|
|
business_code TEXT NOT NULL, |
|
|
cust_number TEXT NOT NULL, |
|
|
name_customer TEXT, |
|
|
|
|
|
|
|
|
posting_date TEXT NOT NULL, |
|
|
document_create_date TEXT, |
|
|
document_create_date_alt TEXT, |
|
|
due_in_date TEXT, |
|
|
baseline_create_date TEXT, |
|
|
clear_date TEXT, |
|
|
|
|
|
|
|
|
total_open_amount REAL NOT NULL, |
|
|
invoice_currency TEXT DEFAULT 'USD', |
|
|
|
|
|
|
|
|
document_type TEXT, |
|
|
cust_payment_terms TEXT, |
|
|
posting_id REAL, |
|
|
is_open INTEGER DEFAULT 1, |
|
|
business_year INTEGER, |
|
|
|
|
|
|
|
|
days_to_clear INTEGER, |
|
|
days_posting_to_due INTEGER, |
|
|
days_create_to_posting INTEGER, |
|
|
days_baseline_to_posting INTEGER, |
|
|
is_overdue INTEGER DEFAULT 0, |
|
|
|
|
|
|
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP, |
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP |
|
|
); |
|
|
|
|
|
CREATE INDEX idx_invoices_cust ON invoices_history(cust_number); |
|
|
CREATE INDEX idx_invoices_posting ON invoices_history(posting_date); |
|
|
CREATE INDEX idx_invoices_cleared ON invoices_history(cust_number, posting_date) WHERE clear_date IS NOT NULL; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE customer_aggregates ( |
|
|
cust_number TEXT PRIMARY KEY, |
|
|
cust_invoice_count INTEGER DEFAULT 0, |
|
|
cust_cleared_count INTEGER DEFAULT 0, |
|
|
|
|
|
cust_avg_days REAL, |
|
|
cust_median_days REAL, |
|
|
cust_std_days REAL, |
|
|
cust_min_days INTEGER, |
|
|
cust_max_days INTEGER, |
|
|
|
|
|
cust_avg_amount REAL, |
|
|
cust_total_amount REAL, |
|
|
cust_pct_overdue REAL DEFAULT 0.0, |
|
|
|
|
|
most_common_payment_term TEXT, |
|
|
most_common_business_code TEXT, |
|
|
most_common_currency TEXT, |
|
|
|
|
|
last_computed_at TEXT DEFAULT CURRENT_TIMESTAMP, |
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP |
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE payment_terms_aggregates ( |
|
|
cust_payment_terms TEXT PRIMARY KEY, |
|
|
payment_terms_avg_days REAL, |
|
|
payment_terms_median_days REAL, |
|
|
payment_terms_count INTEGER DEFAULT 0, |
|
|
last_computed_at TEXT DEFAULT CURRENT_TIMESTAMP |
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE business_code_aggregates ( |
|
|
business_code TEXT PRIMARY KEY, |
|
|
business_avg_days REAL, |
|
|
business_median_days REAL, |
|
|
business_count INTEGER DEFAULT 0, |
|
|
last_computed_at TEXT DEFAULT CURRENT_TIMESTAMP |
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE predictions_log ( |
|
|
prediction_id INTEGER PRIMARY KEY AUTOINCREMENT, |
|
|
invoice_id INTEGER, |
|
|
cust_number TEXT NOT NULL, |
|
|
posting_date TEXT NOT NULL, |
|
|
total_open_amount REAL NOT NULL, |
|
|
business_code TEXT, |
|
|
cust_payment_terms TEXT, |
|
|
|
|
|
predicted_days_to_clear REAL NOT NULL, |
|
|
predicted_clear_date TEXT NOT NULL, |
|
|
|
|
|
model_version TEXT, |
|
|
features_json TEXT, |
|
|
|
|
|
actual_clear_date TEXT, |
|
|
actual_days_to_clear INTEGER, |
|
|
prediction_error REAL, |
|
|
absolute_error REAL, |
|
|
|
|
|
predicted_at TEXT DEFAULT CURRENT_TIMESTAMP |
|
|
); |
|
|
|
|
|
CREATE INDEX idx_predictions_cust ON predictions_log(cust_number); |
|
|
CREATE INDEX idx_predictions_date ON predictions_log(predicted_at); |