/*
 * Copyright ©2023 CJB-CNIT Team. All rights reserved
 */
package com.openhis.web.reportmanage.dto;

import java.math.BigDecimal;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 报表统计 dto
 *
 * @author yuxj
 * @date 2025-09-23
 */
@Data
@Accessors(chain = true)
public class DailyReportStatisticsPageDto {
    // -------------------------- 1. 卫生技术人员统计 --------------------------
    private StaffStatDTO staffStat;

    // -------------------------- 2. 床位与床日统计 --------------------------
    private BedStatDTO bedStat;

    // -------------------------- 3. 收入统计（单位：千元） --------------------------
    private RevenueStatDTO revenueStat;

    // -------------------------- 4. 费用统计（单位：千元） --------------------------
    private ExpenseStatDTO expenseStat;

    // -------------------------- 5. 诊疗与服务量统计 --------------------------
    private TreatmentStatDTO treatmentStat;

    // -------------------------- 6. 死亡人数统计 --------------------------
    private DeathStatDTO deathStat;

    // -------------------------- 7. 健康检查统计 --------------------------
    /** 健康检查人次数 */
    private Integer healthCheckCount;

    // ======================== 1. 卫生技术人员统计（单位：人） ========================
    @Data
    @Accessors(chain = true)
    public static class StaffStatDTO {
        /**
         * 卫生技术人员总数
         */
        private Integer totalMedicalStaff;
        /**
         * 执业（助理）医师总数
         */
        private Integer totalPracticingDoctor;
        /**
         * 中医执业（助理）医师数
         */
        private Integer tcmPracticingDoctor;
        /**
         * 注册护士数
         */
        private Integer registeredNurse;
    }

    // ======================== 2. 床位与床日统计 ========================
    @Data
    @Accessors(chain = true)
    public static class BedStatDTO {
        /** 实有床位（单位：张） */
        private Integer actualBedCount;
        /** 实际开放总床日数 */
        private Integer totalOpenBedDays;
        /** 实际占用总床日数 */
        private Integer totalOccupiedBedDays;
        /** 出院者占用总床日数 */
        private Integer dischargedBedDays;
    }

    // ======================== 3. 收入统计（单位：千元） ========================
    @Data
    @Accessors(chain = true)
    public static class RevenueStatDTO {
        /** 总收入 */
        private BigDecimal totalRevenue;
        /** 医疗收入合计 */
        private BigDecimal totalMedicalRevenue;
        // 门急诊收入细分
        /** 门急诊收入合计 */
        private BigDecimal totalOutpatientRevenue;
        /** 挂号收入 */
        private BigDecimal outpatientRegistrationRevenue;
        /** 诊察收入（门急诊） */
        private BigDecimal outpatientConsultationRevenue;
        /** 检查收入（门急诊） */
        private BigDecimal outpatientInspectionRevenue;
        /** 化验收入（门急诊） */
        private BigDecimal outpatientLabTestRevenue;
        /** 治疗收入（门急诊） */
        private BigDecimal outpatientTreatmentRevenue;
        /** 手术收入（门急诊） */
        private BigDecimal outpatientSurgeryRevenue;
        /** 卫生材料收入（门急诊） */
        private BigDecimal outpatientMedicalMaterialRevenue;
        // 药品收入细分
        /** 药品收入合计 */
        private BigDecimal outpatientTotalDrugRevenue;
        /** 西药收入合计 */
        private BigDecimal outpatientTotalWesternDrugRevenue;
        /** 疫苗收入（西药下） */
        private BigDecimal outpatientVaccineRevenue;
        /** 中成药收入 */
        private BigDecimal outpatientChinesePatentDrugRevenue;
        /** 中药饮片收入 */
        private BigDecimal outpatientChineseHerbRevenue;
        /** 其他门诊收入 */
        private BigDecimal otherOutpatientRevenue;
        // 住院收入细分
        /** 住院收入合计 */
        private BigDecimal totalInpatientRevenue;
        /** 床位收入（住院） */
        private BigDecimal inpatientBedRevenue;
        /** 诊察收入（住院） */
        private BigDecimal inpatientConsultationRevenue;
        /** 检查收入（住院） */
        private BigDecimal inpatientInspectionRevenue;
        /** 化验收入（住院） */
        private BigDecimal inpatientLabTestRevenue;
        /** 治疗收入（住院） */
        private BigDecimal inpatientTreatmentRevenue;
        /** 手术收入（住院） */
        private BigDecimal inpatientSurgeryRevenue;
        /** 护理收入（住院） */
        private BigDecimal inpatientNursingRevenue;
        /** 卫生材料收入（住院） */
        private BigDecimal inpatientMedicalMaterialRevenue;
        // 药品收入细分（门急诊+住院共用统计维度，无单独区分则合并）
        /** 药品收入合计 */
        private BigDecimal inpatientTotalDrugRevenue;
        /** 西药收入合计 */
        private BigDecimal inpatientTotalWesternDrugRevenue;
        /** 疫苗收入（西药下） */
        private BigDecimal inpatientVaccineRevenue;
        /** 中成药收入 */
        private BigDecimal inpatientChinesePatentDrugRevenue;
        /** 中药饮片收入 */
        private BigDecimal inpatientChineseHerbRevenue;
        /** 其他住院收入 */
        private BigDecimal otherInpatientRevenue;
        /** 结算差额 */
        private BigDecimal settlementDifference;
    }

