- public.bills.line_items + line-aware accounting mirror (one bill_item per
Buildium line with its mapped platform account)
- buildium-sync bills: strict per-line resolution through
buildium_gl_account_links (unmapped -> bill held + flagged); pulls
/bills/{id}/payments (check#, bank, date) and /bankaccounts/{id}/checks
(one-off checks become paid bill+payment pairs)
- import-mode companies get direct JEs (buildium_bill Dr expense/Cr AP,
buildium_billpay Dr AP/Cr mapped bank) + cleared register rows; sets
buildium_gl.exclude_ap so the nightly GL pull skips Bill/Bill Payment/Check
- buildium-gl-sync: exclude_ap transaction-type filter; preserve buildium_gl
config keys when advancing the watermark
- Settings: Pull Bills & Expenses card with held/unmapped reporting
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add missing indexes on journal_entry_lines (journal_entry_id, account_id)
and journal_entries (company_id, date): Bridgewater's ledger query took
7.5s, blew the 8s statement timeout, and rendered the JE/GL pages empty
- Paginate JE/GL page fetches past the 1000-row PostgREST cap (shared
fetchJournalEntries helper) and surface query errors instead of
swallowing them into an empty list
- New buildium-gl-sync edge function (scheduled nightly via pg_cron):
incrementally pulls new Buildium GL activity into accounting journal
entries via GET /v1/generalledger, reconstructing double-entry JEs by
grouping per-account entries by transaction id; watermark + 14-day
overlap window, dedupe on (company_id, external_source, external_id),
account mapping by external_id/code/name with auto-create for new
Buildium accounts
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>