DaoSales 培训手册

会计

面向会计:总账、AR/AP、月结、汇兑

今天要做什么

按节拍跑账:动手前先在右上角账套切换器确认当前 book_id,每一笔凭证、应收应付查询、调汇都只看当前账套;切错账套直接混账,事后只能冲销。

每日

  1. 开工第一步:看右上角账套显示的币种与会计主体是否正确;错了先切回再动手。
  2. 进凭证列表按状态筛「草稿」,清掉昨日遗留:借贷不平的退回、平的复核过账。
  3. 进「待过账」看板看业务侧自动生成的凭证(发票落账、收付款、调汇),复核来源类型后过账。
  4. 录业务外手工凭证:费用分摊、预提、计提;手工凭证禁写系统管理科目(应收账款 / 应付账款 / 存货),服务端会直接拒绝。
  5. 看应收账龄新入「1-30 天」桶的客户,导 CSV 交销售催收。
  6. 看应付账龄「7 天内到期」的供应商,提示出纳准备付款。
日常入口:/dashboard/accounting/journal-entries?status=draft/dashboard/accounting/cashier/dashboard/accounting/ar-aging/dashboard/accounting/ap-aging

每周

  • 周一银行对账:导入上周银行流水,跑自动匹配,剩余手工配对。
  • 周三出应收催收名单(余额 > 0 且发票状态为「已发送 / 部分收款 / 逾期」),发销售团队。
  • 周五扫草稿凭证:「草稿」状态超 3 天未过账的催相关业务员或自行补过账。

每月

  • 月 1–3 日:期末调汇——基于最新汇率重估外币应收应付,生成「调汇凭证」。
  • 月 1–5 日:银行对账全部推进到「已完成」,差异(variance) = 0。
  • 月 5–10 日:费用结转、预提凭证;预览损益结转 → 生成结转凭证到本年利润科目(code 313%)。
  • 月 10 日后:上月会计期间从「开启」置「已关账」,封账防倒挂。
  • 月末:导三大表至 /dashboard/accounting/reports,交财务经理复核。
  • 年末:年度结转 + 建下年度 12 个期间。
accountant/nav-overview.jpg

权限红线(先看这 5 条)

  • 动手前先看 book_id每次建凭证、查应收应付、调汇、结账都只看当前账套;切错账套后录入的数据只能通过冲销纠正,不能简单改 book_id
  • 已关账期间不可过账:凭证日期落在非「开启」状态的期间,系统直接拦截;要当期调整请用冲销到当期。
  • 调整凭证必走审批:没有「跳过审批」开关;手工凭证禁写系统管理科目(应收账款 / 应付账款 / 存货),要改应收应付走业务单据入口。
  • 已过账凭证不能删、不能改:只能走「冲销」生成反向凭证;已被冲销过的原凭证不可二次冲销。
  • 付款 / 预算 / 期间审批权不在会计:执行付款是出纳领域(/dashboard/accounting/payments),预算与期间强制关闭是财务经理领域;会计只负责「做账 + 复核」。

Quickstart — 日常核心任务

2.1 录入手工凭证

费用分摊、预提、计提、跨期调整等业务系统不会自动生成的凭证,由会计手工录入。

  1. 确认右上角账套显示正确后,点左侧导航「会计 → 凭证」进入凭证列表。(见图 ①)
  2. 右上角点「创建分录」打开录入弹窗。(见图 ②)
  3. 填录入日期;日期必须落在「开启」状态的会计期间内。
  4. 填整单描述;挑必要的附件(银行水单、审批截图)。
  5. 至少录两行:每行选科目、填借方或贷方金额(不能同时填)、可选行描述。
  6. 底部看「分录汇总」:借方合计、贷方合计、差额;差额不为 0 「创建」按钮置灰。
  7. 平衡后点「创建」落草稿——不自动过账,留待复核。
accountant/journal-entries-list.jpg
accountant/journal-entry-create-dialog.jpg
何时不该做:日期落已关账期间系统直接拒绝——要当期调整日期往前挪;手工凭证写应收账款 / 应付账款 / 存货会被服务端拒,应收应付变动必须走业务单据(发票 / 付款)触发。
观测信号:
  1. 列表顶部出现新行,凭证号 JE-YYYY-NNNN 前缀,状态徽标为「草稿」。
  2. 详情页「分录明细」Σ借方 = Σ贷方。
  3. 附件 Tab 显示已上传文件。
技术追溯:journal_entries.entry_number 自增;journal_entry_lines 每行含 debit_amount / credit_amountstatus='draft'book_id 随当前账套;守卫入口 journal-entries.ts:164
系统动作:createJournalEntrylistAccountsgetBookCurrencyCode

