BEGIN;

-- ============================================
-- FIX 1: Wawanesa model 28 — add missing match_label_param
-- ============================================
UPDATE account_reconcile_model
SET match_label = 'contains', match_label_param = 'WAWANESA'
WHERE id = 28 AND company_id = 1;

-- ============================================
-- FIX 2: IFS Insurance model 23 — remove HST (insurance is exempt)
-- ============================================
DELETE FROM account_reconcile_model_line_account_tax_rel
WHERE account_reconcile_model_line_id IN (
  SELECT id FROM account_reconcile_model_line WHERE model_id = 23
);

-- ============================================
-- NEW MODELS — each needs a model row + a line row (+ tax rel if HST)
-- ============================================

-- Helper: create models via INSERT
-- Personal Loan SPL → 6028 Car/Van Expenses + HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Personal Loan SPL"}', 1, 'auto_reconcile', 'contains', 'Personal Loan SPL', true, 100, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 497, 'percentage', 100, '100', '{"en_US": "Vehicle Finance Payment"}', 10, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line_account_tax_rel (account_reconcile_model_line_id, account_tax_id)
VALUES (currval('account_reconcile_model_line_id_seq'), 20);

-- Overdraft Fee → 6560 Bank Overdraft Charges, no HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Overdraft Fee"}', 1, 'auto_reconcile', 'contains', 'Overdraft', true, 101, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 558, 'percentage', 100, '100', '{"en_US": "Bank Overdraft Fee/Interest"}', 10, 2, 2, NOW(), NOW());

-- Overlimit Fee → 6560 Bank Overdraft Charges, no HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Overlimit Fee"}', 1, 'auto_reconcile', 'contains', 'OVERLIMIT', true, 102, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 558, 'percentage', 100, '100', '{"en_US": "Credit Card Overlimit Fee"}', 10, 2, 2, NOW(), NOW());

-- Transaction Fee → 6030 Bank Charges, no HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Bank Transaction Fee"}', 1, 'auto_reconcile', 'contains', 'transaction fee', true, 103, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 499, 'percentage', 100, '100', '{"en_US": "Bank Transaction Fee"}', 10, 2, 2, NOW(), NOW());

-- PAY-FILE FEES → 6030 Bank Charges, no HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "PAY-FILE Fee"}', 1, 'auto_reconcile', 'contains', 'PAY-FILE', true, 104, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 499, 'percentage', 100, '100', '{"en_US": "Payroll File Processing Fee"}', 10, 2, 2, NOW(), NOW());

-- MRCH Merchant Fees → 6030 Bank Charges, no HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Merchant MRCH Fee"}', 1, 'auto_reconcile', 'contains', 'MRCH', true, 105, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 499, 'percentage', 100, '100', '{"en_US": "Merchant Processing Fee"}', 10, 2, 2, NOW(), NOW());

-- Reliance Esso → 6026 Car Gas + HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Reliance Esso"}', 1, 'auto_reconcile', 'contains', 'RELIANCE ESSO', true, 106, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 552, 'percentage', 100, '100', '{"en_US": "Vehicle Fuel"}', 10, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line_account_tax_rel (account_reconcile_model_line_id, account_tax_id)
VALUES (currval('account_reconcile_model_line_id_seq'), 20);

-- Facebook Ads → 6025 Advertising, no HST (US company)
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Facebook Ads"}', 1, 'auto_reconcile', 'contains', 'facebook', true, 107, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 496, 'percentage', 100, '100', '{"en_US": "Facebook/Meta Advertising"}', 10, 2, 2, NOW(), NOW());

-- Cloudflare → 6050 IT Expenses, no HST (US company)
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Cloudflare"}', 1, 'auto_reconcile', 'contains', 'cloudflare', true, 108, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 495, 'percentage', 100, '100', '{"en_US": "Cloudflare Web Services"}', 10, 2, 2, NOW(), NOW());

-- Equifax → 6050 IT/Credit Check Expenses + HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Equifax"}', 1, 'auto_reconcile', 'contains', 'equifax', true, 109, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 495, 'percentage', 100, '100', '{"en_US": "Equifax Credit Check Service"}', 10, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line_account_tax_rel (account_reconcile_model_line_id, account_tax_id)
VALUES (currval('account_reconcile_model_line_id_seq'), 20);

-- GoDaddy → 6050 IT Expenses, no HST (US/QC, typically no ON HST)
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "GoDaddy"}', 1, 'auto_reconcile', 'contains', 'godaddy', true, 110, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 495, 'percentage', 100, '100', '{"en_US": "GoDaddy Domain/Hosting"}', 10, 2, 2, NOW(), NOW());

