Files
acmcc/supabase/migrations/20260602150000_accounting_bridgewater_opening_equity.sql
admin 96de47496a Reconcile imported-GL companies: Bridgewater opening equity + scope R7/R8
Bridgewater's GL was imported as single-sided postings missing its opening fund
balance, leaving the trial balance off by 130,348.76 with an abnormal debit
equity balance. Record the gap as an Opening Fund Balance equity credit (migration
20260602150000); R1 and the Balance Sheet now tie out exactly.

A/R-A/P sub-ledger checks (R7/R8) only apply to platform-managed companies whose
invoices/bills post to the GL. Imported-GL companies (Bent Oak, Bridgewater) keep
their own AR/AP, so scope R7/R8 to gl_managed companies (new arApApplicable flag
on reconcile + gl_auto_post surfaced in useReportData). Every company now passes
the Reconciliation report.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 02:14:25 -04:00

79 lines
3.8 KiB
SQL

-- Bridgewater: record the missing opening fund balance as equity.
--
-- Bridgewater's GL was imported as ~22,300 single-sided postings (a transaction
-- register, not double-entry pairs). As a result the trial balance is internally
-- unbalanced: total debits exceed total credits by exactly 130,348.76, and equity
-- carries an abnormal debit balance. The signature is an import that brought in all
-- the ACTIVITY (assets, income, expense, etc.) but never the opening fund balance /
-- carried-forward equity from the prior system (Bridgewater has zero
-- opening_balances rows).
--
-- Per the owner's decision, attribute the gap to opening equity: post the missing
-- offsetting credit to an "Opening Fund Balance" equity account. Because the rest of
-- the imported GL is single-sided, the balancing leg is a single credit line whose
-- offsetting debits are already embedded in the imported asset/activity postings.
-- After this, total debits = total credits (R1 = 0) and the Balance Sheet balances:
-- Assets 731,193.60 = Liabilities 33,043.72 + Equity 90,210.00 + Net income 607,939.88.
--
-- Idempotent and reversible: keyed by external_source 'acmacc_bw_opening'; re-running
-- recomputes from the current imbalance. To undo, delete the JE/account with that key.
do $$
declare _c uuid; _eq uuid; _je uuid; _dt date; _imb numeric;
begin
select id into _c from accounting.companies where name like 'Bridgewater%';
if _c is null then raise exception 'Bridgewater company not found'; end if;
-- Remove any prior balancing entry so we recompute from the live imbalance.
delete from accounting.journal_entry_lines jl
using accounting.journal_entries je
where jl.journal_entry_id = je.id
and je.company_id = _c and je.external_source = 'acmacc_bw_opening';
delete from accounting.journal_entries
where company_id = _c and external_source = 'acmacc_bw_opening';
-- Exact imported-GL imbalance (debits - credits).
select round(sum(jl.debit) - sum(jl.credit), 2) into _imb
from accounting.journal_entry_lines jl
join accounting.journal_entries je on je.id = jl.journal_entry_id
where je.company_id = _c;
if _imb is null or _imb = 0 then
raise notice 'Bridgewater GL already balanced; nothing to post.';
return;
end if;
-- Opening date = earliest GL date (so it reads as a brought-forward balance).
select min(je.date) into _dt from accounting.journal_entries je where je.company_id = _c;
-- Find or create the Opening Fund Balance equity account.
select id into _eq from accounting.accounts
where company_id = _c and type = 'equity'
and (external_source = 'acmacc_bw_opening' or name = 'Opening Fund Balance')
limit 1;
if _eq is null then
insert into accounting.accounts (company_id, code, name, type, description, external_source, external_id)
values (_c, '3900', 'Opening Fund Balance', 'equity',
'Carried-forward fund balance not included in the original GL import.',
'acmacc_bw_opening', 'equity')
returning id into _eq;
end if;
-- Post the missing opening equity. Imbalance is debits>credits, so we add a credit
-- (a debit imbalance would add a debit instead).
insert into accounting.journal_entries (company_id, date, description, external_source, external_id)
values (_c, coalesce(_dt, current_date), 'Opening fund balance (carried forward, not in original import)',
'acmacc_bw_opening', 'gap')
returning id into _je;
if _imb > 0 then
insert into accounting.journal_entry_lines (journal_entry_id, account_id, debit, credit, description)
values (_je, _eq, 0, _imb, 'Opening fund balance');
else
insert into accounting.journal_entry_lines (journal_entry_id, account_id, debit, credit, description)
values (_je, _eq, -_imb, 0, 'Opening fund balance');
end if;
raise notice 'Bridgewater opening fund balance posted: %', _imb;
end$$;