2.2 过账草稿凭证

业务系统生成的「草稿」凭证(发票、付款、调汇)或刚录完的手工凭证,复核无误后过账使之影响账簿。

  1. 凭证列表用「草稿」筛选凭证;优先处理日期最早的,防跨期积压。
  2. 点凭证号进详情页,逐行核对科目、金额、描述、附件。
  3. 核对「凭证来源」:发票 / 收付款 / 采购发票 / 手工 / 调汇,各对应不同业务来源。
  4. 无误后点「过账」;弹窗确认后系统翻转状态为「已过账」并写入账户流水。
  5. 发现问题先点「删除」(仅草稿可删)或退回给提单人修改,不要强过账。
何时不该做:日期落已关账期间不能过账——要先申请期间反关账或冲销到当期;借贷不平系统不会出现在过账列(创建时已拦截);未上传附件的大额凭证别过账,后续审计会回头找原始凭证。
观测信号:
  1. 详情页状态徽标变「已过账」,顶部显示过账人和过账时间。
  2. 对应科目在「科目明细账」出现一行新流水,运行余额按借贷方向变化。
  3. 应收应付账龄或银行科目余额同步变化。
技术追溯:journal_entries.status='posted'posted_byposted_at 填充;account_transactions 每行生成一条;reference_type 取值 invoice | payment | purchase_invoice | manual | fx_revaluation 等。
系统动作:postJournalEntrydeleteJournalEntry(仅草稿)。

2.3 冲销已过账凭证

发现已过账凭证数据错误、或上月已封账需当期冲回时使用。冲销不是删除,而是生成反向凭证。

  1. 确认原凭证状态为「已过账」且未被冲销过;已冲销的原凭证不能二次冲销。
  2. 点凭证详情页「冲销」按钮。
  3. 弹窗填冲销日期——要落在当前「开启」期间;填冲销原因,后续审计用。
  4. 确认后系统自动生成新凭证,借贷与原凭证相反,来源类型标为「冲销」并立即过账。
  5. 原凭证标为「已反冲」,并在详情页显示「被冲销分录」链接。
何时不该做:冲销日期落已关账期间系统拒绝;期初余额相关的凭证不要直接冲销——要先「解锁期初余额」再改。业务系统自动凭证(如发票 / 收付款)冲销后源单据不会自动改状态,可能造成数据回环,优先改源单据。
观测信号:
  1. 原凭证状态徽标变「已反冲」,顶部出现「查看冲销分录」链接。
  2. 新凭证描述自动带 "Reversal of JE-…",状态「已过账」。
  3. 相关科目余额回到冲销前的状态。
技术追溯:原 journal_entries.status='reversed'reversed_by_id=新凭证.id;新凭证 reference_type='reversal'reverses_id=原凭证.id
系统动作:reverseJournalEntry(entryId, reversalDate, reason)

2.4 应收账龄与客户对账

每周 / 每月初发给销售催收;客户发函对账前查客户余额明细。

  1. 进应收账龄页,顶部选截止日期,默认今日。(见图 ①)
  2. 查看 5 桶汇总:当期(未到期)、1-30、31-60、61-90、90+。
  3. 点任一客户行 drill-down,看该客户每张未结发票的应收余额、到期日、已收金额。
  4. 按需导 CSV 发销售团队催收。
  5. 客户要对账:进「客户对账单」按客户 + 区间导出 PDF 发邮件。(见图 ②)
accountant/ar-aging.jpg
accountant/customer-statements.jpg
何时不该做:别跨账套合并看数据——查询强制绑当前 book_id,合并得去财务经理端出合并报表;客户说余额不对时先看付款核销链(发票已收金额 vs 收款分配明细),别直接改应收余额。
观测信号:
  1. 页面顶部 5 桶金额合计 = 所有未结发票应收余额之和。
  2. 选中客户 drill-down 看到每张发票的应收余额、到期日。
  3. 对账单 PDF 列出区间内每笔发票和收款流水。
技术追溯:查询口径 invoices.status IN ('sent','partial','overdue') AND balance_due > 0 AND book_id = :bookId;桶字段 current_amount, days_1_30, days_31_60, days_61_90, over_90, total_amount
系统动作:getARAgingReportgetCustomerAgingDetailgetCustomersWithOutstandingBalanceexportARAgingCSVgetCustomerStatementAction

2.5 应付账龄与付款提示

月中给出纳 / 财务经理排付款安排,供应商对账发函前查余额。

  1. 进应付账龄页,顶部选截止日期。(见图 ①)
  2. 查看 5 桶汇总 + 「7 天内到期」提示金额,标记需出纳提前准备资金的供应商。
  3. 点供应商行 drill-down,看每张未结采购发票的到期日与金额。
  4. 按需导 CSV 转出纳,作为付款申请排期的依据。
