From cec06a965a8d32ba928f9c72d26dac8280b0914e Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Fri, 12 May 2023 15:28:35 +0700 Subject: [PATCH] Update PelayananPasienServiceImpl.java Penerapan aturan icu dan nicu pasien bpjs visite maksimal 2 kali sehari di logbook dokter remun baru --- .../impl/PelayananPasienServiceImpl.java | 45 +++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java index 4c014e96..6ebcc982 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java @@ -551,8 +551,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } } /* - * Filter visite untuk pasien BPJS hanya diambil 1 kali di luar ICU dan - * NICU per hari per dokter + * Filter visite untuk pasien BPJS hanya diambil maksimal 1 kali di luar + * ICU dan NICU per hari per dokter */ List> rawDataBpjs2 = new ArrayList<>(); { @@ -586,6 +586,45 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel rawDataBpjs2.add(d); } } + /* + * Filter visite untuk pasien BPJS hanya diambil maksimal 2 kali di ICU + * dan NICU per hari per dokter + */ + List> rawDataBpjs3 = new ArrayList<>(); + { + List> visitBpjs = rawDataBpjs2.stream() + .filter(d -> (Master.Ruangan.ICU_PICU.equals(d.get("idRuangan")) + || Master.Ruangan.NICU.equals(d.get("idRuangan"))) + && Master.GolonganProduk.VISIT.equals(d.get("idGolonganProduk"))) + .sorted(Comparator.comparing(o -> (Date) o.get("tglPelayanan"))).collect(Collectors.toList()); + List listIdPelayananPasien = new ArrayList<>(); + List listLocalDate = new ArrayList<>(); + LocalDate startDate = tglAwal.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate endDate = tglAkhir.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + for (LocalDate dateDay = startDate; dateDay.isBefore(endDate); dateDay = dateDay.plusDays(1)) { + int count = 1; + for (Map b : visitBpjs) { + LocalDate sDate = ((Date) b.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) + .toLocalDate(); + if (dateDay.equals(sDate) && !listLocalDate.contains(sDate) && count <= 2) { + listLocalDate.add(sDate); + listIdPelayananPasien.add(b.get("idPelayananPasien").toString()); + count++; + } + } + } + for (Map d : rawDataBpjs2) + if ((Master.Ruangan.ICU_PICU.equals(d.get("idRuangan")) + || Master.Ruangan.NICU.equals(d.get("idRuangan"))) + && Master.GolonganProduk.VISIT.equals(d.get("idGolonganProduk")) + && listIdPelayananPasien.contains(d.get("idPelayananPasien").toString())) { + rawDataBpjs3.add(d); + } else if ((!Master.Ruangan.ICU_PICU.equals(d.get("idRuangan")) + && !Master.Ruangan.NICU.equals(d.get("idRuangan"))) + || !Master.GolonganProduk.VISIT.equals(d.get("idGolonganProduk"))) { + rawDataBpjs3.add(d); + } + } /* * Alokasi data diurutkan dulu untuk jam kerja. Asumsi jam kerja dokter * nonshift @@ -649,7 +688,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Offer data yang sudah diurutkan dalam queue */ Queue> queuePelayanan = new ArrayDeque<>(); - rawDataBpjs2.forEach(pelayanan -> { + rawDataBpjs3.forEach(pelayanan -> { queuePelayanan.offer(pelayanan); }); listDataJamKerja.forEach(pelayanan -> {