开具发票
通过 VAT 计算、PDF 生成和 Stripe 付款创建、发送和跟踪多种货币的发票。
创建、发送和跟踪发票
使用 NomadBill 发票创建专业发票、计算 VAT、导出品牌化 PDF、通过邮件发送发票以及通过 Stripe 接受在线付款。您可以管理草稿和发送的发票、跟踪付款进度并保持整个公司的发票号码一致。
如果您从批准的报价开始,请使用报价中描述的报价到发票流程。
发票状态
NomadBill 使用两个单独的字段跟踪发票:status 和 payment_status。发票徽章优先考虑付款信息,因此当 payment_status 为 paid 时,发票将显示为已付款,即使常规 status 字段会显示其他内容。
| 字段 | 值 | 这意味着什么 |
|---|---|---|
status | draft、sent、paid、overdue | 文档生命周期状态 |
payment_status | unpaid、pending、paid、failed | 付款处理状态 |
可以这样理解:
draft— 您仍在编辑发票,尚未完成发送。sent— 发票已交付或标记为已发送。overdue— 到期日已过,发票仍未结算。paid— 发票已结算。
特定于付款的状态添加了更多详细信息:
unpaid— 尚未记录任何付款。pending— 付款正在进行中。paid— 付款成功完成。failed— 付款尝试未完成。
如果发票在 UI 中显示 paid,则该已付款状态优先于徽章显示的一般文档状态。
创建发票
从 发票 区域创建新发票,填写客户和账单详细信息,添加明细项,然后在发送之前查看结果。 NomadBill 将未完成的发票保留为草稿,以便您稍后返回。
开具新发票
转到发票并创建新发票。 NomadBill 根据您的公司信息准备文档,并在创建发票时分配编号。
当发票打开时,您应该看到可编辑的账单字段、明细项、总计和文档设置。
添加客户和账单详细信息
输入客户信息、发票日期、到期日、货币和语言。选择与收件人匹配的发票语言,以便正确显示 PDF 和邮件中的标签。
保存后,发票将保持草稿状态,直到您发送它或以其他方式标记它。
添加明细项
将每个产品或服务添加为单独的明细项,并包含名称、数量和单价。当您需要澄清范围、计费周期或可交付成果时,请包含说明。
当您添加或编辑项目时,您的小计会更新。
查看 VAT 和总计
在发送发票之前确认 VAT 百分比。 NomadBill 根据小计和 VAT 百分比计算总计,因此您可以在生成 PDF 或付款链接之前验证金额。
正确的审核步骤应该会给您留下清晰的小计、VAT 金额和最终总计。
导出、发送或收取付款
发票看起来正确后,生成 PDF,通过邮件发送,或者如果您希望客户在线付款,则启用 Stripe 结账。发送后,NomadBill 可以记录交货详细信息,例如谁收到了发票以及何时发送。
此时,发票将从编辑状态转变为主动跟踪状态。
明细项
每个发票明细项都存储一个小型且一致的结构,因此您可以保持费用清晰且可预测。明细项包括:
id— 可选内部标识符name— 明细项标题description— 可选详细文本quantity— 您计费的单位数price— 每单位的价格
每个计费服务、产品或计费周期使用一个明细项。这使得 PDF 更易于阅读,并帮助您的客户了解总数是如何构建的。
NomadBill还支持明细项的拖放重新排序。重新排序项目以匹配您希望发票讲述的故事,例如首先列出核心服务,最后列出可报销费用。
VAT 计算
NomadBill 根据小计和 VAT 百分比计算发票总计。公式为:
total = subtotal + (subtotal x vat_percentage / 100)
默认 VAT 费率为 19%,与标准德国费率相符。您可以根据需要更改每张发票的 VAT 百分比,只要该值保持在 0 到 100 允许的范围内即可。
这意味着:
0对于 VAT 豁免或零税率发票有效19是默认起点100是允许上限
在发送发票之前检查 VAT 费率,特别是当您跨司法管辖区开具账单或使用混合税务处理时。
货币和语言
NomadBill 支持五种发票货币和四种发票语言。这些值是强制执行的,因此发票始终使用受支持的选项之一。
支持的货币
- EUR
- USD
- GBP
- CHF
- AED
支持的发票语言
- DE
- EN
- FR
- ES
如何选择默认货币
NomadBill 按以下顺序解析发票货币:
- 发票币种 — 如果发票已有币种,则使用该值。
- 公司默认货币 — 如果发票没有明确的货币,则 NomadBill 检查公司默认货币。
- 全球货币偏好 — 如果前两者都不存在,则 NomadBill 回退到本地浏览器存储中存储的全球货币
nb.currency。
此优先级可保持现有发票稳定,同时仍为您提供公司范围和用户级别的后备。
发票编号
发票编号使用格式 R-00001。 R 前缀标识文档类型,数字部分使用带前导零的五位数字。
NomadBill 通过数据库函数生成编号,该函数自动为每个公司分配下一个文档编号。如果多人同时创建发票,这一点很重要,因为序列不会受到竞争条件的影响。
有两个细节对于日常使用很重要:
- 发票号码是每家公司,并非在全球所有账户之间共享。
- 通过
company_id和invoice_number组合,每个发票编号在同一公司内必须是唯一的。
PDF 生成
NomadBill 可以将发票导出为 PDF 文档以供下载、共享或通过邮件发送。 PDF 引擎使用标准发票数据和您公司的品牌来生成最终文档。
生成的 PDF 使用 A4 纵向布局,具有 15 毫米边距,并且可以包括:
- 公司标志
- 品牌颜色
- 明细项表
- 总计块
- 银行详细信息
- 页脚
PDF 输出还支持所有四种发票语言,因此标签以发票上选择的语言显示。如果您使用自定义 PDF 布局,NomadBill 还支持基于模板的渲染。
通过邮件发送发票
NomadBill 使用 noreply@nomadbill.co 作为发件人地址通过 Resend 发送发票邮件。您可以发送包含 HTML 内容和可选 PDF 附件的文档邮件,也可以发送在数据库中记录传递详细信息的摘要式邮件。
当您发送发票摘要邮件时,NomadBill 会更新这些跟踪字段:
sent_at— 发票发送时sent_to— 哪个收件人收到了它email_status— 设置为sent
邮件内容可以包括:
- 文件编号
- 客户姓名
- 可选的自定义消息
- 总金额
这为您提供了外向交货和发票记录中的基本审计跟踪。
接受 Stripe 付款
当您希望客户通过托管结帐页面付款时,请在发票上启用 Stripe。 NomadBill 为发票创建 Stripe 结帐会话,并将客户发送到 Stripe 以完成付款。
Stripe 流程如何工作
为发票启用 Stripe
打开发票的 Stripe,以便 stripe_enabled 处于活动状态。这标志着发票符合在线支付的条件。
启用后,发票可以创建托管付款会话。
创建结账会话
NomadBill 根据发票总额创建 Stripe 结帐会话。发送到 Stripe 的金额将使用 Math.round(total_amount * 100) 转换为美分,而 Stripe API 的货币代码将转换为小写。
这可确保 Stripe 收到其期望格式的金额。
将客户重定向至 Stripe
客户将被重定向到 Stripe 托管的结帐页面以安全地完成付款。您无需直接在发票页面内收集银行卡详细信息。
成功重定向意味着客户现在正在 Stripe 上完成付款。
处理成功或取消
付款后,Stripe 将客户发送回两个发票路线之一:
- 成功:
/invoices/$id/pay/success - 取消:
/invoices/$id/pay/cancel
成功页面确认付款并触发购买跟踪。取消页面允许客户重试。
Webhook 确认后更新发票
当 Stripe 发送 checkout.session.completed Webhook 事件时,NomadBill 将发票更新为 payment_status=paid 和 status=paid。
此 Webhook 更新最终确定了 NomadBill 内的付费状态。
经常性发票
定期发票允许您将发票标记为重复计费模式的一部分。 NomadBill 将其与 is_recurring 标志和 recurring_frequency 值一起存储。
支持的重复频率有:
- 每周
- 每月
- 季度
- 每年
定期发票只是元数据。 NomadBill 不运行自动 cron 作业,并且不会仅根据此标志按计划生成新发票。
使用定期设置来标记和组织重复计费,但不要依赖它们作为自动订阅引擎。