feat(yb): 创建医保模拟数据库表结构

This commit is contained in:
2026-06-23 13:54:25 +08:00
parent 5f6c6f63db
commit 3d15342b31

View File

@@ -0,0 +1,105 @@
-- V105__create_yb_mock_tables.sql
-- 创建医保模拟服务器所需的数据库表
-- 1. 参保人信息表
CREATE TABLE IF NOT EXISTS yb_psn_info (
id BIGSERIAL PRIMARY KEY,
psn_no VARCHAR(50) NOT NULL UNIQUE,
psn_name VARCHAR(100),
sex_code VARCHAR(10),
sex_name VARCHAR(20),
birth_date VARCHAR(20),
id_card VARCHAR(20),
insur_type VARCHAR(100),
insur_area VARCHAR(100),
card_no VARCHAR(50),
balance DECIMAL(12,2) DEFAULT 0,
status VARCHAR(20) DEFAULT '正常',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 2. 电子处方表
CREATE TABLE IF NOT EXISTS yb_recipe (
id BIGSERIAL PRIMARY KEY,
recipe_no VARCHAR(50) NOT NULL UNIQUE,
psn_no VARCHAR(50),
encounter_no VARCHAR(50),
recipe_type VARCHAR(20),
total_amount DECIMAL(12,2),
self_pay DECIMAL(12,2),
insurance_pay DECIMAL(12,2),
status VARCHAR(20) DEFAULT '待结算',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 3. 事前事中商品库
CREATE TABLE IF NOT EXISTS yb_product (
id BIGSERIAL PRIMARY KEY,
item_code VARCHAR(50) NOT NULL UNIQUE,
item_name VARCHAR(200),
item_type VARCHAR(50),
spec VARCHAR(100),
unit VARCHAR(20),
price DECIMAL(12,2),
manufacturer VARCHAR(200),
approval_no VARCHAR(100),
status VARCHAR(20) DEFAULT '正常',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 4. 结算记录表
CREATE TABLE IF NOT EXISTS yb_settle_record (
id BIGSERIAL PRIMARY KEY,
settle_no VARCHAR(50) NOT NULL UNIQUE,
psn_no VARCHAR(50),
encounter_no VARCHAR(50),
settle_type VARCHAR(20),
total_amount DECIMAL(12,2),
insurance_pay DECIMAL(12,2),
self_pay DECIMAL(12,2),
account_pay DECIMAL(12,2),
cash_pay DECIMAL(12,2),
status VARCHAR(20) DEFAULT '成功',
settle_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 5. 签到签退记录表
CREATE TABLE IF NOT EXISTS yb_sign_record (
id BIGSERIAL PRIMARY KEY,
psn_no VARCHAR(50),
sign_type VARCHAR(20),
sign_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
terminal_no VARCHAR(50),
status VARCHAR(20) DEFAULT '成功'
);
-- 6. 插入测试数据 - 参保人信息
INSERT INTO yb_psn_info (psn_no, psn_name, sex_code, sex_name, birth_date, id_card, insur_type, insur_area, card_no, balance, status) VALUES
('P100001', '张三', '1', '', '1980-01-15', '450123198001151234', '职工基本医疗保险', '南宁市', 'C2024000001', 12580.50, '正常'),
('P100002', '李四', '2', '', '1985-03-20', '450123198503201234', '城乡居民基本医疗保险', '柳州市', 'C2024000002', 5620.00, '正常'),
('P100003', '王五', '1', '', '1990-06-10', '450123199006101234', '职工基本医疗保险', '桂林市', 'C2024000003', 8950.25, '正常'),
('P100004', '赵六', '2', '', '1975-12-25', '450123197512251234', '离休人员医疗保险', '梧州市', 'C2024000004', 25000.00, '正常'),
('P100005', '孙七', '1', '', '1995-08-08', '450123199508081234', '城乡居民基本医疗保险', '北海市', 'C2024000005', 3200.75, '暂停');
-- 7. 插入测试数据 - 电子处方
INSERT INTO yb_recipe (recipe_no, psn_no, encounter_no, recipe_type, total_amount, self_pay, insurance_pay, status) VALUES
('CF20240601001', 'P100001', 'MZ20240601001', '西药处方', 156.80, 23.52, 133.28, '已结算'),
('CF20240601002', 'P100002', 'MZ20240601002', '中药处方', 238.50, 71.55, 166.95, '待结算'),
('CF20240601003', 'P100003', 'ZY20240601001', '住院处方', 2580.50, 258.05, 2322.45, '已结算');
-- 8. 插入测试数据 - 结算记录
INSERT INTO yb_settle_record (settle_no, psn_no, encounter_no, settle_type, total_amount, insurance_pay, self_pay, account_pay, cash_pay, status) VALUES
('JZ20240601001', 'P100001', 'MZ20240601001', '门诊结算', 156.80, 133.28, 23.52, 20.00, 3.52, '成功'),
('ZYJS20240601001', 'P100003', 'ZY20240601001', '住院结算', 15680.50, 14112.45, 1568.05, 1200.00, 368.05, '成功');
-- 9. 创建索引
CREATE INDEX IF NOT EXISTS idx_yb_psn_info_psn_no ON yb_psn_info(psn_no);
CREATE INDEX IF NOT EXISTS idx_yb_recipe_psn_no ON yb_recipe(psn_no);
CREATE INDEX IF NOT EXISTS idx_yb_recipe_encounter ON yb_recipe(encounter_no);
CREATE INDEX IF NOT EXISTS idx_yb_settle_psn_no ON yb_settle_record(psn_no);
CREATE INDEX IF NOT EXISTS idx_yb_settle_encounter ON yb_settle_record(encounter_no);
CREATE INDEX IF NOT EXISTS idx_yb_sign_psn_no ON yb_sign_record(psn_no);