{
  "format": "minctrl.process/v1",
  "graph": {
    "edges": [
      {
        "id": "e0___start____intake",
        "source": "__start__",
        "target": "intake"
      },
      {
        "id": "e1_intake__fcra-gate",
        "source": "intake",
        "target": "fcra-gate"
      },
      {
        "id": "e2_fcra-gate__split",
        "source": "fcra-gate",
        "target": "split"
      },
      {
        "id": "e3_split__classify",
        "source": "split",
        "target": "classify"
      },
      {
        "id": "e4_split__bureau",
        "source": "split",
        "target": "bureau"
      },
      {
        "id": "e5_classify__join",
        "source": "classify",
        "target": "join"
      },
      {
        "id": "e6_bureau__join",
        "source": "bureau",
        "target": "join"
      },
      {
        "id": "e7_join__analyze",
        "source": "join",
        "target": "analyze"
      },
      {
        "id": "e8_analyze__reconcile",
        "source": "analyze",
        "target": "reconcile"
      },
      {
        "id": "e9_reconcile__decision",
        "source": "reconcile",
        "target": "decision"
      },
      {
        "id": "e10_decision__autodecide",
        "label": "clean / in-policy / verified matches stated",
        "source": "decision",
        "target": "autodecide"
      },
      {
        "id": "e11_decision__signoff",
        "label": "marginal / thin-file / stated-vs-verified conflict",
        "source": "decision",
        "target": "signoff"
      },
      {
        "id": "e12_decision__intake",
        "label": "data insufficient — re-pull feed / request more docs",
        "source": "decision",
        "target": "intake"
      },
      {
        "id": "e13_signoff__submit",
        "source": "signoff",
        "target": "submit"
      },
      {
        "id": "e14_submit__notify",
        "source": "submit",
        "target": "notify"
      },
      {
        "id": "e15_autodecide__notify",
        "source": "autodecide",
        "target": "notify"
      },
      {
        "id": "e16_notify__monitor",
        "source": "notify",
        "target": "monitor"
      },
      {
        "id": "e17_monitor____end__",
        "source": "monitor",
        "target": "__end__"
      }
    ],
    "nodes": [
      {
        "agent": null,
        "confidential": false,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "__start__",
        "interrupt_before": false,
        "kind": "terminal",
        "label": "Start",
        "position": {
          "x": 0,
          "y": 0
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "terminal",
        "tools": []
      },
      {
        "agent": "intake",
        "confidential": false,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "intake",
        "interrupt_before": false,
        "kind": "agent",
        "label": "Intake the applicant: capture demographics with proper ECOA notice per Regulation B §202.2, connect the open-banking feed and ingest uploaded bank statements / paystubs",
        "position": {
          "x": 0,
          "y": 120
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "low",
        "tools": [
          "open-banking",
          "doc-intake",
          "ocr",
          "fair-lending-data-capture"
        ]
      },
      {
        "agent": null,
        "confidential": false,
        "gate": "gate:fcra-authorization",
        "gateway": null,
        "human": "Applicant",
        "id": "fcra-gate",
        "interrupt_before": true,
        "kind": "gate",
        "label": "Applicant provides written consent to credit bureau pull and open-banking income verification access before any bureau query is issued",
        "position": {
          "x": 0,
          "y": 240
        },
        "reversible": false,
        "sla": null,
        "sla_spec": null,
        "tier": "high",
        "tools": []
      },
      {
        "agent": null,
        "confidential": false,
        "gate": null,
        "gateway": "parallel",
        "human": null,
        "id": "split",
        "interrupt_before": false,
        "kind": "gateway",
        "label": "Run cash-flow verification and bureau/policy checks in parallel",
        "position": {
          "x": 0,
          "y": 360
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "gateway",
        "tools": []
      },
      {
        "agent": "classify",
        "confidential": false,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "classify",
        "interrupt_before": false,
        "kind": "agent",
        "label": "Classify and normalize bank transactions into income, recurring obligations, and discretionary spend; verify classified income against paystubs, tax documents, and bank deposits to document the basis for the verified income figure per Dodd-Frank §1026.34 reasonable-documentary-evidence standard",
        "position": {
          "x": 0,
          "y": 480
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "low",
        "tools": [
          "txn-classifier",
          "cashflow-engine",
          "paystub-verifier",
          "tax-document-verifier"
        ]
      },
      {
        "agent": "analyzer",
        "confidential": false,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "bureau",
        "interrupt_before": false,
        "kind": "agent",
        "label": "Pull credit-bureau tradelines and run the fair-lending / credit-policy checks concurrently",
        "position": {
          "x": 0,
          "y": 600
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "low",
        "tools": [
          "credit-bureau",
          "credit-policy",
          "fair-lending-check"
        ]
      },
      {
        "agent": null,
        "confidential": false,
        "gate": null,
        "gateway": "parallel",
        "human": null,
        "id": "join",
        "interrupt_before": false,
        "kind": "gateway",
        "label": "Merge cash-flow and bureau results",
        "position": {
          "x": 0,
          "y": 720
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "gateway",
        "tools": []
      },
      {
        "agent": "analyzer",
        "confidential": false,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "analyze",
        "interrupt_before": false,
        "kind": "agent",
        "label": "Compute verified income, debt-to-income, and disposable-income affordability against credit policy",
        "position": {
          "x": 0,
          "y": 840
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "low",
        "tools": [
          "cashflow-engine",
          "credit-policy",
          "credit-bureau"
        ]
      },
      {
        "agent": "reviewer",
        "confidential": false,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "reconcile",
        "interrupt_before": false,
        "kind": "agent",
        "label": "Reconcile verified vs stated income, flag thin-file/marginal conflicts, and draft the credit decision packet with adverse-action reason codes",
        "position": {
          "x": 0,
          "y": 960
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "medium",
        "tools": [
          "los",
          "fair-lending-check"
        ]
      },
      {
        "agent": null,
        "confidential": false,
        "gate": null,
        "gateway": "exclusive",
        "human": null,
        "id": "decision",
        "interrupt_before": false,
        "kind": "gateway",
        "label": "Affordability decision?",
        "position": {
          "x": 0,
          "y": 1080
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "gateway",
        "tools": []
      },
      {
        "agent": "reviewer",
        "confidential": true,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "autodecide",
        "interrupt_before": false,
        "kind": "agent",
        "label": "Clean straight-through file: record the auto-classified affordability pre-decision and reason codes as a reversible LOS draft, no system-of-record write",
        "position": {
          "x": 0,
          "y": 1200
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "medium",
        "tools": [
          "los",
          "case-mgmt"
        ]
      },
      {
        "agent": null,
        "confidential": false,
        "gate": "gate:underwriter-affordability-signoff",
        "gateway": null,
        "human": "Credit underwriter (delegated-authority signer)",
        "id": "signoff",
        "interrupt_before": true,
        "kind": "gate",
        "label": "An underwriter reviews the affordability packet and signs the final credit decision, including any policy exception or override on a marginal/thin-file applicant",
        "position": {
          "x": 0,
          "y": 1320
        },
        "reversible": false,
        "sla": null,
        "sla_spec": null,
        "tier": "high",
        "tools": []
      },
      {
        "agent": "submit",
        "confidential": false,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "submit",
        "interrupt_before": false,
        "kind": "agent",
        "label": "Write the signed affordability determination, DTI and adverse-action reason codes into the LOS system of record",
        "position": {
          "x": 0,
          "y": 1440
        },
        "reversible": false,
        "sla": null,
        "sla_spec": null,
        "tier": "high",
        "tools": [
          "los",
          "decision-of-record"
        ]
      },
      {
        "agent": "notify",
        "confidential": false,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "notify",
        "interrupt_before": false,
        "kind": "agent",
        "label": "Deliver the decision and any ECOA adverse-action notice to the applicant within 30 days of adverse action",
        "position": {
          "x": 0,
          "y": 1560
        },
        "reversible": true,
        "sla": "30 days from decision",
        "sla_spec": null,
        "tier": "medium",
        "tools": [
          "notice-engine",
          "case-mgmt"
        ]
      },
      {
        "agent": "monitor",
        "confidential": false,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "monitor",
        "interrupt_before": false,
        "kind": "agent",
        "label": "Track decision SLAs, monitor for re-verification triggers, and retain the audit trail for exam",
        "position": {
          "x": 0,
          "y": 1680
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "low",
        "tools": [
          "case-mgmt",
          "audit-log"
        ]
      },
      {
        "agent": null,
        "confidential": false,
        "gate": null,
        "gateway": null,
        "human": null,
        "id": "__end__",
        "interrupt_before": false,
        "kind": "terminal",
        "label": "Done",
        "position": {
          "x": 0,
          "y": 1800
        },
        "reversible": true,
        "sla": null,
        "sla_spec": null,
        "tier": "terminal",
        "tools": []
      }
    ]
  },
  "hash": "b7567e38aa0e5074d89c70239f21560abe94e789dbfdca43fae4d646679e82b0",
  "name": "Cash-flow underwriting autopilot",
  "slug": "income-affordability-verification",
  "source": "example",
  "version": null,
  "violations": []
}
