import { type DateSlot, type MoneySlot, type SelectSlot, type ShapeBaseProps, type ShapeFrameProps, type ShapeTabs, type Stage, type TextSlot } from "./shape_frame"; /** * THE TRANSACTION LEDGER — dated movements in a book: bank lines, journal * entries, stock movements, metered usage. *"Does this period reconcile, and * what is still unexplained?"* * * The row is the date, the counterparty, the kind of movement, ONE signed amount * — never paired in/out columns — and whether its document is in, where absence * is the information; the visible rows add up at the FOOT of the amount column, * which is where the figures they sum already end. The strip, where there is * one, is the BOOKS, never the periods or the kinds: a period is a filter and a * kind is a column. The record is a drawer, because a line has little of its * own. * * It takes `above` and NOT `totals`: the amount column is always summed at the * register's foot, and a register states that or a band under itself, never both * — so a `totals` here could not draw. */ export interface TransactionLedgerProps extends ShapeBaseProps, Pick, "above" | "group" | "groups"> { /** The `when` role — the line's date, and the HOUR where the field carries one. */ when: DateSlot; /** The `amount` role — the one signed amount. */ amount: MoneySlot; /** The `identity` role — THE LINE'S OWN NUMBER: an invoice's số + ký hiệu, a * voucher's reference, a statement line's id. A book of chứng từ is reconciled * AGAINST the paper, so the number is what a reader matches a line by. */ reference?: TextSlot; /** The `party` role — the counterparty. */ party?: TextSlot; /** WHAT KIND OF MOVEMENT THIS LINE IS — a select whose option the row wears * beside the counterparty, in the option's own colour. Separate from * {@link tabs}, which is the BOOKS. */ classification?: SelectSlot; /** * WHETHER THE LINE'S EVIDENCE IS IN — a required SET counted against what the * row has, or a single VERDICT the book already holds. * * The set is the `expected_set` role: `required` is a FUNCTION wherever it is * conditioned on the row — a payment out owes a contract and an invoice where * a receipt in owes neither. * * The verdict is the `verdict` role: a boolean or a formula answering "is this * line covered". One or the other, never both — two answers to one question in * one column is the defect, not the cure. */ document?: { label: string; required: readonly Stage[] | ((row: T) => readonly Stage[]); present: (row: T) => readonly string[]; verdict?: never; } | { label: string; /** True where the line is covered — the kit's verdict mark; false where * its paper is not in — the empty slot's own ghost; `null` where the * book has not said, which draws nothing. */ verdict: (row: T) => boolean | null | undefined; required?: never; present?: never; }; /** The books — one per source or account. */ tabs?: ShapeTabs; } export declare function TransactionLedger(props: TransactionLedgerProps): import("react").JSX.Element;