Skip to main content

Viability · proof

Tax-ready methodology & limitations

Last updated: July 19, 2026

Visual proof of correctness

Close → attestation → export receipt

The brand is auditable artifacts, not neon dashboards. Step through what Close + Attest produces — then verify offline with open verification tooling.

Every close input becomes a graph node with a reproducible state: open, matched, settled, attested, or carried forward.

Tax-ready methodology → · Guided sandbox →

{
  "period": "2026-05",
  "closePolicyVersion": "close-graph-v1",
  "canonicalLedger": "matched/unmatched source of truth",
  "nodeStates": {
    "open": 1,
    "matched": 14,
    "settled": 9,
    "attested": 4,
    "carried_forward": 1
  }
}

Product spine

Close Graph

A period-close model where each close input is a weighted readiness gate with evidence — not scattered checklist folklore.

In production today, Close Graph readiness is computed from DB-backed gates: categorized transactions, pending review, bank reconciliations, ledger balance, open AR (SENT invoices), and open AP (APPROVED bills). Imported Stripe/payroll expectation feeds and hash-chained carry-forward notes are on the roadmap — shown below as such, not as shipped workspace features.

Node lifecycle

Open
Matched
Settled
Attested
Carried forward

Transaction

shipped

Plaid row, CSV import, exchange/on-chain activity

Must be categorized with no pending-review rows before close.

Reconciliation item

shipped

Bank reconciliation difference, duplicate suspect, feed gap

Open or in-progress reconciliations block close.

Invoice / AR expectation

shipped

Customer invoices in SENT status (AR posted to GL until paid)

SENT invoices are open AR close blockers; Mark Sent posts Dr AR / Cr Revenue; Mark Paid applies cash.

Bill / AP expectation

shipped

Vendor bills in APPROVED status (AP posted to GL until paid)

APPROVED bills are open AP close blockers; Approve posts Dr Expense / Cr AP; Mark Paid clears AP.

Compensation expectation

roadmap

Gusto/Deel/ADP/PEO register import, contractor accrual (import evaluators)

Evaluator + Verify taxonomy exist; not yet a persisted readiness gate in the workspace close score.

Settlement anchor

roadmap

Should-settle vs did-settle evidence (Plaid ACH, Stripe payout, on-chain) via the Verify evaluator

Verify evaluator only — not yet a persisted readiness gate in the workspace close score.

Tax remittance expectation

roadmap

Stripe Tax report import (manual CSV or auto-fetched via report-ready webhook) vs filing/remittance evidence

Verify evaluator only — not yet a persisted readiness gate in the workspace close score.

Readiness formula

readiness = round((sum(weight for passed nodes) / sum(all node weights)) * 100)

Shipped gates block close when they fail. Roadmap node types (compensation imports, hashed carry-forward) are labeled separately and do not yet change the production score.

Carry-forward with content-hashed note (roadmap)

Planned as a first-class graph transition with hashed operator notes in the evidence package. Today, open AR/AP and recon items must be cleared (paid/voided/completed) or they block close.

Evidence package

  • Period readiness checks (weights, pass/fail, issue classes)
  • Locked trial balance and statement exports
  • Lawenots Verify findings for import / native close
  • AR/AP invoice and bill status with GL journal references when posted
  • Export receipts with SHA-256 content hashes and source revision
  • Close + Attest metadata when enabled (Merkle root, Ed25519 signature, public key id)
  • Roadmap: serialized subgraph with hash-chained node timeline + carry-forward notes

Hash-chained close timeline (roadmap)

Planned: every graph mutation records previousEventHash + eventBodyHash + actor + timestamp. Today, audit activity logs and readiness checklists are the shipped evidence trail.

