From 9b118ea556b34236a40fe92e2068793da7f9f458 Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Fri, 12 May 2023 08:42:06 +0700 Subject: [PATCH] Update service pelayanan pasien Penerapan aturan maksimal visit bpjs 1 kali per hari di logbook dokter remun baru --- .../medifirst2000/constants/Master.java | 4 +- .../medifirst2000/dao/PelayananPasienDao.java | 8 +- .../impl/PelayananPasienServiceImpl.java | 80 +++++++++++++------ 3 files changed, 61 insertions(+), 31 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java index 93d40c2c..616e6e8a 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java @@ -371,7 +371,9 @@ public class Master { public static final Integer[] PERISTI = { 45, 75, 76, 463, 464 }; public static final Integer[] TANJUNG = { 72, 551 }; - public static final Integer ICU = 328; + public static final Integer ICU_PICU = 328; + public static final Integer MICU = 464; + public static final Integer NICU = 75; public static final int KLINIK_FALSE_EMERGENCY = 309; public static final int KLINIK_GIGI_KARYAWAN = 702; diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java index f3fcab97..f69ddd2a 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java @@ -207,8 +207,8 @@ public interface PelayananPasienDao extends PagingAndSortingRepository> pRawDataBpjs0 = rawDataBpjs0.stream() - .filter(d -> Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))) - .sorted(Comparator.comparing(o -> Double.parseDouble(o.get("jumlah").toString()), - Comparator.reverseOrder())) - .sorted(Comparator.comparing(o -> Double.parseDouble(o.get("hargaJual").toString()), - Comparator.reverseOrder())) - .sorted(Comparator.comparing(o -> o.get("idPasienDaftar").toString())).collect(Collectors.toList()); - List listIdPelayananPasien = new ArrayList<>(); - List listIdPasienDaftar = new ArrayList<>(); - for (Map b : pRawDataBpjs0) - if (!listIdPasienDaftar.contains(b.get("idPasienDaftar"))) { - listIdPasienDaftar.add(b.get("idPasienDaftar").toString()); - listIdPelayananPasien.add(b.get("idPelayananPasien").toString()); - } List> rawDataBpjs1 = new ArrayList<>(); - for (Map d : rawDataBpjs0) { - if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen")) - && listIdPelayananPasien.contains(d.get("idPelayananPasien").toString())) { - rawDataBpjs1.add(d); - } else if (!Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))) { - rawDataBpjs1.add(d); - } + { + List> bpjsBedahSentral = rawDataBpjs0.stream() + .filter(d -> Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))) + .sorted(Comparator.comparing(o -> Double.parseDouble(o.get("jumlah").toString()), + Comparator.reverseOrder())) + .sorted(Comparator.comparing(o -> Double.parseDouble(o.get("hargaJual").toString()), + Comparator.reverseOrder())) + .sorted(Comparator.comparing(o -> o.get("idPasienDaftar").toString())).collect(Collectors.toList()); + List listIdPelayananPasien = new ArrayList<>(); + List listIdPasienDaftar = new ArrayList<>(); + for (Map b : bpjsBedahSentral) + if (!listIdPasienDaftar.contains(b.get("idPasienDaftar"))) { + listIdPasienDaftar.add(b.get("idPasienDaftar").toString()); + listIdPelayananPasien.add(b.get("idPelayananPasien").toString()); + } + for (Map d : rawDataBpjs0) + if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen")) + && listIdPelayananPasien.contains(d.get("idPelayananPasien").toString())) { + rawDataBpjs1.add(d); + } else if (!Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))) { + rawDataBpjs1.add(d); + } } /* * Filter visite untuk pasien BPJS hanya diambil 1 kali di luar ICU dan * NICU per hari per dokter */ - List> pRawDataBpjs1 = rawDataBpjs1.stream() - .filter(d -> !Master.Ruangan.ICU_PICU.equals(d.get("idRuangan")) + List> rawDataBpjs2 = new ArrayList<>(); + { + List> visitBpjs = rawDataBpjs1.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)) + for (Map b : visitBpjs) { + LocalDate sDate = ((Date) b.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) + .toLocalDate(); + if (dateDay.equals(sDate) && !listLocalDate.contains(sDate)) { + listLocalDate.add(sDate); + listIdPelayananPasien.add(b.get("idPelayananPasien").toString()); + } + } + for (Map d : rawDataBpjs1) + if (!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()); + && Master.GolonganProduk.VISIT.equals(d.get("idGolonganProduk")) + && listIdPelayananPasien.contains(d.get("idPelayananPasien").toString())) { + rawDataBpjs2.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"))) { + rawDataBpjs2.add(d); + } + } /* * Alokasi data diurutkan dulu untuk jam kerja. Asumsi jam kerja dokter * nonshift @@ -621,7 +649,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Offer data yang sudah diurutkan dalam queue */ Queue> queuePelayanan = new ArrayDeque<>(); - rawDataBpjs1.forEach(pelayanan -> { + rawDataBpjs2.forEach(pelayanan -> { queuePelayanan.offer(pelayanan); }); listDataJamKerja.forEach(pelayanan -> {