accountant/ap-aging.jpg
何时不该做:别直接动付款申请——那是出纳 / 财务经理领域,会计只提供数据基础;跨账套合并看同一供应商总余额要走财务经理端合并视图。
观测信号:
  1. 页面 5 桶金额合计与「供应商列表」合计一致。
  2. 「7 天内到期」金额高亮。
  3. drill-down 行显示每张采购发票的应付余额、到期日。
技术追溯:查询口径 purchase_invoices.status IN ('sent','partial','overdue') AND balance_due > 0 AND book_id = :bookIddueSoonAmount = 7 日内到期合计。
系统动作:getAPAgingReportgetSupplierAgingDetailgetSuppliersWithOutstandingBalanceexportAPAgingCSV

2.6 银行对账

每周 / 每月银行流水到手后,把账面收付款和银行流水一一匹配,差异清零后完成并送复核。

  1. 进银行对账列表,选对应银行账户新建对账期间;填期初、期末银行方余额。(见图 ①)
  2. 导入银行流水(CSV / OFX),系统按规则 + 金额 + 日期自动配对。
  3. 进匹配工作台:左栏账面收付款,右栏银行流水;未匹配行手工配对,多对一 / 一对多也支持。
  4. 看 AI 建议面板,接受合理建议;疑似错配点「取消匹配」回到未匹配池。
  5. 差异项(variance)不为 0 时补录银行手续费、在途收款、在途付款;差异 = 0 才能推进到「已完成」。
  6. 状态推进到「已完成」后交财务经理审核,审核通过后置为「已审核」。
accountant/bank-reconciliation-list.jpg
何时不该做:期末银行方余额未录就推进到「已完成」——系统算差异需期末余额;差异未查清强推「已审核」会让下月期初对不齐。AI 建议不是最终结论,先看匹配逻辑再接受。
观测信号:
  1. 对账单顶部「匹配数」等于账面与银行侧全部流水条数。
  2. 「未匹配账面」= 0 且「未匹配银行」= 0。
  3. 余额一致性提示「已平衡」,差异 = 0。
  4. 匹配过的银行流水在列表显示已匹配标记。
技术追溯:bank_reconciliations.status in (draft, in_progress, completed, approved);matched_count / unmatched_book_count / unmatched_bank_countbank_transactions.is_matched=trueisBalanced 标志。
系统动作:importBankStatementActionlistUnmatchedBankTransactionsActionautoMatchTransactionsActioncreateMatchActionunmatchActiongetAIMatchSuggestionsActionupdateReconciliationStatusActioncalculateReconciledBalanceAction

2.7 付款核销(FIFO 建议)

出纳收到一笔款但未指定冲抵哪张发票,或多笔发票合并收款时,用 FIFO 建议分配到具体发票。

  1. 进「待过账」看板,定位该客户的未分配付款条目。
  2. 点「分配建议」——系统按客户未结发票到期日升序(FIFO 先进先出)给出分配比例。
  3. 客户指定了特定发票时手工覆盖:每张发票输入分配金额,合计不得超过付款总额。
  4. 确认后系统写入核销记录,相关发票「已收金额」增加、「应收余额」递减。
  5. 发票应收余额 = 0 时状态自动推进到「已付款」;部分核销到「部分收款」。
何时不该做:付款币种 ≠ 发票币种时先让出纳录入换算汇率——直接按原币种分配会造成应收出现小差额;发票状态不在「已发送 / 部分收款 / 逾期」不允许分配,已「作废 / 已付款」要先撤销再处理。
观测信号:
  1. 发票列表对应行「已收 / 合计」数字同步变化。
  2. 付款单详情「核销明细」出现每张发票的分配记录。
  3. 应收账龄 drill-down 里对应发票应收余额递减。
技术追溯:invoices.paid_amount 增长、balance_due = total - paid_amount 递减、status 推进 sent → partial → paid
系统动作:getPaymentAllocationSuggestionsallocatePayment

2.8 月末汇兑损益调汇

月末重估外币应收应付余额,按最新汇率生成汇兑损益调汇凭证;生成的是一条特殊的「调汇凭证」,与普通凭证区分便于追溯。

  1. 先确认财务经理已把最新汇率导入——看页面顶部「最新汇率日期」与截止日一致。(见图 ①)
  2. 选截止日期(通常月末),点「预览未实现汇兑损益」。
  3. 核对应收 / 应付两侧每张外币发票按期末汇率重估后的差额:应收方正差 = 汇率对我方有利、应付方负差 = 本币欠款下降。
  4. 无误后点「生成调汇凭证」——系统自动建调汇凭证并过账。
  5. 下月再查「已实现汇兑损益」看核销时与调汇凭证的差额是否合理。