{
  "eventId": "evt_close_01HW...",
  "nodeId": "node_txn_9421",
  "transition": "matched -> settled",
  "actor": "user_123",
  "previousEventHash": "b83f...19aa",
  "eventBodyHash": "ad91...0e7c",
  "eventHash": "1c4d...91bf"
}
[
  {
    "id": "check_categorized",
    "type": "transaction",
    "state": "settled",
    "label": "All period transactions categorized",
    "weight": 20,
    "maturity": "shipped"
  },
  {
    "id": "check_reconciliation",
    "type": "reconciliation_item",
    "state": "matched",
    "label": "Bank reconciliations completed",
    "weight": 20,
    "maturity": "shipped"
  },
  {
    "id": "check_ar",
    "type": "ar_expectation",
    "state": "open",
    "label": "SENT invoice INV-12 unpaid",
    "weight": 10,
    "maturity": "shipped"
  },
  {
    "id": "check_ap",
    "type": "ap_expectation",
    "state": "open",
    "label": "APPROVED bill BILL-4 unpaid",
    "weight": 10,
    "maturity": "shipped"
  }
]
{
  "period": "2026-05",
  "closePolicyVersion": "close-graph-v1-shipped-gates",
  "readinessFormula": "readiness = round((sum(weight for passed nodes) / sum(all node weights)) * 100)",
  "canonicalLedger": "single books ledger for transactions and AR/AP journals",
  "shippedGates": [
    "categorized",
    "pending",
    "reconciliation",
    "ledger",
    "ar_expectation",
    "ap_expectation"
  ],
  "evidencePackage": "readiness checks + locked trial balance + AR/AP GL refs + export receipts + optional attestation metadata"
}

Close feeds

Revenue, settlement, compensation, and tax remittance feeds one close engine

Lawenots is not a bill-pay rail, payroll tax engine, or tax remittance service. Customer invoices and vendor bills post to the GL and feed shipped AR/AP readiness gates. Imported Stripe/settlement/comp/tax expectation evaluators exist for Verify; settlement, compensation, and tax remittance import nodes remain roadmap for the production close score.

Expectation objects

Shipped: invoices and bills as AR/AP close gates with GL journals. Roadmap: imported provider expectations (Stripe MRR, payroll registers, Stripe Tax collected-vs-remitted) as the same weighted readiness rollup.

Revenue / AR

nodeType: ar_expectation

shipped

Expected: Customer invoices (Mark Sent posts AR)

Observed: Mark Paid applies cash against AR; bank deposits remain in the ledger

Blocker: SENT invoices unpaid at close

Shipped GL + readiness gate — not a full invoicing suite

Settlement reconciliation

nodeType: settlement_anchor

roadmap

Expected: Imported settlement events that should couple to GL

Observed: GL references on settlement anchors

Blocker: Should-settle vs did-settle / missing GL refs

Roadmap for production close score — Verify evaluator today

Compensation reconciliation

nodeType: comp_expectation

roadmap

Expected: Comp run-rate and provider register imports (Gusto, Deel, ADP, PEO)

Observed: Posted GL and register rows (evaluator path)

Blocker: Register / GL discrepancy by close

Roadmap for production close score — Verify evaluator today

Tax remittance reconciliation

nodeType: tax_expectation

roadmap

Expected: Tax collected per jurisdiction/period (Stripe Tax report import)

Observed: Filing/remittance confirmation evidence per jurisdiction

Blocker: Collected-but-unremitted tax at close / remittance amount variance

Roadmap for production close score — Verify evaluator today

Crypto-leg evidence reuse

Crypto legs carry tx hash + FMV as evidence, reuse the lot and 8949 machinery, and can emit an outflow event into allocation drift when that module is provisioned.

{
  "id": "exp_settlement_usdc_2026_05_01",
  "module": "settlement",
  "provider": "Ethereum",
  "closeGraphNodeType": "settlement_anchor",
  "expectedAmount": 1200,
  "currency": "USD",
  "expectedAt": "2026-05-28T17:00:00Z",
  "evidence": {
    "txHash": "0x7e3a...91bc",
    "fmvUsd": 1200,
    "ledgerReference": "gl_44291"
  }
}

