Settings → Integrations → QuickBooks
(apps/web/src/app/(authenticated)/settings/(shell)/integrations/quickbooks/)
drives OAuth connection state (QBOConnectionContent) and sync
preferences (qbo-sync-preferences.tsx). Once connected, sync logic
(apps/web/src/lib/quickbooks/) covers invoice push and delivery,
customer sync, payment sync and reconciliation, and invoice/payment
repair. An invoice generated before QuickBooks is connected can't sync;
see Troubleshooting for the "QuickBooks
integration is not connected" error thrown from invoice PDF generation.
TODO(owner, likely integrations): write the full guide covering what
syncs automatically versus on demand, how invoice-matching/ reconciles
existing QuickBooks records against solarOS invoices, and what
hold-reasons.ts surfaces when a sync is blocked.