gaoluyang
昨天 90b3ad820eea45d021835197eac5bc3ad55b12ed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
-- =====================================================================================
-- 财务管理模块(会计核算)初始化脚本
-- 模块:yudao-module-finance   接口前缀:/finance/**   表前缀:fin_
--
-- 内容:
--   1. 5 张业务表:会计科目、记账凭证、凭证分录、固定资产、无形资产
--   2. 6 组字典(system_dict_type / system_dict_data)
--   3. 一套企业会计准则常用会计科目种子数据(仅在会计科目表为空时写入)
--
-- 说明:
--   * 本脚本不含菜单/权限配置,菜单请自行在「系统管理 - 菜单管理」中配置,
--     接口权限串见下方各表的接口注释(finance:xxx:yyy)。
--   * 项目为单租户,表结构不含 tenant_id 字段。
--   * 脚本可重复执行:建表用 CREATE TABLE IF NOT EXISTS,字典/科目均带存在性判断。
--   * 按《数据库初始化与配置导出维护规则》,本脚本内容需同步进 docs/sql/config_export_all_<日期>.sql
--     的阶段一(结构 + 字典配置),否则新库初始化会缺表。
-- =====================================================================================
 
-- -------------------------------------------------------------------------------------
-- 1.1 会计科目
-- 接口:/finance/account-subject  权限:finance:account-subject:{query|create|update|delete|export}
-- -------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `fin_account_subject`
(
    `id`                bigint       NOT NULL AUTO_INCREMENT COMMENT '科目编号',
    `parent_id`         bigint       NULL DEFAULT NULL COMMENT '上级科目编号,NULL 表示一级科目',
    `subject_code`      varchar(64)  NOT NULL COMMENT '科目编码',
    `subject_name`      varchar(128) NOT NULL COMMENT '科目名称',
    `subject_type`      tinyint      NOT NULL COMMENT '科目类型:1资产类 2负债类 3所有者权益类 4成本类 5损益类',
    `balance_direction` tinyint      NOT NULL COMMENT '余额方向:1借 2贷',
    `status`            tinyint      NOT NULL DEFAULT 0 COMMENT '状态:0启用 1禁用',
    `remark`            varchar(500) NULL DEFAULT '' COMMENT '备注',
    `creator`           varchar(64)  NULL DEFAULT '' COMMENT '创建者',
    `create_time`       datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`           varchar(64)  NULL DEFAULT '' COMMENT '更新者',
    `update_time`       datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`           bit(1)       NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_fin_subject_code` (`deleted`, `subject_code`),
    KEY `idx_fin_subject_parent` (`deleted`, `parent_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '会计科目';
 
-- -------------------------------------------------------------------------------------
-- 1.2 记账凭证
-- 接口:/finance/voucher  权限:finance:voucher:{query|create|update|delete|update-status|export}
-- -------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `fin_voucher`
(
    `id`                 bigint        NOT NULL AUTO_INCREMENT COMMENT '凭证编号',
    `voucher_no`         varchar(64)   NOT NULL COMMENT '凭证字号,例如:记2026090001',
    `voucher_date`       date          NOT NULL COMMENT '凭证日期',
    `summary`            varchar(500)  NULL DEFAULT '' COMMENT '摘要',
    `debit`              decimal(18,2) NOT NULL DEFAULT 0 COMMENT '借方合计',
    `credit`             decimal(18,2) NOT NULL DEFAULT 0 COMMENT '贷方合计',
    `status`             tinyint       NOT NULL DEFAULT 0 COMMENT '凭证状态:0未过账 10已过账 20已作废',
    `attachment_count`   int           NOT NULL DEFAULT 0 COMMENT '附件张数',
    `remark`             varchar(500)  NULL DEFAULT '' COMMENT '备注',
    `creator`            varchar(64)   NULL DEFAULT '' COMMENT '制单人',
    `create_time`        datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`            varchar(64)   NULL DEFAULT '' COMMENT '更新者',
    `update_time`        datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`            bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_fin_voucher_no` (`deleted`, `voucher_no`),
    KEY `idx_fin_voucher_date` (`deleted`, `status`, `voucher_date`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '记账凭证';
 
-- -------------------------------------------------------------------------------------
-- 1.3 凭证分录
-- -------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `fin_voucher_entry`
(
    `id`             bigint        NOT NULL AUTO_INCREMENT COMMENT '分录编号',
    `voucher_id`     bigint        NOT NULL COMMENT '凭证编号,关联 fin_voucher.id',
    `row_no`         int           NOT NULL DEFAULT 1 COMMENT '行号,从 1 开始',
    `subject_code`   varchar(64)   NOT NULL COMMENT '科目编码,关联 fin_account_subject.subject_code',
    `subject_name`   varchar(128)  NULL DEFAULT '' COMMENT '科目名称(冗余)',
    `summary`        varchar(500)  NULL DEFAULT '' COMMENT '摘要',
    `debit`          decimal(18,2) NOT NULL DEFAULT 0 COMMENT '借方金额',
    `credit`         decimal(18,2) NOT NULL DEFAULT 0 COMMENT '贷方金额',
    `auxiliary_type` tinyint       NULL DEFAULT NULL COMMENT '辅助核算类型:1客户 2供应商 3部门 4员工 5项目',
    `auxiliary_id`   varchar(64)   NULL DEFAULT '' COMMENT '辅助核算对象编号',
    `auxiliary_name` varchar(128)  NULL DEFAULT '' COMMENT '辅助核算对象名称',
    `creator`        varchar(64)   NULL DEFAULT '' COMMENT '创建者',
    `create_time`    datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`        varchar(64)   NULL DEFAULT '' COMMENT '更新者',
    `update_time`    datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`        bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_fin_entry_voucher` (`deleted`, `voucher_id`),
    KEY `idx_fin_entry_subject` (`deleted`, `subject_code`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '凭证分录';
 
-- -------------------------------------------------------------------------------------
-- 1.4 固定资产
-- 接口:/finance/fixed-asset  权限:finance:fixed-asset:{query|create|update|delete|depreciate|export}
-- -------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `fin_fixed_asset`
(
    `id`                         bigint        NOT NULL AUTO_INCREMENT COMMENT '资产编号',
    `asset_code`                 varchar(64)   NOT NULL COMMENT '资产编号',
    `asset_name`                 varchar(128)  NOT NULL COMMENT '资产名称',
    `category`                   varchar(64)   NULL DEFAULT '' COMMENT '资产类别',
    `specification`              varchar(255)  NULL DEFAULT '' COMMENT '规格型号',
    `purchase_date`              date          NOT NULL COMMENT '购置日期',
    `original_value`             decimal(24,6) NOT NULL DEFAULT 0 COMMENT '资产原值',
    `useful_life`                int           NOT NULL DEFAULT 1 COMMENT '使用年限(年)',
    `residual_rate`              decimal(5,2)  NOT NULL DEFAULT 0 COMMENT '残值率(%)',
    `accumulated_depreciation`   decimal(24,6) NOT NULL DEFAULT 0 COMMENT '累计折旧',
    `net_value`                  decimal(24,6) NOT NULL DEFAULT 0 COMMENT '净值 = 原值 - 累计折旧',
    `location`                   varchar(255)  NULL DEFAULT '' COMMENT '存放地点',
    `department`                 varchar(128)  NULL DEFAULT '' COMMENT '使用部门',
    `keeper`                     varchar(64)   NULL DEFAULT '' COMMENT '保管人',
    `status`                     tinyint       NOT NULL DEFAULT 1 COMMENT '状态:1在用 2闲置 3维修中 4已报废',
    `remark`                     varchar(500)  NULL DEFAULT '' COMMENT '备注',
    `creator`                    varchar(64)   NULL DEFAULT '' COMMENT '创建者',
    `create_time`                datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`                    varchar(64)   NULL DEFAULT '' COMMENT '更新者',
    `update_time`                datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`                    bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_fin_fixed_asset_code` (`deleted`, `asset_code`),
    KEY `idx_fin_fixed_asset_status` (`deleted`, `status`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '固定资产';
 
-- -------------------------------------------------------------------------------------
-- 1.5 无形资产
-- 接口:/finance/intangible-asset  权限:finance:intangible-asset:{query|create|update|delete|amortize|export}
-- -------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `fin_intangible_asset`
(
    `id`                          bigint        NOT NULL AUTO_INCREMENT COMMENT '资产编号',
    `asset_code`                  varchar(64)   NOT NULL COMMENT '资产编号',
    `asset_name`                  varchar(128)  NOT NULL COMMENT '资产名称',
    `category`                    varchar(64)   NULL DEFAULT '' COMMENT '资产类别',
    `certificate_no`              varchar(128)  NULL DEFAULT '' COMMENT '证书编号',
    `acquisition_date`            date          NOT NULL COMMENT '取得日期',
    `original_value`              decimal(24,6) NOT NULL DEFAULT 0 COMMENT '资产原值',
    `amortization_period`         int           NOT NULL DEFAULT 1 COMMENT '摊销年限(年)',
    `residual_rate`               decimal(5,2)  NOT NULL DEFAULT 0 COMMENT '残值率(%)',
    `accumulated_amortization`    decimal(24,6) NOT NULL DEFAULT 0 COMMENT '累计摊销',
    `net_value`                   decimal(24,6) NOT NULL DEFAULT 0 COMMENT '净值 = 原值 - 累计摊销',
    `validity_date`               date          NULL DEFAULT NULL COMMENT '有效期至',
    `status`                      tinyint       NOT NULL DEFAULT 1 COMMENT '状态:1在用 2已失效 3已摊销完',
    `description`                 varchar(500)  NULL DEFAULT '' COMMENT '资产描述',
    `remark`                      varchar(500)  NULL DEFAULT '' COMMENT '备注',
    `creator`                     varchar(64)   NULL DEFAULT '' COMMENT '创建者',
    `create_time`                 datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`                     varchar(64)   NULL DEFAULT '' COMMENT '更新者',
    `update_time`                 datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`                     bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_fin_intangible_asset_code` (`deleted`, `asset_code`),
    KEY `idx_fin_intangible_asset_status` (`deleted`, `status`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '无形资产';
 
-- -------------------------------------------------------------------------------------
-- 2. 字典
-- -------------------------------------------------------------------------------------
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '会计科目类型', 'finance_subject_type', 0, '财务管理 - 科目类型', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_type` WHERE `type` = 'finance_subject_type' AND `deleted` = b'0');
 
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '会计余额方向', 'finance_balance_direction', 0, '财务管理 - 科目余额方向', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_type` WHERE `type` = 'finance_balance_direction' AND `deleted` = b'0');
 
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '辅助核算类型', 'finance_auxiliary_type', 0, '财务管理 - 凭证分录辅助核算类型', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_type` WHERE `type` = 'finance_auxiliary_type' AND `deleted` = b'0');
 
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '凭证状态', 'finance_voucher_status', 0, '财务管理 - 记账凭证状态', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_type` WHERE `type` = 'finance_voucher_status' AND `deleted` = b'0');
 
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '固定资产状态', 'finance_fixed_asset_status', 0, '财务管理 - 固定资产状态', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_type` WHERE `type` = 'finance_fixed_asset_status' AND `deleted` = b'0');
 
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '无形资产状态', 'finance_intangible_asset_status', 0, '财务管理 - 无形资产状态', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_type` WHERE `type` = 'finance_intangible_asset_status' AND `deleted` = b'0');
 
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 1, '资产类', '1', 'finance_subject_type', 0, 'primary', '', '会计科目 - 资产类', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_subject_type' AND `value` = '1' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 2, '负债类', '2', 'finance_subject_type', 0, 'warning', '', '会计科目 - 负债类', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_subject_type' AND `value` = '2' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 3, '所有者权益类', '3', 'finance_subject_type', 0, 'success', '', '会计科目 - 所有者权益类', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_subject_type' AND `value` = '3' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 4, '成本类', '4', 'finance_subject_type', 0, 'info', '', '会计科目 - 成本类', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_subject_type' AND `value` = '4' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 5, '损益类', '5', 'finance_subject_type', 0, 'danger', '', '会计科目 - 损益类', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_subject_type' AND `value` = '5' AND `deleted` = b'0');
 
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 1, '借', '1', 'finance_balance_direction', 0, 'primary', '', '余额方向 - 借', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_balance_direction' AND `value` = '1' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 2, '贷', '2', 'finance_balance_direction', 0, 'warning', '', '余额方向 - 贷', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_balance_direction' AND `value` = '2' AND `deleted` = b'0');
 
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 1, '客户', '1', 'finance_auxiliary_type', 0, 'primary', '', '辅助核算 - 客户', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_auxiliary_type' AND `value` = '1' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 2, '供应商', '2', 'finance_auxiliary_type', 0, 'warning', '', '辅助核算 - 供应商', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_auxiliary_type' AND `value` = '2' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 3, '部门', '3', 'finance_auxiliary_type', 0, 'info', '', '辅助核算 - 部门', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_auxiliary_type' AND `value` = '3' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 4, '员工', '4', 'finance_auxiliary_type', 0, 'success', '', '辅助核算 - 员工', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_auxiliary_type' AND `value` = '4' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 5, '项目', '5', 'finance_auxiliary_type', 0, 'default', '', '辅助核算 - 项目', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_auxiliary_type' AND `value` = '5' AND `deleted` = b'0');
 
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 1, '未过账', '0', 'finance_voucher_status', 0, 'info', '', '凭证状态 - 未过账', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_voucher_status' AND `value` = '0' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 2, '已过账', '10', 'finance_voucher_status', 0, 'success', '', '凭证状态 - 已过账', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_voucher_status' AND `value` = '10' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 3, '已作废', '20', 'finance_voucher_status', 0, 'danger', '', '凭证状态 - 已作废', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_voucher_status' AND `value` = '20' AND `deleted` = b'0');
 
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 1, '在用', '1', 'finance_fixed_asset_status', 0, 'success', '', '固定资产 - 在用', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_fixed_asset_status' AND `value` = '1' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 2, '闲置', '2', 'finance_fixed_asset_status', 0, 'info', '', '固定资产 - 闲置', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_fixed_asset_status' AND `value` = '2' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 3, '维修中', '3', 'finance_fixed_asset_status', 0, 'warning', '', '固定资产 - 维修中', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_fixed_asset_status' AND `value` = '3' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 4, '已报废', '4', 'finance_fixed_asset_status', 0, 'danger', '', '固定资产 - 已报废', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_fixed_asset_status' AND `value` = '4' AND `deleted` = b'0');
 
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 1, '在用', '1', 'finance_intangible_asset_status', 0, 'success', '', '无形资产 - 在用', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_intangible_asset_status' AND `value` = '1' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 2, '已失效', '2', 'finance_intangible_asset_status', 0, 'danger', '', '无形资产 - 已失效', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_intangible_asset_status' AND `value` = '2' AND `deleted` = b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 3, '已摊销完', '3', 'finance_intangible_asset_status', 0, 'info', '', '无形资产 - 已摊销完', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `dict_type` = 'finance_intangible_asset_status' AND `value` = '3' AND `deleted` = b'0');
 
-- -------------------------------------------------------------------------------------
-- 3. 会计科目种子数据(企业会计准则常用科目)
-- 仅当 fin_account_subject 为空时写入,避免覆盖用户已维护的科目表
-- parent_id 为 NULL 表示一级科目;科目编码遵循「4 位一级 + 2 位二级」的层级规则
-- -------------------------------------------------------------------------------------
INSERT INTO `fin_account_subject` (`parent_id`, `subject_code`, `subject_name`, `subject_type`, `balance_direction`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT *
FROM (SELECT NULL AS parent_id, '1001' AS subject_code, '库存现金' AS subject_name, 1 AS subject_type, 1 AS balance_direction, 0 AS status, '' AS remark, '1' AS creator, NOW() AS create_time, '1' AS updater, NOW() AS update_time, b'0' AS deleted
      UNION ALL SELECT NULL, '1002', '银行存款', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1012', '其他货币资金', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1101', '交易性金融资产', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1121', '应收票据', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1122', '应收账款', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1123', '预付账款', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1131', '应收股利', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1132', '应收利息', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1221', '其他应收款', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1231', '坏账准备', 1, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1401', '材料采购', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1402', '在途物资', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1403', '原材料', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1405', '库存商品', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1406', '发出商品', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1408', '委托加工物资', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1411', '周转材料', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1471', '存货跌价准备', 1, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1501', '债权投资', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1601', '固定资产', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1602', '累计折旧', 1, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1603', '固定资产减值准备', 1, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1604', '在建工程', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1605', '工程物资', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1606', '固定资产清理', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1701', '无形资产', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1702', '累计摊销', 1, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1703', '无形资产减值准备', 1, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1801', '长期待摊费用', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1811', '递延所得税资产', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '1901', '待处理财产损溢', 1, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2001', '短期借款', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2201', '应付票据', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2202', '应付账款', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2203', '预收账款', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2211', '应付职工薪酬', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2221', '应交税费', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2231', '应付利息', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2232', '应付股利', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2241', '其他应付款', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2501', '长期借款', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2801', '预计负债', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '2901', '递延所得税负债', 2, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '4001', '实收资本', 3, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '4002', '资本公积', 3, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '4101', '盈余公积', 3, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '4103', '本年利润', 3, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '4104', '利润分配', 3, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '5001', '生产成本', 4, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '5101', '制造费用', 4, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '5201', '劳务成本', 4, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '5301', '研发支出', 4, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6001', '主营业务收入', 5, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6051', '其他业务收入', 5, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6101', '公允价值变动损益', 5, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6111', '投资收益', 5, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6301', '营业外收入', 5, 2, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6401', '主营业务成本', 5, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6402', '其他业务成本', 5, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6403', '税金及附加', 5, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6601', '销售费用', 5, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6602', '管理费用', 5, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6603', '财务费用', 5, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6701', '资产减值损失', 5, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6711', '营业外支出', 5, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6801', '所得税费用', 5, 1, 0, '', '1', NOW(), '1', NOW(), b'0'
      UNION ALL SELECT NULL, '6901', '以前年度损益调整', 5, 1, 0, '', '1', NOW(), '1', NOW(), b'0') AS seed
WHERE NOT EXISTS (SELECT 1 FROM `fin_account_subject` WHERE `deleted` = b'0');