Lawenots Verify

Lawenots can review any books — and close them

Import QuickBooks, Xero, or CSV. Lawenots Verify surfaces close blockers, scores readiness, and returns a hashed readiness report that looks like a real close package. Works even if the client never migrates.

  • Standalone Close Readiness Check

    Import QB / Xero / CSV → Lawenots Verify flags uncategorized rows, duplicates, feed gaps, open recon, lot mismatch, and ledger imbalance → readiness score + fix list.

  • Firm / CPA mode

    A reviewer runs the check across client books they don't own. One CPA, many accounts — the multi-client distribution node.

  • Mini evidence artifact

    Every check produces a content-hashed readiness report with the same receipt look as a full close package — natural upsell to attested close.

  • Built-in migration path

    Every blocker fixed in the check is one step toward running the whole close on Lawenots. Import first; Close Graph when ready.

Import is the top of the funnel. Close Graph is the destination.

Close Graph model

Close Graph is Lawenots' named period-close model. Production readiness today is a weighted score over shipped DB-backed gates (transactions, reconciliations, ledger balance, settlement↔GL, open AR invoices, open AP bills). Roadmap types (compensation import expectations, hash-chained carry-forward) are labeled separately and do not yet change the workspace close score.

Transaction

shipped

Plaid row, CSV import, exchange/on-chain activity

Must be categorized with no pending-review rows before close.

Reconciliation item

shipped

Bank reconciliation difference, duplicate suspect, feed gap

Open or in-progress reconciliations block close.

Invoice / AR expectation

shipped

Customer invoices in SENT status (AR posted to GL until paid)

SENT invoices are open AR close blockers; Mark Sent posts Dr AR / Cr Revenue; Mark Paid applies cash.

Bill / AP expectation

shipped

Vendor bills in APPROVED status (AP posted to GL until paid)

APPROVED bills are open AP close blockers; Approve posts Dr Expense / Cr AP; Mark Paid clears AP.

Compensation expectation

roadmap

Gusto/Deel/ADP/PEO register import, contractor accrual (import evaluators)

Evaluator + Verify taxonomy exist; not yet a persisted readiness gate in the workspace close score.

Settlement anchor

roadmap

Should-settle vs did-settle evidence (Plaid ACH, Stripe payout, on-chain) via the Verify evaluator

Verify evaluator only — not yet a persisted readiness gate in the workspace close score.

Tax remittance expectation

roadmap

Stripe Tax report import (manual CSV or auto-fetched via report-ready webhook) vs filing/remittance evidence

Verify evaluator only — not yet a persisted readiness gate in the workspace close score.

Expectation objects: one engine, three feeds

Revenue / AR, settlement, and compensation aim at the same abstraction: typed expectation objects that feed readiness and Verify. Today, customer invoices and vendor bills are the shipped AR/AP path with GL posting. Compensation import expectations remain roadmap for the production close score.

  • Revenue / AR (shipped): Mark Sent posts receivables; unpaid SENT invoices block close; Mark Paid applies cash.
  • Settlement (shipped gate): should-settle vs did-settle with GL coupling on settlement anchors.
  • Compensation (roadmap): provider register imports evaluated for Verify; not yet a weighted workspace close gate.

Lawenots never moves money, runs disbursement, or becomes a payroll tax engine in this model. It posts AR/AP journals when invoices and bills are advanced, reconciles settlement evidence to GL, and blocks close while shipped gates remain open.

Node states and readiness formula

Each Close Graph node moves through the same lifecycle: open → matched → settled → attested → carried-forward. The period readiness score is a deterministic rollup of node weights and node states.

readiness = round((sum(weight for passed nodes) / sum(all node weights)) * 100)
  • Shipped score uses weighted DB gates (transactions, recon, ledger, open AR, open AP).
  • Open shipped gates are blockers; roadmap node types do not yet affect the production score.
  • The score is reproducible from the serialized checks, weights, and close policy — not a black box.

