diff --git a/src/main/java/com/divudi/bean/common/SearchController.java b/src/main/java/com/divudi/bean/common/SearchController.java index 24490b1552..2f4ab1ba48 100644 --- a/src/main/java/com/divudi/bean/common/SearchController.java +++ b/src/main/java/com/divudi/bean/common/SearchController.java @@ -2780,6 +2780,16 @@ public double getOpdSaleSummaryDiscountTotal() { .sum(); } + public double getOpdSaleSummaryServiceChargeTotal() { + if (opdSaleSummaryDtos == null || opdSaleSummaryDtos.isEmpty()) { + return 0.0; + } + return opdSaleSummaryDtos.stream() + .filter(dto -> dto.getServiceCharge() != null) + .mapToDouble(OpdSaleSummaryDTO::getServiceCharge) + .sum(); + } + public int getOpdAnalyticsIndex() { return opdAnalyticsIndex; } diff --git a/src/main/java/com/divudi/core/data/dto/OpdSaleSummaryDTO.java b/src/main/java/com/divudi/core/data/dto/OpdSaleSummaryDTO.java index 0ccb3d9046..9ab16897d9 100644 --- a/src/main/java/com/divudi/core/data/dto/OpdSaleSummaryDTO.java +++ b/src/main/java/com/divudi/core/data/dto/OpdSaleSummaryDTO.java @@ -29,6 +29,10 @@ public class OpdSaleSummaryDTO implements Serializable { private String bhtNo; private String patientName; + // Service charge (issue #22050): inward margin (BillItem.marginValue) added on top + // of the gross amount. Net = Gross + Service Charge - Discount. Zero for OPD rows. + private Double serviceCharge = 0.0; + public OpdSaleSummaryDTO() { } @@ -98,6 +102,23 @@ public OpdSaleSummaryDTO(Long categoryId, String categoryName, this.patientName = patientName; } + // NEW (issue #22050): Per-billing-instance constructor with the service charge + // (inward margin). Delegates to the #21920 per-instance constructor. + public OpdSaleSummaryDTO(Long categoryId, String categoryName, + Long itemId, String itemName, + Long billItemId, Date billedDate, + String bhtNo, String patientName, + Long itemCount, + Double hospitalFee, Double professionalFee, + Double grossAmount, Double discountAmount, + Double netTotal, + Double serviceCharge) { + this(categoryId, categoryName, itemId, itemName, billItemId, billedDate, + bhtNo, patientName, itemCount, + hospitalFee, professionalFee, grossAmount, discountAmount, netTotal); + this.serviceCharge = serviceCharge != null ? serviceCharge : 0.0; + } + public String getCategoryName() { return categoryName; } @@ -217,4 +238,12 @@ public String getPatientName() { public void setPatientName(String patientName) { this.patientName = patientName; } + + public Double getServiceCharge() { + return serviceCharge; + } + + public void setServiceCharge(Double serviceCharge) { + this.serviceCharge = serviceCharge; + } } diff --git a/src/main/java/com/divudi/service/BillService.java b/src/main/java/com/divudi/service/BillService.java index de25bfcbfa..8a18ff4783 100644 --- a/src/main/java/com/divudi/service/BillService.java +++ b/src/main/java/com/divudi/service/BillService.java @@ -3297,7 +3297,8 @@ public List fetchItemizedServiceInstanceDTOs(Date fromDate, + " bi.staffFee," + " bi.grossValue," + " bi.discount," - + " bi.netValue" + + " bi.netValue," + + " bi.marginValue" // Service charge (issue #22050) — inverted on cancellation items like the other values + ") " // All LEFT JOINs: item/category and patientEncounter/patient may be null on // some rows. A path expression (e.g. bi.item.category.id or b.patientEncounter.bhtNo) diff --git a/src/main/webapp/inward/inward_itemized_service_summary_dto.xhtml b/src/main/webapp/inward/inward_itemized_service_summary_dto.xhtml index ea082c6888..938670d7ba 100644 --- a/src/main/webapp/inward/inward_itemized_service_summary_dto.xhtml +++ b/src/main/webapp/inward/inward_itemized_service_summary_dto.xhtml @@ -199,6 +199,17 @@ + + + + + + + + + + +