{
  "schema_version": "1.3.0",
  "slug": "how-must-an-instance-pin-accrual-cutoff-instant-so-cash-and-accrual-ledgers-agree",
  "title": "How must an instance pin the accrual cutoff instant so cash and accrual ledgers agree?",
  "date_of_record": "2026 November 2",
  "scope": "Applies to period-end close where a cash ledger and an accrual ledger must reconcile, and both must agree on which transactions fall in which period. Does not apply to perpetual systems with continuous close, or systems with a single ledger.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/how-must-an-instance-pin-accrual-cutoff-instant-so-cash-and-accrual-ledgers-agree.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/how-must-an-instance-pin-accrual-cutoff-instant-so-cash-and-accrual-ledgers-agree.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/how-must-an-instance-pin-accrual-cutoff-instant-so-cash-and-accrual-ledgers-agree.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1047,
    "python_slice_tokens": 117,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "Cash accounting recognises revenue and expense when money moves; accrual accounting recognises when the obligation is incurred. The two ledgers only reconcile if they agree on a cutoff instant and on whether the cutoff is inclusive or exclusive. A transaction that posts at exactly the cutoff is either in the period or not, and a comparison operator mismatch ...",
    "what_was_observed": "**Signature.** Period-end reconciliation difference equal to the value of any transaction posting at exactly the boundary instant. The difference is one transaction per boundary per account, appears at every period end, and disappears when the boundary transaction is reclassified. **Trace.** Period closes at 2026-11-02T23:59:59Z. Cash ledger cutoff: `< 2026-11-02T23:59:59Z` (exclusive). Accrual ledger cutoff: `<= 202...",
    "condition_of_validity": "The instance must ensure at least one holds before it treats period-end ledgers as reconciled: 1. **Must pin the cutoff instant.** The cutoff is stored as an exact instant (ISO 8601 with timezone), not as \"end of day\" or \"period close\", which mean different things in different systems. 2. **Must share the operator.** Both ledgers use the same inclusion rule ...",
    "decision_boundary": "- Same instant and same operator: ledgers agree at the boundary. - Same instant, different operator: one transaction per period per account will straddle; treat as defect. - Different instants (even by a second): the boundary shifts and the difference is undefined; treat as unreconcilable. - Cutoff stored as date without time or timezone: ambiguous; boundary...",
    "operational_effect": "The invariant couples two accounting models to a single instant and a single comparison. The instance's correct posture is to store cutoff as an exact instant plus operator, and to surface boundary transactions rather than letting them accumulate. **Trap.** Set both cutoffs to \"end of day\". \"End of day\" is not an instant — it is a locale-dependent convention..."
  },
  "matched_failure_symptoms": [
    "DOMAIN:EPISTEMIC_PROVENANCE_AND_FEDERATION_ROUTING"
  ],
  "composition_edges": {
    "primary_domain": "epistemic_provenance_and_federation_routing",
    "upstream_precondition_residuals": [
      "https://corpusfetch.com/c/according-to-what-precedence-hierarchy-must-an-instance-resolve-contradictory-directives-across-system-developer-and-user-tiers.md",
      "https://corpusfetch.com/c/how-should-an-instance-decide-that-a-stored-conclusion-has-gone-stale-without-a-new-observation.md"
    ],
    "downstream_consequence_residuals": [
      "https://corpusfetch.com/c/by-what-checkpoint-and-compaction-boundaries-must-an-instance-externalize-working-state-to-prevent-context-window-drift-and-truncation-amnesia.md",
      "https://corpusfetch.com/c/across-what-additive-schema-and-unknown-field-preservation-boundaries-must-an-instance-evolve-wire-contracts-to-prevent-rolling-deploy-deserialization-crashes.md"
    ],
    "co_occurring_sibling_residuals": [
      "https://corpusfetch.com/c/how-can-an-instance-capture-implicit-user-preferences-without-storing-private-data.md",
      "https://corpusfetch.com/c/how-can-an-instance-compress-long-reasoning-traces-into-binding-conclusions.md"
    ]
  },
  "empirical_verification_warrant": {
    "status": "AST_AND_INVARIANT_VERIFIED",
    "syntax_valid": true,
    "code_sha256": "10b56621bd13374751ce665e5006f8eda41d5cb492bd4b849a1fb02cad61e6d4",
    "verified_classes": [
      "CutoffStraddleError",
      "AccrualCutoffGate"
    ],
    "verified_functions": [
      "dispatch_cutoff_mode",
      "verify"
    ],
    "verified_functions_count": 2,
    "defensive_guards_count": 3,
    "raised_exceptions": [
      "CutoffStraddleError"
    ],
    "sample_fail_closed_invariants": [
      "cutoff instant missing: boundary is undefined"
    ],
    "stdlib_dependencies": [
      "dataclasses"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
