# 中国发票类型与字段规范

## 发票分类体系

### 1. 增值税发票

#### 增值税专用发票（专票）
- **格式**：纸质 / 电子
- **关键字段**：发票代码（10位）+ 发票号码（8位）、金额、税额、价税合计、购买方、销售方、纳税人识别号
- **用途**：可抵扣进项税额

#### 增值税普通发票（普票）
- **格式**：纸质 / 电子 / 卷式
- **关键字段**：同专用发票，但不用于抵扣
- **特殊**：购买方名称、纳税人识别号为必须项

#### 电子发票（数电票）
- **格式**：PDF / OFD / XML
- **特点**：全国统一电子发票平台开具，无纸质介质
- **验真**：通过税务数字账户查询

### 2. 机票 / 火车票 / 客运票
- **字段**：旅客姓名、航班/车次、日期、出发地、到达地、金额
- **特点**：非增值税发票，不可抵扣

### 3. 出租车发票
- **字段**：日期、时间、上下车地点、金额、发票代码+号码

### 4. 通用机打发票
- **字段**：开票单位、日期、商品明细、金额

---

## 发票号码编码规则

| 发票类型 | 代码位数 | 号码位数 | 示例 |
|---------|---------|---------|------|
| 增值税专用发票 | 10位 | 8位 | 144031900110 / 12345678 |
| 增值税普通发票 | 12位 | 8位 | 144031900110 / 12345678 |
| 电子发票 | 20位 | — | 啦啦 |
| 出租车票 | 10位 | — | — |

---

## 关键字段提取正则（OCR 后文本）

```python
# 发票号码提取
invoice_code_pattern = r'[发票代码|代码][：:\s]*(\d{10,12})'
invoice_no_pattern = r'[发票号码|号码][：:\s]*(\d{8})'

# 金额提取
amount_pattern = r'[价税合计|合计|金额][：:\s]*[￥¥]?\s*(\d+\.?\d{0,2})'

# 日期提取
date_pattern = r'(\d{4}[年\-/]\d{1,2}[月\-/]\d{1,2}[日]?)'

# 纳税人识别号（购买方/销售方）
tax_id_pattern = r'[纳税人识别号|税号][：:\s]*([A-Z0-9]{15,20})'
```
