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 c8c6483d..b0c0d997 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 @@ -464,6 +464,37 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel Double persenTindakan = Double.parseDouble(GetSettingDataFixed("persenRemunTindakanDokter").toString()); Double persenTarifJasaBedah = Double.parseDouble(GetSettingDataFixed("persenTarifJasaBedah").toString()); Double persenTarifJasaICU = Double.parseDouble(GetSettingDataFixed("persenTarifJasaICU").toString()); + /* + * Persiapan filter logic remunerasi + */ + List listDetailJenisProduk = new ArrayList<>(); + List listDetailJenisProdukException = new ArrayList<>(); + List drKkPediatrikGDList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PEDIATRIK_GD); + List drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_UMUM); + List drKkPerinatologiList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PERINATOLOGI); + List laboranRadiologList = mapPegawaiLaboratRadiologiDao.findPegawaiLaboranRadiolog(); + List idsRegDJPAdminNonPK = splitDataSettingDatafixed("admin_nonpk"); + List idsRegDJPMedisUtama = splitDataSettingDatafixed("medis_utama"); + List idsRegDJPPenunjangPA = splitDataSettingDatafixed("penunjang_pa"); + List idsRegDJPPenunjangPK = splitDataSettingDatafixed("penunjang_pk"); + List idsRegDJPPenunjangRad = splitDataSettingDatafixed("penunjang_radiologi"); + List idsDokterUmumIGD = splitDataSettingDatafixed("pr_dokter_umum_igd"); + List idsDokterPerinatologi = splitDataSettingDatafixed("pr_dokter_perinatologi"); + List idsDokterBPJSffs = splitDataSettingDatafixed("dokterBPJSffs"); + List idsDokterPediatrikGD = splitDataSettingDatafixed("pr_dokter_pediatrik_gd"); + if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_ANATOMI).contains(idPegawai)) { + listDetailJenisProduk = idsRegDJPPenunjangPA; + } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_KLINIK).contains(idPegawai)) { + listDetailJenisProduk = idsRegDJPPenunjangPK; + } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_RADIOLOGI).contains(idPegawai)) { + listDetailJenisProduk = idsRegDJPPenunjangRad; + } else { + listDetailJenisProduk = idsRegDJPMedisUtama; + } + if (laboranRadiologList.contains(idPegawai)) { + listDetailJenisProdukException = idsRegDJPAdminNonPK; + listDetailJenisProdukException.removeAll(listDetailJenisProduk); + } /* * Mendapatkan data mentah pelayanan pasien */ @@ -570,51 +601,60 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } } /* - * Filter visite untuk pasien BPJS hanya diambil maksimal 1 kali di luar - * ICU dan NICU per hari per dokter + * Filter visite untuk pasien BPJS hanya diambil maksimal 1 kali per + * registrasi pasien di luar dokter-dokter kk eria */ 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"), - Comparator.nullsLast(Comparator.naturalOrder()))) - .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) { - if (CommonUtil.isNotNullOrEmpty(b.get("tglPelayanan"))) { - 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()); - } + if (!drKkPediatrikGDList.contains(idPegawai)) { + /* + * Dapatkan semua pendaftaran BPJS untuk visite di luar + * dokter-dokter kk eria + */ + List> listEpisode = new ArrayList<>(); + for (Map d : rawDataBpjs1) { + if (Master.GolonganProduk.VISIT.equals(d.get("idGolonganProduk"))) { + boolean existEpisode = false; + for (Map e : listEpisode) + if (e.get("id").toString().equals(d.get("idPasienDaftar"))) + existEpisode = true; + if (!existEpisode) { + Map episode = new HashMap<>(); + episode.put("id", d.get("idPasienDaftar")); + episode.put("count", 1); + listEpisode.add(episode); } } - 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")) - && listIdPelayananPasien.contains(d.get("idPelayananPasien").toString())) { + } + /* + * Assign to next new collection + */ + int maxVisit = 1; + for (Map d : rawDataBpjs1) { + int count = 1; + for (Map e : listEpisode) + if (Master.GolonganProduk.VISIT.equals(d.get("idGolonganProduk"))) { + if (d.get("idPasienDaftar").equals(e.get("id")) && e.get("count").equals(maxVisit)) { + rawDataBpjs2.add(d); + count = Integer.parseInt(e.get("count").toString()); + count++; + e.put("count", count); + break; + } + } else { + break; + } + if (!Master.GolonganProduk.VISIT.equals(d.get("idGolonganProduk")) && count == 1) 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); - } + } + } else { + rawDataBpjs2.addAll(rawDataBpjs1); } /* - * Filter visite untuk pasien BPJS hanya diambil maksimal 2 kali di ICU - * dan NICU per hari per dokter + * Filter visite untuk pasien BPJS hanya diambil maksimal 2 kali per + * hari per dokter kk eria */ List> rawDataBpjs3 = new ArrayList<>(); - { + if (drKkPediatrikGDList.contains(idPegawai)) { List> visitBpjs = rawDataBpjs2.stream() .filter(d -> (Master.Ruangan.ICU_PICU.equals(d.get("idRuangan")) || Master.Ruangan.NICU.equals(d.get("idRuangan"))) @@ -651,6 +691,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel || !Master.GolonganProduk.VISIT.equals(d.get("idGolonganProduk"))) { rawDataBpjs3.add(d); } + } else { + rawDataBpjs3.addAll(rawDataBpjs2); } /* * Dapatkan semua pendaftaran non-jkn @@ -659,7 +701,11 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel for (Map d : listData) { if (!Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(d.get("idKelompokPasien")) && Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))) { - if (!listEpisode.contains(d.get("idPasienDaftar"))) { + boolean existEpisode = false; + for (Map e : listEpisode) + if (e.get("id").toString().equals(d.get("idPasienDaftar"))) + existEpisode = true; + if (!existEpisode) { Map episode = new HashMap<>(); episode.put("id", d.get("idPasienDaftar")); episode.put("count", 1); @@ -881,37 +927,6 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel listDataLuarJamKerja.forEach(pelayanan -> { queuePelayanan.offer(pelayanan); }); - /* - * Persiapan filter logic remunerasi - */ - List listDetailJenisProduk = new ArrayList<>(); - List listDetailJenisProdukException = new ArrayList<>(); - List drKkPediatrikGDList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PEDIATRIK_GD); - List drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_UMUM); - List drKkPerinatologiList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PERINATOLOGI); - List laboranRadiologList = mapPegawaiLaboratRadiologiDao.findPegawaiLaboranRadiolog(); - List idsRegDJPAdminNonPK = splitDataSettingDatafixed("admin_nonpk"); - List idsRegDJPMedisUtama = splitDataSettingDatafixed("medis_utama"); - List idsRegDJPPenunjangPA = splitDataSettingDatafixed("penunjang_pa"); - List idsRegDJPPenunjangPK = splitDataSettingDatafixed("penunjang_pk"); - List idsRegDJPPenunjangRad = splitDataSettingDatafixed("penunjang_radiologi"); - List idsDokterUmumIGD = splitDataSettingDatafixed("pr_dokter_umum_igd"); - List idsDokterPerinatologi = splitDataSettingDatafixed("pr_dokter_perinatologi"); - List idsDokterBPJSffs = splitDataSettingDatafixed("dokterBPJSffs"); - List idsDokterPediatrikGD = splitDataSettingDatafixed("pr_dokter_pediatrik_gd"); - if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_ANATOMI).contains(idPegawai)) { - listDetailJenisProduk = idsRegDJPPenunjangPA; - } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_KLINIK).contains(idPegawai)) { - listDetailJenisProduk = idsRegDJPPenunjangPK; - } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_RADIOLOGI).contains(idPegawai)) { - listDetailJenisProduk = idsRegDJPPenunjangRad; - } else { - listDetailJenisProduk = idsRegDJPMedisUtama; - } - if (laboranRadiologList.contains(idPegawai)) { - listDetailJenisProdukException = idsRegDJPAdminNonPK; - listDetailJenisProdukException.removeAll(listDetailJenisProduk); - } /* * Memisahkan data diurutkan menjadi logbook remun dan logbook ffs */ @@ -976,8 +991,17 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel */ listPelayananRemun.add(next); capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); - } else if (!Arrays.asList(Master.JenisProduk.NONTINDAKAN) - .contains(next.get("idJenisProduk"))) { + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(next.get("idDepartemen")) + || (Master.Departemen.RAWAT_INAP.equals(next.get("idDepartemen")) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(next.get("idRuangan")) + && (Master.GolonganProduk.VISIT.equals(next.get("idGolonganProduk")) + || Master.GolonganProduk.KONSULTASI + .equals(next.get("idGolonganProduk")))) + || Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN_UTAMA) + .contains(next.get("idDepartemen")) + || !Arrays.asList(Master.JenisProduk.NONTINDAKAN) + .contains(next.get("idJenisProduk"))) { listPelayananRemun.add(next); capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); } @@ -1012,8 +1036,17 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel */ listPelayananRemun.add(next); capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); - } else if (!Arrays.asList(Master.JenisProduk.NONTINDAKAN) - .contains(next.get("idJenisProduk"))) { + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(next.get("idDepartemen")) + || (Master.Departemen.RAWAT_INAP.equals(next.get("idDepartemen")) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(next.get("idRuangan")) + && (Master.GolonganProduk.VISIT.equals(next.get("idGolonganProduk")) + || Master.GolonganProduk.KONSULTASI + .equals(next.get("idGolonganProduk")))) + || Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN_UTAMA) + .contains(next.get("idDepartemen")) + || !Arrays.asList(Master.JenisProduk.NONTINDAKAN) + .contains(next.get("idJenisProduk"))) { listPelayananRemun.add(next); capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); } @@ -1060,8 +1093,17 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel */ listPelayananRemun.add(next); capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); - } else if (!Arrays.asList(Master.JenisProduk.NONTINDAKAN) - .contains(next.get("idJenisProduk"))) { + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(next.get("idDepartemen")) + || (Master.Departemen.RAWAT_INAP.equals(next.get("idDepartemen")) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(next.get("idRuangan")) + && (Master.GolonganProduk.VISIT.equals(next.get("idGolonganProduk")) + || Master.GolonganProduk.KONSULTASI + .equals(next.get("idGolonganProduk")))) + || Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN_UTAMA) + .contains(next.get("idDepartemen")) + || !Arrays.asList(Master.JenisProduk.NONTINDAKAN) + .contains(next.get("idJenisProduk"))) { listPelayananRemun.add(next); capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); } @@ -1096,8 +1138,17 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel */ listPelayananRemun.add(next); capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); - } else if (!Arrays.asList(Master.JenisProduk.NONTINDAKAN) - .contains(next.get("idJenisProduk"))) { + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(next.get("idDepartemen")) + || (Master.Departemen.RAWAT_INAP.equals(next.get("idDepartemen")) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(next.get("idRuangan")) + && (Master.GolonganProduk.VISIT.equals(next.get("idGolonganProduk")) + || Master.GolonganProduk.KONSULTASI + .equals(next.get("idGolonganProduk")))) + || Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN_UTAMA) + .contains(next.get("idDepartemen")) + || !Arrays.asList(Master.JenisProduk.NONTINDAKAN) + .contains(next.get("idJenisProduk"))) { listPelayananRemun.add(next); capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); } @@ -1140,8 +1191,17 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * bebas klaim */ listPelayananFfs.add(next); - } else if (!Arrays.asList(Master.JenisProduk.NONTINDAKAN) - .contains(next.get("idJenisProduk"))) { + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(next.get("idDepartemen")) + || (Master.Departemen.RAWAT_INAP.equals(next.get("idDepartemen")) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(next.get("idRuangan")) + && (Master.GolonganProduk.VISIT.equals(next.get("idGolonganProduk")) + || Master.GolonganProduk.KONSULTASI + .equals(next.get("idGolonganProduk")))) + || Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN_UTAMA) + .contains(next.get("idDepartemen")) + || !Arrays.asList(Master.JenisProduk.NONTINDAKAN) + .contains(next.get("idJenisProduk"))) { listPelayananFfs.add(next); } } else if (!listDetailJenisProduk.contains(next.get("idDetailJenisProduk")) @@ -1172,8 +1232,17 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * bebas klaim */ listPelayananFfs.add(next); - } else if (!Arrays.asList(Master.JenisProduk.NONTINDAKAN) - .contains(next.get("idJenisProduk"))) { + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(next.get("idDepartemen")) + || (Master.Departemen.RAWAT_INAP.equals(next.get("idDepartemen")) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(next.get("idRuangan")) + && (Master.GolonganProduk.VISIT.equals(next.get("idGolonganProduk")) + || Master.GolonganProduk.KONSULTASI + .equals(next.get("idGolonganProduk")))) + || Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN_UTAMA) + .contains(next.get("idDepartemen")) + || !Arrays.asList(Master.JenisProduk.NONTINDAKAN) + .contains(next.get("idJenisProduk"))) { listPelayananFfs.add(next); } } @@ -1551,7 +1620,11 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel for (Map d : listData) { if (!Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(d.get("idKelompokPasien")) && Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))) { - if (!listEpisode.contains(d.get("idPasienDaftar"))) { + boolean existEpisode = false; + for (Map e : listEpisode) + if (e.get("id").toString().equals(d.get("idPasienDaftar"))) + existEpisode = true; + if (!existEpisode) { Map episode = new HashMap<>(); episode.put("id", d.get("idPasienDaftar")); episode.put("count", 1);