{
  "name": "票据处理自动化工作流",
  "nodes": [
    {
      "parameters": {
        "postProcessAction": "markAsRead",
        "format": "resolved",
        "downloadAttachments": true
      },
      "name": "收票邮件触发",
      "type": "n8n-nodes-base.emailRead",
      "typeVersion": 1,
      "position": [0, 0]
    },
    {
      "parameters": {
        "operation": "pdf",
        "options": {}
      },
      "name": "提取附件内容",
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1,
      "position": [220, 0]
    },
    {
      "parameters": {
        "url": "https://api.moonshot.cn/v1/chat/completions",
        "method": "POST",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            { "name": "Authorization", "value": "Bearer YOUR_LLM_API_KEY" },
            { "name": "Content-Type", "value": "application/json" }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\"model\":\"moonshot-v1-8k\",\"messages\":[{\"role\":\"system\",\"content\":\"你是发票字段抽取器。从发票文本中抽取字段：invoice_no(发票号)、amount(金额/价税合计)、date(开票日期)、tax_id(税号)、category(费用类目)。仅输出JSON。缺失字段填null。\"},{\"role\":\"user\",\"content\":\"={{$json.data}}\"}]}",
        "options": {}
      },
      "name": "LLM抽取字段",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 1,
      "position": [440, 0]
    },
    {
      "parameters": {
        "jsCode": "const raw = JSON.parse($input.first().json.choices[0].message.content);\nconst valid = raw.invoice_no && raw.amount && raw.date;\nreturn [{ json: { invoice_no: raw.invoice_no || '', amount: Number(raw.amount) || 0, date: raw.date || '', tax_id: raw.tax_id || '', category: raw.category || '', valid: valid } }];"
      },
      "name": "校验格式化",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [660, 0]
    },
    {
      "parameters": {
        "conditions": {
          "boolean": [
            { "value1": "={{$json.valid}}", "value2": true }
          ]
        }
      },
      "name": "校验是否通过",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [880, 0]
    },
    {
      "parameters": {
        "url": "YOUR_FINANCIAL_SYSTEM_API_URL",
        "method": "POST",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            { "name": "Authorization", "value": "Bearer YOUR_FINANCE_API_KEY" },
            { "name": "Content-Type", "value": "application/json" }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{$json}}",
        "options": {}
      },
      "name": "写入财务系统",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 1,
      "position": [1100, -100]
    },
    {
      "parameters": {
        "url": "YOUR_SLACK_WEBHOOK_URL",
        "method": "POST",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\"text\":\"票据校验失败需人工复核，请检查附件。发票号：{{$json.invoice_no}}\"}",
        "options": {}
      },
      "name": "通知人工复核",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 1,
      "position": [1100, 160]
    },
    {
      "parameters": {
        "keepOnlySet": true,
        "values": {
          "string": [
            { "name": "archive_status", "value": "={{$json.valid ? \"已入账\" : \"待复核\"}}" }
          ]
        }
      },
      "name": "归档记录",
      "type": "n8n-nodes-base.set",
      "typeVersion": 1,
      "position": [1320, 0]
    }
  ],
  "connections": {
    "收票邮件触发": { "main": [ [{ "node": "提取附件内容", "type": "main", "index": 0 }] ] },
    "提取附件内容": { "main": [ [{ "node": "LLM抽取字段", "type": "main", "index": 0 }] ] },
    "LLM抽取字段": { "main": [ [{ "node": "校验格式化", "type": "main", "index": 0 }] ] },
    "校验格式化": { "main": [ [{ "node": "校验是否通过", "type": "main", "index": 0 }] ] },
    "校验是否通过": {
      "main": [
        [{ "node": "写入财务系统", "type": "main", "index": 0 }],
        [{ "node": "通知人工复核", "type": "main", "index": 0 }]
      ]
    },
    "写入财务系统": { "main": [ [{ "node": "归档记录", "type": "main", "index": 0 }] ] },
    "通知人工复核": { "main": [ [{ "node": "归档记录", "type": "main", "index": 0 }] ] }
  }
}
