KSeF 集成:自动提交波兰结构化电子发票
KSeF 以结构化文档而非 PDF 的形式接收发票。easySales 从订单上的发票生成该文档、提交、跟踪至最终结果,并把 KSeF 编号和 UPO 回执保存到订单上。
波兰税务机关不再以 PDF 形式接收发票,而是以结构化文档的形式接收:文档提交到一个国家级系统,由该系统校验、登记并赋予编号。easySales 代你完成这一提交:你的开票程序出具的发票会被转换、提交,并被跟踪到出现明确结果,回执则保存到它所属的订单上。
有一点值得先说明:本指南讲的是波兰的 KSeF 系统。如果你在其他国家开票,那里适用各自的电子发票规则,与此无关。两者不能互相替代。
什么是 KSeF,对你意味着什么
KSeF——Krajowy System e-Faktur——是波兰财政部运营的国家电子发票系统。你不再向买家发送 PDF,而是把发票以结构化 XML 文档的形式提交给 KSeF。KSeF 按固定架构校验、登记,赋予一个 KSeF 编号,并返回一份名为 UPO 的官方接收回执。
实际上有三件事发生了变化。
- 格式。 结构化发票——faktura ustrukturyzowana——是既定架构中的数据,而不是页面版式。每个字段都有固定位置,格式不符的值意味着被拒,而不是外观问题。
- 发票正式生效的时点。 起决定作用的是在 KSeF 中的登记,而不是你用邮件发出的那一刻。
- 凭据。 证明发票存在的是它的 KSeF 编号和 UPO,而不是你的已发送邮件文件夹。
PDF 并不会消失。你照旧出具、附加到订单、为包裹打印。它只是不再是法律上具有决定性的那一份。
easySales 对你的发票做什么
easySales 位于开票程序与 KSeF 之间。它不取代你的开票——它取用订单上已经存在的发票并提交。
发票一旦在订单上,easySales 就从中生成结构化文档、在 KSeF 中开启会话、提交文档,然后跟踪该提交直到 KSeF 给出答复——这很少是即时的。等待期间,提交状态为待处理。被接受时,easySales 记录 KSeF 编号并下载 UPO。被拒绝时,它原样保存 KSeF 返回的消息,因此你读到的是税务机关给出的理由,而不是对它的转述。
结构化文档
依据订单上的发票,生成 KSeF 所要求的结构。
提交与跟踪
开启会话、提交文档,并跟踪提交直到 KSeF 给出答复。
KSeF 编号
把 KSeF 分配给已登记发票的编号保存到订单上。
为你保存 UPO
下载官方接收回执,并与该次提交一并保存。
更正发票
把更正文档作为独立的文档类型提交,并引用被更正的发票。
重试与重发
在 KSeF 尚未答复期间持续重试,并在你修正数据后提供重发操作。
始终得不到最终答复的提交不会无限悬置:easySales 最多检查五次,随后标记为失败,让它作为待处理事项出现,而不是安静地停留在“进行中”。
连接之前:你需要准备什么
四样东西,而且没有一样来自 easySales:
- 公司的KSeF 授权令牌。
- NIP 号码——令牌所对应的波兰税号。
- 公司注册地址和城市。 它们会作为卖方信息出现在通过此连接提交的每一份文档上,因此请使用公司登记信息,而不是仓库地址。
- 发票来源——easySales 支持连接的开票程序之一,或 easySales 自带的开票功能。
值得同时处理的是银行账户,如果你希望它出现在电子发票上。下文会再谈,因为这是 KSeF 配置中最常见的意外。
令牌从哪里来
令牌由你自己在 KSeF 中、在财政部一侧、为你自己的 NIP 号码生成。easySales 无法代你创建,任何 easySales 凭据都不能替代它。
令牌必须为你所填写 NIP 号码的公司携带两项权限:开具发票和读取发票状态。第二项是必需的,因为提交后 easySales 会向 KSeF 查询结果——只能开具的令牌会把文档提交上去,而提交永远不会有结论。
你不需要的是证书。easySales 会自行下载 KSeF 的公钥证书并自行完成加密认证,因此没有 .crt 或 .key 文件需要你生成、上传或维护——令牌就是全部。
配置 KSeF 连接
在侧边菜单中打开其他服务,选择 KSeF 卡片。
字段不多:
- 别名——此连接的名称。你会在自动化流程和订单上选择它,因此请按用途命名(“KSeF – 发票”),尤其是当你会使用多个连接时。
- 令牌——从 KSeF 粘贴。
- NIP 号码、地址、城市——上文所述的卖方信息。三项均为必填。
- 发票类型——普通发票或更正发票。主连接请保持普通发票;关于更正的章节会说明第二个设置的用途。
- 银行账户——可选。填写账号,如果希望一并打印,也填写银行名称和 SWIFT/BIC 代码。
关于银行账户部分有两点值得直说,因为它们会耗费卖家的时间。第一,电子发票上的账号来自此连接,而不是账户设置中的通用银行字段——那个字段在这里完全不使用,连兜底都不算。第二,它只对保存之后提交的发票生效:已在 KSeF 登记的发票无法事后补充。
如果你的市场平台以各自的措辞上报付款方式,此连接在显示高级选项下还有一个可选的自定义付款方式映射,把这些名称转换为 KSeF 认可的付款形式。规则自上而下检查,顺序可以调整。
连接建立之后,一张发票可以通过三条彼此独立的路径到达 KSeF——而这正是之后让人意外的地方:
- 自动化流程,其中包含发送订单动作,连接类型为电子发票并选中你的 KSeF 连接。这是自动路径,值得配置。
- 从订单手动发送,在该订单的订单提交区域。
- 发送到KSeF 按钮,针对销售文档中的某一张具体发票。
每一条都独立运作。停用一条自动化流程只会停用那一条,不影响其他。
它与哪种开票程序配合
KSeF 不开具发票——它接收发票。因此始终存在两个层次,而认清自己处在哪一层,可以省下大部分排查工作。
| 你的开票程序 | KSeF | |
|---|---|---|
| 它做什么 | 开具发票——编号、字头、金额、PDF | 接收、校验并登记发票 |
| 在哪里连接 | 集成 → 开票 | 其他服务 |
| 它给你什么 | 发票文档 | KSeF 编号和 UPO 回执 |
| 典型问题 | “发票没有生成” | “发票生成了,但 KSeF 拒收” |
| easySales 能独立完成吗 | 可以——没有外部程序时,easySales 自行开具发票 | 不能——KSeF 是政府系统,并非 easySales 所取代的东西 |
“发票没有生成”是第一层的问题,关于开票程序。“发票生成了,但 KSeF 拒收”是第二层的问题,关于提交。KSeF 连接会自动与出具该文档的程序配合。
这里有一条规则比其他都重要:同一张发票只应由一个工具提交给 KSeF。 如果你的会计程序自行向 KSeF 提交,而 easySales 也提交同一份文档,KSeF 会看到一份编号已在你 NIP 下登记的第二份文档,并以重复为由拒收。请选定由哪一方提交——easySales 或你的程序——另一方只负责开具。如果两者都必须运行,请在负责提交的自动化流程中收窄 easySales 这一侧:使用 Oprogramowanie księgujące(开票程序)条件,只提交通过你所选连接出具的发票,其余交给你的程序。
对于在波兰经营的卖家,easySales 可连接 Fakturownia、wFirma、iFirma、inFakt、Subiekt GT 和 Subiekt Nexo PRO。如果你完全不使用外部程序,easySales 会用你自己的字头和编号自行开具发票,并以同样的方式送往 KSeF。
提交之后:KSeF 编号、UPO 和 PDF 上的二维码
一次提交产生的所有信息都保留在订单上,位于订单提交区域。
成功的提交会显示:
- KSeF 编号——KSeF 为已登记发票分配的标识。
- UPO XML——官方接收回执,由 easySales 下载并保存,这样你就不必依赖日后能否再次取得。
- 会话参考编号和发票参考编号——提交所在会话的参考号;当某次提交需要追溯时,支持团队需要的正是这些。
- 处理日期——KSeF 处理的时点,不一定等于你发送的时点。
同样这三项信息也是销售文档中每张发票的列——KSeF 状态、KSeF 发票编号和 KSeF UPO——当你想一次浏览大量发票而不是逐个打开订单时,用这个视图。
已登记的结构化发票也可以由任何持有该 PDF 的人核验,通过一个指向 KSeF 验证页面的二维码。easySales 可以把这个二维码合并到发票文档上:在 easySales 开票连接的高级选项中启用将发票与 KSeF 验证二维码合并。此后你下载、打印或附加的发票都会带有该二维码和一段简短说明。
更正发票如何提交
更正不是原始发票的修改版副本。在 KSeF 中它是一份独立文档,引用被更正的发票,也必须以这种方式提交。
在 easySales 中,这由连接上的发票类型体现。设为普通发票的连接从订单中取普通发票;设为更正发票的连接取更正文档。因此,开具更正发票的卖家会在同一个令牌上保留两个 KSeF 连接——每种类型一个。连接界面正是为此提供了克隆操作:复制已可用的连接、更改发票类型、重命名别名、保存。
请把更正发票的自动化流程指向更正连接,把原始发票的自动化流程指向普通连接。单独一个设为普通发票的连接永远找不到更正文档,提交会报告没有可发送的发票——看起来像故障,其实是配置缺口。
当提交被拒绝时
拒绝是 KSeF 的答复,而不是 easySales 的——提交上显示的消息就是税务机关返回的原文,通常具体到足以据此行动。多数拒绝可归结为买方识别、发票编号,或某个不符合架构的值。
修正数据并重新发送
有一条规则几乎能解释所有“我改过了,错误又出现了”的情况:
在发票文档本身上修正数据,然后按重发。
重发会依据发票自身保存的数据重新生成文档。仅在订单或客户记录上修正买方增值税号并不会改变发票上的数据,因此下一次提交仍会带着同样错误的值。请打开发票,在其中修正买方信息、保存——之后再重发。easySales 出具的发票在 KSeF 接受之前都可以修改。
等待同样没有用。没有重发,easySales 询问的是最初那次尝试的状态,而 KSeF 会持续返回最初的结果并附上新的日期——于是同一个错误看起来像是今天发生的,实际上什么都没有重新提交。失败提交上的重发操作,才是真正强制发起一次新提交的动作。
如果连续两次重发返回完全相同的消息,说明发票上保存的数据实际并未改变。请重新打开发票,确认修正确实落在了文档上。
KSeF 不会改变什么
边界值得说清楚:
- 收据不是发票。 收据无法提交到 KSeF,easySales 会直接拒收,而不是发送 KSeF 无论如何都会退回的东西。
- 你的编号仍归你。 KSeF 在你的编号之外另行赋予一个编号;它不会重新编排你的发票。但它会拒收编号已在你 NIP 下登记的第二份文档——因此,如果还有别的工具为同一家公司开票,请分开使用不同字头。
- 登记是最终的。 已登记的发票无法再修改或替换。要更改,工具是更正发票。
- 买家仍然从你这里拿到文档。 向 KSeF 提交与把发票发给客户是两件事,后者依然由 easySales 完成。