accountant/fx-gain-loss.jpg
何时不该做:当日汇率表没数据先让财务经理导入——用旧汇率调汇会让下月核销时差异变大;基础币种与单据币种相同不需调汇,系统自动过滤;结账前必须调完汇,结账后补调需走当期手工凭证。
观测信号:
  1. 凭证列表多一条 JE-YYYY-NNNN,描述含 "FX Revaluation as of …"。
  2. 汇兑损益科目(汇兑收益 / 汇兑损失)余额变动。
  3. 应收 / 应付外币发票对应账面折本金额同步刷新。
技术追溯:新增 journal_entries.reference_type='fx_revaluation'journal_entry_linesoriginal_currency / original_amount / exchange_rate;汇率源表 exchange_rates
系统动作:getLatestExchangeRateDategetUnrealizedFXGainLosspostFXRevaluationActiongetRealizedFXGainLossgetFXGainLossSummarygetBaseCurrencyAction

2.9 月末结账

每月 10 日前关上月:把损益科目余额结转到本年利润(code 313%),然后把期间状态置「已关闭」防倒挂。

  1. 前置条件自检:期间所有凭证都已过账、银行对账全部「已审核」、汇兑调汇已做。
  2. 进「会计期间」页,找到要关的期间行。(见图 ①)
  3. 点「预览结账」——弹窗列出每个损益科目的当期发生额和结转金额。
  4. 核对无误点「执行结账」——系统生成结转凭证并立即过账,结账状态变「已完成」。
  5. 再点同行「关账」——把会计期间状态置「已关账」,之后该期间不能新增凭证。
  6. 发现结错:先点「反冲结账」回到「已完成」前的状态,再重新预览。
accountant/fiscal-periods.jpg
accountant/fiscal-periods-closing.jpg
何时不该做:期间还有「草稿」凭证未处理时别结账——会遗漏当期损益;同期同类型已「已完成」不能重复执行(系统会拦截冲突);关账属于财务经理授权范围,并发冲突(乐观锁)要重拉再试。
观测信号:
  1. 期间行状态徽标变「已结账」然后「已关账」。
  2. 本年利润科目(code 313%)余额 = 当期净利润。
  3. 所有损益科目(收入 / 费用)当期余额归零。
  4. 凭证列表出现结转凭证,描述含 "Monthly closing for YYYY-MM"。
技术追溯:period_closings.status='completed'closing_type='monthly'accounting_periods.status='closed';并发保护 updated_at 乐观锁。
系统动作:getClosingPreviewActionexecuteClosingActionreverseClosingActionupdatePeriodStatusAction

2.10 期初余额录入 / 账套启用

新建账套、年初启用、迁移历史数据时用;录完必须通过「试算平衡」检查再锁定。

  1. 前置:先建好会计年度和 12 个期间;会计科目表已初始化完成。
  2. 进「期初余额」页,按科目逐一录入借方或贷方金额。(见图 ①)
  3. 批量录入:支持 Excel 导入或批量表单,系统按科目匹配。
  4. 点「试算平衡」——系统检查 Σ借方 = Σ贷方,不平则报错并列出差额。
  5. 平衡后点「锁定」——锁定后期初余额只读,日常凭证才能按期初计算余额。
  6. 若后续发现期初错:先点「解锁」,改完重新试算平衡再锁定(会穿透影响已产生的业务凭证,慎重)。
accountant/opening-balances.jpg
何时不该做:会计年度没建就录期初——系统找不到所属年度;会计科目未初始化就录——科目匹配失败;已锁定还想改请先解锁;业务凭证已大量产生后改期初会导致各期运行余额全部重算,影响范围极大。
观测信号:
  1. 页面顶部「试算平衡校验条」显示「已平衡」绿色徽标。
  2. 锁定后列表页变只读,字段灰置。
  3. 科目明细账中该科目「期初余额」行等于录入值。
技术追溯:opening_balances.is_locked=truecheckTrialBalanceAction 返回 balanced=true;会计年度表 fiscal_years
系统动作:getOpeningBalancesDatabulkSaveActioncheckTrialBalanceActionlockOpeningBalancesActionunlockOpeningBalancesActionseedDefaultAccounts

2.11 科目明细账与报表导出

