这是在意大利做生意的一个有趣的事实:当你从一家外国公司购买东西时,你常常必须写一张发票给自己.
没有字条 电子表格中没有一行。
一张真实的电子发票,采用特定的XML格式,并带有特定的文件类型代码,在具体截止日期前发送给一个名为SDI(Sistema di Interscambio)的政府系统.
如果你弄错了一个领域, 政府系统拒绝文件。
我制造了一种产品来制造这个可承受的:Autofatturala。
在文章中,我想向大家讲述这个旅程的故事:问题是多么荒谬,用铁路和RubyLLM构建解决方案是多么的容易。
我会展示一些真正的代码,但不是一切。
部分产品留在厨房.
对非意大利读者来说, 显然,外国供应商不收取意大利增值税。
但增值税仍在意大利到期.
因此意大利法律规定买方必须"装入"发票.
在实际操作中,您会发布一份新的电子文档,其中您既是接收者,在财政上又是发行者.
这是自动取款机,自我发票, 反向充电机制的一部分。
听起来还不错 然后你坐下来做, 发现你需要做多少事情才能正确。
首先,文档类型。
TD17用于国外服务,TD18用于欧盟内部货物,TD19用于已经在意大利但被非居民所销售的货物.
一个正常人会称之为"我从一家外国公司买东西"的三条代码.
然后是Natura代码, 你必须使用, 除非你不能使用。
营业额为应纳税额的,应当缴纳22%的增值税并留纳图拉字段为空.
如果不能纳税,您会输入0%和N2.1或N3.4等Natura代码。
如果两者都填满,则SDI拒绝文件(检查00400和00401)。
而且还有一整组代码,N6.x,字面意思是"反向电荷",仍然决不能在这里使用,因为它是留给国内倒向电荷的.
对,真的 如果发票是美元或任何其他货币,您还需要使用欧洲央行的官方参考汇率将发票转换为欧元。
除了周末和节假日没有这个费率,所以您可以选择最后一个。
对于欧盟的供应商,你也应该核实VIES的对应方,即全欧盟的增值税登记簿,它对于上网有着出名的心情。
所有这一切都有一个最后期限: 你收到发票的次月15日。
每个从国外买东西的意大利公司,今天意味着每个公司,都必须为每张外国发票做这个舞蹈.
他们大多将PDF转发给他们的会计和希望.
这就是产品机会。
Autofaturala 所做的一切 想法很简单。
你上传外国供应商的PDF, 或者把它转发到一个专用的电子邮件地址, 和一条管道 小AI代理做无聊的部分。
它从PDF中取出数据,检查VIES上的增值税号码,应用欧洲央行汇率,提出正确的文件类型和增值税处理,验证一切,并准备自我发票.
你检讨一下,按下批准书 然后写进你的发票系统 然后写给SDI 每一步都会用自己的解释在UI中现场显示,所以用户总是会看到AI为何做出选择.
没有人类的认可,任何事物都不会被送到任何地方。
堆栈没什么异国情调,这就是重点。
铁路8.1和Ruby 3.3.
RubyLLLM与LLM有关的一切.
用于直播管道时间线的热电线,这意味着整个应用程序有约200行JavaScript.
Solid Quee for背景任务, Action mailbox for"通过电子邮件转发你的发票"功能,Nokogiri for the FatturaPA XML(当地对官方XSD进行验证),和Kamal在单一服务器上部署一切.
整个应用软件,包括管道, 大约9000行Ruby, 大致相同数量的测试代码。
一个人,一个f