Merge branch 'dev/remun/logbook-nonjkn-dg-jam' into dev/no-cron

This commit is contained in:
Salman Manoe 2024-05-14 11:36:52 +07:00
commit a382710068
3 changed files with 372 additions and 17 deletions

View File

@ -28,6 +28,8 @@ public interface PelayananPasienService {
List<Map<String, Object>> logbookFfsTarifDokter(Integer idPegawai, String bulan);
List<Map<String, Object>> logbookFfsLuarTarifDokter(Integer idPegawai, String bulan);
List<Map<String, Object>> logbookKlaimMppDokter(Integer idPegawai, String bulan);
List<Map<String, Object>> logbookFixedPayDokter(Integer idPegawai, String bulan);

View File

@ -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<Map<String, Object>> listPelayananRemun = new ArrayList<>();
List<Map<String, Object>> listPelayananFfs = new ArrayList<>();
List<Map<String, Object>> 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<String, Object> 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<Map<String, Object>> logbookFfsLuarTarifDokter(Integer idPegawai, String bulan) {
List<Integer> listIdProduk = new ArrayList<>();
List<String> listPersenJasa = new ArrayList<>();
List<Double> listHargaJasa = new ArrayList<>();
List<Double> listHargaJual = new ArrayList<>();
List<Integer> listIdKelompokPasien = new ArrayList<>();
List<String> listTanggal = new ArrayList<>();
List<String> 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<String, Object> remunFfs = this.splitRemunFfs(idPegawai, bulan);
@SuppressWarnings("unchecked")
List<Map<String, Object>> listData = (List<Map<String, Object>>) 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<Integer> drKkPatologiAnatomiList = pegawaiDao.getDokterByKelompokKerja(KK_PATOLOGI_ANATOMI);
List<Integer> drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(KK_UMUM);
List<Integer> drKkGenetika = pegawaiDao.getDokterByKelompokKerja(KK_GENETIKA);
List<Integer> drAnastesiList = pegawaiDao.getDokterByKelompokKerja(KK_ANESTESI);
List<Integer> idProdukLabGenetikaLuarRuangan = splitDataSettingDatafixed("idProdukLabGenetikaLuarRuangan");
/*
* Mapping persentase jasa remunerasi
*/
for (Map<String, Object> 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<Map<String, Object>> dataTanggal = groupingTanggalFfs(listData);
/*
* Pengelompokkan produk layanan
*/
List<Map<String, Object>> 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<Map<String, Object>> groupingTanggalFfs(List<Map<String, Object>> listData) {
Map<Integer, Map<String, Map<Double, Map<Double, Map<Integer, Map<String, Map<String, Map<String, List<Map<String, Object>>>>>>>>>> collectTanggal = listData
.stream()
@ -3016,8 +3348,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
for (Map<String, Object> res : result) {
Optional<PelayananPasienDetail> 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;

View File

@ -2668,6 +2668,27 @@ public class IkiDanRemunerasiController extends LocaleController<IkiDanRemuneras
}
}
@RequestMapping(value = "/dokter/logbook-tarif/ffs-luar/{idPegawai}/{bulan}", method = RequestMethod.GET)
public ResponseEntity<List<Map<String, Object>>> getLogbookFfsLuarTarifDokter(HttpServletRequest request,
@PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) {
try {
List<Map<String, Object>> 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<List<Map<String, Object>>> getLogbookKlaimMpp(HttpServletRequest request,
@PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) {