开票主体
TF Fiscal 开票主体的生命周期、一个主体如何同时服务 NF-e / CT-e / DC-e / NFS-e、税制推导、DC-e 与 NFS-e 的开通方式与相关错误码。
什么是开票主体
开票主体(empresa)是被代为开具单据的法律实体:电商平台的卖家、承运人,或为自己开票的集成商。每个主体由注册开票主体返回的 empresaId 标识,它是所有发行、查询、取消端点的路径变量。
| 步骤 | 端点 | 说明 |
|---|---|---|
| 1 注册主体 | POST /openapi/v2/empresas | 返回 empresaId、dceHabilitado 与 nfseHabilitado;请求体带 id 即更新既有主体 |
| 2 关联证书 | POST /openapi/v1/empresas/{empresaId}/certificadoDigital | A1 证书(.pfx / .p12)与密码;multipart 或 JSON + Base64 |
| 3 登记回调 | POST /openapi/v1/webhooks | 每个应用一个回调地址,所有单据类型共用 |
生命周期
- 注册:注册接口调用成功后,主体进入平台审核队列。同一 CNPJ 重复注册返回
10003002;直接使用原empresaId,或带id更新。 - 证书:关联 A1 证书。证书须属于主体 CNPJ(
10003010)、在有效期内(10003011)且与当前生效证书不同(10003012);密码不符返回CER0005。上传成功即替换旧证书。 - 审批:由运营审批主体。运营审批通过、且证书关联成功后主体方可开票。审批前开票,NF-e 返回
10004004(DC-e 为DCe00008,CT-e 为10017004)。审批进度请与平台运营确认。 - 环境:每个主体有一个当前环境,认证测试
Homologacao或生产Producao。新注册主体默认认证测试;切生产由平台运营操作、不开 API。每个发行请求里的环境值(NF-e 与 CT-e 为ambienteEmissao,DC-e 为ambiente)必须与主体当前环境一致,不一致返回10004030(NF-e)、10017010(CT-e)或DCe00004(DC-e)。参见环境。
注意: 更新(请求体带
id)不重新提交审核,也不改变主体状态与环境。
一个主体,四种单据
同一 empresaId、同一证书、同一回调地址服务所有单据类型。不同之处在于各类型所需的号段:
| 单据类型 | 模型 | 号段配置方式 | 环境字段 | 不可开票错误码 |
|---|---|---|---|---|
| NF-e | 55 | 注册时的 emissaoNFeProduto.ambienteProducao(sequencialNFe / serieNFe) | ambienteEmissao | 10004004 |
| CT-e | 57 | 由平台侧配置;注册报文没有 CT-e 配置块。未配置号段,或存在多个启用号段且请求未指定时,发行返回 10017007 | ambienteEmissao | 10017004 |
| DC-e | 99 | 注册时或带 id 更新时的 emissaoDCe.ambienteProducao(tipoEmitente、sequencialDCe / serieDCe、siteMarketplace) | ambiente | DCe00008 |
| NFS-e | — | 注册时或带 id 更新时的 emissaoNFSe(序列、起始票号与税制身份),也可由运营维护 | ambienteEmissao | 10018004 |
emissaoNFeProduto、emissaoDCe与emissaoNFSe各自可选、至少传一个。只开 NF-e 传第一个,只开 DC-e 或只开 NFS-e 的主体可省略它(不建模型 55 号段),传多个则对应单据同时开通。三个都缺返回 40010001001。- 注册时提交的系列与下一号即开票使用的号段,此后平台自动连续取号。
- CT-e 发行还要求该 CNPJ 在其州税务局有 CT-e 发行资质;资质缺失时 SEFAZ 返回
230 - IE do emitente não cadastrada,平台无法代为解决。
税制推导
主体税制由注册时的两个布尔值推导,更新不可变更:
mei | optanteSimplesNacional | 税制 |
|---|---|---|
true | 任意 | MEI |
false | true | Simples Nacional |
false | false | 一般税制 |
税制决定 NF-e 商品行可用的税码族(Simples / MEI 用 CSOSN,一般税制用 CST),见 NF-e;也决定 NFS-e 档案里 regimeApuracaoSn 是否必填,见下文。inscricaoEstadual 是开具 NF-e / CT-e / DC-e 的必填项,缺失返回 10003006;只做 NFS-e 的主体不要求州注册号。
开通 DC-e
DC-e(模型 99)由 emissaoDCe 配置块开通:
json
"emissaoDCe": {"ambienteProducao": {"tipoEmitente": "Marketplace","sequencialDCe": 1,"serieDCe": "1","siteMarketplace": "https://loja.exemplo.com.br"}}
tipoEmitente为Marketplace(电商平台代非纳税人卖家 / 个人发件)或OwnIssuer(企业自发)。Carrier可登记但发行被10019013拒绝。Marketplace必须传siteMarketplace。- 未传
emissaoDCe的主体不会开通 DC-e:注册仍成功,响应dceHabilitado=false,发行时收到DCe00004。请在注册当场核对该字段。 - 事后补开 DC-e:带
id重传注册报文并加上emissaoDCe块。模型 99 号段只升不降:sequencialDCe只能抬高下一号,不能降低(40010001001);旧系列仍启用时换serieDCe会被拒绝(40010001001,须经运营)。
开通 NFS-e
NFS-e 由 emissaoNFSe 配置块开通。带上本块主体才能开 NFS-e,票号序列也在此建立。这里只放不会一张票一个样的东西——服务码、CNAE、NBS、ISS 税率、代扣与 IBS/CBS 都跟着卖的是什么服务走,放在每张票的 servico 块里传。
json
"emissaoNFSe": {"serieDps": "1","sequencialDps": 1,"regimeApuracaoSn": 1,"regimeEspecialTributacao": 0}
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
serieDps | string(1-5 位数字) | 否 | 开票用的 DPS / RPS 序列号。每张票都用本项,发行请求不接受单独的序列号。本项不传则为 1 |
sequencialDps | integer | 否 | 下一张要开的票号,从 1 起。从别家迁移过来时传已用过的最大号加一,票号才能接着原来的继续。本项不传则为 1。号段一旦建立,更新时不再改动 |
regimeApuracaoSn | integer | ME/EPP 必填 | Simples Nacional 怎么计算税:1 联邦与市政均按 SN / 2 联邦按 SN、市政固定额 / 3 联邦按 SN、市政常规。Simples 归属由顶层 optanteSimplesNacional / mei 推导。非 Simples 主体传了本项即拒 |
regimeEspecialTributacao | integer | 否 | 有没有特殊税务待遇:0 无 / 1 合作社行为 / 2 核定征收 / 3 市政微型企业 / 4 公证登记 / 5 自由职业者 / 6 专业人士合伙。本项不传则为 0 |
- 注册响应新增
nfseHabilitado:{ "empresaId": "…", "dceHabilitado": false, "nfseHabilitado": true }。未传本块即false,发行时收到10018005。 - 更新(请求体带
id)带本块时整份覆盖档案:未传的可选项即回默认值;不带本块则档案不动,nfseHabilitado回显主体现状。强制指定市政标准是运营动作,不经本块。 - 结构约束在受理期即拒(400
10001001):ME/EPP 缺regimeApuracaoSn、非 Simples 带regimeApuracaoSn。 - 只做 NFS-e 的主体可以不传
emissaoNFeProduto(不建模型 55 号段),也不要求州注册号inscricaoEstadual。 - 圣保罗主体的市政登记号 CCM 取顶层
inscricaoMunicipal,不在本块重复。
相关错误码
| 错误码 | HTTP | 场景 | 处置 |
|---|---|---|---|
10003002 | 400 | CNPJ 已注册 | 该主体已存在,直接使用原 empresaId 或带 id 更新 |
10003000 | 404 | empresaId 不存在或非本应用名下 | 核对 empresaId |
10003006 | 400 | 注册资料缺 IE | 补 inscricaoEstadual |
10003010 / 10003011 / 10003012 | 400 | 证书 CNPJ 与主体不一致 / 已过期 / 与现有证书重复 | 换正确证书 |
10003035 | 400 | Base64 非法或证书超过 1MB(JSON 形态) | 修正编码或文件 |
CER0005 | 400 | 证书密码不符 | 核对密码 |
GW001 | 400 | 注册:城市 / 州解析不到 IBGE 码 | 核对 UF 与城市名 |
10004004 | 400 | 主体不可开票(未审批通过或证书未就绪) | 等待审批 / 关联证书 |
10004030 | 400 | ambienteEmissao 与主体当前环境不一致 | 按主体环境提交或联系运营切换 |
10001001 | 400 | 字段校验失败,或注册 / 更新契约错误(三个配置块都缺、更新改 cnpj / 换市政、DC-e 号段降号、换系列、emissaoNFSe 结构约束不满足) | 按 mensagem 修正 |
完整清单见错误码。
