From 0230670bdc6b38114da11be53072373c0a908eb2 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Tue, 12 May 2026 20:10:47 -0400 Subject: [PATCH] feat(nexa_coa_setup): renumber l10n_ca bank/AR/AP/tax legacy accounts to 4-digit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Final batch of code conversions — 12 l10n_ca accounts that we kept active because they have historical postings. Renaming preserves all FK references (account_id stays the same), just changes the displayed code. 112005 Scotia Current 9309 -> 1010 (primary operating bank) 112004 BMO -> 1030 112007 RBC -> 1040 112008 Scotia Credit Card 5890 -> 1070 112006 RBC VISA -> 1071 112002 Outstanding Receipts -> 1080 (in-transit receipts) 112003 Outstanding Payments -> 1081 (in-transit payments) 112001 Bank Suspense Account -> 1090 115100 Customers Account -> 1100 (AR control) 118310 HST receivable - 13% -> 1215 (legacy HST receivable, near new 1210 ITC) 211100 Vendors Account -> 2010 (AP control) 213310 HST to pay - 13% -> 2115 (legacy HST collected, near new 2110) Verification: 140/140 active accounts now use 4-digit codes. All four end-to-end test invoices still post correctly. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../scripts/convert_l10nca_to_4digit.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 nexa_coa_setup/scripts/convert_l10nca_to_4digit.py diff --git a/nexa_coa_setup/scripts/convert_l10nca_to_4digit.py b/nexa_coa_setup/scripts/convert_l10nca_to_4digit.py new file mode 100644 index 00000000..811f327a --- /dev/null +++ b/nexa_coa_setup/scripts/convert_l10nca_to_4digit.py @@ -0,0 +1,34 @@ +"""Rename the l10n_ca bank/AR/AP/tax legacy accounts to 4-digit codes.""" +LEGACY_MAP = [ + # (old_code, new_code, expected_name_substring) + ("112005", "1010", "Scotia Current"), # Primary operating (most-used) + ("112004", "1030", "BMO"), # BMO bank + ("112007", "1040", "RBC"), # RBC bank (NOT visa) + ("112008", "1070", "Scotia Credit Card"), # Scotia CC + ("112006", "1071", "RBC VISA"), # RBC visa + ("112002", "1080", "Outstanding Receipts"), # In-transit receipts + ("112003", "1081", "Outstanding Payments"), # In-transit payments + ("112001", "1090", "Bank Suspense"), # Catch-all suspense + ("115100", "1100", "Customers Account"), # AR control + ("118310", "1215", "HST receivable - 13%"), # Legacy 13% HST receivable (near new 1210) + ("211100", "2010", "Vendors Account"), # AP control + ("213310", "2115", "HST to pay - 13%"), # Legacy 13% HST collected (near new 2110) +] +ok = 0; skipped = 0; missing = 0 +for old, new, hint in LEGACY_MAP: + acc = env['account.account'].search([('code', '=', old)], limit=1) + if not acc: + print(f"MISS {old} -> {new}: not found") + missing += 1; continue + if hint.lower() not in (acc.name or '').lower(): + print(f"SKIP {old} -> {new}: name '{acc.name}' doesn't match '{hint}'") + skipped += 1; continue + conflict = env['account.account'].with_context(active_test=False).search([('code', '=', new)], limit=1) + if conflict: + print(f"SKIP {old} -> {new}: target occupied by {conflict.name}") + skipped += 1; continue + acc.code = new + ok += 1 + print(f"OK {old} -> {new}: {acc.name}") +print(f">>> Renumbered {ok}, skipped {skipped}, missing {missing} of {len(LEGACY_MAP)}") +env.cr.commit()