# HIS-GUI 支付系统集成指南 ## 概述 本指南介绍了如何在HIS-GUI医院管理信息系统中集成和使用支付系统。支付系统完整支持患者挂号、检查、用药等所有付费操作的支付流程,并能够自动生成结算单和提供管理员管理界面。 ## 系统架构 ### 数据模型 - **Payment**(支付记录):记录每一次支付操作,包括患者ID、金额、支付方式、支付时间等 - **Settlement**(结算单):包含患者的所有费用明细和支付信息,在患者出院时生成 - **SettlementItem**(结算项目):结算单中的单条费用记录 ### 核心服务 - **PaymentService**:处理支付操作(创建、查询、更新状态等) - **SettlementService**:管理结算单的生成、修改、计算费用等 - **PaymentManagementService**:为管理员提供支付统计、报表生成等功能 ### UI组件 - **PaymentDialog**:支付对话框,在用户进行付费操作时弹出 - **PaymentManagementDialog**:管理员支付管理界面,查看所有支付记录和生成报表 - **SettlementDialog**:结算单查看和管理界面 ## 使用指南 ### 1. 在挂号时集成支付 ```cpp // 在挂号对话框中 #include "gui/payment_dialog.h" void RegistrationDialog::onRegister() { // ... 挂号逻辑 ... double registrationFee = 50.0; // 挂号费50元 PaymentDialog paymentDlg(core_); paymentDlg.setPaymentInfo( QString::fromStdString(patientID), QString::fromStdString(patientName), "挂号", registrationFee ); if (paymentDlg.exec() == QDialog::Accepted && paymentDlg.isPaymentSuccessful()) { QString paymentID = paymentDlg.getPaymentID(); // 保存支付记录ID到挂号记录中 // ... QMessageBox::information(this, "成功", "挂号成功,支付ID: " + paymentID); } else { QMessageBox::warning(this, "失败", "支付失败,挂号未完成"); } } ``` ### 2. 在检查时集成支付 ```cpp void CheckDialog::onSubmitCheck() { // ... 检查操作逻辑 ... double checkFee = 200.0; // 检查费200元 PaymentDialog paymentDlg(core_); paymentDlg.setPaymentInfo( QString::fromStdString(patientID), QString::fromStdString(patientName), "检查", checkFee ); if (paymentDlg.exec() == QDialog::Accepted && paymentDlg.isPaymentSuccessful()) { // 检查费用已支付 saveCheckRecord(); } } ``` ### 3. 在用药时集成支付 ```cpp void MedicineDialog::onDispenseMedicine() { // ... 配药逻辑,计算总费用 ... double medicineFee = 150.0; // 药品费用总计150元 PaymentDialog paymentDlg(core_); paymentDlg.setPaymentInfo( QString::fromStdString(patientID), QString::fromStdString(patientName), "用药", medicineFee ); if (paymentDlg.exec() == QDialog::Accepted && paymentDlg.isPaymentSuccessful()) { // 立即配药 dispenseMedicine(); } } ``` ### 4. 在患者出院时生成结算单 ```cpp void DischargeDialog::onDischargePatient() { std::string settlementID; // 生成结算单 if (core_.settlementService.generateSettlement( patientID, patientName, currentDate, settlementID)) { // 添加所有的费用项 // 挂号费 SettlementItem registrationItem("挂号费", "Registration", registrationOpID, 1, 50.0); core_.settlementService.addItemToSettlement(settlementID, registrationItem); // 检查费 SettlementItem checkItem("CT扫描", "Check", checkOpID, 1, 200.0); core_.settlementService.addItemToSettlement(settlementID, checkItem); // 药品费 SettlementItem medicineItem("抗生素药物", "Medicine", medicineOpID, 10, 15.0); core_.settlementService.addItemToSettlement(settlementID, medicineItem); // 计算总金额 core_.settlementService.calculateSettlement(settlementID); // 显示结算单 SettlementDialog settlementDlg(core_); settlementDlg.displaySettlement(QString::fromStdString(settlementID)); settlementDlg.exec(); } } ``` ### 5. 管理员查看支付记录和生成报表 ```cpp void MainWindow::onOpenPaymentManagement() { PaymentManagementDialog paymentMgmtDlg(core_); paymentMgmtDlg.exec(); } ``` ## 支付流程时序图 ``` 患者 UI 支付系统 数据库 | | | | |--进行付费操作-------->| | | | |--创建支付记录----->| | | |<--返回支付ID------ | | | | | | |<---显示支付对话框-----| | | | | | | |--选择支付方式-------->| | | | |--更新支付状态----->| | |--完成支付----------->| | | | |--保存支付记录------|----写入数据库----->| |<--操作成功-----------| |<-确认写入---------| | | | | ``` ## 结算流程 1. **出院时生成结算单**:系统自动生成结算单,包含所有费用项 2. **计算费用分配**:系统计算医保支付部分和患者自付部分 3. **生成结算报告**:可打印或导出结算单 4. **确认结算**:患者和医院确认结算单,标记为已结算 ## API调用指南 ### PaymentService ```cpp // 创建支付记录 std::string paymentID; core_.paymentService.createPayment( "PATIENT001", // 患者ID 200.0, // 支付金额 PaymentMethod::Cash, // 支付方式 "检查", // 支付类型 "CHECK_001", // 操作ID "CT扫描费用", // 描述 paymentID // 输出参数:支付ID ); // 更新支付状态 core_.paymentService.updatePaymentStatus(paymentID, "Completed"); // 完成支付 core_.paymentService.completePayment(paymentID); // 退款 core_.paymentService.refundPayment(paymentID); // 查询患者总支付金额 double totalPaid = core_.paymentService.getTotalPaymentAmount("PATIENT001"); ``` ### SettlementService ```cpp // 生成结算单 std::string settlementID; core_.settlementService.generateSettlement( "PATIENT001", "张三", "2025-04-06", settlementID ); // 添加费用项 SettlementItem item("检查费", "Check", "CHECK_001", 1, 200.0); core_.settlementService.addItemToSettlement(settlementID, item); // 计算总金额 core_.settlementService.calculateSettlement(settlementID); // 完成结算 core_.settlementService.completeSettlement(settlementID); // 生成结算报告 std::string report = core_.settlementService.generateSettlementReport(settlementID); ``` ### PaymentManagementService ```cpp // 获取支付统计 auto stats = core_.paymentManagementService.getPaymentStatistics(); printf("总收入: %.2f\n", stats.TotalRevenue); printf("已完成支付: %d笔\n", stats.CompletedPayments); // 获取今日统计 auto todayStats = core_.paymentManagementService.getTodayPaymentStatistics(); // 生成报表 std::string dailyReport = core_.paymentManagementService.generateDailyReport("2025-04-06"); std::string monthlyReport = core_.paymentManagementService.generateMonthlyReport("2025-04"); std::string revenueReport = core_.paymentManagementService.generateRevenueReport(); // 处理退款 core_.paymentManagementService.processRefund("PAY_xxx", "患者要求退款"); ``` ## 数据持久化 支付系统的数据自动保存到以下文件: - `/data/payments.txt` - 支付记录 - `/data/settlements.txt` - 结算单 系统启动时会自动加载这些文件。 ## 支付方式 系统支持以下支付方式: - **现金** (Cash) - **信用卡** (CreditCard) - **移动支付** (MobilePayment) - 微信/支付宝等 - **医保** (HealthInsurance) ## 错误处理 ```cpp // 检查支付是否成功 if (paymentDlg.isPaymentSuccessful()) { // 支付成功,继续流程 QString paymentID = paymentDlg.getPaymentID(); } else { // 支付失败,显示错误信息 QMessageBox::warning(this, "支付失败", "请检查支付信息并重试"); } ``` ## 日志查看 支付系统的所有操作都会被记录到日志中。可以通过以下方式查看: ```cpp // 所有日志都会输出到控制台和日志文件 // 位置:logs/his.log ``` ## 常见问题 ### Q: 如何在现有的对话框中添加支付功能? A: 参考上面的集成示例,只需在相应的操作完成后调用PaymentDialog并传入相应参数。 ### Q: 支付记录和结算单有什么区别? A: 支付记录记录的是单次支付操作(如一次挂号费),结算单是患者整个就诊过程中所有费用的汇总。 ### Q: 如何自定义医保支付比例? A: 修改Settlement::calculateTotals()方法中的计算逻辑,默认是50%医保/50%患者支付。 ### Q: 如何处理支付异常? A: PaymentManagementService::getAnomalousPayments()可以获取异常支付记录(金额过大或支付失败)。 ## 扩展建议 1. **添加支付网关集成** - 与第三方支付平台(支付宝、微信等)集成 2. **添加电子发票** - 为每次支付生成电子发票 3. **添加医保对接** - 实时查询医保余额和支付情况 4. **添加分期支付** - 支持分期支付功能 5. **添加发票管理** - 完整的发票管理系统 ## 编译和运行 ```bash mkdir build && cd build cmake .. make ./his_gui ``` 支付系统已完全集成到HIS-GUI中,无需额外配置即可使用。