-- Clover App → 6563 Clover Fee + HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Clover POS"}', 1, 'auto_reconcile', 'contains', 'CLOVER', true, 111, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 570, 'percentage', 100, '100', '{"en_US": "Clover POS Monthly Fee"}', 10, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line_account_tax_rel (account_reconcile_model_line_id, account_tax_id)
VALUES (currval('account_reconcile_model_line_id_seq'), 20);

-- Google Workspace → 6050 IT Expenses + HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Google Workspace"}', 1, 'auto_reconcile', 'contains', 'GSUITE', true, 112, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 495, 'percentage', 100, '100', '{"en_US": "Google Workspace Subscription"}', 10, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line_account_tax_rel (account_reconcile_model_line_id, account_tax_id)
VALUES (currval('account_reconcile_model_line_id_seq'), 20);

-- Bell Maison Intelligente → 6050 IT/Smart Home + HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Bell Smart Home"}', 1, 'auto_reconcile', 'contains', 'bell maison', true, 113, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 495, 'percentage', 100, '100', '{"en_US": "Bell Smart Home/Security"}', 10, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line_account_tax_rel (account_reconcile_model_line_id, account_tax_id)
VALUES (currval('account_reconcile_model_line_id_seq'), 20);

-- CRA PAD → 2200 CRA Payroll Tax Liabilities, no HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "CRA PAD Payment"}', 1, 'auto_reconcile', 'contains', 'ccra canada', true, 114, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 17, 'percentage', 100, '100', '{"en_US": "CRA Payroll Remittance"}', 10, 2, 2, NOW(), NOW());

-- Device Protection → 6558 Commercial Insurance, no HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Device Protection"}', 1, 'auto_reconcile', 'contains', 'device protection', true, 115, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 550, 'percentage', 100, '100', '{"en_US": "Device Protection Insurance"}', 10, 2, 2, NOW(), NOW());

-- Elavon PAD Fee (Scotia) → 6030 Bank Charges, no HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Elavon Merchant Fee"}', 1, 'auto_reconcile', 'contains', 'Elavon Mrch Svc', true, 116, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 499, 'percentage', 100, '100', '{"en_US": "Elavon Merchant Service Fee"}', 10, 2, 2, NOW(), NOW());

-- WSIB → need to check what account WSIB uses
-- Investment MERCH PAD → 6050 IT Expenses + HST (based on historical coding)
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Investment Merchant PAD"}', 1, 'auto_reconcile', 'contains', 'Investment MERCH', true, 117, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 495, 'percentage', 100, '100', '{"en_US": "Merchant Investment PAD"}', 10, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line_account_tax_rel (account_reconcile_model_line_id, account_tax_id)
VALUES (currval('account_reconcile_model_line_id_seq'), 20);

-- Debit Memo Loan Payment → 6028 Car/Van Expenses + HST (same as Personal Loan SPL)
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Debit Memo Loan"}', 1, 'auto_reconcile', 'contains', 'debit memo loan', true, 118, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 497, 'percentage', 100, '100', '{"en_US": "Vehicle Loan Payment"}', 10, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line_account_tax_rel (account_reconcile_model_line_id, account_tax_id)
VALUES (currval('account_reconcile_model_line_id_seq'), 20);

-- Prime Video → 6070 Dues and Subscriptions + HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Prime Video"}', 1, 'auto_reconcile', 'contains', 'prime video', true, 119, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 501, 'percentage', 100, '100', '{"en_US": "Amazon Prime Video Subscription"}', 10, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line_account_tax_rel (account_reconcile_model_line_id, account_tax_id)
VALUES (currval('account_reconcile_model_line_id_seq'), 20);

-- Canada Post (via Visa) → 8010 Shipping + HST
INSERT INTO account_reconcile_model (name, company_id, trigger, match_label, match_label_param, can_be_proposed, sequence, active, create_uid, write_uid, create_date, write_date)
VALUES ('{"en_US": "Canada Post Visa"}', 1, 'auto_reconcile', 'contains', 'canada post', true, 120, true, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line (model_id, company_id, account_id, amount_type, amount, amount_string, label, sequence, create_uid, write_uid, create_date, write_date)
VALUES (currval('account_reconcile_model_id_seq'), 1, 518, 'percentage', 100, '100', '{"en_US": "Canada Post Shipping"}', 10, 2, 2, NOW(), NOW());
INSERT INTO account_reconcile_model_line_account_tax_rel (account_reconcile_model_line_id, account_tax_id)
VALUES (currval('account_reconcile_model_line_id_seq'), 20);

COMMIT;
