主题
发票数据说明
| ALL | STANDARD | |
|---|---|---|
| 接口 | POST /api/channel/data/invoice/all | POST /api/channel/data/invoice/standard |
schemaVersion | invoice.v1 | invoice-standard.v2 |
| 结构 | 税局源表各列原样保留的动态对象,分页返回 | 13 个模块的分析结构 |
| 成功业务码 | 0 | 200 |
两者规则不可混用
原始发票记录是动态对象,必须允许新增字段。STANDARD 是独立加工结构, 字段必填/可空规则以专用字典为准,不能套用原始发票规则。
发票 ALL
记录角色
同一张发票的多个商品行可能对应多条记录。每条记录带 __recordRole 说明它是什么:
__recordRole | 含义 |
|---|---|
INVOICE_HEADER | 「发票基础信息」中的整票记录 |
INVOICE_LINE | 「信息汇总表」中的真实商品或服务明细 |
INVOICE_LINE_SUMMARY | 「详见销货清单」等整票汇总占位,不应与真实商品明细重复累计 |
WORKBOOK_TOTAL | 原工作簿合计/总计行,不代表一张发票 |
SPECIALTY_DETAIL | 不动产、旅客、货运、通行费、铁路客票等专项伴随明细 |
SOURCE_RECORD | 其他历史或未知来源记录 |
不要把所有记录直接相加
发票 ALL 保持原数组、原分页和全部税局源字段,不删除合计行, 也不把整票与商品明细自动相加。需要发票张数或金额分析时, 必须按记录角色选对统计层级;不想自行处理的客户应使用发票 STANDARD。
来源元数据
结构化入库后的记录增量返回四个双下划线前缀字段:
| 字段 | 含义 |
|---|---|
__sourceDatasetName | 原始工作表名称 |
__sourceArtifactName | Worker 原始制品文件名 |
__sourceRecordOrdinal | 一基表内行序(从 1 开始) |
__recordRole | 记录角色 |
数据库中的税局原始 payload 不写入或覆盖这些字段; LEGACY 分页、CURSOR 和 PACKAGE 在交付时使用同一规则动态附加。 旧任务尚未结构化入库、走历史制品兼容路径时可能没有这些可选字段。
兼容键
新版 Worker 的 XLSX 原样保留税局中文列;交付层同时对能够确定一一对应的列 增量附加旧接口兼容键,且绝不覆盖制品已经提供的同名键。
| 中文源列 | 兼容键 | 中文源列 | 兼容键 |
|---|---|---|---|
| 数电发票号码 | qdfphm | 数量 | spsl |
| 货物或应税劳务名称 | spmc | 单价 | bwSpdj |
| 规格型号 | ggxh | 金额 | je |
| 单位 | jldw | 发票来源 | invoiceOrigin |
| 发票票种 | invoiceTypeName | 发票风险等级 | riskLevel |
两个易混淆的键
dw 始终表示吨位,不能代替 jldw(计量单位)。 hjje 也不能代替商品行原始 je。
商品规格、单位、数量和单价只在源工作表具有相应列的记录中出现, 通常是 INVOICE_LINE。基础表或专项表没有来源时不制造空值或猜测值。
派生仅限确定性规则:
- 原始来源「增值税发票管理系统 / 电子发票服务平台」→
invoiceSource = 0 / 1 - 制品文件名明确含「进项 / 销项」→ 补
sign - 发票状态明确包含「作废 / 红冲」→ 补
zfbz/hc
历史 JSON 在生成时已经缺失的规格、单位、数量、单价等业务值不会反推或伪造, 必须从原始任务表、原始 XLSX 或重新采集恢复。
纯增量变更
已有字段的名称、类型、值、数组顺序、分页总数和记录顺序均不改变。 按 additionalProperties: true 约定实现的现有客户无需修改解析逻辑。
行数与张数摘要
「多少行记录」和「多少张发票」是两个数。发票 ALL 分页、CURSOR 和 PACKAGE 状态/清单都会返回统一的摘要,把两者分开说明:
| 字段 | 含义 |
|---|---|
total / recordCount / totalRecords | 全部原始行数 |
invoiceCount | 按可靠票号去重后的真实发票张数;无法证明时为 null |
invoiceCountStatus | VERIFIED 或 UNVERIFIED |
invoiceCountMethod | 张数判定来源:信息汇总表、发票基础信息、多 Sheet 身份联合或明确空结果 |
recordRoleCounts | 六类角色在完整数据集中的总行数,各分页保持一致 |
invoiceCount 为 null 时不要用行数替代
invoiceCount 为 null 表示平台无法证明真实张数。 此时不得用 total(原始行数)冒充发票张数。
该摘要在发票数据快照生成时一次算好、存下来,翻页时不会反复扫描全部发票。
分页
见获取数据 · 发票分页。 数据量大时改用 CURSOR 或 PACKAGE。
发票 STANDARD
响应外层
结构与税务 STANDARD 不同
13 个模块直接挂在响应 data 的顶层,没有额外的 data 包装, 也没有 moduleStatus。
json
{
"schemaVersion": "invoice-standard.v2",
"generatedAt": "2026-08-12T10:41:07+00:00",
"taxpayerId": "91420100XXXXXXXXXX",
"companyName": "示例企业有限公司",
"selectedModules": ["UPSTREAM_ANNUAL", "…共 13 项"],
"sourceRecordCount": 2841,
"effectiveRecordCount": 2790,
"duplicateRecordCount": 0,
"invoiceCount": 1204,
"SJZL": {},
"JYGL": {},
"XSFX": {}
}13 个模块
selectedModules 列出的是英文键名,实际数据节点使用拼音码,一一对应:
selectedModules 中的键 | 数据节点 | 模块 |
|---|---|---|
UPSTREAM_ANNUAL | SXYNDXX | 上下游年度信息 |
TRANSACTION_OVERVIEW | JYGL | 交易概览 |
SALES_ANALYSIS | XSFX | 销售分析 |
PURCHASE_ANALYSIS | CGFX | 采购分析 |
EXPENSE_ANALYSIS | FYFX | 费用分析 |
MONTHLY_TOP_DOWNSTREAM_DEALERS | YDQSXYJXSXX | 月度前十下游经销商信息 |
MONTHLY_TOP_DOWNSTREAM_PRODUCTS | YDQSXYCPXX | 月度前十下游产品信息 |
MONTHLY_INVOICE_SUMMARY | YDFPHZ | 月度发票汇总 |
DOWNSTREAM_INFO | XYXX | 下游信息 |
PRODUCT_INFO | SPXX | 商品信息 |
TOP_SUPPLIERS | QSGYSLB | 前十供应商列表 |
MONTHLY_INPUT_INVOICE_SUMMARY | AYHZJXPHZ | 按月汇总进项票汇总 |
MONTHLY_OUTPUT_INVOICE_STATISTICS | XXKPAYFLTJ | 销项开票按月分类统计 |
SJZL · 加工质量
固定返回,披露本次加工的所有边界:可靠票数、无法判断进销方向的记录、 被抑制的重复金额、缺年度 / 交易对方名称 / 税号的发票、同名多税号冲突、 被忽略的整票清单占位数等。
先看 SJZL 再用结论
SJZL 里的每个计数都对应一类「平台选择不猜测」的情况。 先看这些计数、再决定多信任聚合金额,比直接拿数就用更稳妥。
三条通用规则
带符号净额
多数模块的金额是带符号净额。负数有效发票会让占比小于 0 或超过 100, 不能当作强制 0–100 的集中度指标。分母为 0 时返回 null, 而不是用 0 表示「无法计算」。
同名多税号按名称合并
同一客户/供应商名称出现多个税号写法时,按名称合并金额(同名视为同一家), 并在 SJZL 中通过 *NameTaxIdVariantCount 系列字段披露差异数量。
整票清单占位不重复累计
存在真实商品明细时,「详见销货清单」等整票占位会被排除, 并在 SJZL.ignoredProductSummaryRecordCount 中披露。
各模块要点
JYGL · 交易概览
销售、采购和税额合计只统计方向、开票月份及票面金额可靠的有效票; 冲红、作废票单独进入 CHZFHZ。
- 顶层
FPZS是全部状态可确认发票数;年度/月度数组中的票数是有效票数。 有效票数加上冲红、作废票数,正好等于FPZS,不多不少。 - 历史字段
MLL实际是按发票算的进销差额率,不是会计毛利率 —— 全部进项采购净额不等于营业成本。销项净额 ≤ 0 时返回null。 CHZFHZ.ZB的全部状态价税净额分母为 0 时返回null。
XSFX · 销售分析
起止日期只来自有效销项发票,不受进项、冲红或作废日期影响。
- 月度变化率只比较连续上月非零净额;首月、缺月或上月为 0 时为
null。 - 前十客户按名称和税号的带符号净额排名。
- 客户有多个地区时显示「多地区」;地区分布按每张发票地址逐笔汇总。
- 全部商品金额加起来必须与销售净额一致,不允许出现对不上的差额。
CGFX · 采购分析
与销售分析用同一套严格规则,但只读取有效进项。
- 采购起止日期不受销项或异常票影响;月度环比只比较连续上月非零净额。
- 前十供应商按名称和税号的带符号净额排名;地区按每张进项发票地址逐笔汇总。
- 全部采购商品净额加起来必须与
JYGL.CGJEHJ一致。 - 没有有效进项时日期为空字符串、各分析数组为空。
FYFX · 费用分析
不是全部会计费用。只统计可从有效进项商品/服务名称可靠识别的 水、电、物业、燃气、取暖、运输六类净额。
分类要求费用或服务语义 —— 不会因为设备、元器件或实物商品名称中 出现「运输、物流、电力」就归入费用。
FYHZ、YDFY 和 FYHJ 三层金额必须相互对得上。无可识别费用时日期为空、合计为 0、数组为空。
SXYNDXX · 上下游年度信息
按「自然年度 + 方向 + 交易对方名称 + 税号」汇总有效发票净额。 基础表存在时票面金额和状态以基础表为准,明细及专项表不重复累计。
JYJEZB 是带符号的年度净额贡献率。
YDQSXYJXSXX / YDQSXYCPXX · 月度前十
YDQSXYJXSXX按「月份 + 下游客户名称」汇总有效销项含税净额取前十。YDQSXYCPXX按「月份 + 商品名称」汇总有效销项不含税净额取前十。
三项合计字段只代表前十客户/商品,并在同月每行重复返回。 月度净额分母为 0 时占比及前十占比合计为 null。
JYCSHJ 是前十商品–发票关联次数之和:同一发票含多个商品会重复计次, 也可能因商品未进前十而小于月票数。它不是去重发票总数。
YDFPHZ · 月度发票汇总
每个至少有一张有效进项或销项的月份输出一条;冲红、作废专属月份不进入。
- 客户数和供应商数均按名称去重,同名多税号合并计数并通过
SJZL分方向披露。 - 销项、进项金额均为不含税净额 —— 进项金额不是含税金额,也不是会计成本。
- 月度金额、税额和票数加总后,与
JYGL的年度及顶层合计一致。
XYXX / SPXX · 全量清单
这两个模块返回全部客户 / 商品,不是前十列表。
XYXX按「自然年度 + 下游客户名称」;SPXX按「自然年度 + 商品名称」,存在真实明细时排除整票商品清单占位。
每年全部客户金额、全部商品金额加起来,分别与 JYGL.NDTJ.XSJE 一致。 年度净额为 0 时占比为 null。
QSGYSLB · 前十供应商
按供应商名称合并全部可靠期间的有效进项并取前十。 同名多税号不会显示成重复名称,差异通过 SJZL.lifetimeSupplierNameTaxIdVariantCount 披露。
历史字段名有歧义:
XSJE在本表实际表示进项不含税净额,不是销项销售额。
金额或票数分母为 0 时对应占比为 null。
AYHZJXPHZ · 按月进项汇总
每个存在有效、冲红或作废进项的月份输出一条。
- 有效金额使用带符号价税净额,冲红作废金额使用价税绝对额。
JXJE/JXZS固定等于有效票价税净额 / 票数。- 历史字段
YSXSSRHJ实际为有效进项不含税净额,不是销售收入。 - 冲红作废占比分母为 0 时返回
null;无任何进项状态的月份不生成记录。
XXKPAYFLTJ · 销项按月分类统计
每个存在有效、冲红或作废销项的月份输出一条。
- 有效票保留带符号不含税、税额和价税净额;冲红作废使用价税绝对额。
HSKPJEHJ固定等于有效价税净额。- 冲红作废占比、整数金额占比、整数票数占比的各自分母为 0 时返回
null, 不能用 0 表示无法计算。
完整字段字典
本页说明的是统计规则与数据边界。逐字段的类型、必填性与取值范围以交付包内的 发票 ALL / STANDARD 字段附件(JSON / CSV)为准, 请求/响应 Schema 以接口参考为准。