{
  "tool_id": "art-566-iolta-three-way-reconciliation",
  "tool_version": "1.0.0",
  "display_name": "IOLTA Three-Way Trust Reconciliation",
  "mcp_name": "check_iolta_three_way_reconciliation",
  "mandate_type": "compliance_control",
  "wave": 93,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-566-iolta-three-way-reconciliation.html",
  "description": "Recomputes the monthly IOLTA/client-trust three-way close every small law firm already does by hand in a spreadsheet: the bank statement (adjusted for caller-declared deposits in transit and uncleared checks) against the trust ledger total against the sum of every per-client ledger balance, all as of the same statement period end. Separately walks each client's declared period activity to catch a client ledger that dips negative at any point during the period even when its ending balance looks fine: the classic commingling fact pattern where one client's disbursement is briefly funded by another client's money before a later deposit covers it. Ages every declared outstanding item from the period end so a check or deposit that has sat unresolved for months is visible rather than buried inside a balancing adjustment, and checks that every input balance is stated as of the same period-end date. Reconciliation tolerance is always a declared input, never defaulted; a negative client-ledger low point is never tolerance-gated. Verdict RECONCILED when the three-way equality holds, no client ledger went negative, no outstanding item is stale, and every date lines up; DISCREPANT when any of those breaks; INCOMPLETE when a required input (the tolerance, the period, a balance, or at least one client ledger) is absent. Balances are integer minor units, so the arithmetic is exact. Performs arithmetic only over caller-declared balances and caller-declared outstanding items; does not source, derive, or independently verify any balance, and does not itself determine which bank lines are outstanding. Clause: ABA Model Rule 1.15 (Safekeeping Property); state record-keeping rules govern the specifics and are cited in-page as dated illustrations only, never as a 50-state table.",
  "input_schema_ref": "chaingraph/art-566-iolta-three-way-reconciliation.html#manifest",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:891bee3fc15ad70e6efb5440b1b794536e846e9bb77b5a4a9ea06df0153f772a",
      "valid_from": "2026-07-10"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-08-07"
    }
  ],
  "export_capability": [
    "json"
  ],
  "compute_proof_ready": "ready",
  "deferred_reason": "New shard; awaiting the async GPU proving queue (S18 steady-state).",
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "E3GQ5wp+u6b65+AVL75b2cnBuAwj7/SG7w8Jo4ZblUUKGQccrewctWmEWbn5KKHC5rp4thg+47Wxcrluak6gTRrQOKMc/Va3vOyyOTD/Vbym8Mg0uVD7FTAwTrz/n2kHDYcCza40Paca543tjE0UGsrc3Bf66F60qiLfYqlcWv8aFcr5JTH8gBJLBZOLwoCdAamVey9voFSsDoQO7BrCuwFwtxbL28y6f4+eTs4+hyeqPcoYzIvrsIxbRx3WbNkSLgIRwYqgX9CPHVUc7E2ujo5teysz27hZ1wrAncgpAeEkGOoxapqkOAQmLNQxoPxn0WyqLCy/fj4xqMTK7e0QrQ==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:891bee3fc15ad70e6efb5440b1b794536e846e9bb77b5a4a9ea06df0153f772a",
      "output": {
        "clause_note": "ABA Model Rule 1.15 (Safekeeping Property) requires complete trust-fund records and reconciliation of those records. State record-keeping requirements govern the specifics and are not restated here (e.g. California Rule of Professional Conduct 1.15 / trust accounting rules effective 2018-11-01; New York Rule 1.15, 22 NYCRR Part 1200, as amended; Texas Disciplinary Rule 1.14) -- confirm the current rule text for the applicable jurisdiction.",
        "client_count": 2,
        "client_ledgers": [
          {
            "as_of": "2026-06-30",
            "client_id": "client-A",
            "ending_balance_minor": 3000000,
            "entry_count": 2,
            "low_point_date": "2026-06-01",
            "low_point_minor": 2700000,
            "opening_balance_minor": 2700000
          },
          {
            "as_of": "2026-06-30",
            "client_id": "client-B",
            "ending_balance_minor": 2050000,
            "entry_count": 0,
            "low_point_date": "2026-06-01",
            "low_point_minor": 2050000,
            "opening_balance_minor": 2050000
          }
        ],
        "decision": {
          "execution_state": "ran",
          "gate_policy": "auto_pass",
          "reason": null
        },
        "findings": [],
        "negative_balance_findings": [],
        "outstanding_items": [
          {
            "age_bucket": "0-30",
            "age_days": 1,
            "amount_minor": 100000,
            "date": "2026-06-29",
            "description": "client A retainer deposited 6/29",
            "type": "deposit_in_transit"
          },
          {
            "age_bucket": "0-30",
            "age_days": 15,
            "amount_minor": 50000,
            "date": "2026-06-15",
            "description": "disbursement check #1042",
            "type": "uncleared_check"
          }
        ],
        "outstanding_summary": {
          "aged_61_to_90_count": 0,
          "aged_over_90_count": 0,
          "deposits_in_transit_total_minor": 100000,
          "item_count": 2,
          "uncleared_checks_total_minor": 50000
        },
        "period_boundary_consistent": true,
        "period_boundary_mismatches": [],
        "reconciliation_tolerance_minor": 100,
        "rejected_inputs": [],
        "scope_note": "Performs arithmetic only over caller-declared bank, trust-ledger, and per-client-ledger balances plus caller-declared outstanding items. Does not source, derive, or independently verify any balance and does not determine which bank lines are outstanding.",
        "statement_period": {
          "end_date": "2026-06-30",
          "start_date": "2026-06-01"
        },
        "three_way": {
          "adjusted_bank_balance_minor": 5050000,
          "bank_ending_balance_minor": 5000000,
          "bank_vs_clients_minor": 0,
          "bank_vs_trust_minor": 0,
          "client_ledger_total_minor": 5050000,
          "deposits_in_transit_total_minor": 100000,
          "equality_holds": true,
          "trust_ledger_ending_balance_minor": 5050000,
          "trust_vs_clients_minor": 0,
          "uncleared_checks_total_minor": 50000
        },
        "verdict": "RECONCILED"
      }
    }
  }
}
