# 海外合同自动生成 Skill - 开发文档(定稿版) ## 1. Skill 概述 ### 1.1 名称 `auto-generate-export-contracts` ### 1.2 功能描述 根据用户提供的订单合同信息,自动基于模板生成: 1. **车辆销售合同 (Vehicle Sales Contract)** - Word (.docx) 格式 2. **Proforma Invoice** - Excel (.xlsx) 格式 如果订单信息中没有车型价格,则从内置的`单一车型价格表+配置.xlsx`中按型号匹配查找。若价格表中无匹配,则提示用户提供单价。 ### 1.3 触发条件 当用户: - 提供订单合同信息,要求生成销售合同和/或Proforma Invoice - 提到"生成合同"、"制作PI"、"Proforma Invoice"、"销售合同"等相关关键词 - 提供包含车型、买方信息、贸易条款等订单信息时 --- ## 2. 输入格式定义 ### 2.1 支持两种输入格式 **格式A:结构化编号列表(标准格式)** ``` 1. 姓名:陈凯武; 2.任职:经理; 3.意向车型: (1) 荣光新双排货车 N350 Double Cab Pickup,- 型号:LZW1028SPY 国V China Ⅴ 代码:G33N 1台银色 (2)五菱荣光新卡双后轮 2.0L 5MT 单排 型号:LZW5030XXYLGHUG 国六B(RDE) 代码:AGMC 1台银色 4.合同签约公司中文名称:财货通(香港)国际供应链有限公司; 5.合同签约公司英文名称:Finmo (HongKong)International supply chain Co.,Ltd. 6.合同签约公司中文地址:香港德輔道西 93-97 號聯威商業大廈 13 樓 B-C 室 7.合同签约公司英文地址:FLAT B&C,13/F.,LUEN WAI COMMERCIAL BUILDING,93-97 DES VOEUX ROAD WEST,HONG KONG 8.合同联系电话:13640613242 9.国内出发港口:广州南沙; 10.目的地国家:巴拿马Panama 11.目的地港口:巴尔博亚港 Balboa 12.结算方式:FCA ``` **格式B:自然语言描述** ``` 帮我生成销售合同,买方是财货通(香港)国际供应链有限公司,英文名Finmo (HongKong)International supply chain Co.,Ltd.,要买两辆五菱车: 1. 荣光新双排货车 LZW1028SPY,发动机代码G33N,1台银色 2. 五菱荣光新卡双后轮 LZW5030XXYLGHUG,发动机代码AGMC,1台银色 贸易条款FCA,出发港广州南沙,目的地巴拿马,联系电话13640613242 ``` ### 2.2 需要提取的核心字段 | 字段 | 说明 | 是否必填 | |---|---|---| | 买方公司中文名称 | | 必填 | | 买方公司英文名称 | | 必填 | | 买方中文地址 | | 必填 | | 买方英文地址 | | 必填 | | 合同联系电话 | | 必填 | | 车型列表 | 每辆含:型号、发动机代码、数量、颜色 | 必填(至少1辆) | | 贸易条款 | FCA / FOB / EXW / CIF 等 | 必填 | | 出发港口 | | 必填 | | 目的地国家 | | 必填 | | 目的地港口 | | 可选 | | 销售人员姓名 | | 可选 | | 销售人员职位 | | 可选 | **注意**:订单中的"付款公司"信息(创兴银行/账户等)**不在合同中体现**,模板中保留固定的卖方收款账户。 ### 2.3 Skill自动生成的字段 | 字段 | 生成规则 | |---|---| | 合同编号 | `HLXYWPA{年月日}`,如 `HLXYWPA20260530` | | 签署日期 | 当前日期 | | 卖方信息 | 固定模板值 | | 收款银行信息 | 固定模板值(卖方账户) | --- ## 3. 车型价格配置表 ### 3.1 数据来源 `assets/vehicle-price-config.xlsx`(由 `单一车型价格表+配置.xlsx` 转换而来) ### 3.2 Sheet列表 | 索引 | Sheet名 | |---|---| | 0 | 五菱之光小卡 | | 1 | 五菱之光 | | 2 | 五菱宏光v | | 3 | 新宏光S客车 | | 4 | 星光560 | | 5 | 星光730 | | 6 | 缤果 | | 7 | 星光 | | 8 | 星光s | | 9 | 悦也plus | | 10 | 云海 | | 11 | 宏光s3 | | 12 | 星驰 | | 13 | 扬光 | | 14 | 迷你 | | 15 | 五菱荣光新卡燃油 | | 16 | 荣光小卡 | ### 3.3 列定义 | 列 | 字段名 | 说明 | |---|---|---| | A | 车型车系 | Vehicle Series | | B | 市场名称 | Market Name (中文) | | C | 版本 | Version | | E | 官方指导价 | MSRP (RMB) | | F | 系别 | Series Code (中英文) | | G | 型号 | Model (ModelCode) | | H | 车型代码 | Model Code | | I | 发动机代码 | Engine Code | | J | 主要配置描述 | Major Configurations Description (中英文) | | K | FOB价格(人民币) | FOB Price (RMB) | | L | FCA价格(人民币) | FCA Price (RMB) | | M | EXW价格(人民币) | EXW Price (RMB) | | N | FOB价格(美元) | FOB Price (USD) | | O | FCA价格(美元) | FCA Price (USD) | | P | EXW价格(美元) | EXW Price (USD) | ### 3.4 匹配逻辑 ```python def match_vehicle(model_code: str, trade_term: str) -> dict: """ 遍历所有sheet,在G列(型号/ModelCode)精确匹配model_code 根据trade_term选择对应USD价格列: - FCA -> O列 - FOB -> N列 - EXW -> P列 返回: { 'unit_price_usd': float, 'description_cn': str, # B列市场名称 'description_en': str, # F列系别英文 'model_code': str, # G列 'engine_code': str, # I列 'version': str, # C列 } """ ``` **匹配失败处理**:如果G列精确匹配不到输入的ModelCode,**提示用户手动提供该车型的单价USD和配置描述**。 --- ## 4. 模板替换规则 ### 4.1 Proforma Invoice 模板替换字段 | 单元格 | 替换内容 | |---|---| | B7 | TO: {买方公司英文名称} | | G7 | Contract NO.: {合同编号} | | H8 | DATE: {当前日期} | | B8 | ADD: {买方公司英文地址} | | B9 | Tel: {合同联系电话} | | B12 | ORIGINAL: LIUZHOU CHINA(固定) | | G12 | SHIPPING MARKS: N/M(固定) | | B17-B22 | 每行一辆车: 配置描述文本 | | C17-C22 | 数量 | | F17-F22 | 单价USD | | H17-H22 | 金额公式 `=C*F` | | E23 | FCA {出发港口} | | H23 | =SUM(H17:H22) 保留公式 | | B24 | SAY US {英文大写金额} only | | B27 | Delivery terms: FCA {出发港口} | | B29 | Payment terms(30%和70%动态计算) | **银行账户信息区**:保持模板固定值(卖方GUANGXI HAOLING收款账户)。 ### 4.2 销售合同模板替换字段 | 位置 | 替换内容 | |---|---| | No.: 后 | {合同编号} | | Signature Date: 后 | {当前日期} | | Buyer: | {买方公司英文名称} | | 买方: | {买方公司中文名称} | | ADD: | {买方公司英文地址} | | 地址: | {买方公司中文地址} | | Tel: | {合同联系电话} | | Export Destination: | {目的地国家} | | Incoterms: | {贸易条款} {出发港口} | **Table0(车辆明细表)**:填入车型、数量、单价、总金额。 **Table1(银行账户)**:保持模板固定值。 **付款条款**:30%和70%金额动态计算。 --- ## 5. 核心工作流 ``` Step 1: 接收用户输入(支持编号列表或自然语言) └─> 使用LLM或正则解析提取核心字段 Step 2: 车型信息处理 └─> IF 用户提供单价: 直接使用 └─> ELSE: 在价格表中按ModelCode精确匹配 └─> IF 匹配成功: 获取对应贸易条款的USD价格 └─> IF 匹配失败: 提示用户手动提供单价USD Step 3: 计算汇总 └─> 总数量、总金额、30%金额、70%金额、英文大写 Step 4: 生成 Proforma Invoice (xlsx) └─> 复制模板,替换字段,保留公式 Step 5: 生成 销售合同 (docx) └─> 复制模板,替换段落和表格内容 Step 6: 输出 └─> 输出两个文件 + 固定提示语 ``` --- ## 6. Skill 文件结构 ``` auto-generate-export-contracts/ ├── SKILL.md ├── scripts/ │ ├── generate_contracts.py │ ├── match_vehicle.py │ ├── number_to_words.py │ └── parse_order_info.py ├── assets/ │ ├── proforma-invoice-template.xlsx │ ├── vehicle-sales-contract-template.docx │ └── vehicle-price-config.xlsx └── references/ └── field-mapping.md ``` --- ## 7. 关键技术方案 ### 7.1 依赖库 - `python-docx`: 读写 Word 文档 - `openpyxl`: 读写 Excel 文档 - `num2words`: 数字转英文单词 ### 7.2 合同编号生成 ```python from datetime import datetime contract_no = f"HLXYWPA{datetime.now().strftime('%Y%m%d')}" # 示例: HLXYWPA20260530 ``` ### 7.3 数字转英文大写 ```python from num2words import num2words amount = 14488 words = num2words(amount, lang='en').upper() # FOURTEEN THOUSAND FOUR HUNDRED AND EIGHTY-EIGHT ``` --- ## 8. 边界情况处理 | 场景 | 处理方式 | |---|---| | 价格表无匹配 | 提示用户手动提供单价USD | | 用户提供的价格优先于价格表 | 使用用户值 | | 多款车型(>2辆) | PI支持最多6行,销售合同表格动态扩展 | | 非FCA/FOB/EXW贸易条款 | 替换文本,价格默认使用FCA列 | | 出发港口为空 | 默认"Guangzhou nansha Port" | | 目的地国家为空 | 提示用户补充 | | 用户只要求生成一个文件 | 支持单独生成 | --- ## 9. 输出规范 ### 9.1 文件名 - Proforma Invoice: `{合同编号}-Proforma Invoice.xlsx` - 销售合同: `{合同编号}-车辆销售合同.docx` ### 9.2 输出后固定提示语 > 销售合同、Proforma Invoice已生成,报价员核对无误后再发送给客户。