{# QuickBooks Account Mapping v2 (Spec 048 - PRD F17) #} {# Built on the shared admin-ui-kit (.aui-page primitives) + a page-specific stylesheet for the field-mapping table, account picker, nature pill and sandbox strip. #} {% set page_group = "quickbooks" %} {% include 'components/head.html' %} {# Shared admin UI kit (tokens + primitives) #} {# Page-specific stylesheet — scoped under .qbam #}
{% include 'components/nav-account.html' %}
{% include 'components/alerts.html' %} {# Account Mapping v2 root — combines the shared kit + page-specific classes. #}
{# Sandbox status is conveyed by the env badge in the header — no separate banner needed (matched dashboard.html cleanup). #}
{# Page header — kit primitive #}

Account Mapping

{{ typeNum|upper }}

Map each POS field to the QuickBooks account it should post to. The daily-close sync will be blocked until critical payment and sales fields are mapped.

0 / 0
fields mapped
{# Toolbar — kit primitives #}
{# Sticky section nav (tabs) — page-specific #} {# AI thinking strip — shown only while a /suggest/ai call is in flight. OpenAI can take 1-2 min under load; give the user a visible signal that something is happening so they don't think the button broke. #}
AI is analyzing your unmapped fields. This can take up to a minute or two — feel free to keep working on the page; suggestions will appear when ready.
{# Suggestions banner — page-specific. Hidden until backend supports auto-suggest. #} {# Loading state #}
Loading mappings…
{# Sections (one per category — rendered as .aui-panel cards by JS) #} {# Empty state (search returned nothing) #}
{% include 'components/footer.html' %}
{# Toast container — page-local so QBAM doesn't depend on the shared admin alerts container (which isn't included on this layout). #}
{# Review modal — populated by JS when user clicks "Review" on the suggestions banner. #} {# Bump ?v= whenever account-mapping.js changes — manual cache-bust. #}