【设置】账套管理、财务参数、财务指标
账套管理、财务参数和财务指标属于设置管理,由 yudao-module-fms 后端模块的 config、home 包实现,前端实现在 @/views/fms/config 和 @/views/fms/home 目录。
账套是 FMS 的业务数据边界。同一个后台账号可以加入多个账套;凭证、科目、账簿、报表、结账等数据都归属于一个账套,用户进入 FMS 后先通过页面顶部的账套切换器选择当前账套,再在该账套下开展财务工作。
- 账套管理:维护企业资料、账套成员和权限,并完成【开始记账】初始化。
- 财务参数:维护会计制度、科目级次、编码规则、账簿余额方向和结账前审核要求。
- 财务指标:配置财务首页指标的名称、取数报表和公式。
本文涉及表如下图所示:
# 1. 账套管理
账套,由 FmsAccountSetController 提供接口(/fms/config/account-set);账套成员和默认账套,由 FmsAccountUserController 提供接口(/fms/config/account-user)。
# 1.1 主表表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `fms_account_set` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`company_code` varchar(64) DEFAULT NULL COMMENT '公司编码',
`company_name` varchar(255) DEFAULT NULL COMMENT '公司名称',
`company_profile` varchar(500) DEFAULT NULL COMMENT '公司简介',
`industry` varchar(255) DEFAULT NULL COMMENT '所在行业',
`location` varchar(255) DEFAULT NULL COMMENT '所在地',
`legal_representative` varchar(255) DEFAULT NULL COMMENT '法人代表',
`legal_representative_id_number` varchar(255) DEFAULT NULL COMMENT '身份证号',
`business_license_number` varchar(255) DEFAULT NULL COMMENT '营业执照号',
`organization_code` varchar(255) DEFAULT NULL COMMENT '组织机构代码',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`contact_name` varchar(255) DEFAULT NULL COMMENT '联系人',
`office_telephone` varchar(32) DEFAULT NULL COMMENT '办公电话',
`mobile` varchar(32) DEFAULT NULL COMMENT '手机号码',
`fax_number` varchar(32) DEFAULT NULL COMMENT '传真号码',
`qq_number` varchar(255) DEFAULT NULL COMMENT 'QQ 号码',
`email` varchar(255) DEFAULT NULL COMMENT '邮箱',
`other_contact` varchar(255) DEFAULT NULL COMMENT '其他',
`address` varchar(255) DEFAULT NULL COMMENT '详细地址',
`currency_id` bigint DEFAULT NULL COMMENT '币种编号',
`start_time` datetime DEFAULT NULL COMMENT '启用期间',
`standard` int DEFAULT NULL COMMENT '会计制度',
`initialized` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已初始化',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_business` (`company_code`, `deleted`, `tenant_id`)
) ENGINE=InnoDB COMMENT='FMS 账套';
① company_code 公司编码在同一租户内唯一,由 FmsAccountSetServiceImpl 的 validateAccountSetCompanyCodeUnique 校验。公司简介、行业、法人、证照和联系方式属于账套的企业资料,账套不提供删除操作,避免误删后破坏凭证、账簿和报表的归属关系。
② currency_id 关联 fms_currency 表的 id 字段,标识本位币;start_time 启用期间保存为所选月份第一天零点;standard 会计制度对应枚举 FmsAccountingStandardEnum,当前只提供 1 小企业会计准则(2013 年颁)。这三个字段在点击【开始记账】时写入。
③ initialized 标识账套是否完成初始化。详见 §1.3 状态流转。
该表包含一个子表:
fms_account_user(账套用户):在【授权】弹窗中维护,保存后台账号在该账套中的成员身份。
# 1.2 子表结构
CREATE TABLE `fms_account_user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`account_set_id` bigint DEFAULT NULL COMMENT '账套编号',
`user_id` bigint DEFAULT NULL COMMENT '后台用户编号',
`default_status` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否默认账套',
`founder` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否账套创建人',
`level` int NOT NULL DEFAULT 2 COMMENT '成员权限级别',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='FMS 账套用户';
① account_set_id 关联 fms_account_set 表的 id 字段,user_id 关联 system_users 表的 id 字段。一条记录表示一个后台用户在一个账套中的成员身份。
② 创建账套时,系统自动把当前登录用户加入该账套,并设置 founder = 1、level = 1。如果该用户尚无默认账套,同时设置 default_status = 1。
③ default_status 是当前用户维度的默认账套。切换账套时,系统先清除该用户原默认账套,再将目标账套设置为默认,不影响其他用户的选择。
④ founder 标识账套创建人。授权时创建人不能被移出,避免账套失去固定负责人。
⑤ 枚举 level 成员权限级别(FmsAccountUserLevelEnum),对应字典 fms_account_user_level:
| 值 | 枚举 | 说明 | 账套读权限 | 账套写权限 | 管理账套及成员 |
|---|---|---|---|---|---|
1 | OWNER | 主管 | ✓ | ✓ | ✓ |
2 | READ | 查看者 | ✓ | — | — |
3 | WRITE | 会计 | ✓ | ✓ | — |
后端不会只依赖前端按钮隐藏:查询业务数据时校验账套读权限,维护凭证和设置时校验账套写权限,修改账套资料和成员时校验主管权限。菜单、按钮和接口的功能权限仍由 System 模块统一分配,账套成员级别不替代菜单授权。
# 1.3 状态流转
账套生命周期由 FmsAccountSetServiceImpl 控制。状态字段为 initialized:
| 状态值 | 页面状态 | 说明 | 可执行操作 |
|---|---|---|---|
0 | 待初始化 | 只有企业资料和成员关系,不能进入日常财务处理 | 编辑、授权、开始记账 |
1 | 已启用 | 已建立本位币、科目、财务参数等基础数据 | 编辑、授权、切换使用 |
状态流转说明
新增账套 ──→ 待初始化(0) ──开始记账──→ 已启用(1)(终态)
- 新增账套(
createAccountSet):只保存企业资料,并把创建人写入账套成员表。此时账套不能录凭证。 - 开始记账(
initializeAccountSet):在同一事务中依次初始化本位币、财务参数、默认凭证字、系统预置辅助核算类别、会计科目、结账模板与默认结账方案、首页财务指标,最后回写会计制度、启用期间、本位币和initialized = 1。 - 已初始化的账套不能重复执行【开始记账】;初始化过程中任一步失败,整个事务回滚。
- 账套没有停用和删除操作,
initialized = 1是终态。
# 1.4 管理后台
对应 [财务管理 -> 设置管理 -> 账套管理] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/fms/config/account-set 目录。
# 列表
只展示当前用户已加入的账套,展示账套名称、公司编码、联系人、手机号、启用期间、账套状态和创建时间。当前用户的默认账套以「默认」标签标识,未初始化账套以「待初始化」标签标识。
主管可以【编辑】【授权】,主管或会计可以对待初始化账套执行【开始记账】;查看者只能查看账套和业务数据。

# 新增
点击【新增】打开 FmsAccountSetForm.vue,表单分为「基本信息」和「联系方式」两组。公司编码、公司名称必填,邮箱填写时会校验格式;其余企业资料可按实际情况补充。创建成功后,系统同时把创建人写入账套成员表。

# 修改
主管点击【编辑】,复用同一个 FmsAccountSetForm.vue 回显企业资料。保存时后端再次校验主管权限和公司编码唯一,不修改账套初始化结果及成员关系。
# 删除
账套管理不提供删除操作。凭证、账簿、报表和结账数据都以账套为归属边界,不能通过删除账套清理业务数据。
# 开始记账
待初始化账套点击【开始记账】,打开 FmsAccountSetInitializeForm.vue,设置本位币、启用期间、会计制度、科目级次、科目编码规则和账簿余额方向。
当前提供人民币(RMB)和「小企业会计准则(2013 年颁)」;科目级次最大 8 级,各级编码长度必须为 2 至 5 位,默认规则为 4-2-2-2。确认前应仔细核对启用期间,初始化后不能再次执行。
初始化完成后,建议按「币别 → 辅助核算 → 科目 → 初始余额 → 凭证 → 账簿 → 报表 → 结账」继续配置和使用。凭证字、常用摘要和凭证模板不参与建账,只服务于录凭证。

# 账套授权
主管点击【授权】打开 FmsAccountSetMemberForm.vue。点击【添加成员】,使用 System 模块的 UserSelectV2.vue 选择一个或多个后台用户,并分配主管、会计或查看者权限;列表中也可调整非创建人的权限或将其移出。
保存时后端按本次完整成员列表进行差量新增、修改和移出,并再次校验用户存在。账套创建人带有「创建人」标签,不能移出。

# 切换账套
FMS 页面顶部的账套切换器(FmsAccountSetSwitch.vue)展示当前账套和当前会计期间。下拉列表中,默认账套带「默认」标签,未初始化账套带「未初始化」标签且不可选择。
首次进入 FMS 时,前端按「本地缓存账套 → 后端默认账套 → 第一条已初始化账套」的顺序选择可用账套。切换时会提示「未保存内容不会保留」;确认后调用 FmsAccountUserController 的 updateDefaultStatus 更新默认账套,关闭旧账套的 FMS 标签页并进入新账套首页,避免不同账套的数据同时停留在页面中。该操作不改变账套资料,只更新当前用户的默认账套。

# 账套开通引导
进入 FMS 时,如果当前账号没有账套,或者只有未初始化账套,FmsAccountSetGuide.vue 会弹出「账套开通引导」。有对应权限的用户可以直接前往账套管理;无权限用户会被提示联系管理员创建账套、加入已有账套或完成初始化。

# 2. 财务参数
财务参数,由 FmsFinanceParameterController 提供接口(/fms/config/finance-parameter)。每个已初始化账套只有一条财务参数记录,在【开始记账】时由 initializeFinanceParameter 自动创建,不提供独立的新增和删除操作。
# 2.1 表结构
CREATE TABLE `fms_finance_parameter` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`account_set_id` bigint NOT NULL COMMENT '账套编号',
`level` int NOT NULL COMMENT '科目层级',
`subject_code_rule` varchar(64) NOT NULL COMMENT '科目编码规则',
`ledger_balance_mode` int NOT NULL COMMENT '账簿余额方向模式',
`deficit_check` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否检查现金及银行存款科目赤字',
`voucher_review_required` bit(1) NOT NULL DEFAULT b'1' COMMENT '结账前是否要求凭证审核',
`asset_period_locked` bit(1) NOT NULL DEFAULT b'0' COMMENT '生成折旧凭证后是否锁定以前期间资产卡片',
`taxpayer_name` varchar(255) DEFAULT NULL COMMENT '纳税人名称',
`taxpayer_number` varchar(64) DEFAULT NULL COMMENT '纳税人识别号',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_business` (`account_set_id`, `deleted`, `tenant_id`)
) ENGINE=InnoDB COMMENT='FMS 财务参数';
① account_set_id 关联 fms_account_set 表的 id 字段,并通过唯一索引保证同一账套只有一条有效财务参数。
② level 和 subject_code_rule 共同定义科目结构。例如 level = 4、subject_code_rule = 4-2-2-2,表示一级科目 4 位、后三级各 2 位。
③ 财务参数允许增加科目级次、扩大各级编码长度,不允许缩小。保存时,FmsFinanceParameterServiceImpl 调用 FmsSubjectServiceImpl 的 expandSubjectCodes 扩展已有科目编码,避免存量科目失效。
④ 枚举 ledger_balance_mode 账簿余额方向模式(FmsLedgerBalanceModeEnum):1 与科目方向相同、2 与科目方向相反。它决定账簿页面余额列的显示口径,详见 《【账簿】账簿管理》。
⑤ voucher_review_required = 1 时,期末结账要求该期间凭证已经审核;关闭后,未审核凭证不再作为该项结账阻断条件,详见 《【结账】期末结账》。
⑥ deficit_check、asset_period_locked 和纳税人信息属于领域预留参数,当前财务参数页面不维护,保存页面可见字段时会保留原值。
# 2.2 管理后台
对应 [财务管理 -> 设置管理 -> 财务参数] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/fms/config/finance-parameter 目录。
# 修改
页面分为三组:
- 基础参数:公司名称、本位币、启用期间只读展示,会计制度可维护。
- 科目参数:维护科目级次和每一级编码长度,只能调大不能调小。
- 账簿:维护账簿余额方向,以及「凭证审核后才允许结账」。
查看者进入页面时整个表单只读,主管和会计可保存。未选择账套、账套未初始化或初始化数据缺失时,页面展示对应提示,不提交空参数。

