{
  "name": "Reconcile records",
  "flow": [
    {
      "id": 1,
      "module": "salesforce:queryAccounts",
      "metadata": {
        "designer": {
          "x": 0,
          "y": 0
        }
      },
      "parameters": {},
      "description": "Name, plan, MRR, status."
    },
    {
      "id": 2,
      "module": "billing-system:getSubscriptions",
      "metadata": {
        "designer": {
          "x": 300,
          "y": 0
        }
      },
      "parameters": {},
      "description": "Plan, MRR, status."
    },
    {
      "id": 3,
      "module": "array-aggregator:matchAndDiff",
      "metadata": {
        "designer": {
          "x": 600,
          "y": 0
        }
      },
      "parameters": {},
      "description": "Match on account ID and diff each field; keep only the mismatches.",
      "spion_notes": "Added by Spion: a clean diff is the whole job; everything else is plumbing."
    },
    {
      "id": 4,
      "module": "slack:postMismatches",
      "metadata": {
        "designer": {
          "x": 900,
          "y": 0
        }
      },
      "parameters": {},
      "description": "Post each mismatch to #ops with the Salesforce and billing values side by side."
    }
  ],
  "metadata": {
    "version": 1,
    "generated_by": "Spion",
    "generated_at": "2026-06-14T14:13:03.649Z",
    "description": "Pull Salesforce and the billing system, diff on the key fields, and post every mismatch to Slack with both values."
  }
}