月底对外出三大表(资产负债 / 利润 / 现金流),或按科目查运行余额用于对账差异排查。

  1. 进「科目明细账」,选总账科目 + 日期区间,看每笔流水和运行余额。(见图 ①)
  2. 异常余额 drill-down 到源凭证:点行上的凭证号跳 /dashboard/accounting/journal-entries/[id]
  3. 三大表:进「报表」页按财务年度与期间导出资产负债、利润、现金流表。(见图 ②)
  4. 专项报表:利润分析按订单 / 客户 / 产品维度,用于财务经理决策。
  5. 坏账计提 / 出口退税也在会计账本下:按规则预览 → 生成专项凭证。
accountant/account-ledger.jpg
accountant/reports.jpg
何时不该做:月结未完成之前别把报表当终稿——期末调汇和结转没做,利润会虚;坏账计提规则变更要走「保存规则 + 重算」,不要直接改历史凭证。
观测信号:
  1. 明细账运行余额列与每行凭证的借贷变动一致。
  2. 三大表导出 PDF / Excel 后有科目小计和合计。
  3. 利润分析按维度累计数 = 利润表同维度对应科目发生额。
技术追溯:account_transactionsrunning_balancereports 路径按年度 / 期间聚合。
系统动作:getAccountLedgerexportReportgetProfitAnalysisActioncalculateBadDebtActionpostBadDebtProvisionActioncreateExportTaxClaimActionsubmitExportTaxClaimActionreceiveExportTaxRefundAction

上下游交接契约

会计坐在销售 / 采购 / 出纳 / 报销 / 财务经理的中间:上游业务单据触发自动草稿凭证,会计复核 + 过账;下游把过完账的账簿数据交给财务经理出报表。每一次传递缺字段都会在会计端卡住。

出纳 → 会计:收付款自动凭证

我做什么:出纳确认收款 / 执行付款后,系统自动生成「收款」或「付供应商款」的草稿凭证落库;会计进「待过账」看板复核科目、金额、银行账户无误后过账。

下游看到什么:过账后应收 / 应付余额、银行科目余额立即变化;付款核销后发票「已收金额」同步刷新,销售在订单看到「已收」数字增长。

缺失会回来找我:出纳漏填银行流水号或付款日期 → 凭证描述缺字段,月末对账对不上来回找;币种与订单不一致 → 外币应收需会计先改汇率再过账。

技术字段(给 IT/出纳交叉核对)

触发动作:confirmPaymentActionexecutePaymentAction(出纳侧);postJournalEntry(会计侧过账);核销 allocatePayment

必传字段:payments{amount, payment_date, payment_method, reference, parent_type, parent_id, book_id};自动凭证 journal_entries{reference_type, reference_id, book_id, entry_date}

销售 → 会计:发票落账

我做什么:销售「从发货单创建发票」或提交增票申请后,系统自动生成「发票」草稿凭证(借应收账款、贷收入 / 税金);会计核对金额 / 税率 / 币种后过账。

下游看到什么:应收账龄马上显示该发票进入「当期」桶;过账后出纳能开始收款;财务经理在利润表看到收入入账。

缺失会回来找我:销售漏填税率 → 税金科目分录缺行,会计过账前要回退给销售补;币种与客户默认币种不一致 → 需会计在凭证上标注原币与折本金额。

技术字段(给 IT/销售交叉核对)

触发动作:createInvoiceFromDnActioncreateVatInvoiceRequestAction(销售侧);会计 postJournalEntry 过草稿。

必传字段:invoices{total, currency, exchange_rate, issue_date, due_date, balance_due, book_id}journal_entries.reference_type='invoice'

采购 → 会计:采购发票挂应付

我做什么:采购收货后录供应商发票,系统自动生成「采购发票」草稿凭证(借库存 / 费用、贷应付账款);会计核对存货科目、税金和金额后过账。

下游看到什么:应付账龄出现新余额;出纳收到供应商到期付款提示;库存科目余额上升(或费用类科目借方增加)。

缺失会回来找我:采购没关联收货单 → 存货入账无来源凭据,会计要回退补关联;发票币种与采购订单币种不同 → 需补汇率;税率错 → 进项税科目分录错需采购改或会计做手工调整。

技术字段(给 IT/采购交叉核对)

触发动作:receiveGoodsActioncreateSupplierInvoice(采购侧);postJournalEntry(会计侧过账)。

必传字段:purchase_invoices{total, currency, exchange_rate, issue_date, due_date, book_id, goods_receipt_id?}journal_entries.reference_type='purchase_invoice'

HR / 员工 → 会计:费用报销

我做什么:员工提交报销,逐级审批通过后会计在「费用报销」页点「批准 + 生成付款申请」——会计过账凭证(借费用、贷应付员工或代付账),同时开付款申请给出纳。

下游看到什么:出纳在付款申请队列看到新条目;员工的报销在「我的报销」里状态变「已审批 / 待付款」;费用科目余额当月累计。

