使用invoice2data库导入供应商发票
项目描述
此模块是account_invoice_import模块的扩展:它增加了对常规PDF发票的支持,即没有嵌入XML文件的PDF发票。它使用invoice2data库,该库负责提取PDF发票的文本,找到现有的发票模板并执行发票模板以提取发票中的有用信息。
要了解此模块开发的全部故事,请阅读这篇博客文章。
有关创建模板的更多信息,请参阅invoice2data库教程。模板需要手动创建。Odoo的图形模板创建器正在开发中。
警告:2021年7月开发的替代模块account_invoice_import_simple_pdf提供类似的功能,但有一个很大的优势:会计人员可以自己添加对新供应商的支持,不再需要需要技术技能的发票模板。模块account_invoice_import_simple_pdf提供基本功能,但不支持行级会计。
目录
安装
此模块需要Python库invoice2data,可在GitHub上找到,版本>= 0.2.74(2018年2月)。
要安装此库的最新版本,请运行
sudo pip3 install --upgrade invoice2data
如果您使用的是 Ubuntu 16.04 LTS 或更高版本,您可以使用发行版中打包的 pdftotext 版本 0.41.0
sudo apt install poppler-utils
如果您希望 invoice2data 库支持混合类型的 PDF 或在 PDF 不包含文本时回退到 OCR(只有极少数的 PDF 发票是基于图像的且需要 OCR,例如扫描的收据),您还应该安装 Ocrmypdf
pip install -U ocrmypdf
如果您希望 invoice2data 库在 PDF 不包含文本时回退到 OCR(只有极少数的 PDF 发票是基于图像的且需要 OCR,例如扫描的收据),您还应该安装 Imagemagick(以获取 convert 工具将 PDF 转换为 TIFF)和 Tesseract OCR
sudo apt install imagemagick tesseract-ocr
如果您想为 invoice2data 库使用自定义发票模板(除了 invoice2data 库提供的模板外),您应该在您的 Odoo 服务器配置文件中添加一行,例如
invoice2data_templates_dir = /opt/invoice2data_local_templates
并将您的发票模板存储为 YAML 格式(.yml 扩展名)或 json 格式在您配置的目录中。如果您在此目录中添加发票模板,无需重新启动 Odoo,它们将在下一次发票导入时自动使用。
如果您只想使用您自定义的发票模板并忽略 invoice2data 库提供的模板,您应该在您的 Odoo 服务器配置文件中包含以下内容
invoice2data_templates_dir = /opt/invoice2data_local_templates
invoice2data_exclude_built_in_templates = True
yaml 模板使用 [pyyaml](https://github.com/yaml/pyyaml) 加载,这是一个纯 Python 实现。(因此速度较慢)作为替代,可以使用 json 模板。这些模板在 Python 中得到原生更好的支持。使用 [libyaml](https://github.com/yaml/libyaml) 可以将 yaml 模板的性能提高 10 倍。它可以通过以下方式在大多数发行版中安装
sudo apt-get libyaml-dev
法语用户还应该安装来自 法国本地化 的模块 l10n_fr_business_document_import。荷兰用户还应该安装来自 荷兰本地化 的模块 l10n_nl_business_document_import。
依赖项
配置
转到供应商的表单视图,并使用以下参数进行配置
增值税已设置(在Odoo合作伙伴数据库中搜索供应商时默认使用增值税号)
在发票选项卡中,创建一个发票导入配置。
对于供应商的PDF发票,如果没有嵌入XML文件,您需要在invoice2data Python库中创建一个模板文件,格式为YAML。这相当简单;如果您熟悉regexp,每个供应商不应超过10分钟。
以下是一些帮助您为供应商添加模板的建议
在invoice2data库的仓库中有教程
以Free SAS模板文件为例。您可以在invoice2data/test/pdf/invoice_free_fiber_201507.pdf下找到该供应商的示例PDF发票
尝试在Free的样本发票上手动运行invoice2data库
% python -m invoice2data.main --debug invoice2data/test/pdf/invoice_free_fiber_201507.pdf
在输出中,您将首先得到PDF文本,然后是解析发票和正则表达式的调试信息,最后一行将包含解析结果的字典。
如果供应商的增值税号出现在PDF发票的文本中,我认为将其用作关键字是个好主意。添加2个其他关键字是良好的实践:一个用于语言(例如,匹配发票的语言中的单词Invoice)和一个用于货币,以匹配特定语言和货币的该供应商的发票。
字段列表应包含以下条目
‘vat’带有供应商的增值税号(如果供应商的增值税号不在PDF文件中,添加‘partner_name’键)
‘amount’(‘amount’是含税的总金额)
‘amount_untaxed’或‘amount_tax’(一个或另一个,不需要两个)
‘date’:发票日期
‘invoice_number’
如果PDF文件中有此信息,则包含‘date_due’
invoice2data库功能强大。它支持多种输入方法(pdftotext、ocrmypdf、tesseract ocr、google cloud vision)。甚至发票行也可以导入并映射到数据库中的产品。invoice2data库对字段名称没有严格的标准。这使得模块非常灵活,但也难以创建可重用的模板。
如果您想使用高级功能,已实现了以下字段的支持。
## 支持的字段
(注意:字段名列包含在模板文件中使用的名称。)
合作伙伴字段 | 字段名 | 类型 | 描述 | | ————– | :———: | :————————————– | | vat | char | 每个合作伙伴的增值税代码是唯一的,它在匹配合作伙伴时具有最高优先级 | | partner_name | char | 自解释 | | partner_street | char | 自解释 | | partner_street2 | char | 自解释 | | partner_street3 | char | 自解释 | | partner_city | char | 自解释 | | partner_zip | char | 自解释 | | country_code | char | 使用ISO格式fr或nl | | state_code | char | 使用ISO格式NY(纽约) | | partner_email | char | 自解释 | | partner_website | char | 自解释 | | telephone | char | 可以在支持模块的帮助下用于匹配合作伙伴 | | mobile | char | 可以在支持模块的帮助下用于匹配合作伙伴联系信息 | | partner_ref | char | 参考名称或编号可以用于合作伙伴匹配 | | siren | char | 法国企业代码,可以用于匹配合作伙伴 | | partner_coc | char | 一般商业识别号,可以用于匹配合作伙伴 |
发票字段(在文档级别) | 字段名 | 类型 | 描述 | | ————– | :———: | :————————————– | | currency | char | 发票的货币,ISO格式(EUR,USD) | | currency_symbol | char | 发票的货币符号(€,$) | | bic | char | 银行标识码 | | iban | char | 国际银行账户号码 | | amount | float | 发票的总金额(包括税费) | | amount_untaxed | float | 发票的总金额(不包括税费) | | amount_tax | float | 发票税费总额 | | date | date | 发票日期 | | invoice_number | char | 自解释 | | date_due | date | 发票到期日 | | date_start | date | 服务提供期间的开始日期 | | date_end | date | 服务提供期间的结束日期 | | note | char | 此字段的内容将被导入到聊天中。 | | narration | char | 此字段的内容将被导入到说明字段。(在发票底部。) | | payment_reference | char | 如果发票是预付费的,可以使用参考信息进行付款对账 | | payment_unece_code | char | 根据UN/CEFACT 4461代码列表的支付方式UN/CEFACT代码 | | incoterm | char | Incoterm 2000缩写 | | company_vat | char | 发票地址公司的增值税号。用于检查发票是否实际发送给想要处理的公司。(在多公司设置中非常有用。) | | mandate_id | char | 银行授权与银行账户相关联,代表银行账户所有者给予公司特定操作(如直接借记)的授权。 |
发票行字段 | 字段名 | 类型 | 描述 | | ————– | :———: | :————————————– | | name | char | 产品名称,可用于产品匹配 | | barcode | char | 产品或产品包装的条形码,用于产品匹配 | | code | char | (内部)产品代码,用于产品匹配 | | qty | float | 项目/单位的数量 | | unece_code | char | 可传递的产品单位计量unece代码 | | uom | char | 计量单位的名称,在内部将映射到unece代码。例如L将被映射到unece_code LTR | | price_unit | float | 项目的单价。(不含税) | | discount | float | 此行的折扣金额。例如20表示20%的折扣或0.0表示无折扣 | | price_total | float | 包含税的发票行总金额。可用于选择正确的税标签。 | | price_subtotal | float | 不含税的发票行总金额。可用于创建调整行,当小数精度不足时。 | | line_tax_percent | float | 税率百分比 | | line_tax_amount | float | 应用到行的固定税额 | | line_note | char | 可导入的发票备注,有一个特殊视图可用。 | | sectionheader | char | 有一个特殊视图可用用于部分标题。 | | date_start | date | 发票服务提供期间的开始日期 | | date_end | date | 发票服务提供期间的开始日期 |
已知问题/路线图
实现支持包含所有税费的行,用于瑞士或扫描收据等一些本地化。
图形模板构建器。
已知问题 * 输入模块硬编码为使用pdftotext解析器,并作为备用使用tesseract。 * 模板的创建仍然相当困难。 * 解析地址和公司特定字段。这意味着可以导入一张发给你公司的发票!
变更日志
14.0.2.2.0 (2023-03-03)
[新增] 对发票行的支持。(#74)
错误跟踪器
错误在GitHub问题上跟踪。如果在那里找不到您的问题,请检查。如果是您首先发现的问题,请提供详细且受欢迎的反馈,以帮助我们解决问题。
请不要直接联系贡献者关于支持或技术问题的帮助。
致谢
贡献者
Alexis de Lattre <alexis.delattre@akretion.com>
维护者
此模块由OCA维护。
OCA,或Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并推广其广泛使用。
当前维护者
此模块是GitHub上OCA/edi项目的一部分。
欢迎您做出贡献。要了解如何做,请访问https://odoo-community.org/page/Contribute。
项目详情
哈希值 for odoo14_addon_account_invoice_import_invoice2data-14.0.2.4.0-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0752e815a43c6e13a24dfae8e1a8339c54aa45b37bcf95e91618430e780b490d |
|
MD5 | d605b63d4b7ad5e3c5bead3b5f7ffeb4 |
|
BLAKE2b-256 | 5bace55e5014df019d48ab0dc90c3e281c933dc6d222c73332a362f763e9c486 |