{
  "schema_version": 2,
  "name": "小徐审核员工报销单",
  "description": "按表中原始顺序审核。H 中每行依次是发票编号、费用类型和金额。发票首次出现即登记，限额或资金不足时跳过当前单据。",
  "variables": {},
  "startup_parameters": {},
  "global_names": [],
  "global_defaults": {},
  "file_mappings": {},
  "max_steps": 500,
  "nodes": [
    {
      "id": "start",
      "position": {
        "x": 340.0,
        "y": 30.0
      },
      "data": {
        "action": "start",
        "label": "开始",
        "params": {},
        "retries": 0,
        "steps": []
      }
    },
    {
      "id": "expense_audit",
      "position": {
        "x": 340.0,
        "y": 200.0
      },
      "data": {
        "action": "process",
        "label": "主流程",
        "params": {},
        "retries": 0,
        "steps": [
          {
            "id": "assign_budget",
            "action": "stmt_assign",
            "label": "变量赋值",
            "params": {
              "variable": "budget",
              "value": "1000"
            },
            "retries": 0,
            "enabled": true
          },
          {
            "id": "assign_H",
            "action": "stmt_assign",
            "label": "变量赋值",
            "params": {
              "variable": "H",
              "value": "[[\"FP01\", \"餐饮费\", 120], [\"FP02\", \"交通费\", 180], [\"FP03\", \"住宿费\", 350], [\"FP02\", \"交通费\", 100], [\"FP04\", \"餐饮费\", 170], [\"FP05\", \"交通费\", 190], [\"FP06\", \"住宿费\", 390], [\"FP07\", \"餐饮费\", 100], [\"FP08\", \"交通费\", 80], [\"FP09\", \"餐饮费\", 60]]"
            },
            "retries": 0,
            "enabled": true
          },
          {
            "id": "assign_limits",
            "action": "stmt_assign",
            "label": "变量赋值",
            "params": {
              "variable": "limits",
              "value": "{\"餐饮费\": 150, \"交通费\": 200, \"住宿费\": 400}"
            },
            "retries": 0,
            "enabled": true
          },
          {
            "id": "assign_seen",
            "action": "stmt_assign",
            "label": "变量赋值",
            "params": {
              "variable": "seen",
              "value": "[]"
            },
            "retries": 0,
            "enabled": true
          },
          {
            "id": "assign_count",
            "action": "stmt_assign",
            "label": "变量赋值",
            "params": {
              "variable": "count",
              "value": "0"
            },
            "retries": 0,
            "enabled": true
          },
          {
            "id": "assign_total",
            "action": "stmt_assign",
            "label": "变量赋值",
            "params": {
              "variable": "total",
              "value": "0"
            },
            "retries": 0,
            "enabled": true
          },
          {
            "id": "assign_remain",
            "action": "stmt_assign",
            "label": "变量赋值",
            "params": {
              "variable": "remain",
              "value": "budget"
            },
            "retries": 0,
            "enabled": true
          },
          {
            "id": "assign_approved",
            "action": "stmt_assign",
            "label": "变量赋值",
            "params": {
              "variable": "approved",
              "value": "[]"
            },
            "retries": 0,
            "enabled": true
          },
          {
            "id": "assign_rejected",
            "action": "stmt_assign",
            "label": "变量赋值",
            "params": {
              "variable": "rejected",
              "value": "[]"
            },
            "retries": 0,
            "enabled": true
          },
          {
            "id": "audit_rows",
            "action": "stmt_count",
            "label": "计次循环",
            "params": {
              "index_var": "i",
              "count": "=len(H)",
              "start": "0",
              "step": "1",
              "body": [
                {
                  "id": "assign_row",
                  "action": "stmt_assign",
                  "label": "变量赋值",
                  "params": {
                    "variable": "row",
                    "value": "H[i]"
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "assign_invoice",
                  "action": "stmt_assign",
                  "label": "变量赋值",
                  "params": {
                    "variable": "invoice",
                    "value": "row[0]"
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "assign_type",
                  "action": "stmt_assign",
                  "label": "变量赋值",
                  "params": {
                    "variable": "type",
                    "value": "row[1]"
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "assign_amount",
                  "action": "stmt_assign",
                  "label": "变量赋值",
                  "params": {
                    "variable": "amount",
                    "value": "row[2]"
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "if_duplicate",
                  "action": "stmt_if",
                  "label": "条件分支",
                  "params": {
                    "condition": "invoice in seen",
                    "body": [
                      {
                        "id": "reason_duplicate",
                        "action": "stmt_assign",
                        "label": "变量赋值",
                        "params": {
                          "variable": "reason",
                          "value": "'发票编号重复'"
                        },
                        "retries": 0,
                        "enabled": true
                      },
                      {
                        "id": "record_duplicate",
                        "action": "stmt_assign",
                        "label": "变量赋值",
                        "params": {
                          "variable": "rejected",
                          "value": "rejected + [[i + 1, invoice, reason]]"
                        },
                        "retries": 0,
                        "enabled": true
                      },
                      {
                        "id": "output_duplicate",
                        "action": "stmt_debug",
                        "label": "输出调试信息",
                        "params": {
                          "value": "f'第{i + 1}张 {invoice} 未通过：{reason}'"
                        },
                        "retries": 0,
                        "enabled": true
                      },
                      {
                        "id": "skip_duplicate",
                        "action": "stmt_continue",
                        "label": "继续循环",
                        "params": {},
                        "retries": 0,
                        "enabled": true
                      }
                    ]
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "remember_invoice",
                  "action": "stmt_assign",
                  "label": "变量赋值",
                  "params": {
                    "variable": "seen",
                    "value": "seen + [invoice]"
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "assign_limit",
                  "action": "stmt_assign",
                  "label": "变量赋值",
                  "params": {
                    "variable": "limit",
                    "value": "limits[type]"
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "if_limit",
                  "action": "stmt_if",
                  "label": "条件分支",
                  "params": {
                    "condition": "amount > limit",
                    "body": [
                      {
                        "id": "reason_limit",
                        "action": "stmt_assign",
                        "label": "变量赋值",
                        "params": {
                          "variable": "reason",
                          "value": "f'{type}{amount}元，超过单笔限额{limit}元'"
                        },
                        "retries": 0,
                        "enabled": true
                      },
                      {
                        "id": "record_limit",
                        "action": "stmt_assign",
                        "label": "变量赋值",
                        "params": {
                          "variable": "rejected",
                          "value": "rejected + [[i + 1, invoice, reason]]"
                        },
                        "retries": 0,
                        "enabled": true
                      },
                      {
                        "id": "output_limit",
                        "action": "stmt_debug",
                        "label": "输出调试信息",
                        "params": {
                          "value": "f'第{i + 1}张 {invoice} 未通过：{reason}'"
                        },
                        "retries": 0,
                        "enabled": true
                      },
                      {
                        "id": "skip_limit",
                        "action": "stmt_continue",
                        "label": "继续循环",
                        "params": {},
                        "retries": 0,
                        "enabled": true
                      }
                    ]
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "if_budget",
                  "action": "stmt_if",
                  "label": "条件分支",
                  "params": {
                    "condition": "amount > remain",
                    "body": [
                      {
                        "id": "reason_budget",
                        "action": "stmt_assign",
                        "label": "变量赋值",
                        "params": {
                          "variable": "reason",
                          "value": "f'报销金额{amount}元，剩余资金只有{remain}元'"
                        },
                        "retries": 0,
                        "enabled": true
                      },
                      {
                        "id": "record_budget",
                        "action": "stmt_assign",
                        "label": "变量赋值",
                        "params": {
                          "variable": "rejected",
                          "value": "rejected + [[i + 1, invoice, reason]]"
                        },
                        "retries": 0,
                        "enabled": true
                      },
                      {
                        "id": "output_budget",
                        "action": "stmt_debug",
                        "label": "输出调试信息",
                        "params": {
                          "value": "f'第{i + 1}张 {invoice} 未通过：{reason}'"
                        },
                        "retries": 0,
                        "enabled": true
                      },
                      {
                        "id": "skip_budget",
                        "action": "stmt_continue",
                        "label": "继续循环",
                        "params": {},
                        "retries": 0,
                        "enabled": true
                      }
                    ]
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "add_count",
                  "action": "stmt_assign",
                  "label": "变量赋值",
                  "params": {
                    "variable": "count",
                    "value": "count + 1"
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "add_total",
                  "action": "stmt_assign",
                  "label": "变量赋值",
                  "params": {
                    "variable": "total",
                    "value": "total + amount"
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "update_remain",
                  "action": "stmt_assign",
                  "label": "变量赋值",
                  "params": {
                    "variable": "remain",
                    "value": "budget - total"
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "record_approved",
                  "action": "stmt_assign",
                  "label": "变量赋值",
                  "params": {
                    "variable": "approved",
                    "value": "approved + [i + 1]"
                  },
                  "retries": 0,
                  "enabled": true
                },
                {
                  "id": "output_approved",
                  "action": "stmt_debug",
                  "label": "输出调试信息",
                  "params": {
                    "value": "f'第{i + 1}张 {invoice} 通过：报销{amount}元，剩余{remain}元'"
                  },
                  "retries": 0,
                  "enabled": true
                }
              ]
            },
            "retries": 0,
            "enabled": true
          },
          {
            "id": "output_summary",
            "action": "stmt_debug",
            "label": "输出调试信息",
            "params": {
              "value": "f'审核汇总：通过{count}张，实报{total}元，剩余{remain}元'"
            },
            "retries": 0,
            "enabled": true
          }
        ]
      }
    },
    {
      "id": "end",
      "position": {
        "x": 340.0,
        "y": 440.0
      },
      "data": {
        "action": "end",
        "label": "结束",
        "params": {},
        "retries": 0,
        "steps": []
      }
    }
  ],
  "edges": [
    {
      "id": "start_main",
      "source": "start",
      "target": "expense_audit",
      "sourceHandle": "out"
    },
    {
      "id": "main_end",
      "source": "expense_audit",
      "target": "end",
      "sourceHandle": "out"
    }
  ],
  "subflows": [],
  "import_info": {}
}