缺失会回来找我:员工附件不全 → 会计不能过账需退回;报销期间落在已关账月 → 要员工改申请日期或走当期调整;科目映射缺失 → 联系财务经理补报销科目表配置。

技术字段(给 IT/HR 交叉核对)

触发动作:submitExpenseClaimAction(员工);会计 approveExpenseClaimAction + createFromExpenseClaimAction(转付款申请)。

必传字段:expense_claims{employee_id, amount, currency, expense_date, category, book_id, attachments[]}

会计 → 财务经理:月结推报表

我做什么:月结完成后把三大表、应收应付账龄、利润分析、现金流预测导出交财务经理;坏账计提、出口退税也交上。

下游看到什么:财务经理在「报表」页看到当月已定稿数据;按客户 / 产品 / 订单维度做决策分析;启动下月预算与现金流规划。

缺失会回来找我:银行对账未完成 → 现金流预测不准;汇率未导入 → 外币折本不齐;期间未关账 → 报表口径可能后续变化,财务经理会要求重导。

技术字段(给 IT/财务经理交叉核对)

触发动作:exportReportgetProfitAnalysisActiongetCustomerStatementActionpostBadDebtProvisionActionsubmitExportTaxClaimAction → receiveExportTaxRefundAction

必传字段:period_closings.status='completed'accounting_periods.status='closed'bank_reconciliations.status='approved'

异常回滚

会计的每个回滚动作都有前置条件(状态 / 期间 / 下游是否已动);别直接改 DB 字段,否则审计链断掉。

