{ "schema_version": 1, "nodes": [ { "id": "directory", "type": "source.reference", "label": "Frozen directory and contact snapshot", "position": {"x": 40, "y": 60}, "config": { "source_ref": "snapshot:directory-2026-01", "source_name": "directory_snapshot", "expected_fingerprint": "sha256:synthetic-directory-2026-01", "consistency": "frozen", "source_columns": [ "recipient_key", "display_name", "identity_id", "group_key", "organization_unit_id", "function_id", "region", "purpose", "effective", "effective_from", "effective_until", "preferred_target", "preferred_contact_point_id", "preferred_channel", "fallback_target", "fallback_contact_point_id", "fallback_channel", "preference_decision", "sort_order" ] } }, { "id": "group-filter", "type": "filter", "label": "Typed group", "position": {"x": 260, "y": 60}, "config": {"column": "group_key", "operator": "eq", "value": {"$parameter": "group_key"}} }, { "id": "organization-filter", "type": "filter", "label": "Organization unit", "position": {"x": 480, "y": 60}, "config": {"column": "organization_unit_id", "operator": "eq", "value": "district-north"} }, { "id": "function-filter", "type": "filter", "label": "Effective function", "position": {"x": 700, "y": 60}, "config": {"column": "function_id", "operator": "eq", "value": "resident-service"} }, { "id": "region-filter", "type": "filter", "label": "Geography", "position": {"x": 920, "y": 60}, "config": {"column": "region", "operator": "eq", "value": {"$parameter": "region"}} }, { "id": "purpose-filter", "type": "filter", "label": "Distribution purpose", "position": {"x": 1140, "y": 60}, "config": {"column": "purpose", "operator": "eq", "value": {"$parameter": "purpose"}} }, { "id": "effective-filter", "type": "filter", "label": "Effective-dated assignment", "position": {"x": 1360, "y": 60}, "config": {"column": "effective", "operator": "eq", "value": true} }, { "id": "contact-fallback", "type": "calculate", "label": "Resolve preferred or fallback contact", "position": {"x": 1580, "y": 60}, "config": { "calculations": [ {"target_column": "selected_target", "expression": "coalesce(preferred_target, fallback_target)", "result_type": "string"}, {"target_column": "selected_contact_point_id", "expression": "coalesce(preferred_contact_point_id, fallback_contact_point_id)", "result_type": "string"}, {"target_column": "selected_channel", "expression": "coalesce(preferred_channel, fallback_channel)", "result_type": "string"}, {"target_column": "email", "expression": "CASE WHEN selected_channel = 'email' THEN selected_target ELSE NULL END", "result_type": "string"}, {"target_column": "postal_address", "expression": "CASE WHEN selected_channel = 'postal' THEN selected_target ELSE NULL END", "result_type": "string"}, {"target_column": "account_id", "expression": "CASE WHEN selected_channel = 'internal_mail' THEN selected_target ELSE NULL END", "result_type": "string"}, {"target_column": "portal_target", "expression": "CASE WHEN selected_channel = 'portal' THEN selected_target ELSE NULL END", "result_type": "string"} ] } }, { "id": "directory-fields", "type": "select", "label": "Canonical recipient candidate", "position": {"x": 1800, "y": 60}, "config": { "fields": [ "recipient_key", "display_name", "identity_id", "group_key", "organization_unit_id", "function_id", "selected_target", "selected_contact_point_id", "selected_channel", "email", "postal_address", "account_id", "portal_target", "preference_decision", "sort_order" ] } }, { "id": "candidate-quality", "type": "quality.rules", "label": "Recipient quality gate", "position": {"x": 2020, "y": 60}, "config": { "rules": [ {"id": "recipient-key", "column": "recipient_key", "operator": "not_null"}, {"id": "delivery-target", "column": "selected_target", "operator": "not_null"}, {"id": "contact-point", "column": "selected_contact_point_id", "operator": "not_null"} ], "action": "drop" } }, { "id": "manual", "type": "source.reference", "label": "Frozen manual includes", "position": {"x": 1580, "y": 300}, "config": { "source_ref": "snapshot:manual-includes-2026-01", "source_name": "manual_includes", "expected_fingerprint": "sha256:synthetic-manual-includes-2026-01", "consistency": "frozen", "source_columns": [ "recipient_key", "display_name", "identity_id", "group_key", "organization_unit_id", "function_id", "selected_target", "selected_contact_point_id", "selected_channel", "email", "postal_address", "account_id", "portal_target", "preference_decision", "sort_order" ] } }, { "id": "append-includes", "type": "combine.union", "label": "Append manual includes", "position": {"x": 2240, "y": 170}, "config": {"mode": "all"} }, { "id": "deduplicate", "type": "distinct", "label": "One candidate per identity", "position": {"x": 2460, "y": 170}, "config": {"columns": ["recipient_key"]} }, { "id": "suppressions", "type": "source.reference", "label": "Frozen channel suppressions", "position": {"x": 2240, "y": 410}, "config": { "source_ref": "snapshot:suppressions-2026-01", "source_name": "channel_suppressions", "expected_fingerprint": "sha256:synthetic-suppressions-2026-01", "consistency": "frozen", "source_columns": ["recipient_key", "suppression_reason"] } }, { "id": "apply-suppressions", "type": "combine.join", "label": "Attach suppression decisions", "position": {"x": 2680, "y": 250}, "config": { "join_type": "left", "left_keys": ["recipient_key"], "right_keys": ["recipient_key"], "right_prefix": "suppression_" } }, { "id": "decision-columns", "type": "calculate", "label": "Classify channel decision", "position": {"x": 2900, "y": 250}, "config": { "calculations": [ {"target_column": "distribution_status", "expression": "CASE WHEN suppression_suppression_reason IS NOT NULL THEN 'suppressed' ELSE 'usable' END", "result_type": "string"}, {"target_column": "exclusion_reason", "expression": "suppression_suppression_reason", "result_type": "string"}, {"target_column": "policy_decision", "expression": "coalesce(suppression_suppression_reason, preference_decision)", "result_type": "string"} ] } }, { "id": "decision-fields", "type": "select", "label": "Canonical audience decision", "position": {"x": 3120, "y": 250}, "config": { "fields": [ "recipient_key", "display_name", "identity_id", "organization_unit_id", "function_id", "email", "postal_address", "account_id", "portal_target", {"column": "selected_contact_point_id", "alias": "contact_point_id"}, "selected_channel", "distribution_status", "exclusion_reason", "policy_decision", "sort_order" ] } }, { "id": "stable-order", "type": "sort", "label": "Stable recipient order", "position": {"x": 3340, "y": 250}, "config": { "fields": [ {"column": "sort_order", "direction": "asc"}, {"column": "recipient_key", "direction": "asc"} ] } }, { "id": "expected", "type": "source.reference", "label": "Frozen expected audience", "position": {"x": 3340, "y": 500}, "config": { "source_ref": "snapshot:expected-audience-2026-01", "source_name": "expected_audience", "expected_fingerprint": "sha256:synthetic-expected-audience-2026-01", "consistency": "frozen", "source_columns": [ "recipient_key", "display_name", "identity_id", "organization_unit_id", "function_id", "email", "postal_address", "account_id", "portal_target", "contact_point_id", "selected_channel", "distribution_status", "exclusion_reason", "policy_decision" ] } }, { "id": "reconcile", "type": "reconcile.compare", "label": "Reconcile expected audience", "position": {"x": 3560, "y": 350}, "config": { "left_keys": ["recipient_key"], "right_keys": ["recipient_key"], "compare_columns": [ "selected_channel", "contact_point_id", "distribution_status", "exclusion_reason", "policy_decision" ], "right_prefix": "actual_" } }, { "id": "reconciled-only", "type": "filter", "label": "Require exact reconciliation", "position": {"x": 3780, "y": 350}, "config": {"column": "_reconciliation_status", "operator": "eq", "value": "match"} }, { "id": "output-fields", "type": "select", "label": "Distribution-list dataset", "position": {"x": 4000, "y": 350}, "config": { "fields": [ "recipient_key", "display_name", "identity_id", "organization_unit_id", "function_id", "email", "postal_address", "account_id", "portal_target", "contact_point_id", "selected_channel", "distribution_status", "exclusion_reason", "policy_decision", "_reconciliation_status" ] } }, { "id": "output", "type": "output", "label": "Pinned audience output", "position": {"x": 4220, "y": 350}, "config": {} } ], "edges": [ {"id": "e01", "source": "directory", "target": "group-filter"}, {"id": "e02", "source": "group-filter", "target": "organization-filter"}, {"id": "e03", "source": "organization-filter", "target": "function-filter"}, {"id": "e04", "source": "function-filter", "target": "region-filter"}, {"id": "e05", "source": "region-filter", "target": "purpose-filter"}, {"id": "e06", "source": "purpose-filter", "target": "effective-filter"}, {"id": "e07", "source": "effective-filter", "target": "contact-fallback"}, {"id": "e08", "source": "contact-fallback", "target": "directory-fields"}, {"id": "e09", "source": "directory-fields", "target": "candidate-quality"}, {"id": "e10", "source": "candidate-quality", "target": "append-includes"}, {"id": "e11", "source": "manual", "target": "append-includes"}, {"id": "e12", "source": "append-includes", "target": "deduplicate"}, {"id": "e13", "source": "deduplicate", "target": "apply-suppressions", "target_port": "left"}, {"id": "e14", "source": "suppressions", "target": "apply-suppressions", "target_port": "right"}, {"id": "e15", "source": "apply-suppressions", "target": "decision-columns"}, {"id": "e16", "source": "decision-columns", "target": "decision-fields"}, {"id": "e17", "source": "decision-fields", "target": "stable-order"}, {"id": "e18", "source": "expected", "target": "reconcile", "target_port": "left"}, {"id": "e19", "source": "stable-order", "target": "reconcile", "target_port": "right"}, {"id": "e20", "source": "reconcile", "target": "reconciled-only"}, {"id": "e21", "source": "reconciled-only", "target": "output-fields"}, {"id": "e22", "source": "output-fields", "target": "output"} ] }