# 3. 财务指标
财务指标,由 FmsFinanceIndicatorController 提供接口(/fms/config/finance-indicator)。财务首页只读取当前账套中已启用的指标,并按 sort 顺序展示指标卡片和最近 12 期趋势。
# 3.1 表结构
CREATE TABLE `fms_finance_indicator` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`account_set_id` bigint NOT NULL COMMENT '账套编号',
`name` varchar(100) NOT NULL COMMENT '指标名称',
`code` varchar(64) NOT NULL COMMENT '指标编码',
`type` tinyint NOT NULL COMMENT '取数报表类型',
`formula` varchar(2000) NOT NULL COMMENT '指标公式',
`sort` int NOT NULL DEFAULT 0 COMMENT '显示顺序',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_account_set_code` (`account_set_id`, `code`, `deleted`, `tenant_id`)
) ENGINE=InnoDB COMMENT='FMS 首页财务指标';
① account_set_id 关联 fms_account_set 表的 id 字段,code 在同一账套内唯一。指标编码创建后不可修改,避免首页标识发生无意变化。
② 枚举 type 取数报表类型(FmsFinanceIndicatorTypeEnum),对应字典 fms_finance_indicator_type:1 资产负债表、2 利润表。
③ formula 支持两种格式:报表行次公式,例如 L1+L2-L3;报表科目公式 JSON。保存科目公式时,后端会绑定当前账套的科目编号,无效格式不能保存。
④ status 使用通用状态:0 正常、1 停用。停用指标仍保留配置,但不参与首页指标卡和趋势计算。
⑤ 账套初始化时,FmsFinanceIndicatorServiceImpl 从 fms/config/finance-indicator-presets.json 加载预置指标,并绑定当前账套科目。已存在指标时不会重复初始化。
# 3.2 管理后台
对应 [财务管理 -> 设置管理 -> 财务指标] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/fms/config/finance-indicator 目录。
# 列表
展示指标名称、编码、取数报表、公式、排序和状态。主管、会计可以新增、编辑、删除,查看者只能查看。

# 新增
点击【新增】打开 FmsFinanceIndicatorForm.vue,填写指标名称、编码、取数报表、指标公式、排序和状态。行次公式可直接填写 L1+L2-L3,科目公式按报表公式 JSON 填写。

# 修改
点击【编辑】回显指标,指标编码只读,名称、取数报表、公式、排序和状态可以调整。保存时后端重新校验指标公式和账套内编码唯一。
# 删除
点击【删除】并二次确认后,首页不再展示该指标。如果只需暂时隐藏,应将状态修改为停用,以便后续恢复。
# 3.3 财务首页
财务指标的消费方是财务首页,由 FmsHomeController 提供接口(/fms/home),对应 [财务管理 -> 首页] 菜单和 @/views/fms/home 目录。
# 指标卡与趋势
FmsHomeMetricCards.vue 展示当前期间的指标金额,FmsHomeMetricCharts.vue 展示最近 12 期趋势。getHome 逐月计算指标,账套启用期间之前的月份返回空值,最后一期作为当前指标卡数据。

# 指标明细
点击某个指标卡,调用 getMetricDetail 查看该指标的最近 12 期趋势和当期科目构成。系统预置的指标口径由枚举 FmsHomeMetricEnum 定义:收入取利润表第 1 行,成本取第 2、3 行,费用取第 11、14、18 行,利润取第 30 行,其余归入「其他」。

# 常用功能
FmsHomeShortcuts.vue 提供【录凭证】【查凭证】【科目余额表】【明细账】四个快捷入口,点击后跳转到对应页面。