{"document_version":"v3.flowproof.1","proof_pack_id":"azure-order-routing-demo","engine":"azure_logic_app","title":"Azure order routing demo","source_metadata":{"source_document_version":"v3.source.1","source_kind":"synthetic","permission":"flowvec-owned","redaction":"none_required","public_demo_safe":true,"license_notes":"Synthetic data created by Flowvec.","community_extract_used":false,"customer_authorized":false,"kind":"synthetic"},"capabilities":[{"id":"graph","label":"Graph"},{"id":"inspector-source-references","label":"Inspector Source References"},{"id":"schemas","label":"Schemas"},{"id":"mappings","label":"Mappings"},{"id":"rules","label":"Rules"},{"id":"validations","label":"Validations"},{"id":"evidence","label":"Evidence"}],"groups":[{"id":"group-order-routing-workflow","label":"Order routing workflow","kind":"workflow","source_ref":{"document":"source.json","pointer":"/artifact/definition"}},{"id":"group-error-handling","label":"Error handling","kind":"scope","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Error_path"}}],"nodes":[{"id":"node-http-order-request","group_id":"group-order-routing-workflow","kind":"source","subkind":"http_trigger","visual_role":"source","label":"HTTP order request","summary":"Receives the synthetic order request payload.","source_ref":{"document":"source.json","pointer":"/artifact/definition/triggers/When_order_request_received","subject":"trigger"},"schema_refs":["schema-order-request"]},{"id":"node-validate-payload","group_id":"group-order-routing-workflow","kind":"step","subkind":"validation","visual_role":"parser","label":"Validate payload","summary":"Parses and validates the inbound payload against the declared order schema.","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Validate_payload","subject":"action"},"schema_refs":["schema-order-request"],"rule_refs":["rule-payload-valid","rule-order-total-valid"]},{"id":"node-lookup-customer","group_id":"group-order-routing-workflow","kind":"step","subkind":"external_call","visual_role":"external_read","label":"Lookup customer","summary":"Looks up synthetic customer status and region data.","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Lookup_customer","subject":"action"},"schema_refs":["schema-customer-lookup-response"],"mapping_refs":["mapping-customer-email"],"validation_refs":["validation-lookup-retry-present","validation-auth-redacted"]},{"id":"node-customer-active","group_id":"group-order-routing-workflow","kind":"branch","subkind":"condition","visual_role":"branch","label":"Customer active?","summary":"Routes active customers with positive order total to order creation; otherwise routes to review.","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Customer_active","subject":"condition"},"rule_refs":["rule-customer-active","rule-order-total-valid"]},{"id":"node-create-order","group_id":"group-order-routing-workflow","kind":"step","subkind":"external_call","visual_role":"external_write","label":"Create order","summary":"Creates a synthetic order for active customers.","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Customer_active/actions/Create_order","subject":"action"},"schema_refs":["schema-create-order-request"],"mapping_refs":["mapping-customer-email","mapping-order-total","mapping-tax-region"],"validation_refs":["validation-create-order-retry-present","validation-create-order-timeout-present"]},{"id":"node-review-request","group_id":"group-order-routing-workflow","kind":"step","subkind":"system","visual_role":"review","label":"Send review request","summary":"Builds a synthetic review request when the customer is inactive or the order total is invalid.","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Customer_active/else/actions/Send_review_request","subject":"action"},"schema_refs":["schema-review-request"],"rule_refs":["rule-customer-active","rule-unknown-region"]},{"id":"node-write-audit-event","group_id":"group-order-routing-workflow","kind":"step","subkind":"system","visual_role":"audit","label":"Write audit event","summary":"Writes a synthetic audit event after the branch completes.","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Write_audit_event","subject":"action"},"schema_refs":["schema-audit-event"]},{"id":"node-error-path","group_id":"group-error-handling","kind":"step","subkind":"error_path","visual_role":"error_path","label":"Error path","summary":"Captures validation or customer lookup failure as a synthetic error outcome.","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Error_path","subject":"action"},"validation_refs":["validation-error-path-present"]}],"edges":[{"id":"edge-trigger-to-validate","from":"node-http-order-request","to":"node-validate-payload","kind":"dependency","label":"request body","source_id":"node-http-order-request","target_id":"node-validate-payload"},{"id":"edge-validate-to-lookup","from":"node-validate-payload","to":"node-lookup-customer","kind":"run_after","status":"Succeeded","source_id":"node-validate-payload","target_id":"node-lookup-customer"},{"id":"edge-lookup-to-condition","from":"node-lookup-customer","to":"node-customer-active","kind":"run_after","status":"Succeeded","source_id":"node-lookup-customer","target_id":"node-customer-active"},{"id":"edge-condition-to-create","from":"node-customer-active","to":"node-create-order","kind":"branch","label":"yes","source_id":"node-customer-active","target_id":"node-create-order"},{"id":"edge-condition-to-review","from":"node-customer-active","to":"node-review-request","kind":"branch","label":"no","source_id":"node-customer-active","target_id":"node-review-request"},{"id":"edge-condition-to-audit","from":"node-customer-active","to":"node-write-audit-event","kind":"run_after","status":"Succeeded","source_id":"node-customer-active","target_id":"node-write-audit-event"},{"id":"edge-validate-to-error","from":"node-validate-payload","to":"node-error-path","kind":"run_after","status":"Failed|TimedOut","source_id":"node-validate-payload","target_id":"node-error-path"},{"id":"edge-lookup-to-error","from":"node-lookup-customer","to":"node-error-path","kind":"run_after","status":"Failed|TimedOut","source_id":"node-lookup-customer","target_id":"node-error-path"}],"schemas":[{"id":"schema-order-request","title":"Order request","kind":"input","status":"declared","owner_node_id":"node-http-order-request","source_ref":{"document":"source.json","pointer":"/supplements/schemas/0"}},{"id":"schema-customer-lookup-response","title":"Customer lookup response","kind":"intermediate","status":"inferred","owner_node_id":"node-lookup-customer","source_ref":{"document":"source.json","pointer":"/supplements/schemas/1"}},{"id":"schema-create-order-request","title":"Create order request","kind":"output","status":"verified","owner_node_id":"node-create-order","source_ref":{"document":"source.json","pointer":"/supplements/schemas/2"}},{"id":"schema-review-request","title":"Review request","kind":"output","status":"declared","owner_node_id":"node-review-request"},{"id":"schema-audit-event","title":"Audit event","kind":"output","status":"declared","owner_node_id":"node-write-audit-event"}],"mappings":[{"id":"mapping-customer-email","source_field":"triggerBody().customer.email","transform":"lower + trim","target_field":"customer_email","status":"verified","owner_node_id":"node-create-order","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Customer_active/actions/Create_order/inputs/body/customer_email"}},{"id":"mapping-order-total","source_field":"triggerBody().order.total","transform":"decimal cast","target_field":"order_total","status":"verified","owner_node_id":"node-create-order","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Customer_active/actions/Create_order/inputs/body/order_total"}},{"id":"mapping-tax-region","source_field":"body('Lookup_customer').region","transform":"lookup fallback","target_field":"tax_region","status":"needs_review","owner_node_id":"node-create-order","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Customer_active/actions/Create_order/inputs/body/tax_region"}}],"rules":[{"id":"rule-payload-valid","title":"Payload valid","logic":"required customer and order fields present","owner":"Integration","test_coverage":"complete","owner_node_id":"node-validate-payload"},{"id":"rule-customer-active","title":"Customer active","logic":"customer status equals active","owner":"Sales Ops","test_coverage":"partial","owner_node_id":"node-customer-active","source_ref":{"document":"source.json","pointer":"/artifact/definition/actions/Customer_active/expression"}},{"id":"rule-order-total-valid","title":"Order total valid","logic":"total greater than zero","owner":"Finance","test_coverage":"complete","owner_node_id":"node-customer-active"},{"id":"rule-unknown-region","title":"Unknown region","logic":"route to review when no region match","owner":"Tax","test_coverage":"gap","owner_node_id":"node-review-request"}],"validations":[{"id":"validation-trigger-schema-present","severity":"info","status":"pass","title":"Trigger schema exists","detail":"The HTTP trigger has a declared synthetic order request schema.","owner_node_id":"node-http-order-request"},{"id":"validation-all-edges-represented","severity":"info","status":"pass","title":"Dependencies represented as edges","detail":"All top-level runAfter relationships and condition branches are represented as FlowProof edges."},{"id":"validation-lookup-retry-present","severity":"info","status":"pass","title":"Lookup retry policy present","detail":"Lookup_customer declares an exponential retry policy.","owner_node_id":"node-lookup-customer"},{"id":"validation-create-order-retry-present","severity":"info","status":"pass","title":"Create order retry policy present","detail":"Create_order declares an exponential retry policy.","owner_node_id":"node-create-order"},{"id":"validation-create-order-timeout-present","severity":"info","status":"pass","title":"Create order timeout policy present","detail":"Create_order declares a PT60S timeout limit.","owner_node_id":"node-create-order"},{"id":"validation-auth-redacted","severity":"info","status":"pass","title":"Connector/auth context redacted","detail":"The proof pack uses only synthetic endpoints and no connection IDs, tenant IDs, subscription IDs, or secrets."},{"id":"validation-error-path-present","severity":"info","status":"pass","title":"Error path present","detail":"The workflow includes a synthetic error path for validation or lookup failures.","owner_node_id":"node-error-path"},{"id":"validation-unknown-region-gap","severity":"medium","status":"gap","title":"Unknown region evidence gap","detail":"The unknown region path is represented as a rule and mapping concern but is not covered by a passing synthetic evidence item."}],"evidence":[{"id":"evidence-active-customer","scenario":"Active customer","input":"valid order, active customer","expected_path":["Validate payload","Lookup customer","Create order","Write audit event"],"observed_path":["Validate payload","Lookup customer","Create order","Write audit event"],"status":"pass","synthetic":true},{"id":"evidence-inactive-customer","scenario":"Inactive customer","input":"valid order, inactive customer","expected_path":["Validate payload","Lookup customer","Send review request","Write audit event"],"observed_path":["Validate payload","Lookup customer","Send review request","Write audit event"],"status":"pass","synthetic":true},{"id":"evidence-invalid-payload","scenario":"Invalid payload","input":"missing order total","expected_path":["Error path"],"observed_path":["Error path"],"status":"pass","synthetic":true},{"id":"evidence-unknown-region","scenario":"Unknown region","input":"region not found","expected_path":["Tax review"],"observed_path":[],"status":"gap","synthetic":true}],"source_refs":[]}