财务管理

为什么这是一个运行时问题,而不是 CRUD 问题

每个成长中的企业最终都会撞上同一堵墙:会计凭证在电子表格里,供应商发票在邮件里,银行对账是每月的救火演习,没人说得清哪个数字才是准的。根本原因不是缺少一个页面——而是复式记账本质上是一套约束系统,而非数据存储。凭证过账前借贷必须相等。凭证必须落在已开放的会计期间内。某位会计编制的凭证,不能由同一个人来过账。这些规则都无法塞进通用表单构建器里。

关于功能边界的坦诚说明。 AuraBoot Finance 覆盖操作层核心:总账、应收、应付、凭证审批流程、带三单匹配的供应商发票、付款记录、银行对账、费用报销、成本中心和财务报表。它不是特定国家或地区的会计合规套件。不内置各国法定会计科目表,不内置各国税务局 e-invoice 接口,也不提供本地化增值税申报功能。如果你的首要需求是某个国家的监管申报,请在选型前诚实评估这一缺口。AuraBoot 提供的是干净、可配置的操作层,合规逻辑可以通过自研插件或可选的 tax-compliance 插件叠加其上。

在明确了边界之后:完整的审批过账流水线是一张命令图,不是手写的 Controller 链。会计期间生命周期是一等公民状态机。编制人与审批人之间的职责分离由权限系统强制执行,而不是靠代码注释约定。

数据模型概览

Finance 插件包含六个功能域共 31 个模型:

  • 总账核心fin_account(层级科目表,五种科目类型)、fin_fiscal_period(月度期间,含开放 / 软关闭 / 硬关闭 / 锁定生命周期)、fin_journal_entry + fin_journal_line(带审批流程的复式凭证)、fin_gl_balance(按期间汇总的借贷余额)。
  • 应收应付fin_ar_transaction(来自出货或手工开票的客户应收)、fin_ap_transaction(来自收货或手工录入的供应商应付)、fin_supplier_invoice + fin_supplier_invoice_line(供应商发票采集)、fin_three_way_match(采购订单 vs 收货 vs 发票三单匹配,含容差和挂起解决)、fin_payment(与应收/应付关联的付款记录,自动生成凭证)。
  • 费用报销fin_expense_claim(员工报销,含草稿 / 待审 / 已批准 / 已付款生命周期)。
  • 银行fin_bank_accountfin_bank_statement + fin_bank_statement_linefin_reconciliation(对账单行与凭证的匹配关联)。
  • 多币种fin_currency(ISO 4217 主数据)、fin_exchange_rate(汇率历史);所有凭证同时保存交易货币金额和本位币金额。
  • 成本核算fin_cost_centerfin_cost_elementfin_cost_allocation_rulefin_standard_costfin_cost_variance
  • 报表 / KPIfin_report_template + fin_report_linefin_financial_reportfin_voucher_template + fin_voucher_template_linefin_kpi_definition + fin_kpi_snapshotfin_restatement

核心命令

该解决方案包含 60 余条命令。会计凭证状态机是约束执行最清晰的示例:

命令形态所需权限说明
fin:create_journal_entry创建fin.financial.manage自动生成凭证号 JE-{yyyyMMdd}-{seq},初始状态 draft
fin:submit_journal_entry状态转换fin.financial.managedraft / rejectedsubmitted;编制人发起审核
fin:approve_journal_entry状态转换fin.financial.adminsubmittedapproved;需与提交人角色不同
fin:post_journal_entry状态转换 + handlerfin.financial.manage服务端 handler 校验借 = 贷,同事务更新 fin_gl_balance
fin:reverse_journal_entry状态转换fin.financial.adminpostedvoided;生成冲销凭证
fin:approve_match状态转换fin.financial.three_way_match批准三单匹配(matched / within_toleranceresolved);自动创建应付款记录
fin:reconcile_bank_statement操作fin.bank_recon.manage将对账单行与凭证匹配;标记未匹配行

fin:post_journal_entry 命令携带 handler 字段,触发服务端 Java 逻辑。任何客户端校验都无法替代这一环节:handler 是唯一能在同一事务中原子校验余额并更新总账的地方。

发票到付款生命周期

  供应商发票到达
        |
        v
  [fin_supplier_invoice: 草稿]
        |
      提交
        |
        v
  [待审]
        |
    批准 / 驳回
        |
        v
  [已批准] ──驳回──> [已驳回] ──重新提交──> [待审]
        |
        v
  创建三单匹配 (fin_three_way_match)
   采购订单金额 vs 收货金额 vs 发票金额
        |
     在容差范围内?
     /           \
    是             否
    |              |
    v              v
  [匹配: 已批准]  [匹配: 挂起] ──解决挂起──> [已批准]
    |
    v
  创建应付款记录 (fin_ap_transaction)
    |
    v
  记录付款 (fin_payment)
    |
    v
  自动生成会计凭证 → 过账至总账

权限示例

一个真实的财务团队至少有两类张力需要编码:职责分离(编制凭证的人不应是过账的人)和团队隔离(应收人员不应看到或操作应付数据)。

职责分离——凭证过账:

  • 角色 fin_accountant 持有 fin.financial.manage——可以创建、提交和过账凭证。
  • 审批步骤(fin:approve_journal_entry)要求 fin.financial.admin
  • 实际操作中,企业将超过一定金额的凭证配置为必须经过审批,并仅将 fin.financial.admin 授予财务主管。编制人可以提交,但无法审批自己编制的凭证。

应收 / 应付团队隔离:

  • 应收专员角色:fin.financial.readfin.payment.manage(针对应收记录收款)——没有 fin.supplier_invoice.manage,也没有 fin.bank_recon.manage
  • 应付专员角色:fin.supplier_invoice.managefin.payment.manage(针对应付记录付款)——没有 fin.financial.admin(无法审批或过账总账凭证)。

字段级成本中心遮蔽:

  • 成本会计角色持有 fin.cost.readfin.cost.manage——可以查看 fin_cost_center 分摊率和标准成本卡。
  • 应收 / 应付角色不持有 fin.cost.read——凭证行视图中的成本中心分摊字段对他们不可见。

五层权限机制(RBAC、组织范围、ReBAC、ABAC、字段级)与其他所有用例共用同一平台管道,按顺序依次评估。

如何获取

  • 社区版:在拥有该插件包的发行环境中导入 Finance 插件,然后执行 aura exec fin:init_chart_of_accounts 初始化默认科目表。
  • 标准版:以平台为基础进行白标,将 Finance 插件作为你的行业解决方案的一部分发布。
  • 专业版:获取包含预配置菜单、角色、仪表盘以及可选 tax-compliance 扩展(支持的地区)的 Finance 解决方案包。
  • 企业版:同上,另包含托管期末关账编排、独立交付为垂直产品的国家合规包、高级多主体合并,以及 SLA 保障的支持服务。

完整版本对比请参见定价页面

企业版说明 — 托管期末关账编排(跨主体自动化软关账检查、硬关账闸门执行、对账完成度门控)、以独立版本化垂直产品形式交付的国家合规包(法定科目表、司法管辖区 VAT 申报、e-invoicing 税务局接口),以及包含内部交易抵消的高级多主体合并,均为商业版专属能力。上述总账 / 应收 / 应付 / 付款运行时契约在各发行形态中保持一致。

下一步

  • 系统概览 — 插件、命令与运行时如何协作
  • 命令管道fin:post_journal_entry 所遵循的执行契约
  • 权限模型 — 上述职责分离和团队隔离示例所使用的五层模型
  • 插件清单 — Finance 插件如何声明其 31 个模型和 60+ 条命令