Open

Input exists but has not been matched to the canonical ledger or resolved for close.

Matched

Input has a canonical ledger match or approved accounting treatment.

Settled

Cash, crypto, or GL settlement evidence is attached and reconciled.

Attested

Evidence hash is included in the period package and optional Close + Attest proof chain.

Carried forward

Operator explicitly carries the item into the next period with a content-hashed note and reviewer-visible reason.

Evidence package

A close package is a serialized period subgraph for CPA or auditor review — not just a zip of PDFs. It contains the graph state, ledger outputs, issue history, and integrity metadata needed to reproduce what Lawenots scored and exported.

  • Period readiness checks (weights, pass/fail, issue classes)
  • Locked trial balance and statement exports
  • Lawenots Verify findings for import / native close
  • AR/AP invoice and bill status with GL journal references when posted
  • Export receipts with SHA-256 content hashes and source revision
  • Close + Attest metadata when enabled (Merkle root, Ed25519 signature, public key id)
  • Roadmap: serialized subgraph with hash-chained node timeline + carry-forward notes

Close timeline and carry-forward transition

Planned: every graph mutation records previousEventHash + eventBodyHash + actor + timestamp. Today, audit activity logs and readiness checklists are the shipped evidence trail. Carry-forward is also a formal graph transition: open -> carried_forward. It only passes readiness when the operator supplies a reviewer-visible, content-hashed note.

{
  "nodeId": "node_ap_2026_05_vendor_17",
  "reason": "Vendor invoice received after cutoff; obligation carried to 2026-06 close.",
  "contentSha256": "4f2a8d...c913",
  "reviewerVisible": true
}

Lawenots Verify — review any books

Lawenots Verify is the close-blocker classifier behind both native period close and the standalone Close Readiness Check. Import QuickBooks, Xero, or CSV — or run against books already on Lawenots — and get a readiness score, fix list, and content-hashed readiness report.

Firm / CPA mode lets a reviewer run the check across client books they do not own. Every blocker cleared in the check is one step toward running the whole close on the Close Graph. Positioning: Lawenots can review any books and close them.

Run the Close Readiness Check →

What “tax-ready” means here

Lawenots produces working papers and export artifacts (including Form 8949–compatible schedules) from your books and lot engine. “Tax-ready” means figures are traceable to underlying transactions and lots, generated under an explicit lot method, and accompanied by an export receipt (content hash + source revision). It does not mean CPA attestation, IRS acceptance, or filing on your behalf.

Lawenots is not a CPA firm, enrolled agent, or tax attorney. Confirm all outputs with your tax professional before filing.

Inputs

  • Posted books transactions and ledger entries for the selected period
  • Lot acquisitions/disposals (cost basis, proceeds, holding period)
  • Configured lot method (FIFO / Specific ID where enabled)
  • Bank feed and import provenance (when connected)
  • Optional settlement anchors coupled to the general ledger

Assumptions

  • Amounts are in the organization’s functional currency unless stated otherwise
  • Dates use the organization’s books timezone for day boundaries
  • Wash-sale detection is advisory and rule-based; edge cases may need manual review
  • Corporate actions (splits/mergers) require lot adjustments to be recorded before export
  • Missing categories or open reconciliations block period close via readiness checks

Sample scenarios we validate against

  • Wash sale (30-day window): disposal at a loss followed by substantially identical repurchase — flag + basis adjustment advisory
  • Partial lot disposition: Specific ID override vs FIFO remainder
  • Transfer in / transfer out: basis carries; no spurious gain
  • Multi-leg same-day trades: chronological lot consumption
  • Reconciled period export: readiness score 100% before 8949 CSV

Lot identity & traceability