    // ======================== 4. 费用统计（单位：千元） ========================
    @Data
    @Accessors(chain = true)
    public static class ExpenseStatDTO {
        /** 总费用 */
        private BigDecimal totalExpense;
        /** 业务活动费用合计 */
        private BigDecimal totalBusinessActivityExpense;
        /** 药品费合计（业务活动费用下） */
        private BigDecimal totalDrugExpense;
        /** 中药饮片费用（药品费下） */
        private BigDecimal chineseHerbExpense;
        /** 卫生材料费（业务活动费用下） */
        private BigDecimal medicalMaterialExpense;
        /** 单位管理费用 */
        private BigDecimal unitManagementExpense;
        /** 其他费用 */
        private BigDecimal otherExpense;
        /** 公共卫生支出 */
        private BigDecimal publicHealthExpense;
    }

    // ======================== 5. 诊疗与服务量统计 ========================
    @Data
    @Accessors(chain = true)
    public static class TreatmentStatDTO {
        /** 总诊疗人次数 */
        private Integer totalTreatmentCount;
        /** 门诊和急诊人次数合计 */
        private Integer totalOutpatientEmergencyCount;
        /** 预约门诊人次数 */
        private Integer reservedOutpatientCount;
        /** 网上预约门诊人次数 */
        private Integer onlineReservedOutpatientCount;
        /** 普通门诊人次数 */
        private Integer generalOutpatientCount;
        /** 中医诊疗人次数 */
        private Integer tcmTreatmentCount;
        /** 急诊人次数 */
        private Integer emergencyCount;
        /** 发热门诊人次数 */
        private Integer feverClinicCount;
        /** 互联网诊疗服务人次数 */
        private Integer internetTreatmentCount;
        /** 远程医疗服务人次数 */
        private Integer telemedicineCount;
        /** 出院人次数 */
        private Integer dischargedCount;
    }

    // ======================== 6. 死亡人数统计 ========================
    @Data
    @Accessors(chain = true)
    public static class DeathStatDTO {
        /** 总死亡人数 */
        private Integer totalDeathCount;
        /** 急诊死亡人数 */
        private Integer emergencyDeathCount;
        /** 住院死亡人数 */
        private Integer inpatientDeathCount;
        /** 观察室死亡人数 */
        private Integer observationRoomDeathCount;
    }

}