症状 做什么 前置条件 / 后果
草稿凭证录错 凭证详情点「删除」 仅「草稿」状态可删;已过账用「冲销」
已过账凭证错误 详情页点「冲销」,填冲销日期 + 原因 原凭证为「已过账」且未被冲销;冲销日期落「开启」期间
付款核销分错发票 重新走「分配建议」调整 发票未后续付款;跨月需走冲销再分配
已过账付款凭证要撤 联系出纳先撤付款 → 会计冲销对应凭证 发票状态需回到可撤状态;跨月必须做当期冲销凭证
银行对账错配一条 匹配工作台点「取消匹配」 对账单尚未「已审核」;取消后需重新配对
银行对账整期作废 列表行点「删除对账单」 仅非「已审核」可删;已审核需财务经理解锁
月结结错 / 结转漏科目 期间行点「反冲结账」,重新预览 + 执行 结账状态为「已完成」且未再执行年度结转;期间回到「开启」
期间误关账 期间行点「反关账」 需财务经理授权;并发冲突(乐观锁)要重拉再试
期初余额录错 先「解锁期初」→ 改 → 「批量保存」→ 再「锁定」 已有业务凭证时影响范围极大,需财务经理会签
调汇凭证错 对调汇凭证本身走「冲销」 针对调汇凭证 ID;冲销日期落「开启」期间
跨账套误录(切错 book_id 草稿:直接删 → 切回正确账套重录;已过账:冲销 → 切回补录 严禁改 book_id 字段;两步操作留全审计链
对应系统动作(IT 追溯)
  • deleteJournalEntry — 删草稿凭证,仅 status='draft'
  • reverseJournalEntry(entryId, reversalDate, reason) — 冲销已过账凭证,生成反向凭证并立即过账
  • allocatePayment — 重新分配付款到发票(支持手工覆盖 FIFO 建议)
  • unmatchAction — 取消银行对账的某条匹配,回到未匹配池
  • deleteReconciliationAction — 作废整期对账单,仅 status != 'approved'
  • reverseClosingAction — 冲销月结 / 年结;期间回到 open
  • updatePeriodStatusAction(id, 'open') — 重开误关闭的期间,需财务经理授权
  • unlockOpeningBalancesActionbulkSaveActionlockOpeningBalancesAction — 期初余额修正流程

进阶功能

坏账计提

按账龄桶 + 客户信用等级配置计提比例;每月月末自动跑计算 → 生成 reference_type='bad_debt_provision' 凭证(借坏账费用、贷坏账准备)。财务经理每季度评审规则调整一次。

入口:/dashboard/accounting/bad-debt。系统动作:saveProvisionRulesActioncalculateBadDebtActionpostBadDebtProvisionAction

accountant/bad-debt.jpg
出口退税

外贸发票按批次提交退税申请 → 税局退税到账后录入退税金额,系统自动生成对应凭证;申请 / 受理 / 到账三段状态。

入口:/dashboard/accounting/export-tax。系统动作:createExportTaxClaimAction(invoiceIds)submitExportTaxClaimActionreceiveExportTaxRefundAction

accountant/export-tax.jpg
利润分析

按订单 / 客户 / 产品维度聚合收入 - 成本 = 毛利;输出给财务经理做定价和客户分级决策。月结完成后导出。

入口:/dashboard/accounting/profit-analysis。系统动作:getProfitAnalysisAction

accountant/profit-analysis.jpg
成本中心 / 部门核算

用于按部门 / 项目 / 产品线归集费用和收入——凭证行可打 project_id / cost-center 标签;月末出部门损益表时按此汇总。

入口:/dashboard/accounting/cost-centers。关联字段:journal_entry_lines.project_id

accountant/cost-centers.jpg
现金流预测

结合应收应付账龄 + 付款里程碑 + 历史周期,预测未来 4 周 / 12 周现金净流入,支持乐观 / 中性 / 悲观情景;给财务经理做资金调度。

入口:/dashboard/accounting/cash-flow-forecast

accountant/cash-flow-forecast.jpg
账套备份与下载

月结 / 年结完成后生成账套备份(含当前账套全部凭证、科目、期间、对账单快照),下载保存留档给审计。

入口:/dashboard/accounting/book-backup。系统动作:getBackupsDatacreateBackupAction

accountant/book-backup.jpg
科目表维护与新增

系统科目(is_system=true)不可删;自定义科目可加子科目但不能跨账户类型;删除有流水的科目被系统拦截。年度开账前统一清理一次。

入口:/dashboard/accounting/chart-of-accounts。系统动作:createAccountupdateAccountdeleteAccountseedDefaultAccounts

accountant/chart-of-accounts.jpg
待过账看板(cashier 视角只读)

会计只读访问出纳的今日流水与待分配款,用于核对自动凭证的来源;不在此处执行付款。

入口:/dashboard/accounting/cashier。系统动作:getPendingItemsAction

accountant/cashier-pending.jpg

相关业务场景

会计参与 6 大跨角色场景中的 5 条,只有「采购付款流」的付款执行不参与;其他每条都以「复核 + 过账」身份介入。

  1. 标准成单流(询盘 → 报价 → 订单 → 发货 → 开票): 会计在发票环节入场——发票落账自动生成「发票」草稿凭证,复核金额 / 税率 / 币种后过账;月末看对应应收账龄。 → 场景详解
  2. 定制家具项目流: 会计按 project_id 归集收入和成本,用于成本中心 / 项目损益分析;里程碑收款的凭证 reference_id 关联到订单。 → 场景详解
  3. 回款流: 出纳确认收款触发自动凭证;会计过账 + 核销付款到发票(FIFO 建议或手工),客户对账用 getCustomerStatementAction 输出。 → 场景详解
  4. 采购付款流: 采购侧发票落账自动挂应付账款;出纳执行付款;会计只做「过账 + 对账」,不执行付款。 → 场景详解
  5. 月结流: 会计主角——清草稿、银行对账、调汇、损益结转、关账期间、出报表。 → 场景详解
  6. 报销审批流: 会计在末端——HR 审批通过后会计「批准 + 生成付款申请」,过账费用凭证 + 开付款申请给出纳。 → 场景详解

外部协作入口

权限与范围

看得到什么(RLS + book_id 边界)

  • 当前 organization_id 下且当前 book_id 下的全部 journal_entries / accounts / account_transactions / accounting_periods / bank_reconciliations / opening_balances / period_closings
  • 切换账套(右上角 Book Switcher)后同一登录用户看到的凭证、应收应付账龄、报表会完全不同——数据按 book_id 硬隔离。切换前后务必二次确认顶栏账套,跨账套误录只能通过「冲销 + 重录」修复,不可直接改 book_id
  • 客户 / 供应商主数据组织可见;具体 invoices / purchase_invoicesbook_id 过滤。
  • 付款执行(/dashboard/accounting/payments)、付款申请(/dashboard/accounting/payment-requests)、预算(/dashboard/accounting/budgets)不在会计操作范围——只读或只看摘要。

核心概念

  • book_id 账套隔离键:所有会计表主键之一;每个 service 调用前先 getBookContext().bookId,未选定账套 service 直接 err("No active book selected")。跨账套混账只能通过「冲销 + 重录」修复。
  • organization_id多租户隔离键;跨组织数据走 RLS,会计只看本组织本账套。
  • 期间开启 / 关闭:accounting_periods.status ∈ {open, closed};关闭期间凭证日期落入直接拦截(isDateInOpenPeriod 守卫)。
  • 系统管理科目:accounts_receivable / accounts_payable / inventory 不允许手工凭证直接操作,必须走业务单据(发票 / 付款 / 收货)触发。
  • 工作流引擎:凭证状态机 draft → postedposted → reversed 通过 src/services/workflow-engine.ts,冲销凭证自动带回链 reverses_id / reversed_by_id
  • 乐观锁:关键更新带 updated_at 乐观锁(过账、结转、期间状态切换);并发冲突需刷新列表重试。

术语表

账套
book_idaccounting_books 主键)
凭证 journal entry
journal_entries.entry_numberJE-YYYY-NNNN
凭证行
journal_entry_lines(借贷双行:debit_amount / credit_amount
凭证状态 enum
draft | posted | reversed
账户流水
account_transactions(含 running_balance
科目 GL account
accounts{code, name, account_type, balance_type, is_system}
科目类型 enum
asset | liability | equity | revenue | expense
科目明细账 ledger
account-ledger.ts 输出每科目按日期的运行余额
过账 posting
postJournalEntrydraft → posted + 生成 account_transactions
冲销 reversal
reverseJournalEntry(生成反向凭证,reference_type='reversal'
期间 period
accounting_periods{period_number, start_date, end_date, status}
会计年度
fiscal_years(每年 12 个期间)
期末结转
period_closings{closing_type, status, accounting_period_id}
本年利润
科目 code 313%(月结结转目标)
AR 应收
accounts_receivable 科目 + invoices.balance_due
AP 应付
accounts_payable 科目 + purchase_invoices.balance_due
AR 账龄桶
current_amount, days_1_30, days_31_60, days_61_90, over_90, total_amount
调汇 FX revaluation
reference_type='fx_revaluation'postFXRevaluationAction 生成)
未实现 / 已实现汇差
getUnrealizedFXGainLoss / getRealizedFXGainLoss
试算平衡
checkTrialBalanceAction(期初 Σdebit = Σcredit)
银行对账
bank_reconciliations{opening_balance_book, closing_balance_bank, matched_count, outstanding_deposits, outstanding_checks, bank_charges}
对账状态 enum
draft | in_progress | completed | approved
reference_type enum
invoice | purchase_invoice | credit_note | payment | supplier_payment | prepayment | manual | reversal | fx_revaluation | bank_reconciliation | bad_debt_provision | export_tax | refund | expense | delivery_note
坏账计提
postBadDebtProvisionAction(按 saveProvisionRulesAction 规则)

常见问题

切错账套录了一堆凭证怎么办?

按状态分类:草稿直接在错账套里删,切回正确账套重录;已过账的必须在错账套里「冲销」生成反向凭证,再切回正确账套重录。严禁直接改 book_id 字段——会让 account_transactions 与凭证不一致,审计链断掉。

上月已关账发现漏记一笔凭证怎么处理?

别开上月期间。在当期日期录「调整凭证」,描述里注明「补 YYYY-MM 漏记事项」——这是 ASC 842 / ASBE 一致的期后调整做法;若金额重大,再做一笔冲销在本期调整回去并联系财务经理出披露。

手工凭证写应收账款被系统拒了,该怎么改?

应收账款 / 应付账款 / 存货是系统管理科目,手工凭证不能直接写。要改应收必须通过源业务单据:客户多付款走退款流程、错开发票走贷项通知单、收款分错走重新分配。若确需调整,让财务经理审批后由系统管理员执行特殊脚本,不走日常手工凭证。

结账预览显示损益结转金额不对,先做了执行结账怎么办?

点「反冲结账」——期间回到「开启」,结转凭证自动冲销;再查原因(通常是期间内还有「草稿」凭证未处理、或汇率未导入致调汇遗漏),修正后重新预览 + 执行。冲销过的结账再执行会复用同一期间标识。

银行对账差异查不清,能不能先 approved 下月再补?

不能。置为「已审核」后对账单锁定期末余额,下月以此为期初——差异带入下月会让每月都错。先把差异拆成在途收款、在途付款、银行手续费、未入账凭证四类逐一匹配,找不到再联系银行核查原始水单。

多账套同一客户对账合并看需要什么?

应收账龄 / 客户对账单查询强制绑当前 book_id,不提供跨账套合并视图——合并去找财务经理的「合并报表」入口。会计侧单账套看的是为了准确性,合并数据含内部往来需要消除抵消。

调汇凭证过完账后才发现汇率错了?

对调汇凭证走「冲销」生成反向凭证——调汇凭证的冲销规则与普通凭证一致;然后让财务经理改汇率,重新跑一遍调汇流程。

为什么我看不到别的会计的凭证?

RLS 按 organization_id 隔离同组织内会计互相可见;看不到通常是 book_id 不同(右上账套切错)或属于其他组织。确认账套后再查;仍看不到联系管理员检查 organization_members 状态。