diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java index 3650e1a5..10093bbb 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java @@ -28,6 +28,8 @@ public interface PelayananPasienService { List> logbookFfsTarifDokter(Integer idPegawai, String bulan); + List> logbookFfsLuarTarifDokter(Integer idPegawai, String bulan); + List> logbookKlaimMppDokter(Integer idPegawai, String bulan); List> logbookFixedPayDokter(Integer idPegawai, String bulan); 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 5989e5f6..9e99f443 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 @@ -1078,6 +1078,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel if (tglPelayanan.isEqual(tglMasuk) && (tglJamMasuk.isBefore(tglJamPelayanan) || tglJamMasuk.isEqual(tglJamPelayanan)) && (tglJamPelayanan.isEqual(tglJamPulang) || tglJamPelayanan.isBefore(tglJamPulang))) { + d.put("isJamKerja", true); listDataJamKerja.add(d); break; } @@ -1104,6 +1105,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel .contains(Integer.parseInt(d.get("idKelompokPasien").toString())))) if (CommonUtil.isNullOrEmpty(j.get("jamMasuk"))) { if (tglPelayanan.isEqual(tglMasuk)) { + d.put("isJamKerja", false); + if ("Reguler".equals(d.get("jenisRuangan").toString())) + d.put("isJamKerja", true); listDataLuarJamKerja.add(d); break; } @@ -1114,6 +1118,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel LocalDateTime tglJamPulang = LocalDateTime.of(tglMasuk, jamPulang); if ((tglPelayanan.isEqual(tglMasuk) && tglJamPelayanan.isBefore(tglJamMasuk)) || (tglPelayanan.isEqual(tglMasuk) && tglJamPelayanan.isAfter(tglJamPulang))) { + d.put("isJamKerja", false); + if ("Reguler".equals(d.get("jenisRuangan").toString())) + d.put("isJamKerja", true); listDataLuarJamKerja.add(d); break; } @@ -1123,6 +1130,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel /* * Tanggal pelayanan null akan dianggap sebagai luar jam kerja */ + d.put("isJamKerja", false); + if ("Reguler".equals(d.get("jenisRuangan").toString())) + d.put("isJamKerja", true); listDataLuarJamKerja.add(d); } } @@ -1138,6 +1148,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel */ List> listPelayananRemun = new ArrayList<>(); List> listPelayananFfs = new ArrayList<>(); + List> listPelayananNonJknLuarJamKerja = new ArrayList<>(); double capaianRemun = 0.0; if (pegawaiDao.getPegawaiByKategoryPegawai(Arrays.asList(DOKTER_LUAR)).contains(idPegawai)) { /* @@ -1151,11 +1162,19 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel /* * dokter-dokter tertentu yang hanya dapat pasien bpjs */ - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } else if (CommonUtil.isNullOrEmpty(next.get("idJenisProduk")) || (CommonUtil.isNotNullOrEmpty(next.get("idJenisProduk")) && !Arrays.asList(NONLOGBOOK) .contains(Integer.parseInt(next.get("idJenisProduk").toString())))) { - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } } else { for (Map next = queuePelayanan.poll(); next != null; next = queuePelayanan.poll()) @@ -1425,7 +1444,11 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel /* * Dibatasi oleh daftar tindakan tertentu */ - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } else if ((CommonUtil.isNotNullOrEmpty(next.get("idDepartemen")) && Arrays.asList(GRUP_RAWAT_JALAN_UTAMA) .contains(Integer.parseInt(next.get("idDepartemen").toString()))) @@ -1437,11 +1460,19 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel /* * Dibatasi hanya di rawat jalan atau visite saja */ - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } } else if (drKkRadiologi.contains(idPegawai) && (BEDAH_SENTRAL.equals(next.get("idDepartemen")) || CATHLAB.equals(next.get("idRuangan")))) { - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } else { /* * Selain dokter-dokter kk pediatrik gawat darurat @@ -1460,12 +1491,20 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * bebas klaim */ if (DOKTER_PEMERIKSA.equals(next.get("idJenisPelaksana"))) - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } else if (CommonUtil.isNullOrEmpty(next.get("idJenisProduk")) || (CommonUtil.isNotNullOrEmpty(next.get("idJenisProduk")) && !Arrays.asList(NONLOGBOOK).contains( Integer.parseInt(next.get("idJenisProduk").toString())))) { - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } } else if ((CommonUtil.isNullOrEmpty(next.get("idDetailJenisProduk")) || (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) @@ -1476,7 +1515,11 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel /* * Aturan dokter ksm umum di igd */ - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } else if ((CommonUtil.isNullOrEmpty(next.get("idDetailJenisProduk")) || (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) && !listDetailJenisProduk.contains( @@ -1487,17 +1530,29 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Aturan dokter kk perinatologi dengan pembatasan * tindakan tertentu */ - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } else if (drAnastesiList.contains(idPegawai)) { if (idsPenunjangBukanAnestesi.contains(Integer.parseInt(next.get("idProduk").toString()))) { /* * Aturan dokter kk anestesi dengan pembatasan * tindakan tertentu */ - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } else if (RADIOLOGI.equals(next.get("idDepartemen")) && DOKTER_PEMERIKSA.equals(next.get("idJenisPelaksana"))) { - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException) && CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) @@ -1515,12 +1570,20 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * bebas klaim */ if (DOKTER_PEMERIKSA.equals(next.get("idJenisPelaksana"))) - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } else if (CommonUtil.isNullOrEmpty(next.get("idJenisProduk")) || (CommonUtil.isNotNullOrEmpty(next.get("idJenisProduk")) && !Arrays.asList(NONLOGBOOK).contains( Integer.parseInt(next.get("idJenisProduk").toString())))) { - listPelayananFfs.add(next); + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } } } } @@ -1528,7 +1591,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } { /* - * Sorting data remun diurutkan + * Sorting data remun jkn diurutkan */ listPelayananRemun = listPelayananRemun.stream() .sorted(Comparator.comparing(o1 -> (Date) o1.get("tglPelayanan"), @@ -1547,7 +1610,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } { /* - * Sorting data ffs diurutkan + * Sorting data remun non-jkn di dalam jam kerja diurutkan */ listPelayananFfs = listPelayananFfs.stream() .sorted(Comparator.comparing(o -> (Date) o.get("tglPelayanan"), @@ -1559,6 +1622,20 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel .sorted(Comparator.comparing(o -> o.get("namaProduk").toString())).collect(Collectors.toList()); result.put("ffs", listPelayananFfs); } + { + /* + * Sorting data remun non-jkn di luar jam kerja diurutkan + */ + listPelayananNonJknLuarJamKerja = listPelayananNonJknLuarJamKerja.stream() + .sorted(Comparator.comparing(o -> (Date) o.get("tglPelayanan"), + Comparator.nullsLast(Comparator.naturalOrder()))) + .sorted(Comparator.comparing(o -> Integer.parseInt(o.get("sortIdKelompokPasien").toString()), + Comparator.nullsLast(Comparator.naturalOrder()))) + .sorted(Comparator.comparing(o -> Integer.parseInt(o.get("sortIdKelas").toString()), + Comparator.nullsLast(Comparator.naturalOrder()))) + .sorted(Comparator.comparing(o -> o.get("namaProduk").toString())).collect(Collectors.toList()); + result.put("ffs-luar", listPelayananNonJknLuarJamKerja); + } { /* * Sorting data klaim mpp diurutkan @@ -2544,6 +2621,261 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel return result; } + @Override + public List> logbookFfsLuarTarifDokter(Integer idPegawai, String bulan) { + List listIdProduk = new ArrayList<>(); + List listPersenJasa = new ArrayList<>(); + List listHargaJasa = new ArrayList<>(); + List listHargaJual = new ArrayList<>(); + List listIdKelompokPasien = new ArrayList<>(); + List listTanggal = new ArrayList<>(); + List listJenisRuangan = new ArrayList<>(); + DateFormat df = new SimpleDateFormat("yyyy-MM"); + Date date; + try { + date = df.parse(bulan); + } catch (ParseException e) { + System.out.println(e.getMessage()); + return null; + } + Locale indonesia = new Locale("in", "ID"); + NumberFormat nf = NumberFormat.getCurrencyInstance(indonesia); + Map remunFfs = this.splitRemunFfs(idPegawai, bulan); + @SuppressWarnings("unchecked") + List> listData = (List>) remunFfs.get("ffs-luar"); + /* + * Mendapatkan persentase jasa + */ + double persenBPJS = Double.parseDouble(GetSettingDataFixed("persenJasaBPJS")); + double persenOperator = Double.parseDouble(GetSettingDataFixed("persenJasaOperatorIBS")); + double persenAsistenIBS = Double.parseDouble(GetSettingDataFixed("persenJasaAsistenIBS")); + double persenAnestesi = Double.parseDouble(GetSettingDataFixed("persenJasaAnestesiIBS")); + double persenRadiologi = Double.parseDouble(GetSettingDataFixed("persenJasaRadiologi")); + double persenLaboratorium = Double.parseDouble(GetSettingDataFixed("persenJasaLaboratorium")); + double persenRehabMedik = Double.parseDouble(GetSettingDataFixed("persenJasaRehabMedik")); + double persenKonsultasi = Double.parseDouble(GetSettingDataFixed("persenJasaKonsultasiDokter")); + double persenVisite = Double.parseDouble(GetSettingDataFixed("persenJasaVisiteDokter")); + double persenTindakan = Double.parseDouble(GetSettingDataFixed("persenJasaTindakanDokter")); + double persenJasaDokterPA = Double.parseDouble(GetSettingDataFixed("persenJasaDokterPA")); + double persenJasaDokterUmumHD = Double.parseDouble(GetSettingDataFixed("persenJasaDokterUmumHD")); + double persenJasaLabGenetika = Double.parseDouble(GetSettingDataFixed("persenJasaLabGenetika")); + /* + * Persiapan filter logic remunerasi + */ + List drKkPatologiAnatomiList = pegawaiDao.getDokterByKelompokKerja(KK_PATOLOGI_ANATOMI); + List drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(KK_UMUM); + List drKkGenetika = pegawaiDao.getDokterByKelompokKerja(KK_GENETIKA); + List drAnastesiList = pegawaiDao.getDokterByKelompokKerja(KK_ANESTESI); + List idProdukLabGenetikaLuarRuangan = splitDataSettingDatafixed("idProdukLabGenetikaLuarRuangan"); + /* + * Mapping persentase jasa remunerasi + */ + for (Map d : listData) { + double hargaJual = Double.parseDouble(d.get("hargaJual").toString()); + String keteranganTambahan = ""; + if (Boolean.parseBoolean(d.get("isSelisihPaket").toString())) { + hargaJual -= Double.parseDouble(d.get("hargaDiskon").toString()); + keteranganTambahan = " dan selisih paket karena diskon " + + nf.format(Double.parseDouble(d.get("hargaDiskon").toString())); + } + if (CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) + && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString()))) { + RemunHargaJasa hargaJasa = hargaJasa(persenBPJS / 100, hargaJual, d, true); + /* + * Set persen jasa dokter luar yang klaim ffs dengan persen jasa + * dari tarif total + */ + d.put("persenJasa", persenBPJS + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + /* + * Set harga jasa klaim jasa ffs pasien bpjs oleh dokter-dokter + * tertentu + */ + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (drKsmUmumList.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenJasaDokterUmumHD / 100, hargaJual, d, true); + d.put("persenJasa", persenJasaDokterUmumHD + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana")) + && CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenOperator / 100, + (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, + false); + d.put("persenJasa", persenOperator + "%"); + d.put("keterangan", + "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + "% tarif" + + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString() + + hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana")) + && CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenAsistenIBS / 100, + (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, + false); + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("keterangan", + "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + "% tarif" + + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString() + + hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana")) + && CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenAnestesi / 100, + (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, + false); + d.put("persenJasa", persenAnestesi + "%"); + d.put("keterangan", + "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + "% tarif" + + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString() + + hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenOperator / 100, hargaJual, d, true); + d.put("persenJasa", persenOperator + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenAsistenIBS / 100, hargaJual, d, true); + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenAnestesi / 100, hargaJual, d, true); + d.put("persenJasa", persenAnestesi + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (RADIOLOGI.equals(d.get("idDepartemen"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenRadiologi / 100, hargaJual, d, true); + d.put("persenJasa", persenRadiologi + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (REHAB_MEDIK.equals(d.get("idDepartemen"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenRehabMedik / 100, hargaJual, d, true); + d.put("persenJasa", persenRehabMedik + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (KONSULTASI.equals(d.get("idGolonganProduk"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenKonsultasi / 100, hargaJual, d, true); + d.put("persenJasa", persenKonsultasi + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (VISIT.equals(d.get("idGolonganProduk"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenVisite / 100, hargaJual, d, true); + d.put("persenJasa", persenVisite + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenTindakan / 100, hargaJual, d, true); + d.put("persenJasa", persenTindakan + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenAnestesi / 100, hargaJual, d, true); + d.put("persenJasa", persenAnestesi + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (drKkGenetika.contains(idPegawai) + && idProdukLabGenetikaLuarRuangan.contains(Integer.parseInt(d.get("idProduk").toString())) + && (date.before(new Date(1690822799000L)) || date.equals(new Date(1690822799000L)))) { + RemunHargaJasa hargaJasa = hargaJasa(persenJasaLabGenetika / 100, hargaJual, d, true); + d.put("persenJasa", persenJasaLabGenetika + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (Arrays.asList(GENETIKA).contains(Integer.parseInt(d.get("idRuangan").toString()))) { + RemunHargaJasa hargaJasa = hargaJasa(persenJasaLabGenetika / 100, hargaJual, d, true); + d.put("persenJasa", persenJasaLabGenetika + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (drKkPatologiAnatomiList.contains(idPegawai)) { + RemunHargaJasa hargaJasa = hargaJasa(persenJasaDokterPA / 100, hargaJual, d, true); + d.put("persenJasa", persenJasaDokterPA + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else if (LABORATORIUM.equals(d.get("idDepartemen"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenLaboratorium / 100, hargaJual, d, true); + d.put("persenJasa", persenLaboratorium + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } else { + RemunHargaJasa hargaJasa = hargaJasa(persenTindakan / 100, hargaJual, d, true); + d.put("persenJasa", persenTindakan + "%"); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); + } + } + /* + * Populate data filter + */ + listData.forEach(d -> { + if (!listIdProduk.contains(Integer.parseInt(d.get("idProduk").toString()))) + listIdProduk.add(Integer.valueOf(d.get("idProduk").toString())); + if (!listPersenJasa.contains(d.get("persenJasa").toString())) + listPersenJasa.add(d.get("persenJasa").toString()); + if (!listHargaJasa.contains(Double.parseDouble(d.get("hargaJasa").toString()))) + listHargaJasa.add(Double.valueOf(d.get("hargaJasa").toString())); + if (!listHargaJual.contains(Double.parseDouble(d.get("hargaJual").toString()))) + listHargaJual.add(Double.valueOf(d.get("hargaJual").toString())); + if (!listIdKelompokPasien.contains(Integer.parseInt(d.get("idKelompokPasien").toString()))) + listIdKelompokPasien.add(Integer.valueOf(d.get("idKelompokPasien").toString())); + if (!listTanggal.contains(d.get("tanggal").toString())) + listTanggal.add(d.get("tanggal").toString()); + if (!listJenisRuangan.contains(d.get("jenisRuangan").toString())) + listJenisRuangan.add(d.get("jenisRuangan").toString()); + }); + /* + * Pengelompokkan tanggal pelayanan + */ + List> dataTanggal = groupingTanggalFfs(listData); + /* + * Pengelompokkan produk layanan + */ + List> result = groupingKategoriFfs(dataTanggal); + /* + * Final sorting + */ + result = result.stream() + .sorted(Comparator.comparing(o1 -> (Date) o1.get("tglPelayanan"), + Comparator.nullsLast(Comparator.naturalOrder()))) + .sorted(Comparator.comparing(o2 -> Integer.parseInt(o2.get("sortIdKelompokPasien").toString()), + Comparator.nullsLast(Comparator.naturalOrder()))) + .sorted(Comparator.comparing(o3 -> Integer.parseInt(o3.get("sortIdKelas").toString()), + Comparator.nullsLast(Comparator.naturalOrder()))) + .sorted(Comparator.comparing(o4 -> o4.get("namaProduk").toString())) + .sorted(Comparator.comparing(o5 -> o5.get("jenisRuangan").toString(), Comparator.reverseOrder())) + .collect(Collectors.toList()); + result.forEach(r -> { + /* + * Hapus informasi tidak perlu + */ + r.remove("idDPJP"); + r.remove("tglPelayanan"); + r.remove("tanggal"); + r.remove("idKelas"); + r.remove("namaKelas"); + r.remove("idPelayananPasienPetugas"); + r.remove("idPelayananPasien"); + r.remove("norecs"); + r.remove("idDepartemen"); + r.remove("idPasienDaftar"); + r.remove("idPegawai"); + r.remove("idAntrianPasienDiperiksa"); + }); + return result; + } + private List> groupingTanggalFfs(List> listData) { Map>>>>>>>>> collectTanggal = listData .stream() @@ -3016,8 +3348,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel for (Map res : result) { Optional detail = detailPelayananPaketBukanFixedPay.stream() .filter(d -> d.getPelayananPasienId().equals(res.get("idPelayanan"))).findFirst(); - detail.ifPresent( - d -> res.put("hargaJual", CommonUtil.isNotNullOrEmpty(d.getHargaJual()) ? d.getHargaJual() : 0.00)); + detail.ifPresent(d -> res.put("hargaJual", + CommonUtil.isNotNullOrEmpty(d.getHargaJual()) ? d.getHargaJual() : 0.00)); } } return result; diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java index 725d8705..a2d11a14 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java @@ -2668,6 +2668,27 @@ public class IkiDanRemunerasiController extends LocaleController>> getLogbookFfsLuarTarifDokter(HttpServletRequest request, + @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { + try { + List> result = pelayananPasienService.logbookFfsLuarTarifDokter(idPegawai, bulan); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); + } catch (ServiceVOException sve) { + LOGGER.error("Got ServiceVOException {} when get logbook ffs luar jam kerja tarif dokter", + sve.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, sve.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage); + } catch (JpaSystemException jse) { + LOGGER.error("Got JpaSystemException {} when get logbook ffs luar jam kerja tarif dokter", + jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + @RequestMapping(value = "/dokter/logbook-tarif/klaim-mpp/{idPegawai}/{bulan}", method = RequestMethod.GET) public ResponseEntity>> getLogbookKlaimMpp(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) {