主题
税务数据契约
税务有两种输出,来自同一次采集,用途不同。
| ALL | STANDARD | |
|---|---|---|
| 接口 | POST /api/channel/data/tax/all | POST /api/channel/data/tax/standardTable |
schemaVersion | 无(固定 V2 结构) | tax-standard.v2 |
| 结构 | 37 个顶层节点 | 24 个模块 |
| 语义 | 税局原始 / 映射数据 | 平台加工后的标准化结构 |
| 成功业务码 | 200 | 200 |
税务 ALL
版本
税务 ALL 固定返回 V2,查询请求不需要也不接受版本参数。
平台 1.5.3 为每个 TAX ALL 结果快照记录已发布映射的修订清单与目录哈希。 同一 job_id + attempt_id 首次生成后,后续重复查询复用同一快照;后台后来发布、 回滚或停用映射不会改写这笔历史结果。客户端仍不需要提交任何映射版本参数。
响应固定包含 37 个节点 —— 在原 35 个节点基础上追加两张扩展表:
| 扩展节点 | 粒度 | 承接内容 |
|---|---|---|
taxCompanyEnterpriseExtendedInfoDtoPageResult | 企业一条记录 | 组织机构代码、增值税企业类型、出口退税/千户集团标志、存款账户、企业标志、跨区域财产税登记主体标志、注册地及经营地邮编、投资总额、核算方式、外籍/合伙/雇工/固定工人数、总分机构类型,以及法人、财务负责人、办税人员各自的固定电话与邮箱 |
taxDeclarationHandlerInfoDtoPageResult | 一张增值税主表或 A200000 预缴申报表一条记录 | 表级元数据:银行账号、声明人、经办人及证件、代理机构、主管/受理机关、接收/受理人和日期、金额单位、原工作表名及稳定 formInstanceKey |
扩展表不改写原节点
两张扩展表是追加的,不修改 taxCompanyEnterpriseInfoDtoPageResult 等既有节点。 全部字段按 Worker 原值转为稳定字符串:真实 0 保留为 "0",来源为空时为 ""。
部分来源未取得不等于整单失败
1.5.3 会保留已取得的税务数据并继续加工,非阻断缺失通过订单/产品结果中的 qualityStatus、collectionResult、qualityIssues 和 dataQuality 披露。 消费 37 个节点时,应把质量摘要与数据快照一并保存。
申报方式字段不做取反猜测
一般纳税人表保留「是否代理申报」,小规模表保留语义相反的「是否自行申报」。 两者分别通过 declarationModeField 和 declarationModeValue 原样表达, 不会互相取反推导。来源没有的字段保持空字符串。
期间费用
taxEnterpriseYearCostsVOS 按 A104000 实际出现且至少有一个金额的业务行输出 17 字段期间费用记录,不制造源表未返回的空行。
- 六个金额字段分别承接销售费用/境外支付、管理费用/境外支付、财务费用/境外支付。
*、空白和不可识别文字保持空字符串;真实0与负数原样保留。- 源表存在第 26 行合计时,系统逐列核对全部已返回明细,任一不一致时 整张表失败关闭,不会污染 A100000。
taxId、taxNo在税局 RAW 没有同语义来源时保持空。
申报更正
taxCompanyDeclareChangeVOPageResult 保持原有 17 个字段, 但只输出已更正次数为正数或税局明确标记为更正申报的记录。
- 候选列表的当前申报日期不再写入
originalDeclarationDate或latestOperationDate。 - 本次应补退金额不再写入
refundAmountBeforeChange。 - 这些历史字段没有同语义来源时保持空。
- 节点增量返回申报表名称、当前申报日期、本次应补退金额、申报记录/表单 ID、 征收项目代码、申报类型、更正标志及
correctionEvidenceSource。
社保节点
两个历史社保节点保持分离,不互相复制:
| 节点 | 性质 | 当前状态 |
|---|---|---|
taxSocialSecurityDtoPageResult | 17 字段兼容占位节点 | 固定为空 |
getTaxSocialSecurityPageResult | 旧接口实际绑定「社保申报表」的 15 字段明细节点 | 当前为空 |
当前 Worker 尚未调用社保申报接口,因此两者均为空。 未来取得真实社保申报 RAW 后只写入后者,不在两个节点重复复制, 也不从普通缴款信息推导。
税务 STANDARD
请求与响应外层
请求不提供模块筛选参数。响应外层:
json
{
"schemaVersion": "tax-standard.v2",
"generatedAt": "2026-08-12T10:41:07+00:00",
"taxpayerId": "91420100XXXXXXXXXX",
"companyName": "示例企业有限公司",
"dataAsOf": "2026-07-31",
"selectedModules": ["NSRJBXX", "…共 24 项"],
"sourceFingerprint": "sha256:…",
"sourceWarnings": [],
"fieldWarnings": [],
"moduleStatus": {},
"data": {}
}| 字段 | 说明 |
|---|---|
selectedModules | 固定列出完整 24 个模块,不受请求影响 |
sourceFingerprint | 本次标准化所依据来源的指纹 |
sourceWarnings | 来源层面的边界披露(缺年度、缺表单、记录数不一致等) |
fieldWarnings | 字段层面的边界披露(同一项目出现多个不同金额等) |
moduleStatus | 模块代码 → 状态对象 |
data | 各模块的标准化数据 |
24 个模块
业务字段名称统一使用拼音大写缩写,协议级字段保留英文驼峰命名。
| 代码 | 模块 | 代码 | 模块 |
|---|---|---|---|
NSRJBXX | 纳税人基本信息 | NSXYDJLS | 纳税信用等级历史 |
RYXX | 人员信息 | SSWFWZXX | 税收违法违章信息 |
TZFXX | 企业投资方信息 | YSHDXX | 银税互动 |
NSSBXX | 纳税申报数据 | LRBNB | 利润表年报 |
ZZSSBMX | 增值税申报表明细 | LRBJB | 利润表季报 |
QYSDSSBMX | 企业所得税申报表明细 | ZCFZBNB | 资产负债表年报 |
JKXX | 缴款信息 | ZCFZBJB | 资产负债表季报 |
QSXX | 当前欠税信息 | XJLLBNB | 现金流量表年报 |
SBGZ | 申报更正 | XJLLBJB | 现金流量表季报 |
SWBG | 税务变更 | MYSJSEHJ | 每月实缴税额合计 |
SBFXX | 社保费 | JDSJSETJ | 已缴税额按季度统计 |
JCWS | 稽查文书 | QYCWZBXX | 企业财务指标 |
三类「来源不足」模块
JCWS(稽查文书)、YSHDXX(银税互动)、SBFXX(社保费)、SWBG(税务变更) 当前 Worker 尚未采集对应来源,固定返回 INSUFFICIENT_SOURCE。 这表示来源未采集,不表示企业没有稽查、没有授信记录、没有社保或没有变更。
模块状态
moduleStatus[模块代码] 是对象,不是字符串:
json
{
"NSRJBXX": { "status": "AVAILABLE", "recordCount": 1, "message": "" },
"QSXX": { "status": "EMPTY", "recordCount": 0, "message": "" },
"SBFXX": { "status": "INSUFFICIENT_SOURCE", "recordCount": 0, "message": "…" }
}status | 含义 | 客户端应如何解读 |
|---|---|---|
AVAILABLE | 有数据 | 正常消费 |
EMPTY | 来源存在且已证明为空 | 可作为「确实没有」的业务结论 |
NOT_COLLECTED | 本次采集没有该来源 | 不能解读为「没有」 |
INSUFFICIENT_SOURCE | 已采集,但来源不足以无损标准化 | 不能解读为「没有」,看 message |
PROCESSING_FAILED | 标准化过程失败 | 联系平台 |
空不等于没有
把 NOT_COLLECTED 或 INSUFFICIENT_SOURCE 当成「该企业没有欠税/没有更正/没有社保」 是最常见的误用。只有 EMPTY 才是经过证明的空。
几个模块的口径
QYSDSSBMX · 企业所得税申报明细
直接从 Worker RAW 加工。新版 Worker 从企业税务登记/设立年份逐年查询到当前年, 对每次所得税申报调用税局 getBbidList 后逐张采集清单内的 A000000、A100000、A200000 及实际选报年度附表。
只有年度连续、全部税务采集项成功且所得税表单范围完整时,TAX 产品才允许入库; 少一年、少一张必需表或任一明细请求失败都会明确失败。
- 年度主表人民币金额进入
BQJE; - 月(季)度本年累计及新版金额型附报事项进入
LJJE; - 税率、比例和选项不会去掉符号后冒充金额。
A000000 和年度附表完整保留在 RAW;现有 12 个业务字段无法无损承接时, 模块用 INSUFFICIENT_SOURCE 和 sourceWarnings 明确披露 「已采集但未标准化」的边界。
JKXX · 缴款信息
直接从 Worker RAW 加工,不经过 ALL 或 queryTaxInfo。 新版 Worker 从企业税务登记/设立年份开始,按「缴款日期」逐年分页查询, 并在税务采集清单中证明连续年度和返回记录数;服务端还会反查清单起始年度、 记录数和 RAW 缴款日期,任一不一致均返回 INSUFFICIENT_SOURCE。
RKRQ只接受独立入库日期,绝不复制JKRQ缴款日期。- 缺失实缴金额不会被填成零。
- 晚于缴款日的后续申报/更正日期不会被误配为
SBRQ。 - 企业主管税务机关不会冒充单笔缴款机关。
旧 Worker 只有最近四年范围,旧记录仍可读取,但不能当作企业完整历史。 只有完整年度清单与记录数共同证明零记录时,模块才返回 EMPTY。
QSXX · 欠税信息
从 Worker 当前欠税接口 RAW 生成,不合并历史欠税。 入库时要求清单条数与「欠税信息」RAW 行数完全一致。
QSJLID只使用税局真实 ID;YBTSE只使用当前欠缴金额;SKZL/YZPZLMC分别表示税款种类和应征凭证种类;- 缺失字段保持
null。
NSRJBXX.DQSFQS 只有在税局明确标记欠税/逾期,或快照日已晚于具体缴款期限 且欠缴金额为正时才为 true;尚未到期为 false;旧采集证据不足时为 null。
旧文件没有欠税工作表不能解释为「无欠税」。
SBGZ · 申报更正
只输出有明确更正证据的申报记录。
税局「申报更正与作废」页面首先返回的是可供用户选择处理的已申报表, 并不表示这些申报都发生过更正。新版 Worker 因此将该 RAW 明确命名为 「申报更正候选申报列表」,完整分页并继续入库,但候选来源缺失或查询不完整 不会阻断其他税务数据入库。
- 没有更正次数或更正标志的候选行不会写入
SBGZ。 - 候选列表的当前申报日期绝不冒充原申报日期。
YWZJ不使用更正次数、日期或金额等可变属性。
只有候选列表而没有真实更正历史证明时,模块返回 INSUFFICIENT_SOURCE, 而不是虚构更正记录。
SWBG · 税务变更
只接受税局真实企业变更历史。当前 Worker 只采集企业当前登记信息, 没有调用变更历史接口,因此当前结果明确返回 INSUFFICIENT_SOURCE —— 不能解释为企业没有发生变更。
变更项目名称、代码、变更前内容、变更后内容和日期只读取同语义 RAW 字段; 当前地址、法人、注册资本等快照不会被拿来倒推历史。
SBFXX · 社保费信息
只接受企业社保费申报明细。当前 Worker 没有调用社保费申报接口, 现有缴款记录也缺少费种、征收品目、人数、缴费基数和费率, 不能转换成社保申报,因此模块返回 INSUFFICIENT_SOURCE。
未来真实来源接入后,16 个字段逐项直取;应缴费额、基数和减免费额严格按货币解析, 人数和顺序按非负整数输出。「抵缴费额」不会冒充减免费额,征收子目不会冒充征收品目。
组合获取
POST /api/channel/data/tax/results 一次返回多种输出:
json
{
"channelCode": "BANK",
"channelOrderNo": "BANK-20260812-0001",
"orderNo": "1e3f2f55-8da4-4ba9-b941-84860eb1d243",
"taxDataTypes": ["ALL", "STANDARD"]
}data 的键即请求的输出类型。规则见获取数据。
完整字段字典
本页说明的是口径与边界。逐字段的类型、必填性与取值范围以交付包内的 税务 ALL / STANDARD 字段附件(JSON / CSV)为准, 请求/响应 Schema 以接口参考为准。