{
  "apiVersion": 56,
  "label": "Account — Notify Approver on Assignment",
  "description": "Approval-notification Flow for the regional Account approval chains. Invoked ONLY by the approval lifecycle bridge via ProcessAction ActionType='Flow' rows bound to the Submit and StepApproval events (process-level, ProcessNodeId NULL) of the Account_Approval_* processes. No record trigger by design. Recipients come from the bridge-injected Approval.ApproverUserIds variable, which carries the POST-GATING newly-assigned approver ids (nextActorIDs on step advance; step-1 assignees on Submit), so a conditionally-skipped step (e.g. Legal when Vertical is not Crypto Exchange / Gambling & Gaming) never receives a notification. EMAIL-ONLY by design: no Loop / sendNotification bell leg, so it does NOT depend on the upstream executeLoop []string fix or NX PR#3627 and is safe to bind on the current prod stack ref. The scalar SObject variable 'Approval' is declared only to satisfy the install-time programchecker (root of the Approval.ApproverUserIds reference); the bridge injects Approval as flow context at runtime, so the empty declaration never shadows the real approver ids. HARDENING (approval-notification-500): Send_Email_Notification carries a faultConnector to a terminal no-op (Ignore_Send_Fault) so a render/recipient/send failure is HANDLED and NEVER propagates to roll back the approval submit — mirroring the Credits_Notify_* flows' faultConnector pattern. A notification is best-effort; it must never block the approval decision.",
  "processType": "AutoLaunchedFlow",
  "status": "Active",
  "start": {
    "connector": {
      "targetReference": "Resolve_To_Recipients"
    },
    "locationX": 0,
    "locationY": -120
  },
  "variables": [
    {
      "name": "Approval",
      "dataType": "SObject"
    },
    {
      "name": "ApprovalEmail_To_Recipients",
      "dataType": "String",
      "isCollection": true
    }
  ],
  "assignments": [
    {
      "name": "Ignore_Send_Fault",
      "label": "Ignore email send fault (never block the approval)",
      "locationX": 0,
      "locationY": 240
    }
  ],
  "actionCalls": [
    {
      "name": "Resolve_To_Recipients",
      "label": "Resolve Approver Emails",
      "locationX": 0,
      "locationY": 0,
      "actionName": "resolveEmailRecipients",
      "actionType": "resolveEmailRecipients",
      "inputParameters": [
        {
          "name": "userIds",
          "value": {
            "elementReference": "Approval.ApproverUserIds"
          }
        }
      ],
      "outputParameters": [
        {
          "name": "emails",
          "value": "ApprovalEmail_To_Recipients"
        }
      ],
      "connector": {
        "targetReference": "Send_Email_Notification"
      }
    },
    {
      "name": "Send_Email_Notification",
      "label": "Email Assigned Approver",
      "locationX": 0,
      "locationY": 120,
      "actionName": "sendEmail",
      "actionType": "sendEmail",
      "inputParameters": [
        {
          "name": "templateId",
          "value": {
            "stringValue": "85413ff7-4510-57ab-83c2-dc4e9d3d48e7"
          }
        },
        {
          "name": "to",
          "value": {
            "elementReference": "ApprovalEmail_To_Recipients"
          }
        }
      ],
      "faultConnector": {
        "targetReference": "Ignore_Send_Fault"
      }
    }
  ]
}
