{
  "apiVersion": 56,
  "label": "Credits Top-up — Stamp Approvers on Create",
  "description": "Top-up variant of Credits_Stamp_Approvers. When a top-up record is created, look up the parent Credits record's region (via parent.Account__c → Account.Region__c for self-sufficiency), then Region_All__c, and stamp the same three approver fields onto the child. Stamping at Create (not on Submit) avoids the engine-reads-NULL ordering bug — see Credits_Stamp_Approvers description for the substrate rationale. Each top-up captures its own approver snapshot at creation time, so successive top-ups across an approver-rotation window each route to the correct person (snapshot rule §3). Falls back to NeedsTriage at create if any approver missing.",
  "processType": "AutoLaunchedFlow",
  "status": "Active",
  "start": {
    "object": "Credits_Topup__c",
    "triggerType": "RecordBeforeSave",
    "recordTriggerType": "Create",
    "connector": {"targetReference": "Check_Parent_Present"}
  },
  "recordLookups": [
    {
      "name": "Get_Parent_Credits",
      "label": "Get Parent Credits for Account",
      "locationX": 200,
      "locationY": 150,
      "object": "Credits__c",
      "filterLogic": "and",
      "filters": [
        {"field": "Id", "operator": "EqualTo", "value": {"elementReference": "$Record.Credits__c"}}
      ],
      "getFirstRecordOnly": true,
      "storeOutputAutomatically": true,
      "assignNullValuesIfNoRecordsFound": false,
      "connector": {"targetReference": "Get_Account"}
    },
    {
      "name": "Get_Account",
      "label": "Get Account for Region",
      "locationX": 200,
      "locationY": 250,
      "object": "Account",
      "filterLogic": "and",
      "filters": [
        {"field": "Id", "operator": "EqualTo", "value": {"elementReference": "Get_Parent_Credits.Account__c"}}
      ],
      "getFirstRecordOnly": true,
      "storeOutputAutomatically": true,
      "assignNullValuesIfNoRecordsFound": false,
      "connector": {"targetReference": "Get_Region_Approvers"}
    },
    {
      "name": "Get_Region_Approvers",
      "label": "Get Region Approvers",
      "locationX": 200,
      "locationY": 350,
      "object": "Region_All__c",
      "filterLogic": "and",
      "filters": [
        {"field": "Region__c", "operator": "EqualTo", "value": {"elementReference": "Get_Account.Region__c"}}
      ],
      "getFirstRecordOnly": true,
      "storeOutputAutomatically": true,
      "assignNullValuesIfNoRecordsFound": false,
      "connector": {"targetReference": "Check_Approvers_Found"}
    }
  ],
  "decisions": [
    {
      "name": "Check_Parent_Present",
      "label": "Parent Credits linked? (defensive guard)",
      "locationX": 200,
      "locationY": 50,
      "rules": [
        {
          "name": "parent_present",
          "label": "Yes — chase parent lookup chain",
          "conditionLogic": "and",
          "conditions": [
            {"leftValueReference": "$Record.Credits__c", "operator": "IsNull", "rightValue": {"booleanValue": false}}
          ],
          "connector": {"targetReference": "Get_Parent_Credits"}
        }
      ],
      "defaultConnectorLabel": "No — terminate (master-detail required validation will surface the error)"
    },
    {
      "name": "Check_Approvers_Found",
      "label": "Check All Three Approvers Found",
      "locationX": 200,
      "locationY": 450,
      "rules": [
        {
          "name": "all_approvers_present",
          "label": "All approvers present",
          "conditionLogic": "and",
          "conditions": [
            {"leftValueReference": "Get_Region_Approvers", "operator": "IsNull", "rightValue": {"booleanValue": false}},
            {"leftValueReference": "Get_Region_Approvers.Region_Pre_Sales_Manager__c", "operator": "IsNull", "rightValue": {"booleanValue": false}},
            {"leftValueReference": "Get_Region_Approvers.Regional_Finance__c", "operator": "IsNull", "rightValue": {"booleanValue": false}},
            {"leftValueReference": "Get_Region_Approvers.Region_BG_Leader__c", "operator": "IsNull", "rightValue": {"booleanValue": false}}
          ],
          "connector": {"targetReference": "Stamp_Approvers"}
        }
      ],
      "defaultConnector": {"targetReference": "Route_To_NeedsTriage"},
      "defaultConnectorLabel": "Missing approver — route to triage"
    }
  ],
  "assignments": [
    {
      "name": "Stamp_Approvers",
      "label": "Stamp Three Approver User-Lookup Fields on Top-up",
      "locationX": 100,
      "locationY": 550,
      "assignmentItems": [
        {"assignToReference": "$Record.Presales_Manager_User__c", "operator": "Assign", "value": {"elementReference": "Get_Region_Approvers.Region_Pre_Sales_Manager__c"}},
        {"assignToReference": "$Record.Finance_Approver_User__c", "operator": "Assign", "value": {"elementReference": "Get_Region_Approvers.Regional_Finance__c"}},
        {"assignToReference": "$Record.BG_Leader_User__c", "operator": "Assign", "value": {"elementReference": "Get_Region_Approvers.Region_BG_Leader__c"}},
        {"assignToReference": "$Record.Regional_Ops_User__c", "operator": "Assign", "value": {"elementReference": "Get_Region_Approvers.Region_Ops__c"}}
      ]
    },
    {
      "name": "Route_To_NeedsTriage",
      "label": "Route Top-up To NeedsTriage At Create",
      "locationX": 300,
      "locationY": 550,
      "assignmentItems": [
        {"assignToReference": "$Record.Approval_Status__c", "operator": "Assign", "value": {"stringValue": "NeedsTriage"}}
      ]
    }
  ]
}
