Dipan04's picture
Deploy Invoice Digitization Agent
8a859a8
-- ============================================
-- Invoice Payment Prediction System - SQLite Schema
-- Version: 1.0 (SQLite)
-- ============================================
-- Drop existing tables
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;
-- ============================================
-- Table 1: invoices_history
-- ============================================
CREATE TABLE invoices_history (
invoice_id INTEGER PRIMARY KEY,
business_code TEXT NOT NULL,
cust_number TEXT NOT NULL,
name_customer TEXT,
-- Dates (stored as TEXT in ISO format: YYYY-MM-DD HH:MM:SS)
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,
-- Financial
total_open_amount REAL NOT NULL,
invoice_currency TEXT DEFAULT 'USD',
-- Metadata
document_type TEXT,
cust_payment_terms TEXT,
posting_id REAL,
is_open INTEGER DEFAULT 1,
business_year INTEGER,
-- Computed fields
days_to_clear INTEGER,
days_posting_to_due INTEGER,
days_create_to_posting INTEGER,
days_baseline_to_posting INTEGER,
is_overdue INTEGER DEFAULT 0,
-- Audit
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;
-- ============================================
-- Table 2: customer_aggregates
-- ============================================
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
);
-- ============================================
-- Table 3: payment_terms_aggregates
-- ============================================
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
);
-- ============================================
-- Table 4: business_code_aggregates
-- ============================================
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
);
-- ============================================
-- Table 5: predictions_log
-- ============================================
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);