--liquibase formatted sql --changeset panel:app-005a-payroll-settings endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='payroll_settings' CREATE TABLE payroll_settings ( tenant_id INTEGER NOT NULL PRIMARY KEY, loan_commission_enabled INTEGER NOT NULL DEFAULT 1, loan_commission_pct REAL NOT NULL DEFAULT 10, loan_small_max REAL NOT NULL DEFAULT 500 ); --changeset panel:app-005b-payroll-weeks endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='payroll_weeks' CREATE TABLE payroll_weeks ( id INTEGER PRIMARY KEY AUTOINCREMENT, week_start TEXT NOT NULL, week_end TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'draft' CHECK (status IN ('draft', 'assembled', 'paid')), required_net REAL NOT NULL DEFAULT 0, payable_net REAL NOT NULL DEFAULT 0, assembled_at TEXT, paid_at TEXT, tenant_id INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL DEFAULT (datetime('now')) ); CREATE UNIQUE INDEX idx_payroll_weeks_tenant_start ON payroll_weeks(tenant_id, week_start); --changeset panel:app-005c-payroll-sheets endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='payroll_sheets' CREATE TABLE payroll_sheets ( id INTEGER PRIMARY KEY AUTOINCREMENT, week_id INTEGER NOT NULL REFERENCES payroll_weeks(id) ON DELETE CASCADE, kind TEXT NOT NULL CHECK (kind IN ('obra', 'destajo', 'admin')), project_id INTEGER REFERENCES projects(id) ); CREATE UNIQUE INDEX idx_payroll_sheets_week_kind_project ON payroll_sheets(week_id, kind, IFNULL(project_id, 0)); --changeset panel:app-005d-payroll-week-lines endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='payroll_week_lines' CREATE TABLE payroll_week_lines ( id INTEGER PRIMARY KEY AUTOINCREMENT, sheet_id INTEGER NOT NULL REFERENCES payroll_sheets(id) ON DELETE CASCADE, worker_id INTEGER NOT NULL REFERENCES workers(id), destajo_cut_line_id INTEGER, project_id INTEGER REFERENCES projects(id), days REAL NOT NULL DEFAULT 0, daily_wage REAL NOT NULL DEFAULT 0, qty_planned REAL NOT NULL DEFAULT 0, qty_actual REAL NOT NULL DEFAULT 0, qty_extra REAL NOT NULL DEFAULT 0, unit_price REAL NOT NULL DEFAULT 0, unit_code TEXT, concepto TEXT, amount REAL NOT NULL DEFAULT 0, gross REAL NOT NULL DEFAULT 0, discounts REAL NOT NULL DEFAULT 0, loan_id INTEGER REFERENCES loans(id), loan_discount REAL NOT NULL DEFAULT 0, loan_label TEXT, required_net REAL NOT NULL DEFAULT 0, payable_net REAL NOT NULL DEFAULT 0 ); --changeset panel:app-005e-destajo-units endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='destajo_units' CREATE TABLE destajo_units ( id INTEGER PRIMARY KEY AUTOINCREMENT, tenant_id INTEGER NOT NULL DEFAULT 0, code TEXT NOT NULL, label TEXT NOT NULL, UNIQUE (tenant_id, code) ); --changeset panel:app-005f-destajo-periods endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='destajo_periods' CREATE TABLE destajo_periods ( id INTEGER PRIMARY KEY AUTOINCREMENT, period_start TEXT NOT NULL, period_end TEXT NOT NULL, week_id INTEGER NOT NULL REFERENCES payroll_weeks(id) ON DELETE CASCADE, tenant_id INTEGER NOT NULL DEFAULT 0, UNIQUE (tenant_id, period_end) ); --changeset panel:app-005g-destajo-jobs endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='destajo_jobs' CREATE TABLE destajo_jobs ( id INTEGER PRIMARY KEY AUTOINCREMENT, project_id INTEGER NOT NULL REFERENCES projects(id), worker_id INTEGER NOT NULL REFERENCES workers(id), concepto TEXT NOT NULL, unit_code TEXT NOT NULL, qty_total_estimated REAL NOT NULL, unit_price REAL NOT NULL, status TEXT NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'done')), tenant_id INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL DEFAULT (datetime('now')) ); --changeset panel:app-005h-destajo-cut-lines endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='destajo_cut_lines' CREATE TABLE destajo_cut_lines ( id INTEGER PRIMARY KEY AUTOINCREMENT, period_id INTEGER NOT NULL REFERENCES destajo_periods(id) ON DELETE CASCADE, job_id INTEGER NOT NULL REFERENCES destajo_jobs(id) ON DELETE CASCADE, qty_planned REAL NOT NULL DEFAULT 0, qty_actual REAL NOT NULL DEFAULT 0, qty_extra REAL NOT NULL DEFAULT 0, UNIQUE (period_id, job_id) ); --changeset panel:app-005i-loan-payments endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='loan_payments' CREATE TABLE loan_payments ( id INTEGER PRIMARY KEY AUTOINCREMENT, loan_id INTEGER NOT NULL REFERENCES loans(id) ON DELETE CASCADE, week_id INTEGER NOT NULL REFERENCES payroll_weeks(id), amount REAL NOT NULL, installment_n INTEGER NOT NULL DEFAULT 1, label TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now')) ); --changeset panel:app-005j-loans-delivered endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM pragma_table_info('loans') WHERE name='delivered' ALTER TABLE loans ADD COLUMN delivered REAL NOT NULL DEFAULT 0; --changeset panel:app-005k-loans-commission-pct endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM pragma_table_info('loans') WHERE name='commission_pct' ALTER TABLE loans ADD COLUMN commission_pct REAL NOT NULL DEFAULT 0; --changeset panel:app-005l-loans-commission-amount endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM pragma_table_info('loans') WHERE name='commission_amount' ALTER TABLE loans ADD COLUMN commission_amount REAL NOT NULL DEFAULT 0; --changeset panel:app-005m-loans-plan endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM pragma_table_info('loans') WHERE name='plan' ALTER TABLE loans ADD COLUMN plan TEXT NOT NULL DEFAULT 'single'; --changeset panel:app-005n-loans-installments endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM pragma_table_info('loans') WHERE name='installments_n' ALTER TABLE loans ADD COLUMN installments_n INTEGER NOT NULL DEFAULT 1; --changeset panel:app-005o-loans-first-due endDelimiter:; --preconditions onFail:MARK_RAN --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM pragma_table_info('loans') WHERE name='first_due' ALTER TABLE loans ADD COLUMN first_due TEXT; --changeset panel:app-005p-loans-migrate-delivered endDelimiter:; UPDATE loans SET delivered = amount WHERE delivered = 0 AND amount > 0;