---
name: auto-generate-export-contracts
description: 根据订单合同信息自动生成车辆出口销售合同(Word)和Proforma Invoice(Excel)。用于处理海外车辆出口业务，支持从订单文本解析买方信息、车型列表、贸易条款等，自动匹配车型价格配置表，生成标准格式的中英双语销售合同和PI表格。当用户提供订单信息、要求生成销售合同/PI/Proforma Invoice时触发。
---

# 海外合同自动生成 Skill

## 功能

根据用户提供的订单合同信息，自动生成：
1. **车辆销售合同** (Vehicle Sales Contract) - `.docx` 格式
2. **Proforma Invoice** - `.xlsx` 格式

## 触发条件

当用户：
- 提供订单信息并要求生成销售合同/PI/Proforma Invoice
- 提供包含车型、买方公司、贸易条款等信息的订单文本

## 工作流程

### Step 1: 接收订单信息

支持两种输入格式：
- **结构化编号列表**（标准格式）：
  ```
  1. 姓名：xxx；
  2.任职：xxx；
  3.意向车型：
  （1） 车型中文名  英文名 - 型号：LZWxxxx
  排放标准  代码：xxx  X台颜色
  4.合同签约公司中文名称：xxx；
  5.合同签约公司英文名称：xxx
  ...
  ```
- **自然语言描述**：用户自由描述订单内容

解析提取核心字段：
- 买方公司中英文名称和地址
- 合同联系电话
- 车型列表（型号、发动机代码、数量、颜色）
- 贸易条款（FCA/FOB/EXW）
- 出发港口、目的地国家

### Step 2: 车型价格匹配

遍历 `assets/vehicle-price-config.xlsx` 中的所有sheet，在**G列(型号)**精确匹配ModelCode：
- 匹配成功 → 根据贸易条款获取对应USD价格（FCA→O列, FOB→N列, EXW→P列）
- 匹配失败 → **提示用户提供该车型的单价USD**

**用户提供的价格优先于价格表。**

### Step 3: 计算汇总

- 总数量 = Σ 各车型数量
- 总金额 = Σ (单价 × 数量)
- 30%金额 = `ceil(总金额 × 0.30)`（向上取整）
- 70%金额 = 总金额 - 30%金额
- 英文大写 = `num2words(总金额).upper()`

### Step 4: 生成合同编号

格式：`HLXYWPA{年月日}`，如 `HLXYWPA20260530`

### Step 5: 生成文件

**Proforma Invoice** (`{合同编号}-Proforma Invoice.xlsx`):
- 复制模板 `assets/proforma-invoice-template.xlsx`
- 替换买方信息、合同编号、日期、车型明细、价格、汇总信息
- 保留Excel公式（SUM、乘法公式）

**销售合同** (`{合同编号}-车辆销售合同.docx`):
- 复制模板 `assets/vehicle-sales-contract-template.docx`
- 替换段落文本（合同编号、日期、买方信息、贸易条款等）
- 替换表格（车辆明细表、汇总信息）
- 银行账户信息保持模板固定值

### Step 6: 输出

向用户输出两个文件，并附加固定提示语：
> 销售合同、Proforma Invoice已生成，报价员核对无误后再发送给客户。

## 脚本使用

```bash
python scripts/generate_contracts.py <订单信息文件.txt> -o <输出目录> -p '{"LZW1028SPY": 6176}'
```

参数：
- `order_file`: 订单信息文本文件路径
- `-o, --output`: 输出目录（默认当前目录）
- `-p, --prices`: JSON字符串，手动提供缺失的车型价格

Python API：
```python
from scripts.generate_contracts import generate_contracts

result = generate_contracts(order_text, output_dir='.', user_prices={"LZW1028SPY": 6176})
# result['success'] = True/False
# result['pi_path'] = PI文件路径
# result['contract_path'] = 销售合同文件路径
# result['missing_prices'] = 未匹配到价格的车型列表
```

## 依赖

- `python-docx`
- `openpyxl`
- `num2words`

## 模板文件

- `assets/proforma-invoice-template.xlsx`: Proforma Invoice模板
- `assets/vehicle-sales-contract-template.docx`: 销售合同模板
- `assets/vehicle-price-config.xlsx`: 车型价格配置表（多sheet）

## 字段映射详情

详见 [references/field-mapping.md](references/field-mapping.md)