Every disposal on a tax export traces to a lot record with acquisition date, basis, and source transaction id. Export receipts record a SHA-256 of the artifact body plus sourceRevision so you can prove what was generated — then verify each line against underlying lots in the product or via your CPA.

  • FIFO — default consumption order for disposals
  • Specific ID — per-disposal lot selection when enabled on the org
  • Transfer in/out — basis carries; no spurious gain on internal moves

Reconciliation studio — automated vs assumed

Lawenots Verify classifies mismatches before period close. The table below states what the product automates and what still requires operator or firm judgment.

Duplicate suspects

Automated: Flags same-amount / same-date pairs with memo similarity scoring; surfaces in Lawenots Verify as duplicate_suspect.

Assumed / manual: Operator or firm staff confirms merge vs legitimate repeat charges. Lawenots does not auto-void without approval.

Bank feed gaps

Automated: Detects missing sync windows and stale connection status; blocks period close when feed_gap is open.

Assumed / manual: Operator reconnects Plaid or imports CSV for the gap. Historical gaps before onboarding are not inferred.

Multi-entity / multi-org

Automated: Each organization has isolated books, RLS-scoped data, and per-org close readiness. Firm switcher scopes all exports.

Assumed / manual: Intercompany eliminations and consolidated group reporting are not auto-generated — export per entity unless configured otherwise.

Lot identity before tax export

Automated: FIFO consumption by default; Specific ID override when enabled. lot_mismatch blocks export readiness.

Assumed / manual: Wash-sale advisory flags need manual review for edge cases; corporate actions require lot adjustments before export.

Uncategorized / pending review

Automated: Readiness score counts uncategorized and PENDING rows; period close blocked until cleared or explicitly resolved.

Assumed / manual: Automation rules reduce volume but do not replace firm judgment on ambiguous vendor memos.

Expected revenue not received by close

Automated: Imports Stripe, Coinbase Commerce, invoice drafts, and pipeline expectations as revenue expectation objects; expected_revenue_gap blocks close when receipts are missing or mismatched.

Assumed / manual: Operator confirms whether the item should be written off, re-dated, or carried forward with a reviewer-visible hashed note.

Settlement should-settle vs did-settle mismatch

Automated: Imports Plaid ACH, Stripe payout, and on-chain settlement evidence; expected_settlement_gap blocks close until the canonical ledger and settlement anchor agree.

Assumed / manual: Lawenots does not initiate or reroute payments; the operator resolves the external settlement and re-imports evidence.

Compensation register vs posted GL discrepancy

Automated: Imports provider registers (Gusto, Deel, ADP, PEO) as compensation expectation objects and flags expected_comp_gap when the posted GL does not match.

Assumed / manual: Lawenots does not run payroll tax, filings, or disbursement. Provider-side corrections and approvals remain outside the product.

Sample export receipt (illustrative)

Form 8949 exports ship with a receipt like the JSON below. Verify the content hash with @lawenots/attestation-verify.

{
  "receiptId": "a1b2c3d4e5f6a1b2c3d4e5f6",
  "formType": "8949",
  "organizationId": "org_demo",
  "periodId": "period_2026_q2",
  "generatedAt": "2026-07-16T12:00:00.000Z",
  "contentSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "sourceRevision": "workspace-live",
  "disclaimer": "This receipt proves artifact integrity at generation time. It is not a CPA attestation or tax advice. Verify figures against underlying lots and transactions before filing."
}

Traceability

Every exported tax figure should link back to lots and source transactions. Export receipts record a SHA-256 of the artifact body, generation timestamp, organization id, optional period id, and source revision. Use the receipt to prove what was generated — then verify line items in the product before filing.

What it does not do

  • Does not file returns with the IRS or state agencies
  • Does not replace professional tax advice for entity structure, elections, or nexus
  • Does not guarantee completeness if imports or feeds are incomplete
  • Does not cover every jurisdiction’s crypto or securities nuance at launch

Related

Tax-ready methodology & limitations | Lawenots — Lawenots