Review kit parity map #
Classification: Restricted (describes source code structure).
Feature-by-feature and field-by-field map of what the review shows today onto the kit mechanism that carries it, with the status of each row and an Approved column for the owners (Estu, Koki, Ryota). The review core’s fixtures cite rows as “parity n”. Companion to the Review Kit ADR and the inventory.
Sources: the i18n labels of 22 review namespaces (config/i18n/en/webapp.json), the BS editor API (ui-v2/bank-statement/core/types.ts, intl/labels.ts), the onboarding cards, and the 6 YAML files in config/extraction_fields/. Written 2026-10-21.
Type TW = the tofu-web product review page (/entities/{slug}/review), added 2026-10-22: the kit is used there too, not only in onboarding.
Status: covered = in the kit or SheetGrid today, or plain props · sheetgrid-ext = a SheetGrid extension (#6003) · new-presenter = a small new presenter in ui-v2 · container = outside the kit, the container’s job · backend = needs bonsapi data · dropped = deliberately not carried over.
Features (94) #
| # | Area | Feature | Types | Kit mechanism | Status | Source | Approved |
|---|---|---|---|---|---|---|---|
| 1 | Document | Type title + status badge (Draft, Needs review, Ready, Done, Verified, Published, Exported, Deleted, Pending deletion) | AP AR DE CN BS | ReviewHeader ← header.status | covered | review.shared.header, bank-statement labels | |
| 2 | Document | Previous / Next document, Copy link | AP AR DE CN BS | ReviewHeader.actions (navigation from the container) | covered | review.shared.header | |
| 3 | Document | Knowledge panel | AP AR DE CN BS | ReviewHeader.actions → the container opens the panel outside the kit | container | review.shared.header | |
| 4 | Document | Menu … : Extract / Re-extract, Later, Export / Re-export, Edit / Exit editing, Delete, Flag extraction, Mark resolved (manual cleanup) | AP AR DE CN BS | ReviewFooter.more[] (id, label, disabled); each id = a command | covered | review.extraction.actions, review-more-menu | |
| 5 | Document | Save / Discard while the form is dirty; “unsaved changes” warning on leaving | AP AR DE CN BS | footer.secondary “save” + model.dirty; leave guard in the container | covered | review.extraction.formHeader | |
| 6 | Document | Mark Ready / Ready & Publish / Revert to draft / Review later / Un-ready (dialog) / Mark done | AP AR DE CN BS | footer.primary variants; un-ready dialog = confirmation runner | covered | review.extraction.actions, unverifyDialog | |
| 7 | Document | Lock: ready→edit offers revert; published / exported / done / verified / unread / limit reached / busy = read-only with a message | OB | model.lock { reason } → ReviewNotice + readOnly on the kit; revert dialog = confirmation | new-presenter | onboarding.reviewForm.lock.* | |
| 8 | Document | Validation summary “N things to fix”, Show, list of invalid fields | AP AR DE CN BS OB | model.errors[] → ReviewValidationBar + cellErrors/fieldErrors | new-presenter | onboarding.reviewForm.validation, formHeader.invalidFields | |
| 9 | Document | “New extraction data available → Update form” | AP AR DE CN BS | ReviewNotice with an action | new-presenter | review.extraction.form.newDataAvailable | |
| 10 | Document | Progress banner: processing / publishing / importing / deleting in progress | AP AR DE CN BS | header.busy + ReviewNotice | covered | formHeader | |
| 11 | Document | Sync info: last publish/import, status, error, View in provider, auto-publish hint, retry | AP AR DE CN BS | SyncInfo presenter (ported from ui-v2 bank-statement-host) | new-presenter | review.extraction.sync, bank-statement-v2-sync-info | |
| 12 | Document | Activities history (action timeline + field/line diffs) | AP AR DE CN BS | ActivitiesPanel presenter, data from the container | new-presenter | review.extraction.activities | |
| 13 | Document | Duplicates: possible duplicate, view match, not a duplicate, keep all / keep selected | AP AR DE CN BS | ReviewNotice with actions; resolution in the container | new-presenter | review.extraction.duplicates | |
| 14 | Document | Error banner: upload / extraction / export / publish / delete / validation | AP AR DE CN BS | ReviewNotice, error tone | covered | review.extraction.errorBanner | |
| 15 | Document | Limit reached notice; Deleted notice + Revert to draft | OB | ReviewNotice | covered | onboarding.reviewForm.limitReached, deleted | |
| 16 | Account (BS) | One tab per account: bank, number, currency, balance check, published/locked; tab + Add Account | BS | SectionTabs, activeSectionId in the URL (?section=), select_review_section | covered | bank-statement account-panel, labels.addAccount | |
| 17 | Account (BS) | Document summary: N of M accounts published, balanced overall, failed/pending per account, retry failed | BS | ReviewSummary ← aggregate of sections[] | covered | sync.bankStatementPublishSummary, AccountPublished/Failed/Pending | |
| 18 | Account (BS) | New account → Accept / Accepted / Edit (bank, number, name, code dialog); confirm “create new bank accounts?”; confirm “change bank account?” | BS | SectionHeader.onSectionAction; edit dialog = form page; confirm = confirmation runner | covered | labels.newAccount, acceptAccount, editAccountTitle, confirmNewAccount* | |
| 19 | Account (BS) | Remove account, Pending deletion, Restore | BS | section.status.pendingDeletion + onSectionAction(remove/restore) | covered | labels.pendingDeletion, restore, deleted-account-card | |
| 20 | Account (BS) | Pick the bank account from the software (searchable), “No accounting integration configured”, Connected / Not connected (+ bank feed tooltip) | BS | keyFacts external_account_id picker + section.status.connected | covered | labels.selectAccount, noAccountingConfigured, form.bankFeedConnected | |
| 21 | Account (BS) | Statement period start/end with “end after start” validation | BS | keyFacts date + fieldErrors | covered | labels.statementPeriod, endDateBeforeStartDate | |
| 22 | Account (BS) | Contra defaults per account (account, tax, contact) + Apply; Categorization | BS | SectionDefaults presenter + onSectionAction(apply_defaults) | new-presenter | labels.contraDefaults, categorization, setContraDefaults() | |
| 23 | Account (BS) | Filter All accounts / All currencies; collapse per account | BS | replaced by one tab per account | dropped | labels.allAccounts, allCurrencies | n/a |
| 24 | Verdict | Counterparty: existing / new supplier / new customer, Accept, Accepted, Edit, See ID, Not found | AP AR DE CN OB | verdict.counterparty + onCounterpartyAction | covered | onboarding.reviewForm.counterparty.*, counterparty-status.tsx | |
| 25 | Verdict | Tax ID mismatch (3 variants) + blocked dialog “correct or turn off warn” | AP AR OB | counterparty.taxId { status } + ReviewNotice; block = model.errors | covered | form.taxIdentificationNumberWarning.* | |
| 26 | Verdict | Contact picker: Customer / Supplier / both groups, Create New, place of supply and tax treatment for a new contact, no permission | AP AR DE CN BS | picker option.group + allowCreate → the container opens the new-contact form page | covered | form.contactGroups, validation.newContact* | |
| 27 | Verdict | Total check: adds up / mismatch / off by (rounding) / no lines / no total / undo; blocked helper | AP AR DE CN OB | check.status + check.gap; CalculationBreakdown | covered | onboarding.reviewForm.totalCheck.* | |
| 28 | Verdict | Calculation breakdown: subtotal, line count, discount (included), tax per rate, document tax, no tax, reverse charge note, difference, “switch to {basis}” suggestion | AP AR DE CN OB | CalculationBreakdown rows[] + hints[] + onSwitchBasis | covered | totalCheck.breakdown.* | |
| 29 | Verdict | BS summary: Opening / Closing / Total Debit / Total Credit / Subtotal, Extracted vs Calculated, ✓, mismatch tooltip + Learn more | BS | CalculationBreakdown rows[] (open by default for BS) + check.help | covered | labels.summary, extracted, calculated, mismatchTooltip | |
| 30 | Verdict | Price basis: Include tax / Exclude tax / No tax (+ “No tax clears rates” tooltip) | AP AR DE CN OB | lines.taxMode + onTaxModeChange | covered | calculation.prices*, lineTable.noTaxTooltip | |
| 31 | Verdict | Compact strip while scrolling: Go to supplier / Go to total / No total | OB | VerdictStrip compact mode | covered | onboarding.reviewForm.strip.* | |
| 32 | Verdict | Balanced / N errors / N mismatches badge per account | BS | section.verdict.status + counts in SectionTabs | covered | labels.balanced, errors, mismatch(es) | |
| 33 | Header fields | Every header field per type from the YAML (see the field catalog below) | AP AR DE CN BS | KeyFactsCard / ExtrasCard ← keyFacts[], extras[] (the pipeline’s catalog visibility filters by provider, capability, setting) | covered | config/extraction_fields/*.yaml | |
| 34 | Header fields | Field adornments: required *, suggestion (Tab to complete), “Found on the document, hover to see where”, Extracted as “{value}” / empty, disabled, no options, Clear field | AP AR DE CN BS | FieldWithLens props { required, suggestion, box, extracted, disabled, clearable } | covered | review.shared.invoiceField, shared.fields | |
| 35 | Header fields | Date: type to fill the date, review date suggestion | AP AR DE CN BS | date control (ui-v2 invoice-form/review-date-field) | covered | invoiceField.datePlaceholder, review-date-suggestion | |
| 36 | Header fields | Currency select, unknown currency | AP AR DE CN BS | select | covered | invoiceField.selectCurrency, unknownCurrency | |
| 37 | Header fields | AR (QBO): Location of sale / Ship from; Add/remove shipping info (addresses) | AR | keyFacts/extras; the invoice-address-field presenter is already in ui-v2 | covered | form.locationOfSale, addShippingInfo, invoice-address-field | |
| 38 | Header fields | Discount rate/amount, deposit, balance due, subtotal/tax/total | AP AR CN | extras + CalculationBreakdown rows | covered | form.discount*, deposit, balanceDue | |
| 39 | Header fields | Reverse charge (Zoho), Tax treatment + out-of-scope hint | AP CN | toggle / select + hint; shown only where the provider supports it (catalog) | covered | form.reverseCharge*, taxTreatment* | |
| 40 | Header fields | Header-level tags (Xero/Zoho has_header_level_tags) | AP AR CN | kind: tags (multi-select); the presenter is already in ui-v2 | covered | external-accounting-header-level-tags-section | |
| 41 | Header fields | Credit note: number, date, original invoice number/date, reason code, reason, notes | CN | keyFacts from the YAML | covered | form.creditNote*, originalInvoice* | |
| 42 | Header fields | DE: payment method / payment type / spend type / paid-from account | DE | select / picker | covered | form.paymentMethod, direct_expense.yaml | |
| 43 | Header fields | BS: bank name, account number, currency, opening/closing (extracted) | BS | keyFacts; calculated values in the breakdown | covered | bank_statement.yaml | |
| 44 | Lines | Columns per type from the YAML + dynamic tag roots per entity (names from Zoho/Xero, mandatory, archived) + debit/credit sides (double entry) | AP AR DE CN BS | columns[] built by the container; the kit draws them | covered | line-columns.tsx, transaction-columns.tsx, bank-statement tagColumns | |
| 45 | Lines | Column kinds: text, number, money, percentage (discount), date (service date), picker (account, tax, item/service, contact, class, category, location), multiselect (tags), toggle (tax), status ✓, derived (calc. balance) | AP AR DE CN BS | SheetGrid: only text / boolean / select today | sheetgrid-ext | review.shared.columns, SheetGrid types.ts | |
| 46 | Lines | Picker in a cell: Create New, option groups, “(Archived)”, mandatory, Unknown account / Unknown tax rate + reason, archived tags refused on save | AP AR DE CN BS | options[].group/archived/mandatory, renderOption, cellErrors; refusal in the container’s applyChange | sheetgrid-ext | invoiceField.createNew, fields.archived, lines.unknown*, validation.removeArchivedTags | |
| 47 | Lines | Bounding box per cell: hover reveal, lens, pulse | OB | rows[].cells[].box + onCellHover; ZoomLensOverlay | sheetgrid-ext | line-sheet/grid/bubbles, use-hints, zoom-lens | |
| 48 | Lines | Error per cell + Previous/Next problem navigation “n of m”, label “Line n · column” | OB | cellErrors + LinesCard error navigation | sheetgrid-ext | lines.previousError, nextError, errorPosition | |
| 49 | Lines | Locked / calculated / tax-off cell notices | OB | lockedCells (exists) + labels.lockedReason | covered | lineTable.sheetCalculatedNotice, sheetTaxOffNotice, sheetLockedNotice | |
| 50 | Lines | Tax amount editable toggle + tooltip (override off / unsupported on Xero DE) | AP AR DE | columns[].editableToggle + tooltip | sheetgrid-ext | lineTable.taxAmount*Tooltip, line-tax-amount-editable-toggle | |
| 51 | Lines | Discount: “10%” or an amount, tooltip | AP AR CN | columns[].parse (percentage/money) | sheetgrid-ext | lineTable.discountTooltip, discount-field | |
| 52 | Lines | Keyboard: arrows, Tab, Enter, Home/End, type, fill, copy/paste tile and per-cell refusal | AP AR DE CN BS | SheetGrid | covered | SheetGrid keyboard.ts, paste.ts | |
| 53 | Lines | Row selection: gutter, Shift/Ctrl, select all, clear, “{n} selected” | AP AR DE CN BS | SheetGrid selectedRowIds | covered | SheetGrid row-selection, lines.selected | |
| 54 | Lines | Add line / Add transaction; empty state “click + to add” | AP AR DE CN BS | LinesCard.onAddRow + empty | covered | lineTable.addLineItem, addTransaction, clickToAdd | |
| 55 | Lines | Insert line below | BS | onRowAction(insert_below) | covered | labels.insertLineBelow, insertTransactionBelow() | |
| 56 | Lines | Duplicate line / transaction | AP AR DE CN BS | onRowAction(duplicate) | covered | form.duplicateLine, duplicateTransaction() | |
| 57 | Lines | Remove line / Remove rows (at least one stays) | AP AR DE CN BS | onDeleteRows / onRowAction(remove); the minimum rule in the container | covered | lineTable.removeRows, atLeastOneRow | |
| 58 | Lines | Add child transaction (parent/child, split); a parent’s actions carry its children | BS | rows[].parentId + indentation | sheetgrid-ext | labels.addChildTransaction, tree.ts, parentTransactionId | |
| 59 | Lines | Move to Account / Move to new account | BS | onMoveRows({ from, to / “new”, rowIds }) → BS adapter | covered | labels.moveToAccount, moveTransactionToAccount(), moveTransactionToNewAccount() | |
| 60 | Lines | Change currency per transaction | BS | onRowAction(change_currency, value) / bulk | covered | labels.changeCurrency, changeTransactionCurrency() | |
| 61 | Lines | Reorder (drag to reorder) | BS AP AR | onReorder(sectionId, from, to) + drag handle in the gutter | sheetgrid-ext | form.dragToReorder, reorderTransactions() | |
| 62 | Lines | Combine all / Combine selected (≥2) + hint, Combined lines, Show extracted lines, modified-line warnings | AP AR DE CN OB | onBulkAction(combine) + lines.view (extracted/combined); logic in the container | covered | lineTable.combine*, showExtractedLines, modifiedLineItem* | |
| 63 | Lines | Bulk edit bar: set Account / Tax rate / Contact / Currency / Tag for the selected rows, Apply, Clear, Remove rows | BS AP AR DE OB | BulkActionBar (#6003) + onBulkApply(sectionId, rowIds, patch) | covered | bulk-edit-bar.tsx, common/bulk-edit-panel, lines.bulkActions | |
| 64 | Lines | Columns toggle (visibility) | BS | ColumnVisibilityMenu (#6003) | covered | labels.columnsToggle | |
| 65 | Lines | Pagination per page | BS | lines.pageSize | covered | labels.perPage | |
| 66 | Lines | Show / hide account type | DE | lines.view toggle | covered | lineTable.showAccountType | |
| 67 | Lines | Copy / paste an item or account between cells (semantic clipboard) | AP AR DE CN BS | SheetGrid per-cell paste (select columns take a label) | covered | form.clipboard.* | |
| 68 | Lines | Formula footer: Lines + tax − discount = total; amounts include/exclude/no tax | OB | lines.sum | covered | lines.footer*, pricesInclusive | |
| 69 | Lines | Ext. Balance vs Calc. Balance per row, ✓ status per row | BS | read-only derived column + status column | sheetgrid-ext | labels.columns.extBalance, calcBalance, status | |
| 70 | Lines | Double entry: debit/credit account, tax rate, tax amount, tags per side; “contra account required” | DE BS AP | two column sets from the catalog; errors in cellErrors; the kit does not know about double entry | covered | double-entry/sections.tsx, form.contraAccountRequired, ap_bills_enable_double_entry | |
| 71 | Lines | Internal accounting (entity without an integration): internal account / tax / tags / items | AP AR DE CN BS | picker options from internal sources (the container picks) | covered | internal-account-id.tsx, internal-accounting-tags.tsx | |
| 72 | Lines | Transactions per statement page (grouped by billed/held page) | BS | pages{total,read,held} only; byPage waits for page_number in bonsapi | backend | bank_transaction only has order; partial read via max_pages | |
| 73 | Footer | Publish / Re-publish, Ready & Publish, confirmation (document type, new-contact note), failure + reason, Try again, “edits saved, mark ready again” | AP AR DE CN OB | footer.secondary publish_document + confirmation runner + ReviewNotice | covered | onboarding.reviewForm.publish.*, review.extraction.actions | |
| 74 | Footer | Export / Re-export (template dialog) | AP AR DE CN BS | footer.secondary export; the export dialog outside the kit (form page) | covered | actions.export, export-dialog | |
| 75 | Footer | Publish to bank feed: must verify, unsaved changes, already published, confirm all accounts, published/failed/pending/nothing per account, retry failed, partial, pre-flight (opening/closing required, dates, amounts, reconcile), provider errors (feed connected, disconnected, manage feeds, reconnect) | BS | footer.secondary publish_bank_feed + ReviewSummary status per section + ReviewNotice with the pre-flight list + SyncInfo | covered | review.extraction.sync.bankStatement* | |
| 76 | Footer | Mark done morph button, confetti, form freeze while Mark done lands, primary shortcut (Enter) | OB | ReviewFooter.busy + MarkDoneButton + primaryShortcut | covered | morph-button, confetti, freeze-form, primary-shortcut | |
| 77 | Footer | Validation blocked dialog: Fix it / Turn off check & mark done / Ask admin | OB | confirmation runner + turn_off_check command (container) | covered | onboarding.reviewForm.validationBlocked.* | |
| 78 | Footer | Delete / Restore / Revert dialog with external consequences, “Type Delete all”, skip accounting cleanup | AP AR DE CN BS | confirmation runner (irreversible) + confirmDetail | covered | review.extraction.deleteDialog | |
| 79 | Footer | Auto-publish / auto-import enable prompt | AP AR DE | ReviewNotice with an action | covered | sync.autoPublish* | |
| 80 | Document panel | Page preview, page picker, zoom, rotate, bounding box highlight, remove page, page type primary/supporting | AP AR DE CN BS | ReviewDocumentPanel (ui-v2 pdf-viewer), outside the card stack | covered | review-document-panel, pageActions, pageTypeDialog | |
| 81 | Document panel | Zoom lens overlay (fields and cells), snippet outlines | OB | ZoomLensOverlay | covered | zoom-lens/**, snippet-outlines | |
| 82 | Chat (outside the kit) | tofie narration per beat, discount meter, Try another document, Book a demo | OB | chat shell; triggered from model facts | container | tofie-demo-chat-panel, review-rail | |
| 83 | tofu-web review page | data-anchor / data-anchor-reveals anchors on fields, rows, actions, sections (the assistant points at the UI) |
TW | anchor in the model; presenters spread it |
covered | ExtractionReviewField.anchor, domain/anchors.ts | |
| 84 | tofu-web review page | Assistant proposal per field (not the extractor’s suggestion): accept / dismiss / accept all / dismiss all | TW | FieldWithLens proposal adornment + 4 callbacks |
new-presenter | ExtractionReviewProps.onAcceptProposal… | |
| 85 | tofu-web review page | Controlled formWidth/formHeight split + callbacks, workbench clamp, stacked on phones, --canvas-safe-bottom |
TW | controlled ReviewWorkspace props | covered | layoutStore, resize_review, @bonsai/utils/workbench | |
| 86 | tofu-web review page | actions slot for WorkbenchActionsRow (floating on desktop, joins the chat row on phones) |
TW | ReviewWorkspace actions?: ReactNode |
covered | ExtractionReviewProps.actions | |
| 87 | tofu-web review page | Full-screen document expand + close | TW | ReviewDocumentPanel expanded + onExpandDocument |
covered | labels.expandDocument / closeDocument | |
| 88 | tofu-web review page | Activities tab (action history, already formatted) | TW | ReviewActivities presenter; activities[] in the model |
new-presenter | ExtractionReviewActivity | |
| 89 | tofu-web review page | Page image sources: signed URL, webp → png → bytes fallback, onPageError, r2 asset |
TW | ReviewDocumentPanel props as the pdf-viewer has today | container | usePageImages, pageImageSources, r2AssetUrl | |
| 90 | tofu-web review page | Phases: loading skeleton, extracting, reprocessing, failed, not extracted, no permission | TW | phase in the model; ReviewSkeleton (moved from review-form-skeleton) + empty states |
new-presenter | review-form-skeleton, Empty, isLoading / isReprocessing | |
| 91 | tofu-web review page | Escape ladder: blur field → dialog → close_extraction; app hotkeys win over the kit |
TW | container; the kit does not swallow Escape when no field has focus | container | use-review-keys.ts | |
| 92 | tofu-web review page | Commands for the model: read_review (ReviewModel summary for every type); context surface section / dirty / check |
TW | container (commands + surface) | container | read_extraction, surface.ts | |
| 93 | tofu-web review page | Deep links ?page_id= (active page) and ?section= (active account) survive a reload |
TW | container (route search schema) | container | review.tsx validateSearch | |
| 94 | tofu-web review page | Resolved label strings + ReviewKitLabels (ui-v2 has no i18n; the model carries label, not a key) |
TW | labels prop per presenter |
covered | ExtractionReviewLabels, bank-statement/intl/labels.ts |
Summary: covered 62, container 2, new-presenter 7, dropped 1, sheetgrid-ext 9, backend 1
SheetGrid extensions derived from this map
#
- #45 Column kinds (number, money, percentage, date, async picker per row, multiselect, status, read-only derived) → SheetGrid has only text / boolean / select today
- #46 Picker in a cell: Create New, option groups, “(Archived)”, mandatory, Unknown account / tax rate + reason → options[].group/archived/mandatory, renderOption, cellErrors; refusal in the container’s applyChange
- #47 Bounding box per cell: hover reveal, lens, pulse → rows[].cells[].box + onCellHover; ZoomLensOverlay
- #48 Error per cell + Previous/Next problem navigation → cellErrors + LinesCard error navigation
- #50 Tax amount editable toggle + tooltip → columns[].editableToggle + tooltip (small)
- #51 Discount as “10%” or an amount → columns[].parse (percentage|money), a parser per column
- #58 Child transactions (parent/child, split) → rows[].parentId + indentation
- #61 Drag to reorder → onReorder(sectionId, from, to) + drag handle in the gutter
- #69 Ext. Balance vs Calc. Balance, ✓ status per row → read-only derived column + status column
Small new presenters #
- #7 Lock with a reason and a way back from ready → model.lock { reason } → ReviewNotice + readOnly; revert dialog = confirmation
- #8 Validation summary “N things to fix” → model.errors[] → ReviewValidationBar + cellErrors/fieldErrors
- #9 “New extraction data available → Update form” → ReviewNotice with an action
- #11 Sync info (last publish/import, status, error, View in provider, retry) → SyncInfo presenter (ported from ui-v2 bank-statement-host)
- #12 Activities history → ActivitiesPanel presenter, data from the container
- #13 Duplicates → ReviewNotice with actions; resolution in the container
- #22 Contra defaults per account + Apply → SectionDefaults presenter + onSectionAction(apply_defaults)
Field catalog (179) → kit control #
| Types | Level | Field | Label | YAML type | Required | Shown when | Control | Status |
|---|---|---|---|---|---|---|---|---|
| AP | header | ap_bill_data.title |
Title | text | — | text | covered | |
| AP | header | ap_bill_data.description |
Description | textarea | — | textarea | covered | |
| AP | header | ap_bill_data.invoice_number |
Bill Number | text | — | text | covered | |
| AP | header | ap_bill_data.invoice_reference |
Reference | text | supported_providers=[‘ZOHO’, ‘NON_INTEGRATED’] | text | covered | |
| AP | header | ap_bill_data.external_contact_id |
Supplier Name | id | yes | — | picker: contact | covered |
| AP | header | ap_bill_data.invoice_date |
Bill Date | date | yes | — | date | covered |
| AP | header | ap_bill_data.due_date |
Due Date | date | yes | — | date | covered |
| AP | header | ap_bill_data.currency_id |
Currency | enum | yes | — | select | covered |
| AP | header | ap_bill_data.line_amount_type |
Line Amount Type | enum | — | select | covered | |
| AP | header | ap_bill_data.total_amount |
Total Amount | currency | yes | — | money, right-aligned | covered |
| AP | header | ap_bill_data.external_location_id |
Location | id | supported_providers=[‘QUICK_BOOKS’, ‘ZOHO’] | picker: location | covered | |
| AP | header | ap_bill_data.tax_identification_number |
Tax Identification Number | text | — | text | covered | |
| AP | header | ap_bill_data.is_reverse_charge |
Reverse Charge | boolean | supported_providers=[‘ZOHO’] | toggle | covered | |
| AP | header | ap_bill_data.external_tag_ids |
Tags Options | — | requires_capability=has_header_level_tags | tags (multi-select) | covered | |
| AP | line | ap_bill_line.description |
Description | text | yes | — | text | covered |
| AP | line | ap_bill_line.quantity |
Quantity | number | yes | — | number, right-aligned | sheetgrid-ext |
| AP | line | ap_bill_line.unit_price |
Unit Price | currency | yes | — | money, right-aligned | sheetgrid-ext |
| AP | line | ap_bill_line.tax_amount |
Tax Amount | currency | excluded_by_entity_settings=ap_bills_enable_double_entry | money, right-aligned | sheetgrid-ext | |
| AP | line | ap_bill_line.external_account_id |
Account | id | yes | excluded_by_entity_settings=ap_bills_enable_double_entry | picker: account | sheetgrid-ext |
| AP | line | ap_bill_line.external_item_id |
Item | id | supported_providers=[‘FREEE’, ‘XERO’, ‘ZOHO’, ‘SAGE’, ‘NON_INTEGRATED’] | picker: item | sheetgrid-ext | |
| AP | line | ap_bill_line.external_tax_rate_id |
Tax Rate | id | excluded_by_entity_settings=ap_bills_enable_double_entry | picker: tax rate | sheetgrid-ext | |
| AP | line | ap_bill_line.external_tag_ids |
Tags Options | array | excluded_by_entity_settings=ap_bills_enable_double_entry | multiselect column | sheetgrid-ext | |
| AP | line | ap_bill_line.external_debit_account_id |
Debit Account | — | requires_entity_settings=ap_bills_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| AP | line | ap_bill_line.external_credit_account_id |
Credit Account | — | requires_entity_settings=ap_bills_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| AP | line | ap_bill_line.external_debit_tax_rate_id |
Debit Tax Rate | — | requires_entity_settings=ap_bills_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| AP | line | ap_bill_line.external_credit_tax_rate_id |
Credit Tax Rate | — | requires_entity_settings=ap_bills_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| AP | line | ap_bill_line.debit_tax_amount |
Debit Tax Amount | — | requires_entity_settings=ap_bills_enable_double_entry | money (debit/credit side) | sheetgrid-ext | |
| AP | line | ap_bill_line.credit_tax_amount |
Credit Tax Amount | — | requires_entity_settings=ap_bills_enable_double_entry | money (debit/credit side) | sheetgrid-ext | |
| AP | line | ap_bill_line.external_debit_tag_ids |
Debit Tag | — | requires_entity_settings=ap_bills_enable_double_entry | multiselect column | sheetgrid-ext | |
| AP | line | ap_bill_line.external_credit_tag_ids |
Credit Tag | — | requires_entity_settings=ap_bills_enable_double_entry | multiselect column | sheetgrid-ext | |
| AP CN | header | ap_credit_note_data.title |
Title | text | — | text | covered | |
| AP CN | header | ap_credit_note_data.credit_note_number |
Credit Note Number | text | — | text | covered | |
| AP CN | header | ap_credit_note_data.reference |
Reference | text | supported_providers=[‘ZOHO’, ‘NON_INTEGRATED’] | text | covered | |
| AP CN | header | ap_credit_note_data.external_contact_id |
Supplier Name | id | — | picker: contact | covered | |
| AP CN | header | ap_credit_note_data.credit_note_date |
Credit Note Date | date | — | date | covered | |
| AP CN | header | ap_credit_note_data.currency_id |
Currency | enum | — | select | covered | |
| AP CN | header | ap_credit_note_data.line_amount_type |
Line Amount Type | enum | — | select | covered | |
| AP CN | header | ap_credit_note_data.total_amount |
Total Amount | currency | — | money, right-aligned | covered | |
| AP CN | header | ap_credit_note_data.external_location_id |
Location | id | supported_providers=[‘QUICK_BOOKS’, ‘ZOHO’] | picker: location | covered | |
| AP CN | header | ap_credit_note_data.tax_identification_number |
Tax Identification Number | text | — | text | covered | |
| AP CN | header | ap_credit_note_data.original_invoice_number |
Original Invoice Number | text | — | text | covered | |
| AP CN | header | ap_credit_note_data.original_invoice_date |
Original Invoice Date | date | — | date | covered | |
| AP CN | header | ap_credit_note_data.reason_description |
Reason | text | — | text | covered | |
| AP CN | header | ap_credit_note_data.notes |
Notes | textarea | — | textarea | covered | |
| AP CN | header | ap_credit_note_data.external_tag_ids |
Tags Options | — | requires_capability=has_header_level_tags | tags (multi-select) | covered | |
| AP CN | line | ap_credit_note_line.description |
Description | text | — | text | covered | |
| AP CN | line | ap_credit_note_line.quantity |
Quantity | number | — | number, right-aligned | sheetgrid-ext | |
| AP CN | line | ap_credit_note_line.unit_price |
Unit Price | currency | — | money, right-aligned | sheetgrid-ext | |
| AP CN | line | ap_credit_note_line.tax_amount |
Tax Amount | currency | — | money, right-aligned | sheetgrid-ext | |
| AP CN | line | ap_credit_note_line.external_account_id |
Account | id | — | picker: account | sheetgrid-ext | |
| AP CN | line | ap_credit_note_line.external_item_id |
Item | id | supported_providers=[‘FREEE’] | picker: item | sheetgrid-ext | |
| AP CN | line | ap_credit_note_line.external_tax_rate_id |
Tax Rate | id | — | picker: tax rate | sheetgrid-ext | |
| AP CN | line | ap_credit_note_line.external_tag_ids |
Tags Options | array | — | multiselect column | sheetgrid-ext | |
| AR CN | header | ar_credit_note_data.title |
Title | text | — | text | covered | |
| AR CN | header | ar_credit_note_data.credit_note_number |
Credit Note Number | text | — | text | covered | |
| AR CN | header | ar_credit_note_data.reference |
Reference | text | supported_providers=[‘XERO’, ‘NON_INTEGRATED’] | text | covered | |
| AR CN | header | ar_credit_note_data.external_contact_id |
Customer Name | id | — | picker: contact | covered | |
| AR CN | header | ar_credit_note_data.credit_note_date |
Credit Note Date | date | — | date | covered | |
| AR CN | header | ar_credit_note_data.currency_id |
Currency | enum | — | select | covered | |
| AR CN | header | ar_credit_note_data.line_amount_type |
Line Amount Type | enum | requires_accounting_config=supports_line_amount_types | select | covered | |
| AR CN | header | ar_credit_note_data.total_amount |
Total Amount | currency | — | money, right-aligned | covered | |
| AR CN | header | ar_credit_note_data.external_location_id |
Location | id | supported_providers=[‘QUICK_BOOKS’, ‘ZOHO’] | picker: location | covered | |
| AR CN | header | ar_credit_note_data.discount_rate |
Discount Rate | number | supported_providers=[‘QUICK_BOOKS’]; requires_metadata_flag=discounts_enabled | number, right-aligned | covered | |
| AR CN | header | ar_credit_note_data.discount_amount |
Discount Amount | currency | supported_providers=[‘QUICK_BOOKS’]; requires_metadata_flag=discounts_enabled | money, right-aligned | covered | |
| AR CN | header | ar_credit_note_data.discount_type |
Discount Type | enum | supported_providers=[‘QUICK_BOOKS’]; requires_metadata_flag=discounts_enabled | select | covered | |
| AR CN | header | ar_credit_note_data.tax_identification_number |
Tax Identification Number | text | — | text | covered | |
| AR CN | header | ar_credit_note_data.original_invoice_number |
Original Invoice Number | text | — | text | covered | |
| AR CN | header | ar_credit_note_data.original_invoice_date |
Original Invoice Date | date | — | date | covered | |
| AR CN | header | ar_credit_note_data.reason_description |
Reason | text | — | text | covered | |
| AR CN | header | ar_credit_note_data.notes |
Notes | textarea | — | textarea | covered | |
| AR CN | header | ar_credit_note_data.external_tag_ids |
Tags Options | — | requires_capability=has_header_level_tags | tags (multi-select) | covered | |
| AR CN | line | ar_credit_note_line.description |
Description | textarea | — | textarea | covered | |
| AR CN | line | ar_credit_note_line.quantity |
Quantity | number | — | number, right-aligned | sheetgrid-ext | |
| AR CN | line | ar_credit_note_line.unit_price |
Unit Price | currency | — | money, right-aligned | sheetgrid-ext | |
| AR CN | line | ar_credit_note_line.tax_amount |
Tax Amount | currency | requires_accounting_config_non_null=line_level_tax_type | money, right-aligned | sheetgrid-ext | |
| AR CN | line | ar_credit_note_line.external_account_id |
Account | id | supported_providers=[‘XERO’, ‘ZOHO’, ‘SAGE’, ‘FREEE’, ‘NON_INTEGRATED’] | picker: account | sheetgrid-ext | |
| AR CN | line | ar_credit_note_line.external_tax_rate_id |
Tax Rate | id | — | picker: tax rate | sheetgrid-ext | |
| AR CN | line | ar_credit_note_line.external_tag_ids |
Tags Options | array | — | multiselect column | sheetgrid-ext | |
| AR CN | line | ar_credit_note_line.external_item_id |
Item | id | — | picker: item | sheetgrid-ext | |
| AR | header | ar_invoice_data.title |
Title | text | — | text | covered | |
| AR | header | ar_invoice_data.description |
Description | textarea | — | textarea | covered | |
| AR | header | ar_invoice_data.invoice_number |
Invoice Number | text | — | text | covered | |
| AR | header | ar_invoice_data.invoice_reference |
Invoice Reference | text | supported_providers=[‘XERO’, ‘NON_INTEGRATED’] | text | covered | |
| AR | header | ar_invoice_data.external_contact_id |
Customer Name | id | yes | — | picker: contact | covered |
| AR | header | ar_invoice_data.invoice_date |
Invoice Date | date | yes | — | date | covered |
| AR | header | ar_invoice_data.due_date |
Due Date | date | — | date | covered | |
| AR | header | ar_invoice_data.currency_id |
Currency | enum | yes | — | select | covered |
| AR | header | ar_invoice_data.line_amount_type |
Line Amount Type | enum | requires_accounting_config=supports_line_amount_types | select | covered | |
| AR | header | ar_invoice_data.total_amount |
Total Amount | currency | yes | — | money, right-aligned | covered |
| AR | header | ar_invoice_data.external_location_id |
Location | id | supported_providers=[‘QUICK_BOOKS’, ‘ZOHO’] | picker: location | covered | |
| AR | header | ar_invoice_data.discount_rate |
Discount Rate | number | supported_providers=[‘QUICK_BOOKS’]; requires_metadata_flag=discounts_enabled; excluded_by_entity_settings=ar_invoices_enable_double_entry | number, right-aligned | covered | |
| AR | header | ar_invoice_data.discount_amount |
Discount Amount | currency | supported_providers=[‘QUICK_BOOKS’]; requires_metadata_flag=discounts_enabled; excluded_by_entity_settings=ar_invoices_enable_double_entry | money, right-aligned | covered | |
| AR | header | ar_invoice_data.discount_type |
Discount Type | enum | supported_providers=[‘QUICK_BOOKS’]; requires_metadata_flag=discounts_enabled; excluded_by_entity_settings=ar_invoices_enable_double_entry | select | covered | |
| AR | header | ar_invoice_data.tax_identification_number |
Tax Identification Number | text | — | text | covered | |
| AR | header | ar_invoice_data.is_reverse_charge |
Reverse Charge | boolean | supported_providers=[‘ZOHO’] | toggle | covered | |
| AR | header | ar_invoice_data.bill_address |
Bill to | — | supported_providers=[‘QUICK_BOOKS’]; requires_metadata_flag=address_for_sale_enabled | address (invoice-address-field ui-v2) | covered | |
| AR | header | ar_invoice_data.ship_address |
Ship to | — | supported_providers=[‘QUICK_BOOKS’]; requires_metadata_flag=address_for_sale_enabled | address (invoice-address-field ui-v2) | covered | |
| AR | header | ar_invoice_data.ship_from_address |
Ship from | — | supported_providers=[‘QUICK_BOOKS’]; requires_metadata_flag=address_for_sale_enabled | address (invoice-address-field ui-v2) | covered | |
| AR | header | ar_invoice_data.external_tag_ids |
Tags Options | — | requires_capability=has_header_level_tags | tags (multi-select) | covered | |
| AR | line | ar_invoice_line.description |
Description | textarea | yes | — | textarea | covered |
| AR | line | ar_invoice_line.quantity |
Quantity | number | yes | — | number, right-aligned | sheetgrid-ext |
| AR | line | ar_invoice_line.unit_price |
Unit Price | currency | yes | — | money, right-aligned | sheetgrid-ext |
| AR | line | ar_invoice_line.discount_rate |
Discount Rate | number | supported_providers=[‘XERO’, ‘SAGE’, ‘NON_INTEGRATED’] | number, right-aligned | sheetgrid-ext | |
| AR | line | ar_invoice_line.discount_amount |
Discount Amount | currency | supported_providers=[‘XERO’, ‘SAGE’, ‘NON_INTEGRATED’] | money, right-aligned | sheetgrid-ext | |
| AR | line | ar_invoice_line.discount_type |
Discount Type | enum | supported_providers=[‘XERO’, ‘SAGE’, ‘NON_INTEGRATED’] | select | covered | |
| AR | line | ar_invoice_line.tax_amount |
Tax Amount | currency | requires_accounting_config_non_null=line_level_tax_type; excluded_by_entity_settings=ar_invoices_enable_double_entry | money, right-aligned | sheetgrid-ext | |
| AR | line | ar_invoice_line.external_account_id |
Account | id | yes | excluded_by_entity_settings=ar_invoices_enable_double_entry; supported_providers=[‘XERO’, ‘ZOHO’, ‘SAGE’, ‘FREEE’, ‘NON_INTEGRATED’] | picker: account | sheetgrid-ext |
| AR | line | ar_invoice_line.external_tax_rate_id |
Tax Rate | id | yes | excluded_by_entity_settings=ar_invoices_enable_double_entry | picker: tax rate | sheetgrid-ext |
| AR | line | ar_invoice_line.external_tag_ids |
Tags Options | array | excluded_by_entity_settings=ar_invoices_enable_double_entry | multiselect column | sheetgrid-ext | |
| AR | line | ar_invoice_line.external_item_id |
Item | id | excluded_by_entity_settings=ar_invoices_enable_double_entry | picker: item | sheetgrid-ext | |
| AR | line | ar_invoice_line.external_debit_account_id |
Debit Account | — | requires_entity_settings=ar_invoices_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| AR | line | ar_invoice_line.external_credit_account_id |
Credit Account | — | requires_entity_settings=ar_invoices_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| AR | line | ar_invoice_line.external_debit_tax_rate_id |
Debit Tax Rate | — | requires_entity_settings=ar_invoices_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| AR | line | ar_invoice_line.external_credit_tax_rate_id |
Credit Tax Rate | — | requires_entity_settings=ar_invoices_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| AR | line | ar_invoice_line.debit_tax_amount |
Debit Tax Amount | — | requires_entity_settings=ar_invoices_enable_double_entry | money (debit/credit side) | sheetgrid-ext | |
| AR | line | ar_invoice_line.credit_tax_amount |
Credit Tax Amount | — | requires_entity_settings=ar_invoices_enable_double_entry | money (debit/credit side) | sheetgrid-ext | |
| AR | line | ar_invoice_line.external_debit_tag_ids |
Debit Tag | — | requires_entity_settings=ar_invoices_enable_double_entry | multiselect column | sheetgrid-ext | |
| AR | line | ar_invoice_line.external_credit_tag_ids |
Credit Tag | — | requires_entity_settings=ar_invoices_enable_double_entry | multiselect column | sheetgrid-ext | |
| BS | header | bank_statement_data.bank_name |
Bank Name | text | yes | — | text | covered |
| BS | header | bank_statement_data.account_number |
Account Number | text | yes | — | text | covered |
| BS | header | bank_statement_data.external_account_id |
Bank Account | id | — | picker: account | covered | |
| BS | header | bank_statement_data.currency_id |
Currency | enum | — | select | covered | |
| BS | header | bank_statement_data.opening_balance |
Opening Balance | currency | yes | — | money, right-aligned | covered |
| BS | header | bank_statement_data.closing_balance |
Closing Balance | currency | yes | — | money, right-aligned | covered |
| BS | header | bank_statement_data.credit_total |
Credit Total | currency | yes | — | money, right-aligned | covered |
| BS | header | bank_statement_data.debit_total |
Debit Total | currency | yes | — | money, right-aligned | covered |
| BS | header | bank_statement_data.subtotal |
Subtotal | currency | yes | — | money, right-aligned | covered |
| BS | header | bank_statement_data.start_date |
Start Date | date | yes | — | date | covered |
| BS | header | bank_statement_data.end_date |
End Date | date | yes | — | date | covered |
| BS | line | bank_transaction.date |
Transaction Date | date | yes | — | date | covered |
| BS | line | bank_transaction.external_contact_id |
Contact Name | id | yes | — | picker: contact | sheetgrid-ext |
| BS | line | bank_transaction.description |
Description | textarea | — | textarea | covered | |
| BS | line | bank_transaction.amount |
Amount | currency | yes | — | money, right-aligned | sheetgrid-ext |
| BS | line | bank_transaction.balance |
Balance | currency | yes | — | money, right-aligned | sheetgrid-ext |
| BS | line | bank_transaction.reference |
Reference | text | — | text | covered | |
| BS | line | bank_transaction.currency_id |
Currency | enum | — | select | covered | |
| BS | line | bank_transaction.external_account_id |
Account | id | yes | supported_version=[1] | picker: account | sheetgrid-ext |
| BS | line | bank_transaction.external_tax_rate_id |
Tax Rate | id | supported_version=[1] | picker: tax rate | sheetgrid-ext | |
| BS | line | bank_transaction.tax_rate |
Tax Rate | number | supported_version=[1] | number, right-aligned | sheetgrid-ext | |
| BS | line | bank_transaction.tax_amount |
Tax Amount | currency | supported_version=[1] | money, right-aligned | sheetgrid-ext | |
| BS | line | bank_transaction.external_tag_ids |
Tags Options | array | supported_version=[1] | multiselect column | sheetgrid-ext | |
| BS | line | bank_transaction.external_debit_account_id |
Debit Account | id | supported_version=[2] | picker: account | sheetgrid-ext | |
| BS | line | bank_transaction.external_credit_account_id |
Credit Account | id | supported_version=[2] | picker: account | sheetgrid-ext | |
| BS | line | bank_transaction.external_debit_tax_rate_id |
Debit Tax Rate | id | supported_version=[2] | picker: tax rate | sheetgrid-ext | |
| BS | line | bank_transaction.external_credit_tax_rate_id |
Credit Tax Rate | id | supported_version=[2] | picker: tax rate | sheetgrid-ext | |
| BS | line | bank_transaction.external_debit_tag_ids |
Debit Tags | array | supported_version=[2] | multiselect column | sheetgrid-ext | |
| BS | line | bank_transaction.external_credit_tag_ids |
Credit Tags | array | supported_version=[2] | multiselect column | sheetgrid-ext | |
| DE | header | direct_expense_data.title |
Title | text | — | text | covered | |
| DE | header | direct_expense_data.description |
Description | textarea | — | textarea | covered | |
| DE | header | direct_expense_data.reference |
Reference | text | — | text | covered | |
| DE | header | direct_expense_data.spend_type |
Spend Type | enum | supported_providers=[‘XERO’] | select | covered | |
| DE | header | direct_expense_data.payment_type |
Payment Type | enum | unsupported_providers=[‘XERO’] | select | covered | |
| DE | header | direct_expense_data.external_contact_id |
Contact Name | id | yes | — | picker: contact | covered |
| DE | header | direct_expense_data.external_account_id |
Account | id | yes | — | picker: account | covered |
| DE | header | direct_expense_data.external_location_id |
Location | id | supported_providers=[‘QUICK_BOOKS’, ‘ZOHO’] | picker: location | covered | |
| DE | header | direct_expense_data.transaction_date |
Transaction Date | date | yes | — | date | covered |
| DE | header | direct_expense_data.currency_id |
Currency | enum | yes | — | select | covered |
| DE | header | direct_expense_data.line_amount_type |
Line Amount Type | enum | — | select | covered | |
| DE | header | direct_expense_data.total_amount |
Total Amount | currency | — | money, right-aligned | covered | |
| DE | header | direct_expense_data.tax_identification_number |
Tax Identification Number | text | — | text | covered | |
| DE | header | direct_expense_data.is_reverse_charge |
Reverse Charge | boolean | supported_providers=[‘ZOHO’] | toggle | covered | |
| DE | header | direct_expense_data.external_tag_ids |
Tags Options | — | requires_capability=has_header_level_tags | tags (multi-select) | covered | |
| DE | line | direct_expense_line_fields.description |
Description | textarea | yes | — | textarea | covered |
| DE | line | direct_expense_line_fields.quantity |
Quantity | number | yes | — | number, right-aligned | sheetgrid-ext |
| DE | line | direct_expense_line_fields.unit_price |
Unit Price | currency | yes | — | money, right-aligned | sheetgrid-ext |
| DE | line | direct_expense_line_fields.amount |
Amount | currency | — | money, right-aligned | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.tax_amount |
Tax Amount | currency | excluded_by_entity_settings=direct_expenses_enable_double_entry | money, right-aligned | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.external_account_id |
Account | id | excluded_by_entity_settings=direct_expenses_enable_double_entry | picker: account | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.external_item_id |
Item | id | supported_providers=[‘FREEE’] | picker: item | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.external_tax_rate_id |
Tax Rate | id | excluded_by_entity_settings=direct_expenses_enable_double_entry | picker: tax rate | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.external_tag_ids |
Tags Options | array | excluded_by_entity_settings=direct_expenses_enable_double_entry | multiselect column | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.external_debit_account_id |
Debit Account | — | requires_entity_settings=direct_expenses_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.external_credit_account_id |
Credit Account | — | requires_entity_settings=direct_expenses_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.external_debit_tax_rate_id |
Debit Tax Rate | — | requires_entity_settings=direct_expenses_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.external_credit_tax_rate_id |
Credit Tax Rate | — | requires_entity_settings=direct_expenses_enable_double_entry | picker (debit/credit side, double entry) | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.debit_tax_amount |
Debit Tax Amount | — | requires_entity_settings=direct_expenses_enable_double_entry | money (debit/credit side) | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.credit_tax_amount |
Credit Tax Amount | — | requires_entity_settings=direct_expenses_enable_double_entry | money (debit/credit side) | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.external_debit_tag_ids |
Debit Tag | — | requires_entity_settings=direct_expenses_enable_double_entry | multiselect column | sheetgrid-ext | |
| DE | line | direct_expense_line_fields.external_credit_tag_ids |
Credit Tag | — | requires_entity_settings=direct_expenses_enable_double_entry | multiselect column | sheetgrid-ext |
Non-feature inputs (95+), 114 rows #
Every input from scans [1]–[7] of the inventory that is not a feature: entity settings, accounting config fields, metadata flags, capabilities, number decisions, validation points, the 18 statuses, document/permission/onboarding (R2.9, 2026-10-23). ctx field = kunci ReviewContext; Fixture id = the named context in libs/typescript/utils/src/review/fixtures/contexts/ that exercises it. Status backend = a gap only bonsapi can close; the kit tolerates it. The full list of read sites is attached to ENG-9191.
| # | Area | Input | Types | ctx field | Mekanisme kit | Status | Fixture id | Approved |
|---|---|---|---|---|---|---|---|---|
| 95 | Input: entity setting | ap_bills_enable_double_entry |
AP | entity.settings.ap_bills_enable_double_entry |
rules-settings publishAllowed (publish gate), catalog requires/excluded read document.isDoubleEntry |
covered | xero.apBill.doubleEntry, moneyForward.apBill.doubleEntry |
|
| 96 | Input: entity setting | ar_invoices_enable_double_entry |
AR | entity.settings.ar_invoices_enable_double_entry |
publishAllowed; columns from document.isDoubleEntry |
covered | xero.arInvoice.doubleEntry |
|
| 97 | Input: entity setting | direct_expenses_enable_double_entry |
DE | entity.settings.direct_expenses_enable_double_entry |
publishAllowed; columns from document.isDoubleEntry |
covered | xero.directExpense.doubleEntry |
|
| 98 | Input: entity setting | bank_statements_enable_double_entry |
BS | entity.settings.bank_statements_enable_double_entry |
publishAllowed + applyEntitySettings (contra defaults only with supports_double_entry_bank_statement) |
covered | freeAgent.bankStatement.doubleEntry |
|
| 99 | Input: entity setting | line_item_tax_amount_override_enabled |
AP CN | entity.settings.line_item_tax_amount_override_enabled |
taxOverrideEnabled → applyEntitySettings tax_amount readOnly |
covered | xero.apBill.taxOverrideOff |
|
| 100 | Input: entity setting | ar_invoices_line_item_tax_amount_override_enabled |
AR CN | entity.settings.ar_invoices_line_item_tax_amount_override_enabled |
taxOverrideEnabled |
covered | xero.arInvoice.taxOverrideOff |
|
| 101 | Input: entity setting | direct_expenses_line_item_tax_amount_override_enabled |
DE | entity.settings.direct_expenses_line_item_tax_amount_override_enabled |
taxOverrideEnabled × features.directExpenseTaxOverride |
covered | xero.directExpense.draft |
|
| 102 | Input: entity setting | account_type_column_enabled |
AP AR DE CN | entity.settings.account_type_column_enabled |
accountTypeColumnOn → applyEntitySettings |
covered | xero.apBill.accountTypeOff |
|
| 103 | Input: entity setting | auto_publish_{ap_bills,ar_invoices,direct_expenses,bank_statements,ap_credit_notes,ar_credit_notes}_enabled |
AP AR DE CN BS | entity.settings.auto_publish_* |
autoPublishes → footer.primaryPublishes |
covered | xero.apBill.autoPublish, xero.allTypes.autoPublish |
|
| 104 | Input: entity setting | ap/ar_credit_notes_accounting_status_on_publish |
CN | entity.settings.*_credit_notes_accounting_status_on_publish |
container (WASM validator input) | container | — | |
| 105 | Input: entity setting | ar_invoices_accounting_invoice_status_on_publish / _on_verify |
AR | entity.settings.ar_invoices_accounting_invoice_status_on_* |
container (WASM validator input) | container | — | |
| 106 | Input: entity setting | {type}_enabled ×6 (+ credit_note flag) |
AP AR DE CN BS | entity.typesEnabled |
applyEntitySettings keeps “Change type” only with another type |
covered | xero.apBill.typesEnabled |
|
| 107 | Input: entity setting | snippet_type, ai_auto_split_type, ai_page_classification_type |
AP AR DE CN BS | — (not in §1) |
container (document panel actions, snippet hold) | container | — | |
| 108 | Input: entity setting | calculation_decimals |
AP AR DE CN | entity.settings.calculation_decimals |
resolveNumbers step (d) |
covered | nonIntegrated.apBill.calculationDecimals |
|
| 109 | Input: entity setting | extraction_config (per type) |
AP AR DE CN | entity.settings.extraction_config.{type}.* |
resolveNumbers step (b), credit notes their own key |
covered | nonIntegrated.apBill.japanPreset, nonIntegrated.apCreditNote.ownRounding |
|
| 110 | Input: entity setting | multi_currency_enabled (entity) |
AP AR DE | entity.settings.multi_currency_enabled |
canCreate(currency) without a connection (P: the read had no effect) |
covered | nonIntegrated.apBill.multiCurrency |
|
| 111 | Input: entity setting | hidden_extraction_fields |
AP AR DE BS CN | entity.settings.{type}.hidden_extraction_fields |
notHidden (full catalog names; CN obey the parent list) |
covered | xero.apBill.hiddenFields, xero.apCreditNote.hiddenByParent |
|
| 112 | Input: entity setting | validate_total_amount |
AP AR DE CN | entity.settings.{type}.validate_total_amount |
validatesTotal → applyValidationPolicy check.blocking + total_mismatch |
covered | xero.apBill.totalCheckOff, xero.directExpense.totalCheckOff |
|
| 113 | Input: entity setting | validate_tax_identification_number |
AP AR DE CN | entity.settings.{type}.validate_tax_identification_number |
validatesTaxId → counterparty.taxId.blocking + tax_id_mismatch |
covered | xero.apBill.taxIdCheckOff, xero.arInvoice.validationOff |
|
| 114 | Input: entity setting | is_contact_tax_identification_number_sync_enabled |
AP AR DE CN | entity.settings.{type}.is_contact_tax_identification_number_sync_enabled |
container (verify command side effect) | container | — | |
| 115 | Input: entity setting | csv_export_target |
AP AR DE BS | entity.settings.{type}.csv_export_target |
container (export dialog) | container | — | |
| 116 | Input: entity setting | bank_statement.enable_multi_account |
BS | entity.settings.bank_statement.enable_multi_account |
bankStatementPolicy → canAddSection, rowActions move |
covered | xero.bankStatement.singleAccount |
|
| 117 | Input: entity setting | bank_statement.enable_child_transactions |
BS | entity.settings.bank_statement.enable_child_transactions |
bankStatementPolicy → rowActions add_child |
covered | xero.bankStatement.noChildRows |
|
| 118 | Input: entity setting | bank_statement.validate_opening_closing_balance |
BS | entity.settings.bank_statement.validate_opening_closing_balance |
bankStatementPolicy → check rows opening/closing |
covered | xero.bankStatement.checksOff |
|
| 119 | Input: entity setting | bank_statement.validate_credit_debit_total |
BS | entity.settings.bank_statement.validate_credit_debit_total |
check rows total debit/credit | covered | xero.bankStatement.checksOff |
|
| 120 | Input: entity setting | bank_statement.validate_subtotal |
BS | entity.settings.bank_statement.validate_subtotal |
check row subtotal | covered | xero.bankStatement.checksOff |
|
| 121 | Input: entity setting | bank_statement.validate_per_line_balance |
BS | entity.settings.bank_statement.validate_per_line_balance |
row status kept only while on | covered | xero.bankStatement.checksOff |
|
| 122 | Input: entity setting | auto_ready_*, auto_done_after_* |
AP AR DE CN BS | — (not in §1) |
out of kit (onboarding automation panel) | container | — | |
| 123 | Input: accounting config | tax_calculation (Internal/None/External) |
AP AR DE CN | integration.accountingConfig.tax_calculation |
priceBasisAllowed (forced no tax), tax columns, requiredBy, external tax field |
covered | xeroNoTax.apBill.draft, qboUs.arInvoice.externalTax |
|
| 124 | Input: accounting config | line_level_tax_type |
AP AR DE CN | integration.accountingConfig.line_level_tax_type |
lineTaxIsToggle + catalog configNonNull |
covered | qboUs.arInvoice.externalTax |
|
| 125 | Input: accounting config | extraction_level_tax_type |
AR | integration.accountingConfig.extraction_level_tax_type |
header external_tax_rate_id rule |
covered | qboUs.arInvoice.externalTax |
|
| 126 | Input: accounting config | tax_calculation_mode |
AP AR DE CN | integration.accountingConfig.tax_calculation_mode → numbers.taxMode |
resolveNumbers + lineTaxAmountShown |
covered | qbo.apBill.accrued, zoho.apBill.tags |
|
| 127 | Input: accounting config | rounding_method / tax_rounding_method |
AP AR DE CN | integration.accountingConfig.rounding_method → numbers.rounding |
resolveNumbers; calculator in the adapter |
covered | nonIntegrated.apBill.japanPreset |
|
| 128 | Input: accounting config | *_decimal_places (line, tax, unit price, quantity) |
AP AR DE CN | integration.accountingConfig.*_decimal_places → numbers.decimals |
resolveNumbers step (c) |
covered | qbo.apBill.accrued, freee.apBill.zeroDecimals |
|
| 129 | Input: accounting config | total_decimal_places |
AP AR DE CN | — (not in ctx) |
total follows line decimals, as bonsapi | backend | freee.apBill.zeroDecimals |
|
| 130 | Input: accounting config | supports_tax_override |
AP AR DE CN | — (not in ctx) |
nothing reads it today | backend | — | |
| 131 | Input: accounting config | supports_tax_group_override |
AP AR DE CN | integration.accountingConfig.supports_tax_group_override |
container-only (calculator; adapter makes tax-group rows editable) | container | — | |
| 132 | Input: accounting config | calculate_groups_by_tax_components |
AP AR DE CN | integration.accountingConfig.calculate_groups_by_tax_components |
container-only (calculator) | container | — | |
| 133 | Input: accounting config | supports_line_amount_types |
AP AR DE CN | integration.accountingConfig.supports_line_amount_types |
priceBasisAllowed options + catalog configOn |
covered | qboUs.arInvoice.externalTax |
|
| 134 | Input: accounting config | empty_is_auto_tax |
AR | integration.accountingConfig.empty_is_auto_tax |
container-only (calculator / footer hint) | container | — | |
| 135 | Input: metadata | discounts_enabled (QBO) |
AR CN | integration.metadata.discounts_enabled |
header discount rule (metadataOn) |
covered | qbo.arInvoice.salesOptions |
|
| 136 | Input: metadata | address_for_sale_enabled (QBO) |
AR | integration.metadata.address_for_sale_enabled |
catalog requiresMetadataFlag |
covered | qbo.arInvoice.salesOptions |
|
| 137 | Input: metadata | deposits_enabled (QBO) |
AR | integration.metadata.deposits_enabled |
header deposit rule |
covered | qbo.arInvoice.salesOptions |
|
| 138 | Input: metadata | allow_service_date (QBO) |
AR | integration.metadata.allow_service_date |
line service_date rule |
covered | qbo.arInvoice.salesOptions |
|
| 139 | Input: metadata | use_account_numbers (QBO) |
AP AR DE CN | integration.metadata.use_account_numbers (→ features.accountCode) |
container (account option labels) | container | — | |
| 140 | Input: metadata | country_code (QBO US, Zoho, Sage) |
AP AR DE CN | integration.metadata.country_code (→ features) |
provider config served (QBO US) + features; container | container | qboUs.arInvoice.externalTax |
|
| 141 | Input: metadata | pays_tax (QBO, Xero) |
AP AR DE CN | integration.metadata.pays_tax |
requiredBy(line.tax_rate); canCreate(taxRate) via features.paysTax |
covered | xero.arInvoice.draft, xeroNoTax.arInvoice.draft |
|
| 142 | Input: metadata | multi_currency_enabled (connection) |
AP AR DE CN | integration.metadata.multi_currency_enabled (→ features.multiCurrency) |
canCreate(currency) via features |
covered | xero.apBill.draft |
|
| 143 | Input: metadata | base_currency, default_item_id, book_close_date |
AP AR DE CN | integration.metadata.* |
container (WASM validator) | container | — | |
| 144 | Input: metadata | invoice_auto_number_disabled (Zoho) |
AR | integration.metadata.invoice_auto_number_disabled (→ features.salesNumberRequired) |
requiredBy(invoice_number) |
covered | zoho.arInvoice.ownNumbering |
|
| 145 | Input: metadata | FreeAgent company fields |
AP AR DE CN | integration.metadata.freeagent_company.* |
container (WASM validator) | container | — | |
| 146 | Input: metadata | short_code, bank_feed_connections (Xero) |
BS | integration.metadata.short_code / bank_feed_connections |
container (link) / BS adapter → section.status.connected | container | xero.bankStatement.twoAccounts |
|
| 147 | Input: metadata | books_domain, organization_id, subdomain, country_id (links) |
AP AR DE CN BS | — (container builds the link) |
container (profile.documentUrl in @bonsai/utils) | container | — | |
| 148 | Input: metadata | supports_contact_tax_identification_number (Zoho) |
AP AR DE CN | integration.features.contacts.taxId |
container (contact dialogs) | container | — | |
| 149 | Input: capability | can_publish |
AP AR DE | integration.capabilities (can_publish) |
publishAllowed everywhere (P: no raw flag) |
covered | status.READY |
|
| 150 | Input: capability | can_publish_credit_note / can_publish_ap_credit_note |
CN | integration.capabilities |
publishAllowed per CN type |
covered | xero.apCreditNote.draft, xero.arCreditNote.draft |
|
| 151 | Input: capability | can_publish_bank_statement |
BS | integration.capabilities |
publishAllowed (P: capability, not the list) |
covered | zoho.bankStatement.draft |
|
| 152 | Input: capability | supports_double_entry_bank_statement |
BS | integration.capabilities |
publishAllowed + contra defaults; tofu-web schema lacks it |
backend | freeAgent.bankStatement.doubleEntry |
|
| 153 | Input: capability | can_publish_attachments |
AP AR DE | integration.capabilities |
container (attachment hint in the publish dialog) | container | — | |
| 154 | Input: capability | can_create_contacts |
AP AR DE CN BS | options.canCreate.contact |
canCreate(contact) → allowCreate |
covered | perm.noIntegrationWrite |
|
| 155 | Input: capability | can_create_currencies |
AP AR DE CN | options.canCreate.currency |
canCreate(currency) |
covered | xero.apBill.draft |
|
| 156 | Input: capability | can_create_accounts |
AP AR DE CN | options.canCreate.account |
canCreate(account) |
covered | xero.apBill.draft |
|
| 157 | Input: capability | can_create_tax_rates |
AP AR DE CN | options.canCreate.taxRate |
canCreate(taxRate) (+ pays_tax, not QBO US) |
covered | xeroNoTax.apBill.draft, qboUs.apBill.noTax |
|
| 158 | Input: capability | can_create_bank_account |
BS | options.canCreate.bankAccount |
canCreate(bankAccount) (P: gated) |
covered | zoho.bankStatement.draft |
|
| 159 | Input: capability | can_create_items |
AP AR DE CN | options.canCreate.item |
canCreate(item) (P: capability) |
covered | nonIntegrated.apBill.internal |
|
| 160 | Input: capability | has_header_level_tags |
AP AR DE CN | integration.capabilities → features.tags.headerLevel |
tagColumnsFor(TRANSACTION) + catalog requiresCapability (P: capability) |
covered | zoho.apBill.tags, freeAgent.apBill.draft, dynamicsBc.apBill.draft |
|
| 161 | Input: capability | can_sync_contact_tax_identification_number |
AP AR DE CN | integration.capabilities |
container (verify command) | container | — | |
| 162 | Input: capability | supports_invoice_status_on_publish / default_invoice_status_on_publish |
AR CN | — (not in ctx) |
container (validator status) | container | — | |
| 163 | Input: numbers | Decimal resolver order |
AP AR DE CN BS | numbers.decimals |
resolveNumbers (one rule for decimals and rounding; BS like every type) |
covered | nonIntegrated.apBill.jpy, freee.apBill.zeroDecimals |
|
| 164 | Input: numbers | Minimum shown decimals = 2 |
AP AR DE CN BS | numbers.minDecimals |
applyNumbers → model.format; formatAmount |
covered | xero.apBill.draft |
|
| 165 | Input: numbers | Typed number parsing |
AP AR DE CN BS | — (kit function) |
parseAmount: refuse comma decimal with an error |
covered | — | |
| 166 | Input: numbers | Date parsing |
AP AR DE CN BS | — (decision pending, §3.2) |
one parser with the date cell (M3.5.2) | sheetgrid-ext | — | |
| 167 | Input: numbers | Tax rate decimals 6 (DE was 2) |
AP AR DE CN | numbers.decimals.taxRate |
resolveNumbers → 6 for every type |
covered | xero.directExpense.draft |
|
| 168 | Input: numbers | Display locale en-US |
AP AR DE CN BS | numbers.locale |
applyNumbers → model.format.locale (en-US until decided) |
covered | xero.apBill.draft |
|
| 169 | Input: numbers | Total reconciliation and external-tax formula |
AR | — (adapter) |
adapter changeRows with the backend formula |
container | qboUs.arInvoice.externalTax |
|
| 170 | Input: validation | Live form validation (zod + WASM) |
AP AR DE CN | — (container runs WASM) |
results enter as field.error / cell.error / notices | container | — | |
| 171 | Input: validation | Mark ready client gates (≥1 line, total, tax ID) |
AP AR DE CN BS | entity.settings.{type}.validate_* |
applyValidationPolicy → footer.primaryBlockedBy |
covered | xero.apBill.totalCheckOff, xero.directExpense.totalCheckOff |
|
| 172 | Input: validation | Mark done (onboarding) blocked dialog |
AP AR DE | permissions.isAdmin |
applyPermissions → check.canTurnOff |
covered | perm.notAdmin |
|
| 173 | Input: validation | BS publish ignores the validation toggles |
BS | — |
kit mirrors the toggles; backend runs all on publish | backend | xero.bankStatement.checksOff |
|
| 174 | Input: validation | Mandatory tag roots have no blocking rule |
AP AR DE CN | entity.tagRoots[].mandatory |
tagColumnsFor → column.mandatory (no block) |
backend | zoho.apBill.tags |
|
| 175 | Input: validation | New bank account needs an account number |
BS | — |
tolerated: backend rejects; dialog in container | backend | — | |
| 176 | Input: validation | Credit note tax ID: client blocks, backend never checks |
CN | entity.settings.{parent}.validate_tax_identification_number |
kit blocks as the client does; backend gap recorded | backend | xero.apCreditNote.draft |
|
| 177 | Input: document / permission / onboarding | document.isDoubleEntry (per document) |
AP AR DE | document.isDoubleEntry |
catalog double-entry rules + applyEntitySettings |
covered | xero.apBill.doubleEntry |
|
| 178 | Input: document / permission / onboarding | Duplicates |
AP AR DE CN BS | document.duplicates |
applyValidationPolicy → notice possible_duplicate |
covered | xero.apBill.duplicates |
|
| 179 | Input: document / permission / onboarding | Pages read / held (partial read) |
BS | document.pages |
applyDocumentLock → section.pages |
covered | onboarding.bankStatement.pagesHeld |
|
| 180 | Input: document / permission / onboarding | Error phase |
AP AR DE CN BS | document.errorPhase |
applyValidationPolicy → notice error |
covered | status.ERROR |
|
| 181 | Input: document / permission / onboarding | Published / exported edit warning, accounting link |
AP AR DE CN BS | document.isPublished / lastExportedAt / externalId |
applyDocumentLock → notices + open_in_provider |
covered | status.PUBLISHED, status.EXPORTED |
|
| 182 | Input: document / permission / onboarding | Integration disconnected |
AP AR DE CN BS | integration.state |
notice disconnected; no internal fallback |
covered | disconnected.xero.apBill |
|
| 183 | Input: document / permission / onboarding | Internal accounting (no integration) |
AP AR DE CN BS | entity.internalAccounting |
tagColumnsFor internal roots; options from the container |
covered | nonIntegrated.apBill.internal, nonIntegrated.apBill.noInternal |
|
| 184 | Input: document / permission / onboarding | Permission INVOICE:update / read |
AP AR DE CN BS | permissions.canUpdate / canRead |
applyPermissions → read_only lock |
covered | perm.noUpdate, perm.noRead |
|
| 185 | Input: document / permission / onboarding | Permission INVOICE_VERIFICATION:update / delete |
AP AR DE CN BS | permissions.canVerify / canDelete |
applyPermissions → no_permission block, menu |
covered | perm.noVerify, perm.noDelete |
|
| 186 | Input: document / permission / onboarding | INTEGRATION:write for inline create |
AP AR DE CN BS | permissions.canWriteIntegration |
canCreate |
covered | perm.noIntegrationWrite |
|
| 187 | Input: document / permission / onboarding | Impersonation / trial cap |
AP AR DE CN BS | permissions.isImpersonating / trialBlocked |
applyPermissions |
covered | perm.impersonating, perm.trialBlocked |
|
| 188 | Input: document / permission / onboarding | Onboarding lock, limit, units, demo |
AP AR DE CN BS | onboarding.* |
applyDocumentLock (lock derived from status; demo never locks) |
covered | onboarding.apBill.ready, onboarding.apBill.limitReached, onboarding.apBill.demo |
|
| 189 | Input: document / permission / onboarding | Onboarding discount loop |
AP AR DE CN BS | onboarding.discount |
container (chat shell) | container | — | |
| 190 | Input: document / permission / onboarding | Locale, RTL, date format |
AP AR DE CN BS | locale.* |
container (labels, dir, formatted dates) | container | — | |
| 191 | Input: status | ExtractionStatus PENDING |
AP AR DE CN BS | status |
STATUS_TABLE → busy lock, no primary |
covered | status.PENDING |
|
| 192 | Input: status | ExtractionStatus PROCESSING |
AP AR DE CN BS | status |
STATUS_TABLE → busy, processing notice |
covered | status.PROCESSING |
|
| 193 | Input: status | ExtractionStatus AWAITING_PROCESSING |
AP AR DE CN BS | status |
STATUS_TABLE → busy, processing notice |
covered | status.AWAITING_PROCESSING |
|
| 194 | Input: status | ExtractionStatus DRAFT |
AP AR DE CN BS | status |
STATUS_TABLE → Mark ready |
covered | status.DRAFT |
|
| 195 | Input: status | ExtractionStatus NEEDS_REVIEW |
AP AR DE CN BS | status |
STATUS_TABLE → Mark ready |
covered | status.NEEDS_REVIEW |
|
| 196 | Input: status | ExtractionStatus REVIEW_LATER |
AP AR DE CN BS | status |
STATUS_TABLE → Mark ready |
covered | status.REVIEW_LATER |
|
| 197 | Input: status | ExtractionStatus VERIFIED |
AP AR DE CN BS | status |
STATUS_TABLE → static (edit closed), publish/export |
covered | status.VERIFIED |
|
| 198 | Input: status | ExtractionStatus ERROR |
AP AR DE CN BS | status |
STATUS_TABLE → unread lock |
covered | status.ERROR |
|
| 199 | Input: status | ExtractionStatus LIMIT_REACHED |
AP AR DE CN BS | status |
STATUS_TABLE → limit notice, Mark done |
covered | status.LIMIT_REACHED |
|
| 200 | Input: status | ExtractionStatus DELETING |
AP AR DE CN BS | status |
STATUS_TABLE → deleting notice |
covered | status.DELETING |
|
| 201 | Input: status | ExtractionStatus DELETED |
AP AR DE CN BS | status |
STATUS_TABLE → deleted notice, revert |
covered | status.DELETED |
|
| 202 | Input: status | ExtractionStatus MANUAL_CLEANUP |
AP AR DE CN BS | status |
STATUS_TABLE → static, Mark done |
covered | status.MANUAL_CLEANUP |
|
| 203 | Input: status | ExtractionStatus EXPORTING |
AP AR DE CN BS | status |
STATUS_TABLE → busy |
covered | status.EXPORTING |
|
| 204 | Input: status | ExtractionStatus EXPORTED |
AP AR DE CN BS | status |
STATUS_TABLE → Mark done, export, edit warning |
covered | status.EXPORTED |
|
| 205 | Input: status | ExtractionStatus PUBLISHING |
AP AR DE CN BS | status |
STATUS_TABLE → publishing notice |
covered | status.PUBLISHING |
|
| 206 | Input: status | ExtractionStatus PUBLISHED |
AP AR DE CN BS | status |
STATUS_TABLE → Mark done, edit warning, link |
covered | status.PUBLISHED |
|
| 207 | Input: status | ExtractionStatus DONE |
AP AR DE CN BS | status |
STATUS_TABLE → export |
covered | status.DONE |
|
| 208 | Input: status | ExtractionStatus READY |
AP AR DE CN BS | status |
STATUS_TABLE → publish / export |
covered | status.READY |
Input summary: backend 7, container 23, covered 83, sheetgrid-ext 1
Acceptance criteria (skeleton, ENG-9191) #
Rows from the features table whose Types include the type; dropped rows are left out. Filled in review by Estu, Koki and Ryota: a row counts once its Approved cell says yes. Onboarding-only rows (OB) are listed apart: the kit gives them to every type, so the reviewers decide whether each one is a criterion too.
Acceptance criteria M3.5.5 (direct expense, ENG-9196) #
- Document: #1, #2, #3, #4, #5, #6, #8, #9, #10, #11, #12, #13, #14
- Verdict: #24, #26, #27, #28, #30
- Header fields: #33, #34, #35, #36, #42
- Lines: #44, #45, #46, #50, #52, #53, #54, #56, #57, #62, #63, #66, #67, #70, #71
- Footer: #73, #74, #78, #79
- Document panel: #80
- Input (95+): #97, #101, #102, #103, #106, #107, #108, #109, #110, #111, #112, #113, #114, #115, #122, #123, #124, #126, #127, #128, #129, #130, #131, #132, #133, #139, #140, #141, #142, #143, #145, #147, #148, #149, #153, #154, #155, #156, #157, #159, #160, #161, #163, #164, #165, #166, #167, #168, #170, #171, #172, #174, #177, #178, #180, #181, #182, #183, #184, #185, #186, #187, #188, #189, #190, #191, #192, #193, #194, #195, #196, #197, #198, #199, #200, #201, #202, #203, #204, #205, #206, #207, #208
- Total: 43 rows
- Onboarding-only (
OB), to decide: #7, #15, #31, #47, #48, #49, #68, #76, #77, #81, #82
Acceptance criteria M3.5.6 (bank statement, ENG-9197) #
- Document: #1, #2, #3, #4, #5, #6, #8, #9, #10, #11, #12, #13, #14
- Account (BS): #16, #17, #18, #19, #20, #21, #22
- Verdict: #26, #29, #32
- Header fields: #33, #34, #35, #36, #43
- Lines: #44, #45, #46, #52, #53, #54, #55, #56, #57, #58, #59, #60, #61, #63, #64, #65, #67, #69, #70, #71, #72
- Footer: #74, #75, #78
- Document panel: #80
- Input (95+): #98, #103, #106, #107, #111, #115, #116, #117, #118, #119, #120, #121, #122, #146, #147, #151, #152, #154, #158, #163, #164, #165, #166, #168, #171, #173, #175, #178, #179, #180, #181, #182, #183, #184, #185, #186, #187, #188, #189, #190, #191, #192, #193, #194, #195, #196, #197, #198, #199, #200, #201, #202, #203, #204, #205, #206, #207, #208
- Total: 53 rows; dropped and left out: #23
- Onboarding-only (
OB), to decide: #7, #15, #31, #47, #48, #49, #68, #76, #77, #81, #82
Acceptance criteria M3.5.7 (credit notes, ENG-9198) #
- Document: #1, #2, #3, #4, #5, #6, #8, #9, #10, #11, #12, #13, #14
- Verdict: #24, #26, #27, #28, #30
- Header fields: #33, #34, #35, #36, #38, #39, #40, #41
- Lines: #44, #45, #46, #51, #52, #53, #54, #56, #57, #62, #67, #71
- Footer: #73, #74, #78
- Document panel: #80
- Input (95+): #99, #100, #102, #103, #104, #106, #107, #108, #109, #111, #112, #113, #114, #122, #123, #124, #126, #127, #128, #129, #130, #131, #132, #133, #135, #139, #140, #141, #142, #143, #145, #147, #148, #150, #154, #155, #156, #157, #159, #160, #161, #162, #163, #164, #165, #166, #167, #168, #170, #171, #174, #176, #178, #180, #181, #182, #183, #184, #185, #186, #187, #188, #189, #190, #191, #192, #193, #194, #195, #196, #197, #198, #199, #200, #201, #202, #203, #204, #205, #206, #207, #208
- Total: 42 rows
- Onboarding-only (
OB), to decide: #7, #15, #31, #47, #48, #49, #68, #76, #77, #81, #82