feat: 门诊手术中计费功能

- 数据库:在adm_charge_item表添加SourceBillNo字段
- 后端实体类:更新ChargeItem.java添加SourceBillNo字段
- 前端组件:创建手术计费界面(基于门诊划价界面)
- 后端API:扩展PrePrePaymentDto支持手术计费标识
- 后端Service:扩展getChargeItems方法支持手术计费过滤
- 门诊手术安排界面:添加【计费】按钮

注意事项:
- 需要手动执行SQL脚本:openhis-server-new/sql/add_source_bill_no_to_adm_charge_item.sql
- 术后一站式结算功能待后续开发
This commit is contained in:
2026-02-05 23:47:02 +08:00
parent f3d56bff45
commit 89bf85fd97
117 changed files with 30248 additions and 44 deletions

View File

@@ -0,0 +1,71 @@
-- 创建日结医保结算表
CREATE TABLE IF NOT EXISTS yb_day_end_settlement (
id BIGSERIAL PRIMARY KEY,
settlement_no VARCHAR(64) NOT NULL,
settlement_date DATE NOT NULL,
settlement_type VARCHAR(20) DEFAULT 'daily',
insurance_type VARCHAR(50),
total_visits INTEGER DEFAULT 0,
total_amount NUMERIC(15,2) DEFAULT 0.00,
insurance_pay_amount NUMERIC(15,2) DEFAULT 0.00,
account_pay_amount NUMERIC(15,2) DEFAULT 0.00,
personal_pay_amount NUMERIC(15,2) DEFAULT 0.00,
fund_pay_sum_amount NUMERIC(15,2) DEFAULT 0.00,
status CHAR(1) DEFAULT '0',
operator VARCHAR(50),
remark VARCHAR(500),
create_by VARCHAR(64),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_by VARCHAR(64),
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 添加注释
COMMENT ON TABLE yb_day_end_settlement IS '日结医保结算表';
COMMENT ON COLUMN yb_day_end_settlement.settlement_no IS '结算单号';
COMMENT ON COLUMN yb_day_end_settlement.settlement_date IS '结算日期';
COMMENT ON COLUMN yb_day_end_settlement.settlement_type IS '结算类型 (daily, weekly, monthly)';
COMMENT ON COLUMN yb_day_end_settlement.insurance_type IS '医保类型 (urbanEmployee, urbanRuralResident, newRuralCooperative, selfPaid)';
COMMENT ON COLUMN yb_day_end_settlement.total_visits IS '总人次';
COMMENT ON COLUMN yb_day_end_settlement.total_amount IS '总金额';
COMMENT ON COLUMN yb_day_end_settlement.insurance_pay_amount IS '医保统筹支付金额';
COMMENT ON COLUMN yb_day_end_settlement.account_pay_amount IS '个人账户支付金额';
COMMENT ON COLUMN yb_day_end_settlement.personal_pay_amount IS '个人自付金额';
COMMENT ON COLUMN yb_day_end_settlement.fund_pay_sum_amount IS '医保基金支付总额';
COMMENT ON COLUMN yb_day_end_settlement.status IS '状态 (0正常 1停用)';
COMMENT ON COLUMN yb_day_end_settlement.operator IS '操作员';
COMMENT ON COLUMN yb_day_end_settlement.remark IS '备注';
COMMENT ON COLUMN yb_day_end_settlement.create_by IS '创建者';
COMMENT ON COLUMN yb_day_end_settlement.create_time IS '创建时间';
COMMENT ON COLUMN yb_day_end_settlement.update_by IS '更新者';
COMMENT ON COLUMN yb_day_end_settlement.update_time IS '更新时间';
-- 创建索引
CREATE INDEX IF NOT EXISTS idx_settlement_date ON yb_day_end_settlement(settlement_date);
CREATE INDEX IF NOT EXISTS idx_settlement_no ON yb_day_end_settlement(settlement_no);
CREATE INDEX IF NOT EXISTS idx_settlement_type ON yb_day_end_settlement(settlement_type);
CREATE INDEX IF NOT EXISTS idx_insurance_type ON yb_day_end_settlement(insurance_type);
-- 创建更新时间函数(如果不存在)
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.update_time = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ language 'plpgsql';
-- 创建更新时间触发器
DO $$
BEGIN
DROP TRIGGER IF EXISTS update_yb_day_end_settlement_modtime ON yb_day_end_settlement;
CREATE TRIGGER update_yb_day_end_settlement_modtime
BEFORE UPDATE ON yb_day_end_settlement
FOR EACH ROW EXECUTE FUNCTION update_modified_column();
END $$;
-- 插入示例数据
INSERT INTO yb_day_end_settlement (settlement_no, settlement_date, settlement_type, insurance_type, total_visits, total_amount, insurance_pay_amount, account_pay_amount, personal_pay_amount, fund_pay_sum_amount, status, operator, remark, create_by) VALUES
('YBDS20260202001', '2026-02-02', 'daily', 'urbanEmployee', 150, 150000.00, 120000.00, 15000.00, 15000.00, 135000.00, '0', 'admin', '2026年2月2日城镇职工医保日结', 'admin'),
('YBDS20260202002', '2026-02-02', 'daily', 'urbanRuralResident', 80, 80000.00, 64000.00, 8000.00, 8000.00, 72000.00, '0', 'admin', '2026年2月2日城乡居民医保日结', 'admin'),
('YBDS20260202003', '2026-02-02', 'daily', 'newRuralCooperative', 60, 60000.00, 48000.00, 6000.00, 6000.00, 54000.00, '0', 'admin', '2026年2月2日新农合医保日结', 'admin');