Update PelayananPasienServiceImpl.java

Perbaikan aturan remunerasi di logbook dokter remun baru
This commit is contained in:
Salman Manoe 2023-05-30 00:18:36 +07:00
parent 0154c11f94
commit 3544e5c0d0

View File

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