From 07263cefc5a51f11a5c0376179956607b317c14a Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Tue, 1 Oct 2024 14:39:36 +0700 Subject: [PATCH 01/10] Update remunerasi service Pembuatan versioning API untuk logbook tarif oktober 2024 --- .../service/RemunerasiService.java | 14 + .../service/impl/RemunerasiServiceImpl.java | 2860 ++++++++++++++++- .../controller/RemunerasiController.java | 137 +- 3 files changed, 2959 insertions(+), 52 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/RemunerasiService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/RemunerasiService.java index 7661e020..c182c2f0 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/RemunerasiService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/RemunerasiService.java @@ -20,4 +20,18 @@ public interface RemunerasiService { Map getKuantitasCapaianHariKerja(Integer idPegawai, String bulan); + Map splitRemunFfs(Integer idPegawai, String bulan); + + Map logbookRemunTarifDokter(Integer idPegawai, String bulan, Map data); + + List> logbookFfsTarifDokter(Integer idPegawai, String bulan, Map data); + + List> logbookFfsLuarTarifDokter(Integer idPegawai, String bulan, Map data); + + List> logbookKlaimMppDokter(Integer idPegawai, String bulan); + + List> logbookFixedPayDokter(Integer idPegawai, String bulan, Map data); + + List> detailLogbookTarifDokter(Integer idPegawai, List norecs); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java index 2aeb3e98..03654a4e 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java @@ -1,41 +1,42 @@ package com.jasamedika.medifirst2000.service.impl; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - import com.jasamedika.medifirst2000.constants.Master; import com.jasamedika.medifirst2000.converter.BaseConverterImpl; -import com.jasamedika.medifirst2000.dao.HabsenDao; -import com.jasamedika.medifirst2000.dao.IndikatorKualitasDao; -import com.jasamedika.medifirst2000.dao.KategoriPenilaianKualitasDao; -import com.jasamedika.medifirst2000.dao.PegawaiDao; -import com.jasamedika.medifirst2000.dao.PegawaiJadwalKerjaDao; -import com.jasamedika.medifirst2000.dao.ProgramKegiatanDao; -import com.jasamedika.medifirst2000.dao.UraianKegiatanDao; -import com.jasamedika.medifirst2000.entities.IndikatorKualitas; -import com.jasamedika.medifirst2000.entities.Jabatan; -import com.jasamedika.medifirst2000.entities.KategoriPenilaianKualitas; -import com.jasamedika.medifirst2000.entities.Pegawai; -import com.jasamedika.medifirst2000.entities.ProgramKegiatan; -import com.jasamedika.medifirst2000.entities.UraianKegiatan; +import com.jasamedika.medifirst2000.dao.*; +import com.jasamedika.medifirst2000.entities.*; +import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.service.RemunerasiService; import com.jasamedika.medifirst2000.util.CommonUtil; -import com.jasamedika.medifirst2000.vo.IndikatorKualitasVO; -import com.jasamedika.medifirst2000.vo.JabatanVO; -import com.jasamedika.medifirst2000.vo.KategoriPenilaianKualitasVO; -import com.jasamedika.medifirst2000.vo.PegawaiVO; -import com.jasamedika.medifirst2000.vo.ProgramKegiatanVO; -import com.jasamedika.medifirst2000.vo.UraianKegiatanVO; +import com.jasamedika.medifirst2000.util.DateUtil; +import com.jasamedika.medifirst2000.vo.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.*; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +import static com.jasamedika.medifirst2000.constants.Master.Departemen.RADIOLOGI; +import static com.jasamedika.medifirst2000.constants.Master.Departemen.*; +import static com.jasamedika.medifirst2000.constants.Master.GolonganProduk.KONSULTASI; +import static com.jasamedika.medifirst2000.constants.Master.GolonganProduk.VISIT; +import static com.jasamedika.medifirst2000.constants.Master.JenisPetugasPelaksana.*; +import static com.jasamedika.medifirst2000.constants.Master.JenisProduk.NONLOGBOOK; +import static com.jasamedika.medifirst2000.constants.Master.KategoryPegawai.DOKTER_LUAR; +import static com.jasamedika.medifirst2000.constants.Master.Kelas.NON_KELAS; +import static com.jasamedika.medifirst2000.constants.Master.KelompokPasien.KELOMPOK_BPJS; +import static com.jasamedika.medifirst2000.constants.Master.KomponenHarga.*; +import static com.jasamedika.medifirst2000.constants.Master.Profesi.TERAPI; +import static com.jasamedika.medifirst2000.constants.Master.Ruangan.*; +import static com.jasamedika.medifirst2000.constants.Master.SubUnitKerja.*; +import static com.jasamedika.medifirst2000.constants.Master.UnitKerja.KSM_OBGYN; +import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.PERAWAT; +import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.TINDAKAN_UTAMA; @Service("RemunerasiService") public class RemunerasiServiceImpl extends BaseVoServiceImpl implements RemunerasiService { @@ -79,9 +80,36 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera @Autowired private HabsenDao habsenDao; + @Autowired + private PelayananPasienDao pelayananPasienDao; + + @Autowired + private PelayananPasienDetailDao pelayananPasienDetailDao; + + @Autowired + private TargetRemunDokterDetailDao targetRemunDokterDetailDao; + + @Autowired + private MapPegawaiLaboratRadiologiDao mapPegawaiLaboratRadiologiDao; + + @Autowired + private MapProdukPaketDao mapProdukPaketDao; + + @Autowired + private MapProdukPaketToProdukDao mapProdukPaketToProdukDao; + + @Autowired + private HargaNettoProdukByKelasDDao hargaNettoProdukByKelasDDao; + + @Autowired + private PasienDao pasienDao; + + @Autowired + private MapJabatanProfesiDao mapJabatanProfesiDao; + @Override public Map saveProgramKegiatan(ProgramKegiatanVO vo) { - Map result = new HashMap(); + Map result = new HashMap<>(); ProgramKegiatan model = new ProgramKegiatan(); model = programKegiatanConverter.transferVOToModel(vo, model); if (CommonUtil.isNotNullOrEmpty(vo.getJabatanPelaksanaKegiatan())) { @@ -128,16 +156,6 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera model.setUraianKegiatan( uraianKegiatanConverter.transferVOToModel(vo.getUraianKegiatan(), new UraianKegiatan())); } - // Set listKategori = new HashSet<>(); - // for (KategoriPenilaianKualitasVO map : vo.getListKategori()) { - // KategoriPenilaianKualitas kategori = - // kategoriPenilaianKualitasConverter.transferVOToModel(map, new - // KategoriPenilaianKualitas()); - // kategori.setIndikatorKualitas(model); - // kategori.setStatusEnabled(true); - // listKategori.add(kategori); - // } - // model.setListKategori(listKategori); IndikatorKualitas resultDomain = indikatorKualitasDao.save(model); if (CommonUtil.isNotNullOrEmpty(resultDomain)) { result.put("noRec", resultDomain.getNoRec()); @@ -159,7 +177,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera @Override public Map getKuantitasCapaianHariKerja(Integer idPegawai, String bulan) { - Map result = new HashMap<>(); + Map result; try { List> data = new ArrayList<>(); @@ -189,9 +207,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera Map mapReguler = new HashMap<>(); Map mapOnSite = new HashMap<>(); for (Map p : presensi) { - if (Arrays.asList(Master.KelompokShift.ALL_NONSHIFT).contains(result.get("shiftKerjaId")) + if (CommonUtil.isNotNullOrEmpty(result.get("shiftKerjaId")) + && Arrays.asList(Master.KelompokShift.ALL_NONSHIFT) + .contains(Integer.parseInt(result.get("shiftKerjaId").toString())) && result.get("jenisPegawaiId").equals(Master.JenisPegawai.DOKTER) - && Arrays.asList(Master.ShiftKerja.PSM).contains(j.get("idKode")) + && CommonUtil.isNotNullOrEmpty(j.get("idKode")) + && Arrays.asList(Master.ShiftKerja.PSM) + .contains(Integer.parseInt(j.get("idKode").toString())) && p.get("tr_date").equals(j.get("tanggal")) && CommonUtil.isNotNullOrEmpty(p.get("tr_date"))) { mapReguler.put("count", 1); @@ -220,7 +242,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera if (i == 0) { map.put("hariKerja", "Reguler"); map.put("detail", detailReguler); - } else if (i == 1) { + } else { map.put("hariKerja", "On Site"); map.put("detail", detailOnSite); } @@ -231,10 +253,2752 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera result.put("kuantitas", data); } catch (ParseException e) { - e.printStackTrace(); + throw new ServiceVOException(e.getMessage()); } return result; } + @Override + public Map splitRemunFfs(Integer idPegawai, String bulan) { + Map result = new HashMap<>(); + DateFormat df = new SimpleDateFormat("yyyy-MM"); + DateTimeFormatter jamFormat = DateTimeFormatter.ofPattern("HH.mm"); + Date date; + Date dateLine; + try { + date = df.parse(bulan); + dateLine = df.parse(GetSettingDataFixed("berlakuTargetJasaRemunDokter")); + } catch (ParseException e) { + System.out.println(e.getMessage()); + return null; + } + /* + * Mendapatkan daftar jadwal kerja, tanggal dan jam kerja + */ + Date tglAwal = DateUtil.startMonth(date); + Date tglAkhir = DateUtil.endMonth(date); + List> listJadwalKerja = pegawaiJadwalKerjaDao.findJamMasukJamPulang(idPegawai, tglAwal, + tglAkhir); + /* + * Mendapatkan nominal target remunerasi untuk simulasi + */ + Double targetRemun = 0.0; + String sdTarget = GetSettingDataFixed("targetRemunJasaDokter"); + if (CommonUtil.isNotNullOrEmpty(sdTarget)) + targetRemun = Double.parseDouble(sdTarget); + /* + * Mendapatkan nominal target remunerasi yang telah dilakukan mapping + */ + TargetRemunDokterDetail target = targetRemunDokterDetailDao.findByPegawaiIdAndTmt(idPegawai, tglAwal, tglAkhir); + if (CommonUtil.isNotNullOrEmpty(target) && CommonUtil.isNotNullOrEmpty(target.getRupiah())) + targetRemun = target.getRupiah(); + /* + * Mendapatkan persentase jasa + */ + double persenOperator = Double.parseDouble(GetSettingDataFixed("persenRemunOperatorIBS")); + double persenAsistenIBS = Double.parseDouble(GetSettingDataFixed("persenRemunAsistenIBS")); + double persenAnestesi = Double.parseDouble(GetSettingDataFixed("persenRemunAnestesiIBS")); + double persenRadiologi = Double.parseDouble(GetSettingDataFixed("persenRemunRadiologi")); + double persenLaboratorium = Double.parseDouble(GetSettingDataFixed("persenRemunLaboratorium")); + double persenRehabMedik = Double.parseDouble(GetSettingDataFixed("persenRemunRehabMedik")); + double persenKonsultasi = Double.parseDouble(GetSettingDataFixed("persenRemunKonsultasiDokter")); + double persenVisite = Double.parseDouble(GetSettingDataFixed("persenRemunVisiteDokter")); + double persenTindakan = Double.parseDouble(GetSettingDataFixed("persenRemunTindakanDokter")); + double persenTarifJasaBedah = Double.parseDouble(GetSettingDataFixed("persenTarifJasaBedah")); + double persenTarifJasaICU = Double.parseDouble(GetSettingDataFixed("persenTarifJasaICU")); + double persenRemunDokterPA = Double.parseDouble(GetSettingDataFixed("persenRemunDokterPA")); + double persenRemunDokterUmumHD = Double.parseDouble(GetSettingDataFixed("persenRemunDokterUmumHD")); + double persenRemunLabGenetika = Double.parseDouble(GetSettingDataFixed("persenRemunLabGenetika")); + double persenRemunTerapis = Double.parseDouble(GetSettingDataFixed("persenRemunTerapis")); + /* + * Persiapan filter logic remunerasi + */ + List listDetailJenisProduk; + List listDetailJenisProdukException = new ArrayList<>(); + List drKkPediatrikGDList = pegawaiDao.getDokterByKelompokKerja(KK_PEDIATRIK_GD); + List drAnastesiList = pegawaiDao.getDokterByKelompokKerja(KK_ANESTESI); + List drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(KK_UMUM); + List drKkPerinatologiList = pegawaiDao.getDokterByKelompokKerja(KK_PERINATOLOGI); + List drKkPatologiAnatomiList = pegawaiDao.getDokterByKelompokKerja(KK_PATOLOGI_ANATOMI); + List drKkGenetika = pegawaiDao.getDokterByKelompokKerja(KK_GENETIKA); + List drKkRadiologi = pegawaiDao.getDokterByKelompokKerja(KK_RADIOLOGI); + List laboranRadiologList = mapPegawaiLaboratRadiologiDao.findPegawaiLaboranRadiolog(); + List terapisRehabMedik = mapJabatanProfesiDao.findIdPegawaiByProfesiIn(Arrays.asList(TERAPI)); + 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 idsPenunjangBukanAnestesi = splitDataSettingDatafixed("pr_penunjang_nonanestesi"); + List idsDokterBPJSffs = splitDataSettingDatafixed("dokterBPJSffs"); + List idsDokterPediatrikGD = splitDataSettingDatafixed("pr_dokter_pediatrik_gd"); + List idsMonitoringIntervensi = splitDataSettingDatafixed("idMonitoringIntervensi"); + List idsMonitoringHemodinamikGagalOrgan = splitDataSettingDatafixed( + "idMonitoringHemodinamikGagalOrgan"); + List idProdukLabGenetikaLuarRuangan = splitDataSettingDatafixed("idProdukLabGenetikaLuarRuangan"); + List idProdukKepalaPaketFixedPay = splitDataSettingDatafixed("idProdukKepalaPaketFixedPay"); + List paketBukanFixedPay = splitDataSettingDatafixed("produkPaketBukanFixedPay"); + if (drKkPatologiAnatomiList.contains(idPegawai)) { + listDetailJenisProduk = idsRegDJPPenunjangPA; + } else if (pegawaiDao.getDokterByKelompokKerja(KK_PATOLOGI_KLINIK).contains(idPegawai)) { + listDetailJenisProduk = idsRegDJPPenunjangPK; + } else if (drKkRadiologi.contains(idPegawai)) { + listDetailJenisProduk = idsRegDJPPenunjangRad; + } else { + listDetailJenisProduk = idsRegDJPMedisUtama; + } + if (laboranRadiologList.contains(idPegawai)) { + listDetailJenisProdukException = idsRegDJPAdminNonPK; + listDetailJenisProdukException.removeAll(listDetailJenisProduk); + } + /* + * Mendapatkan data mentah pelayanan pasien + */ + List> listRatedPay = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai, + tglAwal, tglAkhir); + /* + * Pemisahan produk kepala paket untuk fixed pay + */ + List> listKepalaPaketFixedPay = listRatedPay.stream() + .filter(d -> idProdukKepalaPaketFixedPay.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + listRatedPay = listRatedPay.stream() + .filter(d -> !idProdukKepalaPaketFixedPay.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + List allPaketId = mapProdukPaketDao.findProdukEntriId(); + List revisedPaketId = allPaketId.stream().filter(p -> !paketBukanFixedPay.contains(p)) + .collect(Collectors.toList()); + List> listFixedPay = listRatedPay.stream() + .filter(d -> revisedPaketId.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + /* + * Filtering selain logbook fixed pay + */ + revisedPaketId.addAll(mapProdukPaketDao.findPaketId()); + listRatedPay = listRatedPay.stream() + .filter(d -> !revisedPaketId.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + /* + * Set persen jasa dan harga jasa pasien bpjs di ibs, icu + */ + double persenTarifIBS = persenTarifJasaBedah / 100; + double persenTarifICU = persenTarifJasaICU / 100; + /* + * Mapping set awal persentase jasa remunerasi dan harga jasa remunerasi + */ + for (Map d : listRatedPay) { + if (paketBukanFixedPay.contains(Integer.parseInt(d.get("idProduk").toString()))) + d.put("hargaJual", d.get("komponenTotalTarif")); + d.put("isTermasukProporsi", true); + double hargaJual = Double.parseDouble(d.get("hargaJual").toString()); + if (Boolean.parseBoolean(d.get("isSelisihPaket").toString())) + hargaJual -= Double.parseDouble(d.get("hargaDiskon").toString()); + if (drKsmUmumList.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + d.put("hargaJasa", persenRemunDokterUmumHD / 100 * hargaJual); + } else if (terapisRehabMedik.contains(idPegawai)) { + d.put("hargaJasa", persenRemunTerapis / 100 * hargaJual); + if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) + d.put("isTermasukProporsi", false); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) + && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) + && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + double persenJasa = persenOperator / 100; + d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) + && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) + && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + double persenJasa = persenAsistenIBS / 100; + d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) + && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) + && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + double persenJasa = persenAnestesi / 100; + d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + } 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"))) { + d.put("hargaJasa", persenOperator / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } 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"))) { + d.put("hargaJasa", persenAsistenIBS / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } 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"))) { + d.put("hargaJasa", persenAnestesi / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + d.put("hargaJasa", persenOperator / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + d.put("hargaJasa", persenAsistenIBS / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + } else if (RADIOLOGI.equals(d.get("idDepartemen"))) { + d.put("hargaJasa", persenRadiologi / 100 * hargaJual); + if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) + d.put("isTermasukProporsi", false); + } else if (REHAB_MEDIK.equals(d.get("idDepartemen"))) { + d.put("hargaJasa", persenRehabMedik / 100 * hargaJual); + if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) + d.put("isTermasukProporsi", false); + } else if (KONSULTASI.equals(d.get("idGolonganProduk"))) { + d.put("hargaJasa", persenKonsultasi / 100 * hargaJual); + if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) + d.put("isTermasukProporsi", false); + } else if (VISIT.equals(d.get("idGolonganProduk"))) { + d.put("hargaJasa", persenVisite / 100 * hargaJual); + if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) + d.put("isTermasukProporsi", false); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + d.put("hargaJasa", persenTindakan / 100 * hargaJual); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + } else if (drKkGenetika.contains(idPegawai) + && idProdukLabGenetikaLuarRuangan.contains(Integer.parseInt(d.get("idProduk").toString())) + && (date.before(new Date(1690822799000L)) || date.equals(new Date(1690822799000L)))) { + /* + * A rule for claimed <= Jul 31th 2023 + */ + d.put("hargaJasa", persenRemunLabGenetika / 100 * hargaJual); + if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) + d.put("isTermasukProporsi", false); + } else if (Arrays.asList(GENETIKA).contains(Integer.parseInt(d.get("idRuangan").toString()))) { + d.put("hargaJasa", persenRemunLabGenetika / 100 * hargaJual); + if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) + d.put("isTermasukProporsi", false); + } else if (drKkPatologiAnatomiList.contains(idPegawai)) { + d.put("hargaJasa", persenRemunDokterPA / 100 * hargaJual); + if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) + d.put("isTermasukProporsi", false); + } else if (LABORATORIUM.equals(d.get("idDepartemen"))) { + d.put("hargaJasa", persenLaboratorium / 100 * hargaJual); + if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) + d.put("isTermasukProporsi", false); + } else if (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) + && Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString()))) { + double persenJasa = persenTindakan / 100; + d.put("hargaJasa", persenJasa * persenTarifICU * hargaJual); + } else { + d.put("hargaJasa", persenTindakan / 100 * hargaJual); + } + } + /* + * Filtered by proporsi jasa layanan + */ + listRatedPay = listRatedPay.stream().filter(d -> Boolean.parseBoolean(d.get("isTermasukProporsi").toString())) + .collect(Collectors.toList()); + /* + * Inisialisasi collect logbook klaim MPP + */ + List> listPelayananKlaimMpp = new ArrayList<>(); + /* + * Alokasi data diambil terlebih dahulu untuk kelompok BPJS, Jaminan + * Kemenkes + */ + List> rawDataBpjs0 = listRatedPay + .stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && Arrays + .asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString()))) + .collect(Collectors.toList()); + /* + * Filter tindakan operasi untuk pasien BPJS hanya diambil tarif + * tertinggi saja dalam satu siklus pelayanan + */ + List> rawDataBpjs1 = new ArrayList<>(); + { + List> bpjsBedahSentral = rawDataBpjs0.stream() + .filter(d -> 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").toString())) { + listIdPasienDaftar.add(b.get("idPasienDaftar").toString()); + listIdPelayananPasien.add(b.get("idPelayananPasien").toString()); + } + for (Map d : rawDataBpjs0) + if (BEDAH_SENTRAL.equals(d.get("idDepartemen")) + && listIdPelayananPasien.contains(d.get("idPelayananPasien").toString())) { + rawDataBpjs1.add(d); + } else if (!BEDAH_SENTRAL.equals(d.get("idDepartemen"))) { + rawDataBpjs1.add(d); + } else { + listPelayananKlaimMpp.add(d); + } + } + /* + * Filter visite untuk pasien BPJS hanya diambil maksimal 1 kali per + * pasien di luar dokter-dokter kk eria + */ + List> rawDataBpjs2 = new ArrayList<>(); + 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 (VISIT.equals(d.get("idGolonganProduk"))) { + boolean existEpisode = false; + for (Map e : listEpisode) + if (e.get("id").toString().equals(d.get("idPasienDaftar")) + && Integer.valueOf(e.get("idProduk").toString()).equals(d.get("idProduk")) + && e.get("tanggal").toString().equals(d.get("tanggal"))) + existEpisode = true; + if (!existEpisode) { + Map episode = new HashMap<>(); + episode.put("id", d.get("idPasienDaftar")); + episode.put("idProduk", d.get("idProduk")); + episode.put("tanggal", d.get("tanggal")); + episode.put("count", 1); + listEpisode.add(episode); + } + } + } + /* + * Assign to next new collection + */ + int maxVisit = 1; + for (Map d : rawDataBpjs1) { + int count = 1; + for (Map e : listEpisode) + if (VISIT.equals(d.get("idGolonganProduk"))) { + if (d.get("idPasienDaftar").toString().equals(e.get("id")) + && Integer.valueOf(d.get("idProduk").toString()).equals(e.get("idProduk")) + && d.get("tanggal").toString().equals(e.get("tanggal")) + && Integer.parseInt(e.get("count").toString()) <= maxVisit) { + rawDataBpjs2.add(d); + count = Integer.parseInt(e.get("count").toString()); + count++; + e.put("count", count); + break; + } else if (d.get("idPasienDaftar").toString().equals(e.get("id")) + && Integer.valueOf(d.get("idProduk").toString()).equals(e.get("idProduk")) + && d.get("tanggal").toString().equals(e.get("tanggal")) + && Integer.parseInt(e.get("count").toString()) > maxVisit) { + listPelayananKlaimMpp.add(d); + } + } else { + break; + } + if (!VISIT.equals(d.get("idGolonganProduk")) && count == 1) + rawDataBpjs2.add(d); + } + } else { + rawDataBpjs2.addAll(rawDataBpjs1); + } + /* + * Filter visite untuk pasien BPJS hanya diambil maksimal 2 kali per + * hari per dokter per pasien kk eria + */ + List> rawDataBpjs3 = new ArrayList<>(); + if (drKkPediatrikGDList.contains(idPegawai)) { + /* + * Dapatkan semua pendaftaran BPJS untuk visite dokter-dokter kk + * eria + */ + List> listEpisode = new ArrayList<>(); + for (Map d : rawDataBpjs2) { + if (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) + && Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString())) + && VISIT.equals(d.get("idGolonganProduk"))) { + boolean existEpisode = false; + for (Map e : listEpisode) + if (e.get("id").toString().equals(d.get("idPasienDaftar")) + && Integer.valueOf(e.get("idProduk").toString()).equals(d.get("idProduk")) + && e.get("tanggal").toString().equals(d.get("tanggal"))) + existEpisode = true; + if (!existEpisode) { + Map episode = new HashMap<>(); + episode.put("id", d.get("idPasienDaftar")); + episode.put("idProduk", d.get("idProduk")); + episode.put("tanggal", d.get("tanggal")); + episode.put("count", 1); + listEpisode.add(episode); + } + } + } + /* + * Assign to next new collection + */ + int maxVisit = 2; + for (Map d : rawDataBpjs2) { + int count = 1; + for (Map e : listEpisode) + if (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) + && Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString())) + && VISIT.equals(d.get("idGolonganProduk"))) { + if (d.get("idPasienDaftar").toString().equals(e.get("id")) + && Integer.valueOf(d.get("idProduk").toString()).equals(e.get("idProduk")) + && d.get("tanggal").toString().equals(e.get("tanggal")) + && Integer.parseInt(e.get("count").toString()) <= maxVisit) { + rawDataBpjs3.add(d); + count = Integer.parseInt(e.get("count").toString()); + count++; + e.put("count", count); + break; + } else if (d.get("idPasienDaftar").toString().equals(e.get("id")) + && Integer.valueOf(d.get("idProduk").toString()).equals(e.get("idProduk")) + && d.get("tanggal").toString().equals(e.get("tanggal")) + && Integer.parseInt(e.get("count").toString()) > maxVisit) { + listPelayananKlaimMpp.add(d); + } + } else { + break; + } + if ((CommonUtil.isNullOrEmpty(d.get("idRuangan")) || (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) + && !Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString())))) + || !VISIT.equals(d.get("idGolonganProduk")) && count == 1) + rawDataBpjs3.add(d); + } + } else { + rawDataBpjs3.addAll(rawDataBpjs2); + } + /* + * Filter monitoring hemodinamik gagal organ untuk pasien BPJS hanya + * diambil maksimal 2 kali per hari per pasien per dokter kk eria + */ + List> rawDataBpjs4 = new ArrayList<>(); + if (drKkPediatrikGDList.contains(idPegawai)) { + /* + * Dapatkan semua pendaftaran BPJS untuk monitoring hemodinamik + * gagal organ dokter-dokter kk eria + */ + List> listEpisode = new ArrayList<>(); + for (Map d : rawDataBpjs3) { + if (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) + && Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString())) + && idsMonitoringHemodinamikGagalOrgan + .contains(Integer.parseInt(d.get("idProduk").toString()))) { + boolean existEpisode = false; + for (Map e : listEpisode) + if (e.get("id").toString().equals(d.get("idPasienDaftar")) + && Integer.valueOf(e.get("idProduk").toString()).equals(d.get("idProduk")) + && e.get("tanggal").toString().equals(d.get("tanggal"))) + existEpisode = true; + if (!existEpisode) { + Map episode = new HashMap<>(); + episode.put("id", d.get("idPasienDaftar")); + episode.put("idProduk", d.get("idProduk")); + episode.put("tanggal", d.get("tanggal")); + episode.put("count", 1); + listEpisode.add(episode); + } + } + } + /* + * Assign to next new collection + */ + int maxMonitoring = 2; + for (Map d : rawDataBpjs3) { + int count = 1; + for (Map e : listEpisode) + if (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) + && Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString())) + && idsMonitoringHemodinamikGagalOrgan + .contains(Integer.parseInt(d.get("idProduk").toString()))) { + if (d.get("idPasienDaftar").toString().equals(e.get("id")) + && Integer.valueOf(d.get("idProduk").toString()).equals(e.get("idProduk")) + && d.get("tanggal").toString().equals(e.get("tanggal")) + && Integer.parseInt(e.get("count").toString()) <= maxMonitoring) { + rawDataBpjs4.add(d); + count = Integer.parseInt(e.get("count").toString()); + count++; + e.put("count", count); + break; + } else if (d.get("idPasienDaftar").toString().equals(e.get("id")) + && Integer.valueOf(d.get("idProduk").toString()).equals(e.get("idProduk")) + && d.get("tanggal").toString().equals(e.get("tanggal")) + && Integer.parseInt(e.get("count").toString()) > maxMonitoring) { + listPelayananKlaimMpp.add(d); + } + } else { + break; + } + if ((CommonUtil.isNullOrEmpty(d.get("idRuangan")) || (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) + && !Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString())))) + || !idsMonitoringHemodinamikGagalOrgan.contains(Integer.parseInt(d.get("idProduk").toString())) + && count == 1) { + rawDataBpjs4.add(d); + } else if ((CommonUtil.isNullOrEmpty(d.get("idRuangan")) + || (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) + && !Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString())))) + || !idsMonitoringHemodinamikGagalOrgan.contains(Integer.parseInt(d.get("idProduk").toString())) + && count > 1) { + listPelayananKlaimMpp.add(d); + } + } + } else { + rawDataBpjs4.addAll(rawDataBpjs3); + } + /* + * Filter monitoring intervensi untuk pasien BPJS hanya diambil maksimal + * 2 kali per hari per pasien per dokter kk perinatologi + */ + List> rawDataBpjs5 = new ArrayList<>(); + if (drKkPerinatologiList.contains(idPegawai)) { + /* + * Dapatkan semua pendaftaran BPJS untuk monitoring intervensi + * dokter-dokter kk perinatologi + */ + List> listEpisode = new ArrayList<>(); + for (Map d : rawDataBpjs4) { + if ((NICU.equals(d.get("idRuangan")) || NICU_COVID.equals(d.get("idRuangan"))) + && idsMonitoringIntervensi.contains(Integer.parseInt(d.get("idProduk").toString()))) { + boolean existEpisode = false; + for (Map e : listEpisode) + if (e.get("id").toString().equals(d.get("idPasienDaftar")) + && Integer.valueOf(e.get("idProduk").toString()).equals(d.get("idProduk")) + && e.get("tanggal").toString().equals(d.get("tanggal"))) + existEpisode = true; + if (!existEpisode) { + Map episode = new HashMap<>(); + episode.put("id", d.get("idPasienDaftar")); + episode.put("idProduk", d.get("idProduk")); + episode.put("tanggal", d.get("tanggal")); + episode.put("count", 1); + listEpisode.add(episode); + } + } + } + /* + * Assign to next new collection + */ + int maxMonitoring = 2; + for (Map d : rawDataBpjs4) { + int count = 1; + for (Map e : listEpisode) + if ((NICU.equals(d.get("idRuangan")) || NICU_COVID.equals(d.get("idRuangan"))) + && idsMonitoringIntervensi.contains(Integer.parseInt(d.get("idProduk").toString()))) { + if (d.get("idPasienDaftar").toString().equals(e.get("id")) + && Integer.valueOf(d.get("idProduk").toString()).equals(e.get("idProduk")) + && d.get("tanggal").toString().equals(e.get("tanggal")) + && Integer.parseInt(e.get("count").toString()) <= maxMonitoring) { + rawDataBpjs5.add(d); + count = Integer.parseInt(e.get("count").toString()); + count++; + e.put("count", count); + break; + } else if (d.get("idPasienDaftar").toString().equals(e.get("id")) + && Integer.valueOf(d.get("idProduk").toString()).equals(e.get("idProduk")) + && d.get("tanggal").toString().equals(e.get("tanggal")) + && Integer.parseInt(e.get("count").toString()) > maxMonitoring) { + listPelayananKlaimMpp.add(d); + } + } else { + break; + } + if (((!NICU.equals(d.get("idRuangan")) && !NICU_COVID.equals(d.get("idRuangan"))) + || !idsMonitoringIntervensi.contains(Integer.parseInt(d.get("idProduk").toString()))) + && count == 1) { + rawDataBpjs5.add(d); + } else if (((!NICU.equals(d.get("idRuangan")) && !NICU_COVID.equals(d.get("idRuangan"))) + || !idsMonitoringIntervensi.contains(Integer.parseInt(d.get("idProduk").toString()))) + && count > 1) { + listPelayananKlaimMpp.add(d); + } + } + } else { + rawDataBpjs5.addAll(rawDataBpjs4); + } + /* + * Alokasi data diurutkan dulu untuk jam kerja. Asumsi jam kerja dokter + * nonshift + */ + List> listDataJamKerja = new ArrayList<>(); + for (Map d : listRatedPay) { + d.put("isJamKerja", false); + if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) { + LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) + .toLocalDate(); + LocalDateTime tglJamPelayanan = ((Date) d.get("tglPelayanan")).toInstant() + .atZone(ZoneId.systemDefault()).toLocalDateTime(); + for (Map j : listJadwalKerja) { + if ((CommonUtil.isNullOrEmpty(d.get("idKelompokPasien")) + || (CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && !Arrays.asList(KELOMPOK_BPJS) + .contains(Integer.parseInt(d.get("idKelompokPasien").toString())))) + && CommonUtil.isNotNullOrEmpty(j.get("jamMasuk"))) { + LocalDate tglMasuk = ((Date) j.get("tanggal")).toInstant().atZone(ZoneId.systemDefault()) + .toLocalDate(); + LocalTime jamMasuk = LocalTime.from(jamFormat.parse(j.get("jamMasuk").toString())); + LocalTime jamPulang = LocalTime.from(jamFormat.parse(j.get("jamPulang").toString())); + LocalDateTime tglJamMasuk = LocalDateTime.of(tglMasuk, jamMasuk); + LocalDateTime tglJamPulang = LocalDateTime.of(tglMasuk, jamPulang); + if (tglPelayanan.isEqual(tglMasuk) + && (tglJamMasuk.isBefore(tglJamPelayanan) || tglJamMasuk.isEqual(tglJamPelayanan)) + && (tglJamPelayanan.isEqual(tglJamPulang) || tglJamPelayanan.isBefore(tglJamPulang))) { + d.put("isJamKerja", true); + listDataJamKerja.add(d); + break; + } + } + } + } + } + /* + * Setelah diurutkan jam kerja, alokasi urutan data di luar jam kerja. + * Asumsi jam kerja dokter nonshift + */ + List> listDataLuarJamKerja = new ArrayList<>(); + for (Map d : listRatedPay) { + if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) { + LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) + .toLocalDate(); + LocalDateTime tglJamPelayanan = ((Date) d.get("tglPelayanan")).toInstant() + .atZone(ZoneId.systemDefault()).toLocalDateTime(); + for (Map j : listJadwalKerja) { + LocalDate tglMasuk = ((Date) j.get("tanggal")).toInstant().atZone(ZoneId.systemDefault()) + .toLocalDate(); + if (CommonUtil.isNullOrEmpty(d.get("idKelompokPasien")) + || (CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && !Arrays.asList(KELOMPOK_BPJS) + .contains(Integer.parseInt(d.get("idKelompokPasien").toString())))) + if (CommonUtil.isNullOrEmpty(j.get("jamMasuk"))) { + if (tglPelayanan.isEqual(tglMasuk)) { + if ("Reguler".equals(d.get("jenisRuangan").toString())) + d.put("isJamKerja", true); + listDataLuarJamKerja.add(d); + break; + } + } else { + LocalTime jamMasuk = LocalTime.from(jamFormat.parse(j.get("jamMasuk").toString())); + LocalTime jamPulang = LocalTime.from(jamFormat.parse(j.get("jamPulang").toString())); + LocalDateTime tglJamMasuk = LocalDateTime.of(tglMasuk, jamMasuk); + LocalDateTime tglJamPulang = LocalDateTime.of(tglMasuk, jamPulang); + if ((tglPelayanan.isEqual(tglMasuk) && tglJamPelayanan.isBefore(tglJamMasuk)) + || (tglPelayanan.isEqual(tglMasuk) && tglJamPelayanan.isAfter(tglJamPulang))) { + if ("Reguler".equals(d.get("jenisRuangan").toString())) + d.put("isJamKerja", true); + listDataLuarJamKerja.add(d); + break; + } + } + } + } else { + /* + * Tanggal pelayanan null akan dianggap sebagai luar jam kerja + */ + if ("Reguler".equals(d.get("jenisRuangan").toString())) + d.put("isJamKerja", true); + listDataLuarJamKerja.add(d); + } + } + /* + * Offer data yang sudah diurutkan dalam queue + */ + Queue> queuePelayanan = new ArrayDeque<>(); + rawDataBpjs5.forEach(queuePelayanan::offer); + listDataJamKerja.forEach(queuePelayanan::offer); + listDataLuarJamKerja.forEach(queuePelayanan::offer); + /* + * Memisahkan data diurutkan menjadi logbook remun dan logbook ffs + */ + 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)) { + /* + * Dokter luar hanya mendapatkan ffs + */ + for (Map next = queuePelayanan.poll(); next != null; next = queuePelayanan.poll()) + if (CommonUtil.isNotNullOrEmpty(next.get("idKelompokPasien")) + && Arrays.asList(KELOMPOK_BPJS) + .contains(Integer.parseInt(next.get("idKelompokPasien").toString())) + && idsDokterBPJSffs.contains(idPegawai)) { + /* + * dokter-dokter tertentu yang hanya dapat pasien bpjs + */ + 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())))) { + 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()) + if (CommonUtil.isNotNullOrEmpty(next.get("idKelompokPasien")) && Arrays.asList(KELOMPOK_BPJS) + .contains(Integer.parseInt(next.get("idKelompokPasien").toString()))) { + /* + * Urutan alokasi bpjs sebagai urutan prioritas + */ + if (drKkPediatrikGDList.contains(idPegawai)) { + /* + * Bpjs untuk dokter-dokter kk pediatrik gawat darurat + */ + if (idsDokterPediatrikGD.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Dibatasi oleh daftar tindakan tertentu + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if (((CommonUtil.isNotNullOrEmpty(next.get("idDepartemen")) + && Arrays.asList(GRUP_RAWAT_JALAN_UTAMA) + .contains(Integer.parseInt(next.get("idDepartemen").toString()))) + || VISIT.equals(next.get("idGolonganProduk"))) + && (CommonUtil.isNullOrEmpty(next.get("idJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idJenisProduk")) + && !Arrays.asList(NONLOGBOOK).contains( + Integer.parseInt(next.get("idJenisProduk").toString()))))) { + /* + * Dibatasi hanya di rawat jalan atau visite saja + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } + } else if (drKkRadiologi.contains(idPegawai) && (BEDAH_SENTRAL.equals(next.get("idDepartemen")) + || CATHLAB.equals(next.get("idRuangan")))) { + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else { + /* + * Selain dokter-dokter kk pediatrik gawat darurat + */ + if (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) && listDetailJenisProduk + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))) { + /* + * Dibatasi oleh daftar jenis tindakan tertentu + */ + if (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) && (idsRegDJPPenunjangPA + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())) + || idsRegDJPPenunjangPK + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())))) { + /* + * Pengecualian daftar tindakan penunjang yang + * bebas klaim + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if (CommonUtil.isNullOrEmpty(next.get("idJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idJenisProduk")) + && !Arrays.asList(NONLOGBOOK).contains( + Integer.parseInt(next.get("idJenisProduk").toString())))) { + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } + } else if ((CommonUtil.isNullOrEmpty(next.get("idDetailJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) + && !listDetailJenisProduk.contains( + Integer.parseInt(next.get("idDetailJenisProduk").toString())))) + && IGD.equals(next.get("idDepartemen")) && drKsmUmumList.contains(idPegawai) + && idsDokterUmumIGD.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Aturan dokter ksm umum di igd + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if ((CommonUtil.isNullOrEmpty(next.get("idDetailJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) + && !listDetailJenisProduk.contains( + Integer.parseInt(next.get("idDetailJenisProduk").toString())))) + && drKkPerinatologiList.contains(idPegawai) + && idsDokterPerinatologi.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Aturan dokter kk perinatologi dengan pembatasan + * tindakan tertentu + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if (drAnastesiList.contains(idPegawai)) { + if (idsPenunjangBukanAnestesi.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Aturan dokter kk anestesi dengan pembatasan + * tindakan tertentu + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if (RADIOLOGI.equals(next.get("idDepartemen")) + && DOKTER_PEMERIKSA.equals(next.get("idJenisPelaksana"))) { + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } + } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException) + && CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) + && listDetailJenisProdukException + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))) { + /* + * Diluar pembatasan jenis produk + */ + if (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) && (idsRegDJPPenunjangPA + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())) + || idsRegDJPPenunjangPK + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())))) { + /* + * Pengecualian daftar tindakan penunjang yang + * bebas klaim + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if (CommonUtil.isNullOrEmpty(next.get("idJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idJenisProduk")) + && !Arrays.asList(NONLOGBOOK).contains( + Integer.parseInt(next.get("idJenisProduk").toString())))) { + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } + } + } + } else if (capaianRemun < targetRemun && (date.equals(dateLine) || date.after(dateLine))) { + /* + * Alokasi bagian remunerasi berdasarkan target rupiah + * sesuai tanggal mulai berlaku + */ + if (drKkPediatrikGDList.contains(idPegawai)) { + /* + * Bpjs untuk dokter-dokter kk pediatrik gawat darurat + */ + if (idsDokterPediatrikGD.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Dibatasi oleh daftar tindakan tertentu + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if ((CommonUtil.isNotNullOrEmpty(next.get("idDepartemen")) + && Arrays.asList(GRUP_RAWAT_JALAN_UTAMA) + .contains(Integer.parseInt(next.get("idDepartemen").toString()))) + || VISIT.equals(next.get("idGolonganProduk")) && (CommonUtil + .isNullOrEmpty(next.get("idJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idJenisProduk")) + && !Arrays.asList(NONLOGBOOK).contains( + Integer.parseInt(next.get("idJenisProduk").toString()))))) { + /* + * Dibatasi hanya di rawat jalan atau visite saja + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } + } else if (drKkRadiologi.contains(idPegawai) && (BEDAH_SENTRAL.equals(next.get("idDepartemen")) + || CATHLAB.equals(next.get("idRuangan")))) { + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else { + /* + * Selain dokter-dokter kk pediatrik gawat darurat + */ + if (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) && listDetailJenisProduk + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))) { + /* + * Dibatasi oleh daftar jenis tindakan tertentu + */ + if (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) && (idsRegDJPPenunjangPA + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())) + || idsRegDJPPenunjangPK + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())))) { + /* + * Pengecualian daftar tindakan penunjang yang + * bebas klaim + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if (CommonUtil.isNullOrEmpty(next.get("idJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idJenisProduk")) + && !Arrays.asList(NONLOGBOOK).contains( + Integer.parseInt(next.get("idJenisProduk").toString())))) { + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } + } else if ((CommonUtil.isNullOrEmpty(next.get("idDetailJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) + && !listDetailJenisProduk.contains( + Integer.parseInt(next.get("idDetailJenisProduk").toString())))) + && IGD.equals(next.get("idDepartemen")) && drKsmUmumList.contains(idPegawai) + && idsDokterUmumIGD.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Aturan dokter ksm umum di igd + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if ((CommonUtil.isNullOrEmpty(next.get("idDetailJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) + && !listDetailJenisProduk.contains( + Integer.parseInt(next.get("idDetailJenisProduk").toString())))) + && drKkPerinatologiList.contains(idPegawai) + && idsDokterPerinatologi.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Aturan dokter kk perinatologi dengan pembatasan + * tindakan tertentu + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if (drAnastesiList.contains(idPegawai)) { + if (idsPenunjangBukanAnestesi.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Aturan dokter kk anestesi dengan pembatasan + * tindakan tertentu + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if (RADIOLOGI.equals(next.get("idDepartemen")) + && DOKTER_PEMERIKSA.equals(next.get("idJenisPelaksana"))) { + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } + } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException) + && CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) + && listDetailJenisProdukException + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))) { + /* + * Diluar pembatasan jenis produk + */ + if (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) && (idsRegDJPPenunjangPA + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())) + || idsRegDJPPenunjangPK + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())))) { + /* + * Pengecualian daftar tindakan penunjang yang + * bebas klaim + */ + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } else if (CommonUtil.isNullOrEmpty(next.get("idJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idJenisProduk")) + && !Arrays.asList(NONLOGBOOK).contains( + Integer.parseInt(next.get("idJenisProduk").toString())))) { + listPelayananRemun.add(next); + capaianRemun += Double.parseDouble(next.get("hargaJasa").toString()); + } + } + } + } else { + /* + * Alokasi untuk bagian ffs + */ + if (drKkPediatrikGDList.contains(idPegawai)) { + /* + * Ffs untuk dokter-dokter kk pediatrik gawat darurat + */ + if (idsDokterPediatrikGD.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Dibatasi oleh daftar tindakan tertentu + */ + 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()))) + || VISIT.equals(next.get("idGolonganProduk")) && (CommonUtil + .isNullOrEmpty(next.get("idJenisProduk")) + || (CommonUtil.isNotNullOrEmpty(next.get("idJenisProduk")) + && !Arrays.asList(NONLOGBOOK).contains( + Integer.parseInt(next.get("idJenisProduk").toString()))))) { + /* + * Dibatasi hanya di rawat jalan atau visite saja + */ + 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")))) { + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } + } else { + /* + * Selain dokter-dokter kk pediatrik gawat darurat + */ + if (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) && listDetailJenisProduk + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))) { + /* + * Dibatasi oleh daftar jenis tindakan tertentu + */ + if (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) && (idsRegDJPPenunjangPA + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())) + || idsRegDJPPenunjangPK + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())))) { + /* + * Pengecualian daftar tindakan penunjang yang + * bebas klaim + */ + 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())))) { + 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( + Integer.parseInt(next.get("idDetailJenisProduk").toString())))) + && IGD.equals(next.get("idDepartemen")) && drKsmUmumList.contains(idPegawai) + && idsDokterUmumIGD.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Aturan dokter ksm umum di igd + */ + 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( + Integer.parseInt(next.get("idDetailJenisProduk").toString())))) + && drKkPerinatologiList.contains(idPegawai) + && idsDokterPerinatologi.contains(Integer.parseInt(next.get("idProduk").toString()))) { + /* + * Aturan dokter kk perinatologi dengan pembatasan + * tindakan tertentu + */ + 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 + */ + 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"))) { + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } + } + } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException) + && CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) + && listDetailJenisProdukException + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))) { + /* + * Diluar pembatasan jenis produk + */ + if (CommonUtil.isNotNullOrEmpty(next.get("idDetailJenisProduk")) && (idsRegDJPPenunjangPA + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())) + || idsRegDJPPenunjangPK + .contains(Integer.parseInt(next.get("idDetailJenisProduk").toString())))) { + /* + * Pengecualian daftar tindakan penunjang yang + * bebas klaim + */ + 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())))) { + if (Boolean.parseBoolean(next.get("isJamKerja").toString())) { + listPelayananFfs.add(next); + } else { + listPelayananNonJknLuarJamKerja.add(next); + } + } + } + } + } + } + { + /* + * Sorting data remun jkn diurutkan + */ + listPelayananRemun = listPelayananRemun.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())).collect(Collectors.toList()); + result.put("remun", listPelayananRemun); + /* + * Informasi target + */ + result.put("targetRemun", targetRemun); + result.put("targetRemunFormatted", new DecimalFormat("Rp#,##0.00").format(targetRemun)); + } + { + /* + * Sorting data remun non-jkn di dalam jam kerja diurutkan + */ + listPelayananFfs = listPelayananFfs.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", 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 + */ + listPelayananKlaimMpp = listPelayananKlaimMpp.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("klaim-mpp", listPelayananKlaimMpp); + } + { + List> listPelayananFixedPay = new ArrayList<>(); + if (CommonUtil.isNotNullOrEmpty(listFixedPay)) + listPelayananFixedPay = setPelayananPaket(idPegawai, listFixedPay); + if (CommonUtil.isNotNullOrEmpty(listKepalaPaketFixedPay)) + listPelayananFixedPay.addAll(setKepalaPaketFixedPay(listKepalaPaketFixedPay)); + result.put("fixed-pay", listPelayananFixedPay); + if (terapisRehabMedik.contains(idPegawai)) + result.put("fixed-pay", new ArrayList<>()); + } + return result; + } + + private List> setPelayananPaket(Integer idPegawai, List> listData) { + /* + * Transformasi data paket menggunakan mapprodukpaket dan + * mapprodukpakettoproduk + */ + List> listFixedPay = transformPelayananPaket(idPegawai, listData); + /* + * Populate data filter + */ + List> dataTanggal = distinctGroupFixedPay(listFixedPay); + /* + * Pengelompokkan produk layanan + */ + List> result = groupingKategoriFixedPay(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())) + .sorted(Comparator.comparing(o4 -> o4.get("bulanPulangIbu").toString())).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> setKepalaPaketFixedPay(List> listData) { + /* + * Transformasi data produk kepala paket sebagai fixed pay + */ + List> listFixedPay = transformPelayananKepalaPaketFixedPay(listData); + /* + * Populate data filter + */ + List> dataTanggal = distinctGroupFixedPay(listFixedPay); + /* + * Pengelompokkan produk layanan + */ + List> result = groupingKategoriFixedPay(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())) + .sorted(Comparator.comparing(o4 -> o4.get("bulanPulangIbu").toString())).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> transformPelayananPaket(Integer idPegawai, List> listData) { + List drKsmObgyn = pegawaiDao.getDokterByKsm(KSM_OBGYN); + SimpleDateFormat month = new SimpleDateFormat("MMM-yyyy", new Locale("in", "ID")); + listData.forEach(d -> { + if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% komponen tarif, sayatan ke-" + d.get("urutanSayatan").toString()); + }); + List paketList = mapProdukPaketDao.findAll(); + List allProdukEntriId = paketList.stream().map(MapProdukPaket::getProdukEntriId) + .collect(Collectors.toList()); + listData.forEach(d -> { + Optional idProduk = paketList.stream() + .filter(mpaket -> mpaket.getProdukEntriId().equals(d.get("idProduk"))).findFirst(); + d.put("mPaketId", null); + d.put("paketId", null); + d.put("paketType", null); + idProduk.ifPresent(mapProdukPaket -> { + d.put("mPaketId", mapProdukPaket.getNoRec()); + d.put("paketId", mapProdukPaket.getPaketId()); + if (CommonUtil.isNotNullOrEmpty(mapProdukPaket.getJenisMapping())) + d.put("paketType", mapProdukPaket.getJenisMapping().name()); + }); + }); + List regulerList = mapProdukPaketToProdukDao.findAll(); + listData.forEach(d -> { + Optional mRefId = regulerList.stream() + .filter(ref -> ref.getMapProdukPaketId().equals(d.get("mPaketId"))).findFirst(); + d.put("regRefId", null); + mRefId.ifPresent(mproduk -> d.put("regRefId", mproduk.getProdukRegulerId())); + }); + List allConcatProdukKelas = listData.stream() + .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("regRefId"))) + .map(d -> d.get("regRefId").toString() + d.get("idKelas").toString()).collect(Collectors.toList()); + allConcatProdukKelas.addAll(listData.stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("paketId"))) + .map(d -> d.get("paketId").toString() + d.get("idKelas").toString()).collect(Collectors.toList())); + allConcatProdukKelas.addAll(listData.stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idProduk"))) + .map(d -> d.get("idProduk").toString() + d.get("idKelas").toString()).collect(Collectors.toList())); + List tarifDetailReguler = hargaNettoProdukByKelasDDao + .findByConcateProdukKelas(allConcatProdukKelas); + List allConcatProdukNonkelas = listData.stream() + .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("regRefId"))) + .map(d -> d.get("regRefId").toString() + NON_KELAS).collect(Collectors.toList()); + allConcatProdukNonkelas.addAll(listData.stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("paketId"))) + .map(d -> d.get("paketId").toString() + NON_KELAS).collect(Collectors.toList())); + allConcatProdukNonkelas.addAll(listData.stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idProduk"))) + .map(d -> d.get("idProduk").toString() + NON_KELAS).collect(Collectors.toList())); + List tarifDetailNonKelas = hargaNettoProdukByKelasDDao + .findByConcateProdukKelas(allConcatProdukNonkelas); + Set> ibuPaketDiRanapByDokter = pelayananPasienDao.findPasienPaketDiRanapByDokter(drKsmObgyn, + allProdukEntriId, Arrays.asList(GRUP_RAWAT_INAP)); + Set setIdIbu = ibuPaketDiRanapByDokter.stream() + .map(pasien -> Integer.parseInt(pasien.get("pasienId").toString())).collect(Collectors.toSet()); + List> ibuAnak = pasienDao.findIdByIdOfIbu(setIdIbu); + listData.forEach(d -> { + List listIdIbu = ibuAnak.stream().filter(bn -> Integer + .parseInt(d.get("pasienId").toString()) == Integer.parseInt(bn.get("idIbu").toString()) + || Integer.parseInt(d.get("pasienId").toString()) == Integer.parseInt(bn.get("idAnak").toString())) + .map(bn -> Integer.parseInt(bn.get("idIbu").toString())).collect(Collectors.toList()); + List listIdAnak = ibuAnak.stream().filter(bn -> Integer + .parseInt(d.get("pasienId").toString()) == Integer.parseInt(bn.get("idIbu").toString()) + || Integer.parseInt(d.get("pasienId").toString()) == Integer.parseInt(bn.get("idAnak").toString())) + .map(bn -> Integer.parseInt(bn.get("idAnak").toString())).collect(Collectors.toList()); + Optional> validateIbuPaketDiRanap = ibuPaketDiRanapByDokter.stream() + .filter(paket -> Integer.parseInt(d.get("pasienId").toString()) == Integer + .parseInt(paket.get("pasienId").toString()) + || (listIdAnak.contains(Integer.parseInt(d.get("pasienId").toString())) + && listIdIbu.contains(Integer.parseInt(paket.get("pasienId").toString())))) + .filter(paket -> CommonUtil.isNotNullOrEmpty(d.get("paketId")) && Integer + .parseInt(d.get("paketId").toString()) == Integer.parseInt(paket.get("paketId").toString())) + .findFirst(); + d.put("tglPulangIbu", null); + d.put("bulanPulangIbu", ""); + d.put("hargaJasa", 0.0); + d.put("isBatalPaket", false); + if (validateIbuPaketDiRanap.isPresent() + && CommonUtil.isNotNullOrEmpty(validateIbuPaketDiRanap.get().get("tglKeluar"))) + d.put("bulanPulangIbu", month.format((Date) validateIbuPaketDiRanap.get().get("tglKeluar"))); + validateIbuPaketDiRanap.ifPresent(f -> d.put("isBatalPaket", f.get("isBatal"))); + if (validateIbuPaketDiRanap.isPresent() + && CommonUtil.isNotNullOrEmpty(validateIbuPaketDiRanap.get().get("tglKeluar")) + && !PERAWAT.name().equals(d.get("paketType")) + && !Boolean.parseBoolean(d.get("isBatalPaket").toString())) { + d.put("tglPulangIbu", validateIbuPaketDiRanap.get().get("tglKeluar")); + if (drKsmObgyn.contains(idPegawai) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana")) + && TINDAKAN_UTAMA.name().equals(d.get("paketType"))) { + Optional byDetailTarif = tarifDetailReguler.stream() + .filter(dt -> dt.getProdukId().equals(d.get("paketId"))) + .filter(dt -> dt.getKelasId().equals(d.get("idKelas"))) + .filter(dt -> dt.getKomponenHargaId().equals(SPOG_OPERATOR)).findFirst(); + if (byDetailTarif.isPresent()) { + d.put("hargaJasa", CommonUtil.isNotNullOrEmpty(byDetailTarif.get().getHargaNetto1()) + ? byDetailTarif.get().getHargaNetto1() : byDetailTarif.get().getHargaSatuan()); + } else { + Optional byDetailTarifNonKelas = tarifDetailNonKelas.stream() + .filter(dt -> dt.getProdukId().equals(d.get("paketId"))) + .filter(dt -> dt.getKelasId().equals(NON_KELAS)) + .filter(dt -> dt.getKomponenHargaId().equals(SPOG_OPERATOR)).findFirst(); + byDetailTarifNonKelas.ifPresent(hargaNettoProdukByKelasD -> d.put("hargaJasa", + CommonUtil.isNotNullOrEmpty(byDetailTarifNonKelas.get().getHargaNetto1()) + ? byDetailTarifNonKelas.get().getHargaNetto1() + : byDetailTarifNonKelas.get().getHargaSatuan())); + } + } else if (drKsmObgyn.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana")) + && TINDAKAN_UTAMA.name().equals(d.get("paketType"))) { + Optional byDetailTarif = tarifDetailReguler.stream() + .filter(dt -> dt.getProdukId().equals(d.get("paketId"))) + .filter(dt -> dt.getKelasId().equals(d.get("idKelas"))) + .filter(dt -> dt.getKomponenHargaId().equals(SPOG_ASISTEN)).findFirst(); + if (byDetailTarif.isPresent()) { + d.put("hargaJasa", CommonUtil.isNotNullOrEmpty(byDetailTarif.get().getHargaNetto1()) + ? byDetailTarif.get().getHargaNetto1() : byDetailTarif.get().getHargaSatuan()); + } else { + Optional byDetailTarifNonKelas = tarifDetailNonKelas.stream() + .filter(dt -> dt.getProdukId().equals(d.get("paketId"))) + .filter(dt -> dt.getKelasId().equals(NON_KELAS)) + .filter(dt -> dt.getKomponenHargaId().equals(SPOG_ASISTEN)).findFirst(); + byDetailTarifNonKelas.ifPresent(hargaNettoProdukByKelasD -> d.put("hargaJasa", + CommonUtil.isNotNullOrEmpty(byDetailTarifNonKelas.get().getHargaNetto1()) + ? byDetailTarifNonKelas.get().getHargaNetto1() + : byDetailTarifNonKelas.get().getHargaSatuan())); + } + } else if (!drKsmObgyn.contains(idPegawai) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + Optional byDetailTarif = tarifDetailReguler.stream() + .filter(dt -> dt.getProdukId().equals(d.get("idProduk"))) + .filter(dt -> dt.getKelasId().equals(d.get("idKelas"))) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_DOKTER)).findFirst(); + if (byDetailTarif.isPresent()) { + d.put("hargaJasa", CommonUtil.isNotNullOrEmpty(byDetailTarif.get().getHargaNetto1()) + ? byDetailTarif.get().getHargaNetto1() : byDetailTarif.get().getHargaSatuan()); + } else { + Optional byDetailTarifNonKelas = tarifDetailNonKelas.stream() + .filter(dt -> dt.getProdukId().equals(d.get("idProduk"))) + .filter(dt -> dt.getKelasId().equals(NON_KELAS)) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_DOKTER)).findFirst(); + byDetailTarifNonKelas.ifPresent(hargaNettoProdukByKelasD -> d.put("hargaJasa", + CommonUtil.isNotNullOrEmpty(byDetailTarifNonKelas.get().getHargaNetto1()) + ? byDetailTarifNonKelas.get().getHargaNetto1() + : byDetailTarifNonKelas.get().getHargaSatuan())); + } + } else if (!drKsmObgyn.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + Optional byDetailTarif = tarifDetailReguler.stream() + .filter(dt -> dt.getProdukId().equals(d.get("idProduk"))) + .filter(dt -> dt.getKelasId().equals(d.get("idKelas"))) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_ASISTEN_SPESIALIS)).findFirst(); + if (byDetailTarif.isPresent()) { + d.put("hargaJasa", CommonUtil.isNotNullOrEmpty(byDetailTarif.get().getHargaNetto1()) + ? byDetailTarif.get().getHargaNetto1() : byDetailTarif.get().getHargaSatuan()); + } else { + Optional byDetailTarifNonKelas = tarifDetailNonKelas.stream() + .filter(dt -> dt.getProdukId().equals(d.get("idProduk"))) + .filter(dt -> dt.getKelasId().equals(NON_KELAS)) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_ASISTEN_SPESIALIS)).findFirst(); + byDetailTarifNonKelas.ifPresent(hargaNettoProdukByKelasD -> d.put("hargaJasa", + CommonUtil.isNotNullOrEmpty(byDetailTarifNonKelas.get().getHargaNetto1()) + ? byDetailTarifNonKelas.get().getHargaNetto1() + : byDetailTarifNonKelas.get().getHargaSatuan())); + } + } else if (!drKsmObgyn.contains(idPegawai) && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + Optional byDetailTarif = tarifDetailReguler.stream() + .filter(dt -> dt.getProdukId().equals(d.get("idProduk"))) + .filter(dt -> dt.getKelasId().equals(d.get("idKelas"))) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_DOKTER_ANASTESI)).findFirst(); + if (byDetailTarif.isPresent()) { + d.put("hargaJasa", CommonUtil.isNotNullOrEmpty(byDetailTarif.get().getHargaNetto1()) + ? byDetailTarif.get().getHargaNetto1() : byDetailTarif.get().getHargaSatuan()); + } else { + Optional byDetailTarifNonKelas = tarifDetailNonKelas.stream() + .filter(dt -> dt.getProdukId().equals(d.get("idProduk"))) + .filter(dt -> dt.getKelasId().equals(NON_KELAS)) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_DOKTER_ANASTESI)).findFirst(); + byDetailTarifNonKelas.ifPresent(hargaNettoProdukByKelasD -> d.put("hargaJasa", + CommonUtil.isNotNullOrEmpty(byDetailTarifNonKelas.get().getHargaNetto1()) + ? byDetailTarifNonKelas.get().getHargaNetto1() + : byDetailTarifNonKelas.get().getHargaSatuan())); + } + } + } else if (!Arrays.asList(GRUP_RAWAT_INAP).contains(Integer.parseInt(d.get("idDepartemen").toString())) + && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + Optional byDetailTarifNonKelas = tarifDetailNonKelas.stream() + .filter(dt -> dt.getProdukId().equals(d.get("idProduk"))) + .filter(dt -> dt.getKelasId().equals(d.get("idKelas"))) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_DOKTER)).findFirst(); + byDetailTarifNonKelas.ifPresent(hargaNettoProdukByKelasD -> d.put("hargaJasa", + CommonUtil.isNotNullOrEmpty(byDetailTarifNonKelas.get().getHargaNetto1()) + ? byDetailTarifNonKelas.get().getHargaNetto1() + : byDetailTarifNonKelas.get().getHargaSatuan())); + } else if (!Arrays.asList(GRUP_RAWAT_INAP).contains(Integer.parseInt(d.get("idDepartemen").toString())) + && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + Optional byDetailTarifNonKelas = tarifDetailNonKelas.stream() + .filter(dt -> dt.getProdukId().equals(d.get("idProduk"))) + .filter(dt -> dt.getKelasId().equals(d.get("idKelas"))) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_ASISTEN_SPESIALIS)).findFirst(); + byDetailTarifNonKelas.ifPresent(hargaNettoProdukByKelasD -> d.put("hargaJasa", + CommonUtil.isNotNullOrEmpty(byDetailTarifNonKelas.get().getHargaNetto1()) + ? byDetailTarifNonKelas.get().getHargaNetto1() + : byDetailTarifNonKelas.get().getHargaSatuan())); + } + }); + return listData; + } + + private List> distinctGroupFixedPay(List> listFixedPay) { + List listIdProduk = new ArrayList<>(); + List listHargaJasa = new ArrayList<>(); + List listHargaJual = new ArrayList<>(); + List listIdKelompokPasien = new ArrayList<>(); + List listTanggal = new ArrayList<>(); + List listJenisRuangan = new ArrayList<>(); + List listBulanPulangIbu = new ArrayList<>(); + listFixedPay.forEach(d -> { + if (!listIdProduk.contains(Integer.parseInt(d.get("idProduk").toString()))) + listIdProduk.add(Integer.valueOf(d.get("idProduk").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()); + if (!listBulanPulangIbu.contains(d.get("bulanPulangIbu").toString())) + listBulanPulangIbu.add(d.get("bulanPulangIbu").toString()); + }); + /* + * Pengelompokkan tanggal pelayanan + */ + return groupingTanggalFixedPay(listFixedPay); + } + + private List> groupingTanggalFixedPay(List> listData) { + Map>>>>>>>>> collectTanggal = listData + .stream() + .collect(Collectors.groupingBy(o1 -> Integer.parseInt(o1.get("idProduk").toString()), Collectors + .groupingBy(o2 -> Double.parseDouble(o2.get("hargaJasa").toString()), Collectors.groupingBy( + o3 -> Double.parseDouble(o3.get("hargaJual").toString()), + Collectors.groupingBy(o4 -> Integer.parseInt(o4.get("idKelompokPasien").toString()), + Collectors.groupingBy(o5 -> o5.get("jenisRuangan").toString(), + Collectors.groupingBy(o6 -> o6.get("bulanPulangIbu").toString(), + Collectors.groupingBy(o7 -> o7.get("keterangan").toString(), + Collectors.groupingBy( + o8 -> o8.get("tanggal").toString()))))))))); + List> result = new ArrayList<>(); + collectTanggal.forEach((k1, v1) -> v1.forEach((k2, v2) -> v2.forEach((k3, v3) -> v3.forEach((k4, v4) -> v4 + .forEach((k5, v5) -> v5.forEach((k6, v6) -> v6.forEach((k7, v7) -> v7.forEach((k8, v8) -> { + HashMap map = new HashMap<>(); + map.put("idProduk", k1); + map.put("hargaJasa", k2); + map.put("hargaJual", k3); + map.put("idKelompokPasien", k4); + map.put("jenisRuangan", k5); + map.put("bulanPulangIbu", k6); + map.put("keterangan", k7); + map.put("tanggal", k8); + List norecs = v8.stream().map(e -> e.get("idPelayananPasienPetugas").toString()) + .collect(Collectors.toList()); + map.put("norecs", norecs); + double jumlah = v8.stream().mapToDouble(e -> Double.parseDouble(e.get("jumlah").toString())).sum(); + map.put("jumlah", jumlah); + Optional> first = v8.stream().findFirst(); + first.ifPresent(e -> { + map.put("namaProduk", e.get("namaProduk").toString()); + map.put("kelompokPasien", e.get("kelompokPasien").toString()); + map.put("tglPelayanan", e.get("tglPelayanan")); + map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString())); + map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString())); + map.put("jenisRuangan", e.get("jenisRuangan").toString()); + map.put("bulanPulangIbu", e.get("bulanPulangIbu").toString()); + map.put("keterangan", e.get("keterangan").toString()); + }); + result.add(map); + })))))))); + return result; + } + + private List> groupingKategoriFixedPay(List> data) { + Map>>>>>>>> collected = data + .stream() + .collect(Collectors.groupingBy(o1 -> Integer.parseInt(o1.get("idProduk").toString()), Collectors + .groupingBy(o2 -> Double.parseDouble(o2.get("hargaJasa").toString()), Collectors.groupingBy( + o3 -> Double.parseDouble(o3.get("hargaJual").toString()), + Collectors.groupingBy(o4 -> Integer.parseInt(o4.get("idKelompokPasien").toString()), + Collectors.groupingBy(o5 -> o5.get("jenisRuangan").toString(), + Collectors.groupingBy(o6 -> o6.get("bulanPulangIbu").toString(), + Collectors.groupingBy( + o7 -> o7.get("keterangan").toString())))))))); + List> result = new ArrayList<>(); + collected.forEach((k1, v1) -> v1.forEach((k2, v2) -> v2.forEach((k3, v3) -> v3 + .forEach((k4, v4) -> v4.forEach((k5, v5) -> v5.forEach((k6, v6) -> v6.forEach((k7, v7) -> { + HashMap map = new HashMap<>(); + map.put("idProduk", k1); + map.put("hargaJasa", k2); + map.put("hargaJual", k3); + map.put("idKelompokPasien", k4); + map.put("jenisRuangan", k5); + map.put("bulanPulangIbu", k6); + map.put("keterangan", k7); + List> detail = new ArrayList<>(); + v7.forEach(d -> { + Map mapCount = new HashMap<>(); + mapCount.put("jumlah", d.get("jumlah")); + mapCount.put("norecs", d.get("norecs")); + mapCount.put("tanggal", d.get("tanggal")); + detail.add(mapCount); + }); + map.put("detail", detail); + double jumlah = v7.stream().mapToDouble(e -> Double.parseDouble(e.get("jumlah").toString())).sum(); + map.put("jumlah", jumlah); + double jumlahHargaJasa = jumlah * Double.parseDouble(map.get("hargaJasa").toString()); + map.put("jumlahHargaJasa", jumlahHargaJasa); + Optional> first = v7.stream().findFirst(); + first.ifPresent(e -> { + map.put("namaProduk", e.get("namaProduk").toString()); + map.put("kelompokPasien", e.get("kelompokPasien").toString()); + map.put("tglPelayanan", e.get("tglPelayanan")); + map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString())); + map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString())); + map.put("jenisRuangan", e.get("jenisRuangan").toString()); + map.put("bulanPulangIbu", e.get("bulanPulangIbu").toString()); + map.put("keterangan", e.get("keterangan").toString()); + }); + result.add(map); + }))))))); + return result; + } + + private List> transformPelayananKepalaPaketFixedPay(List> listData) { + listData.forEach(d -> { + if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% komponen tarif, sayatan ke-" + d.get("urutanSayatan").toString()); + }); + listData.forEach(d -> { + double hargaJasa = Double.parseDouble(d.get("hargaJasaD").toString()) + + Double.parseDouble(d.get("hargaJasaAs").toString()) + + Double.parseDouble(d.get("hargaJasaAn").toString()); + d.put("tglPulangIbu", null); + d.put("bulanPulangIbu", ""); + d.put("hargaJasa", hargaJasa); + d.put("isBatalPaket", false); + }); + return listData; + } + + @Override + public Map logbookRemunTarifDokter(Integer idPegawai, String bulan, Map data) { + Map result = new HashMap<>(); + List listIdProduk = new ArrayList<>(); + List listPersenJasa = new ArrayList<>(); + List listHargaJasa = new ArrayList<>(); + List listHargaJual = new ArrayList<>(); + List listIdKelompokPasien = new ArrayList<>(); + List listTanggal = 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; + if (CommonUtil.isNotNullOrEmpty(data)) { + remunFfs = data; + } else { + remunFfs = this.splitRemunFfs(idPegawai, bulan); + } + @SuppressWarnings("unchecked") + List> listData = (List>) remunFfs.get("remun"); + Double target = Double.parseDouble(remunFfs.get("targetRemun").toString()); + String targetFormatted = remunFfs.get("targetRemunFormatted").toString(); + /* + * Mendapatkan persentase jasa + */ + double persenOperator = Double.parseDouble(GetSettingDataFixed("persenRemunOperatorIBS")); + double persenAsistenIBS = Double.parseDouble(GetSettingDataFixed("persenRemunAsistenIBS")); + double persenAnestesi = Double.parseDouble(GetSettingDataFixed("persenRemunAnestesiIBS")); + double persenRadiologi = Double.parseDouble(GetSettingDataFixed("persenRemunRadiologi")); + double persenLaboratorium = Double.parseDouble(GetSettingDataFixed("persenRemunLaboratorium")); + double persenRehabMedik = Double.parseDouble(GetSettingDataFixed("persenRemunRehabMedik")); + double persenKonsultasi = Double.parseDouble(GetSettingDataFixed("persenRemunKonsultasiDokter")); + double persenVisite = Double.parseDouble(GetSettingDataFixed("persenRemunVisiteDokter")); + double persenTindakan = Double.parseDouble(GetSettingDataFixed("persenRemunTindakanDokter")); + double persenTarifJasaBedah = Double.parseDouble(GetSettingDataFixed("persenTarifJasaBedah")); + double persenTarifJasaICU = Double.parseDouble(GetSettingDataFixed("persenTarifJasaICU")); + double persenRemunDokterPA = Double.parseDouble(GetSettingDataFixed("persenRemunDokterPA")); + double persenRemunDokterUmumHD = Double.parseDouble(GetSettingDataFixed("persenRemunDokterUmumHD")); + double persenRemunLabGenetika = Double.parseDouble(GetSettingDataFixed("persenRemunLabGenetika")); + double persenRemunTerapis = Double.parseDouble(GetSettingDataFixed("persenRemunTerapis")); + /* + * 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 terapisRehabMedik = mapJabatanProfesiDao.findIdPegawaiByProfesiIn(Arrays.asList(TERAPI)); + List idProdukLabGenetikaLuarRuangan = splitDataSettingDatafixed("idProdukLabGenetikaLuarRuangan"); + /* + * Set persen jasa dan harga jasa pasien bpjs di ibs, icu + */ + double persenTarifIBS = persenTarifJasaBedah / 100; + double persenTarifICU = persenTarifJasaICU / 100; + /* + * 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 (drKsmUmumList.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenRemunDokterUmumHD + "%"); + d.put("hargaJasa", persenRemunDokterUmumHD / 100 * hargaJual); + } else if (terapisRehabMedik.contains(idPegawai)) { + d.put("persenJasa", persenRemunTerapis + "%"); + d.put("hargaJasa", persenRemunTerapis / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) + && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) + && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + double persenJasa = persenOperator / 100; + d.put("persenJasa", persenOperator + "%"); + d.put("keterangan", "Dari " + persenTarifJasaBedah + "% tarif" + keteranganTambahan); + d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) + && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) + && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + double persenJasa = persenAsistenIBS / 100; + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("keterangan", "Dari " + persenTarifJasaBedah + "% tarif" + keteranganTambahan); + d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) + && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) + && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + double persenJasa = persenAnestesi / 100; + d.put("persenJasa", persenAnestesi + "%"); + d.put("keterangan", "Dari " + persenTarifJasaBedah + "% tarif" + keteranganTambahan); + d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + } 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"))) { + d.put("persenJasa", persenOperator + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenOperator / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } 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"))) { + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenAsistenIBS / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } 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"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenAnestesi / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenOperator + "%"); + d.put("hargaJasa", persenOperator / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("hargaJasa", persenAsistenIBS / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + } else if (RADIOLOGI.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenRadiologi + "%"); + d.put("hargaJasa", persenRadiologi / 100 * hargaJual); + } else if (REHAB_MEDIK.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenRehabMedik + "%"); + d.put("hargaJasa", persenRehabMedik / 100 * hargaJual); + } else if (KONSULTASI.equals(d.get("idGolonganProduk"))) { + d.put("persenJasa", persenKonsultasi + "%"); + d.put("hargaJasa", persenKonsultasi / 100 * hargaJual); + } else if (VISIT.equals(d.get("idGolonganProduk"))) { + d.put("persenJasa", persenVisite + "%"); + d.put("hargaJasa", persenVisite / 100 * hargaJual); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenTindakan + "%"); + d.put("hargaJasa", persenTindakan / 100 * hargaJual); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + } else if (drKkGenetika.contains(idPegawai) + && idProdukLabGenetikaLuarRuangan.contains(Integer.parseInt(d.get("idProduk").toString())) + && (date.before(new Date(1690822799000L)) || date.equals(new Date(1690822799000L)))) { + d.put("persenJasa", persenRemunLabGenetika + "%"); + d.put("hargaJasa", persenRemunLabGenetika / 100 * hargaJual); + } else if (Arrays.asList(GENETIKA).contains(Integer.parseInt(d.get("idRuangan").toString()))) { + d.put("persenJasa", persenRemunLabGenetika + "%"); + d.put("hargaJasa", persenRemunLabGenetika / 100 * hargaJual); + } else if (drKkPatologiAnatomiList.contains(idPegawai)) { + d.put("persenJasa", persenRemunDokterPA + "%"); + d.put("hargaJasa", persenRemunDokterPA / 100 * hargaJual); + } else if (LABORATORIUM.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenLaboratorium + "%"); + d.put("hargaJasa", persenLaboratorium / 100 * hargaJual); + } else if (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) + && Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString()))) { + double persenJasa = persenTindakan / 100; + d.put("persenJasa", persenTindakan + "%"); + d.put("keterangan", "Dari " + persenTarifJasaICU + "% tarif" + keteranganTambahan); + d.put("hargaJasa", persenJasa * persenTarifICU * hargaJual); + } else { + d.put("persenJasa", persenTindakan + "%"); + d.put("hargaJasa", persenTindakan / 100 * hargaJual); + } + } + /* + * 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()); + }); + /* + * Pengelompokkan tanggal pelayanan + */ + List> dataTanggal = groupingTanggalRemun(listData); + /* + * Pengelompokkan produk layanan + */ + List> dataResult = groupingKategoriRemun(dataTanggal); + /* + * Final sorting + */ + dataResult = dataResult.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())).collect(Collectors.toList()); + dataResult.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"); + }); + /* + * Put all result mapping + */ + result.put("data", dataResult); + result.put("target", target); + result.put("targetFormatted", targetFormatted); + return result; + } + + private List> groupingTanggalRemun(List> listData) { + Map>>>>>>>> collectTanggal = listData + .stream() + .collect(Collectors.groupingBy(o1 -> Integer.parseInt(o1.get("idProduk").toString()), + Collectors.groupingBy(o2 -> o2.get("persenJasa").toString(), Collectors.groupingBy( + o3 -> Double.parseDouble(o3.get("hargaJasa").toString()), Collectors.groupingBy( + o4 -> Double.parseDouble(o4.get("hargaJual").toString()), Collectors + .groupingBy( + o5 -> Integer.parseInt( + o5.get("idKelompokPasien").toString()), + Collectors.groupingBy(o6 -> o6.get("keterangan").toString(), + Collectors.groupingBy( + o7 -> o7.get("tanggal").toString())))))))); + List> result = new ArrayList<>(); + collectTanggal.forEach((k1, v1) -> v1.forEach((k2, v2) -> v2.forEach((k3, v3) -> v3 + .forEach((k4, v4) -> v4.forEach((k5, v5) -> v5.forEach((k6, v6) -> v6.forEach((k7, v7) -> { + HashMap map = new HashMap<>(); + map.put("idProduk", k1); + map.put("persenJasa", k2); + map.put("hargaJasa", k3); + map.put("hargaJual", k4); + map.put("idKelompokPasien", k5); + map.put("keterangan", k6); + map.put("tanggal", k7); + List norecs = v7.stream().map(e -> e.get("idPelayananPasienPetugas").toString()) + .collect(Collectors.toList()); + map.put("norecs", norecs); + double jumlah = v7.stream().mapToDouble(e -> Double.parseDouble(e.get("jumlah").toString())).sum(); + map.put("jumlah", jumlah); + Optional> first = v7.stream().findFirst(); + first.ifPresent(e -> { + map.put("namaProduk", e.get("namaProduk").toString()); + map.put("kelompokPasien", e.get("kelompokPasien").toString()); + map.put("keterangan", e.get("keterangan").toString()); + map.put("tglPelayanan", e.get("tglPelayanan")); + map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString())); + map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString())); + }); + result.add(map); + }))))))); + return result; + } + + private List> groupingKategoriRemun(List> data) { + Map>>>>>>> collected = data + .stream() + .collect(Collectors.groupingBy(o1 -> Integer.parseInt(o1.get("idProduk").toString()), + Collectors.groupingBy(o2 -> o2.get("persenJasa").toString(), Collectors.groupingBy( + o3 -> Double.parseDouble(o3.get("hargaJasa").toString()), Collectors.groupingBy( + o4 -> Double.parseDouble(o4.get("hargaJual").toString()), Collectors + .groupingBy( + o5 -> Integer.parseInt(o5.get("idKelompokPasien") + .toString()), + Collectors.groupingBy( + o6 -> o6.get("keterangan").toString()))))))); + List> result = new ArrayList<>(); + collected.forEach((k1, v1) -> v1.forEach((k2, v2) -> v2 + .forEach((k3, v3) -> v3.forEach((k4, v4) -> v4.forEach((k5, v5) -> v5.forEach((k6, v6) -> { + HashMap map = new HashMap<>(); + map.put("idProduk", k1); + map.put("persenJasa", k2); + map.put("hargaJasa", k3); + map.put("hargaJual", k4); + map.put("idKelompokPasien", k5); + map.put("keterangan", k6); + List> detail = new ArrayList<>(); + v6.forEach(d -> { + Map mapCount = new HashMap<>(); + mapCount.put("jumlah", d.get("jumlah")); + mapCount.put("norecs", d.get("norecs")); + mapCount.put("tanggal", d.get("tanggal")); + detail.add(mapCount); + }); + map.put("detail", detail); + double jumlah = v6.stream().mapToDouble(e -> Double.parseDouble(e.get("jumlah").toString())).sum(); + map.put("jumlah", jumlah); + double jumlahHargaJasa = jumlah * Double.parseDouble(map.get("hargaJasa").toString()); + map.put("jumlahHargaJasa", jumlahHargaJasa); + Optional> first = v6.stream().findFirst(); + first.ifPresent(e -> { + map.put("namaProduk", e.get("namaProduk").toString()); + map.put("kelompokPasien", e.get("kelompokPasien").toString()); + map.put("keterangan", e.get("keterangan").toString()); + map.put("tglPelayanan", e.get("tglPelayanan")); + map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString())); + map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString())); + }); + result.add(map); + })))))); + return result; + } + + @Override + public List> logbookFfsTarifDokter(Integer idPegawai, String bulan, Map data) { + 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; + if (CommonUtil.isNotNullOrEmpty(data)) { + remunFfs = data; + } else { + remunFfs = this.splitRemunFfs(idPegawai, bulan); + } + @SuppressWarnings("unchecked") + List> listData = (List>) remunFfs.get("ffs"); + /* + * 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")); + double persenJasaTerapis = Double.parseDouble(GetSettingDataFixed("persenJasaTerapis")); + /* + * 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 terapisRehabMedik = mapJabatanProfesiDao.findIdPegawaiByProfesiIn(Arrays.asList(TERAPI)); + 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()))) { + /* + * Set persen jasa dokter luar yang klaim ffs dengan persen jasa + * dari tarif total + */ + d.put("persenJasa", persenBPJS + "%"); + /* + * Set harga jasa klaim jasa ffs pasien bpjs oleh dokter-dokter + * tertentu + */ + d.put("hargaJasa", persenBPJS / 100 * hargaJual); + } else if (drKsmUmumList.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenJasaDokterUmumHD + "%"); + d.put("hargaJasa", persenJasaDokterUmumHD / 100 * hargaJual); + } else if (terapisRehabMedik.contains(idPegawai)) { + d.put("persenJasa", persenJasaTerapis + "%"); + d.put("hargaJasa", persenJasaTerapis / 100 * hargaJual); + } 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"))) { + d.put("persenJasa", persenOperator + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenOperator / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } 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"))) { + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenAsistenIBS / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } 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"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenAnestesi / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenOperator + "%"); + d.put("hargaJasa", persenOperator / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("hargaJasa", persenAsistenIBS / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + } else if (RADIOLOGI.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenRadiologi + "%"); + d.put("hargaJasa", persenRadiologi / 100 * hargaJual); + } else if (REHAB_MEDIK.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenRehabMedik + "%"); + d.put("hargaJasa", persenRehabMedik / 100 * hargaJual); + } else if (KONSULTASI.equals(d.get("idGolonganProduk"))) { + d.put("persenJasa", persenKonsultasi + "%"); + d.put("hargaJasa", persenKonsultasi / 100 * hargaJual); + } else if (VISIT.equals(d.get("idGolonganProduk"))) { + d.put("persenJasa", persenVisite + "%"); + d.put("hargaJasa", persenVisite / 100 * hargaJual); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenTindakan + "%"); + d.put("hargaJasa", persenTindakan / 100 * hargaJual); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + } else if (drKkGenetika.contains(idPegawai) + && idProdukLabGenetikaLuarRuangan.contains(Integer.parseInt(d.get("idProduk").toString())) + && (date.before(new Date(1690822799000L)) || date.equals(new Date(1690822799000L)))) { + d.put("persenJasa", persenJasaLabGenetika + "%"); + d.put("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + } else if (Arrays.asList(GENETIKA).contains(Integer.parseInt(d.get("idRuangan").toString()))) { + d.put("persenJasa", persenJasaLabGenetika + "%"); + d.put("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + } else if (drKkPatologiAnatomiList.contains(idPegawai)) { + d.put("persenJasa", persenJasaDokterPA + "%"); + d.put("hargaJasa", persenJasaDokterPA / 100 * hargaJual); + } else if (LABORATORIUM.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenLaboratorium + "%"); + d.put("hargaJasa", persenLaboratorium / 100 * hargaJual); + } else { + d.put("persenJasa", persenTindakan + "%"); + d.put("hargaJasa", persenTindakan / 100 * hargaJual); + } + } + /* + * 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() + .collect(Collectors.groupingBy(o1 -> Integer.parseInt(o1.get("idProduk").toString()), + Collectors.groupingBy(o2 -> o2.get("persenJasa").toString(), Collectors.groupingBy( + o3 -> Double.parseDouble(o3.get("hargaJasa").toString()), Collectors.groupingBy( + o4 -> Double.parseDouble(o4.get("hargaJual").toString()), Collectors + .groupingBy( + o5 -> Integer.parseInt(o5.get("idKelompokPasien") + .toString()), + Collectors.groupingBy(o6 -> o6.get("jenisRuangan").toString(), + Collectors.groupingBy( + o7 -> o7.get("keterangan").toString(), + Collectors.groupingBy(o7 -> o7.get("tanggal") + .toString()))))))))); + List> result = new ArrayList<>(); + collectTanggal.forEach((k1, v1) -> v1.forEach((k2, v2) -> v2.forEach((k3, v3) -> v3.forEach((k4, v4) -> v4 + .forEach((k5, v5) -> v5.forEach((k6, v6) -> v6.forEach((k7, v7) -> v7.forEach((k8, v8) -> { + HashMap map = new HashMap<>(); + map.put("idProduk", k1); + map.put("persenJasa", k2); + map.put("hargaJasa", k3); + map.put("hargaJual", k4); + map.put("idKelompokPasien", k5); + map.put("jenisRuangan", k6); + map.put("keterangan", k7); + map.put("tanggal", k8); + List norecs = v8.stream().map(e -> e.get("idPelayananPasienPetugas").toString()) + .collect(Collectors.toList()); + map.put("norecs", norecs); + double jumlah = v8.stream().mapToDouble(e -> Double.parseDouble(e.get("jumlah").toString())).sum(); + map.put("jumlah", jumlah); + Optional> first = v8.stream().findFirst(); + first.ifPresent(e -> { + map.put("namaProduk", e.get("namaProduk").toString()); + map.put("kelompokPasien", e.get("kelompokPasien").toString()); + map.put("tglPelayanan", e.get("tglPelayanan")); + map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString())); + map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString())); + map.put("jenisRuangan", e.get("jenisRuangan").toString()); + map.put("keterangan", e.get("keterangan").toString()); + }); + result.add(map); + })))))))); + return result; + } + + private List> groupingKategoriFfs(List> data) { + Map>>>>>>>> collected = data + .stream() + .collect(Collectors.groupingBy(o1 -> Integer.parseInt(o1.get("idProduk").toString()), + Collectors.groupingBy(o2 -> o2.get("persenJasa").toString(), + Collectors.groupingBy(o3 -> Double.parseDouble(o3.get("hargaJasa").toString()), + Collectors.groupingBy(o4 -> Double.parseDouble(o4.get("hargaJual").toString()), + Collectors.groupingBy( + o5 -> Integer.parseInt( + o5.get("idKelompokPasien").toString()), + Collectors.groupingBy(o6 -> o6.get("jenisRuangan").toString(), + Collectors.groupingBy( + o7 -> o7.get("keterangan").toString())))))))); + List> result = new ArrayList<>(); + collected.forEach((k1, v1) -> v1.forEach((k2, v2) -> v2.forEach((k3, v3) -> v3 + .forEach((k4, v4) -> v4.forEach((k5, v5) -> v5.forEach((k6, v6) -> v6.forEach((k7, v7) -> { + HashMap map = new HashMap<>(); + map.put("idProduk", k1); + map.put("persenJasa", k2); + map.put("hargaJasa", k3); + map.put("hargaJual", k4); + map.put("idKelompokPasien", k5); + map.put("jenisRuangan", k6); + map.put("keterangan", k7); + List> detail = new ArrayList<>(); + v7.forEach(d -> { + Map mapCount = new HashMap<>(); + mapCount.put("jumlah", d.get("jumlah")); + mapCount.put("norecs", d.get("norecs")); + mapCount.put("tanggal", d.get("tanggal")); + detail.add(mapCount); + }); + map.put("detail", detail); + double jumlah = v7.stream().mapToDouble(e -> Double.parseDouble(e.get("jumlah").toString())).sum(); + map.put("jumlah", jumlah); + double jumlahHargaJasa = jumlah * Double.parseDouble(map.get("hargaJasa").toString()); + map.put("jumlahHargaJasa", jumlahHargaJasa); + Optional> first = v7.stream().findFirst(); + first.ifPresent(e -> { + map.put("namaProduk", e.get("namaProduk").toString()); + map.put("kelompokPasien", e.get("kelompokPasien").toString()); + map.put("tglPelayanan", e.get("tglPelayanan")); + map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString())); + map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString())); + map.put("jenisRuangan", e.get("jenisRuangan").toString()); + map.put("keterangan", e.get("keterangan").toString()); + }); + result.add(map); + }))))))); + return result; + } + + @Override + public List> logbookFfsLuarTarifDokter(Integer idPegawai, String bulan, + Map data) { + 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; + if (CommonUtil.isNotNullOrEmpty(data)) { + remunFfs = data; + } else { + 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")); + double persenJasaTerapis = Double.parseDouble(GetSettingDataFixed("persenJasaTerapis")); + double persenJasaLuarTerapis = Double.parseDouble(GetSettingDataFixed("persenJasaLuarTerapis")); + /* + * 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 terapisRehabMedik = mapJabatanProfesiDao.findIdPegawaiByProfesiIn(Arrays.asList(TERAPI)); + 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()))) { + /* + * Set persen jasa dokter luar yang klaim ffs dengan persen jasa + * dari tarif total + */ + d.put("persenJasa", persenBPJS + "%"); + /* + * Set harga jasa klaim jasa ffs pasien bpjs oleh dokter-dokter + * tertentu + */ + d.put("hargaJasa", persenBPJS / 100 * hargaJual); + } else if (drKsmUmumList.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenJasaDokterUmumHD + "%"); + d.put("hargaJasa", persenJasaDokterUmumHD / 100 * hargaJual); + } else if (terapisRehabMedik.contains(idPegawai) && REHAB_MEDIK.equals(d.get("idDepartemen")) + && "Eksekutif".equals(d.get("jenisRuangan"))) { + d.put("persenJasa", persenJasaLuarTerapis + "%"); + d.put("hargaJasa", persenJasaLuarTerapis / 100 * hargaJual); + } else if (terapisRehabMedik.contains(idPegawai)) { + d.put("persenJasa", persenJasaTerapis + "%"); + d.put("hargaJasa", persenJasaTerapis / 100 * hargaJual); + } 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"))) { + d.put("persenJasa", persenOperator + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenOperator / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } 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"))) { + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenAsistenIBS / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } 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"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenAnestesi / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenOperator + "%"); + d.put("hargaJasa", persenOperator / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("hargaJasa", persenAsistenIBS / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + } else if (RADIOLOGI.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenRadiologi + "%"); + d.put("hargaJasa", persenRadiologi / 100 * hargaJual); + } else if (REHAB_MEDIK.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenRehabMedik + "%"); + d.put("hargaJasa", persenRehabMedik / 100 * hargaJual); + } else if (KONSULTASI.equals(d.get("idGolonganProduk"))) { + d.put("persenJasa", persenKonsultasi + "%"); + d.put("hargaJasa", persenKonsultasi / 100 * hargaJual); + } else if (VISIT.equals(d.get("idGolonganProduk"))) { + d.put("persenJasa", persenVisite + "%"); + d.put("hargaJasa", persenVisite / 100 * hargaJual); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenTindakan + "%"); + d.put("hargaJasa", persenTindakan / 100 * hargaJual); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + } else if (drKkGenetika.contains(idPegawai) + && idProdukLabGenetikaLuarRuangan.contains(Integer.parseInt(d.get("idProduk").toString())) + && (date.before(new Date(1690822799000L)) || date.equals(new Date(1690822799000L)))) { + d.put("persenJasa", persenJasaLabGenetika + "%"); + d.put("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + } else if (Arrays.asList(GENETIKA).contains(Integer.parseInt(d.get("idRuangan").toString()))) { + d.put("persenJasa", persenJasaLabGenetika + "%"); + d.put("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + } else if (drKkPatologiAnatomiList.contains(idPegawai)) { + d.put("persenJasa", persenJasaDokterPA + "%"); + d.put("hargaJasa", persenJasaDokterPA / 100 * hargaJual); + } else if (LABORATORIUM.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenLaboratorium + "%"); + d.put("hargaJasa", persenLaboratorium / 100 * hargaJual); + } else { + d.put("persenJasa", persenTindakan + "%"); + d.put("hargaJasa", persenTindakan / 100 * hargaJual); + } + } + /* + * 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; + } + + @Override + public List> logbookKlaimMppDokter(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("klaim-mpp"); + /* + * Mendapatkan persentase jasa + */ + double persenBPJS = Double.parseDouble(GetSettingDataFixed("persenJasaBPJS")); + double persenOperatorIBS = 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")); + double persenJasaTerapis = Double.parseDouble(GetSettingDataFixed("persenJasaTerapis")); + /* + * 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 terapisRehabMedik = mapJabatanProfesiDao.findIdPegawaiByProfesiIn(Arrays.asList(TERAPI)); + List idProdukLabGenetikaLuarRuangan = splitDataSettingDatafixed("idProdukLabGenetikaLuarRuangan"); + if (terapisRehabMedik.contains(idPegawai)) + return new ArrayList<>(); + /* + * 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()))) { + /* + * Set persen jasa dokter luar yang klaim ffs dengan persen jasa + * dari tarif total + */ + d.put("persenJasa", persenBPJS + "%"); + /* + * Set harga jasa klaim jasa ffs pasien bpjs oleh dokter-dokter + * tertentu + */ + d.put("hargaJasa", persenBPJS / 100 * hargaJual); + } else if (drKsmUmumList.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenJasaDokterUmumHD + "%"); + d.put("hargaJasa", persenJasaDokterUmumHD / 100 * hargaJual); + } 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"))) { + d.put("persenJasa", persenOperatorIBS + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenOperatorIBS / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } 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"))) { + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenAsistenIBS / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } 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"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) + + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("hargaJasa", persenAnestesi / 100 + * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenOperatorIBS + "%"); + d.put("hargaJasa", persenOperatorIBS / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAsistenIBS + "%"); + d.put("hargaJasa", persenAsistenIBS / 100 * hargaJual); + } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) + || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) + && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + } else if (RADIOLOGI.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenRadiologi + "%"); + d.put("hargaJasa", persenRadiologi / 100 * hargaJual); + } else if (terapisRehabMedik.contains(idPegawai) && REHAB_MEDIK.equals(d.get("idDepartemen")) + && "Eksekutif".equals(d.get("jenisRuangan"))) { + d.put("persenJasa", persenJasaTerapis + "%"); + d.put("hargaJasa", persenJasaTerapis / 100 * hargaJual); + } else if (REHAB_MEDIK.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenRehabMedik + "%"); + d.put("hargaJasa", persenRehabMedik / 100 * hargaJual); + } else if (KONSULTASI.equals(d.get("idGolonganProduk"))) { + d.put("persenJasa", persenKonsultasi + "%"); + d.put("hargaJasa", persenKonsultasi / 100 * hargaJual); + } else if (VISIT.equals(d.get("idGolonganProduk"))) { + d.put("persenJasa", persenVisite + "%"); + d.put("hargaJasa", persenVisite / 100 * hargaJual); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenTindakan + "%"); + d.put("hargaJasa", persenTindakan / 100 * hargaJual); + } else if (drAnastesiList.contains(idPegawai) && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + d.put("persenJasa", persenAnestesi + "%"); + d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + } else if (drKkGenetika.contains(idPegawai) + && idProdukLabGenetikaLuarRuangan.contains(Integer.parseInt(d.get("idProduk").toString())) + && (date.before(new Date(1690822799000L)) || date.equals(new Date(1690822799000L)))) { + d.put("persenJasa", persenJasaLabGenetika + "%"); + d.put("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + } else if (Arrays.asList(GENETIKA).contains(Integer.parseInt(d.get("idRuangan").toString()))) { + d.put("persenJasa", persenJasaLabGenetika + "%"); + d.put("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + } else if (drKkPatologiAnatomiList.contains(idPegawai)) { + d.put("persenJasa", persenJasaDokterPA + "%"); + d.put("hargaJasa", persenJasaDokterPA / 100 * hargaJual); + } else if (LABORATORIUM.equals(d.get("idDepartemen"))) { + d.put("persenJasa", persenLaboratorium + "%"); + d.put("hargaJasa", persenLaboratorium / 100 * hargaJual); + } else { + d.put("persenJasa", persenTindakan + "%"); + d.put("hargaJasa", persenTindakan / 100 * hargaJual); + } + } + /* + * 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; + } + + @Override + public List> logbookFixedPayDokter(Integer idPegawai, String bulan, Map data) { + Map remunFixedPay; + if (CommonUtil.isNotNullOrEmpty(data)) { + remunFixedPay = data; + } else { + remunFixedPay = this.splitRemunFfs(idPegawai, bulan); + } + @SuppressWarnings("unchecked") + List> listData = (List>) remunFixedPay.get("fixed-pay"); + return listData; + } + + @Override + public List> detailLogbookTarifDokter(Integer idPegawai, List norecs) { + List paketBukanFixedPay = splitDataSettingDatafixed("produkPaketBukanFixedPay"); + List> result = pelayananPasienDao.findPelayananPasienByPetugasAndPelayananPasien(idPegawai, + norecs); + List listIdPelayananPaketBukanFixedPay = result.stream() + .filter(r -> paketBukanFixedPay.contains(Integer.parseInt(r.get("idProduk").toString()))) + .map(r -> r.get("idPelayanan").toString()).collect(Collectors.toList()); + if (!listIdPelayananPaketBukanFixedPay.isEmpty()) { + List detailPelayananPaketBukanFixedPay = pelayananPasienDetailDao + .findByPelayananAndKomponenHarga(listIdPelayananPaketBukanFixedPay, TOTAL_TARIF); + 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)); + } + } + return result; + } + } diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/RemunerasiController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/RemunerasiController.java index b6935340..7aa6fcb1 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/RemunerasiController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/RemunerasiController.java @@ -1,22 +1,26 @@ package com.jasamedika.medifirst2000.controller; +import com.jasamedika.medifirst2000.constants.Constants; +import com.jasamedika.medifirst2000.constants.MessageResource; import com.jasamedika.medifirst2000.controller.base.LocaleController; +import com.jasamedika.medifirst2000.core.web.WebConstants; import com.jasamedika.medifirst2000.dto.superapp.request.EmailDto; import com.jasamedika.medifirst2000.dto.superapp.response.AuthorizationDto; import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.service.MapPegawaiJabatanToUnitKerjaService; import com.jasamedika.medifirst2000.service.PelayananPasienService; +import com.jasamedika.medifirst2000.service.RemunerasiService; +import com.jasamedika.medifirst2000.util.CommonUtil; +import com.jasamedika.medifirst2000.util.rest.RestUtil; import com.jasamedika.medifirst2000.vo.LogbookKinerjaVO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.orm.jpa.JpaSystemException; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.List; @@ -45,6 +49,9 @@ public class RemunerasiController extends LocaleController { @Autowired private MapPegawaiJabatanToUnitKerjaService mapPegawaiJabatanToUnitKerjaService; + @Autowired + private RemunerasiService remunerasiService; + @RequestMapping(value = "/logbook-tarif/{idPegawai}/{bulan}", method = GET) public ResponseEntity recap(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { @@ -65,4 +72,126 @@ public class RemunerasiController extends LocaleController { return new ResponseEntity<>(null, INTERNAL_SERVER_ERROR); } } + + @RequestMapping(value = "/dokter/logbook-tarif/remun/{idPegawai}/{bulan}", method = RequestMethod.GET) + public ResponseEntity> getLogbookRemunTarifDokter(HttpServletRequest request, + @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { + try { + Map result = remunerasiService.logbookRemunTarifDokter(idPegawai, bulan, null); + 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 remun 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 remun tarif dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/dokter/logbook-tarif/ffs/{idPegawai}/{bulan}", method = RequestMethod.GET) + public ResponseEntity>> getLogbookFfsTarifDokter(HttpServletRequest request, + @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { + try { + List> result = remunerasiService.logbookFfsTarifDokter(idPegawai, bulan, null); + 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 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 tarif dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/dokter/logbook-tarif/ffs-luar/{idPegawai}/{bulan}", method = RequestMethod.GET) + public ResponseEntity>> getLogbookFfsLuarTarifDokter(HttpServletRequest request, + @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { + try { + List> result = remunerasiService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); + 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/fixed-pay/{idPegawai}/{bulan}", method = RequestMethod.GET) + public ResponseEntity>> getLogbookFixedPay(HttpServletRequest request, + @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { + try { + List> result = remunerasiService.logbookFixedPayDokter(idPegawai, bulan, null); + 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 fixed pay 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 fixed pay 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) { + try { + List> result = remunerasiService.logbookKlaimMppDokter(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 klaim MPP 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 klaim MPP tarif dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/dokter/logbook-tarif/detail/{idPegawai}", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity>> getDetailLogbookTarifDokter(HttpServletRequest request, + @PathVariable("idPegawai") Integer idPegawai, @RequestBody List norecs) { + try { + List> result = remunerasiService.detailLogbookTarifDokter(idPegawai, norecs); + if (CommonUtil.isNotNullOrEmpty(result)) { + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS_OK, + getMessage(MessageResource.LABEL_SUCCESS_OK, request)); + return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); + } else { + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_ERROR, + getMessage(MessageResource.LABEL_ERROR, request)); + return RestUtil.getJsonHttptatus(HttpStatus.BAD_REQUEST, mapHeaderMessage); + } + } catch (ServiceVOException sve) { + LOGGER.error("Got ServiceVOException {} when get detail logbook 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 detail logbook tarif dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } } From 427803d25729ca1e12cdff7dea1b60e5d7210b6a Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Wed, 2 Oct 2024 14:35:36 +0700 Subject: [PATCH 02/10] Update service pelayanan pasien Penambahan get data persentase diskon pegawai --- .../com/jasamedika/medifirst2000/dao/PelayananPasienDao.java | 2 ++ .../jasamedika/medifirst2000/entities/PelayananPasien.java | 4 ++++ .../com/jasamedika/medifirst2000/vo/PelayananPasienVO.java | 3 +++ 3 files changed, 9 insertions(+) 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 1afb0769..751e80ca 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 @@ -200,6 +200,7 @@ public interface PelayananPasienDao extends JpaRepository Date: Wed, 2 Oct 2024 14:36:11 +0700 Subject: [PATCH 03/10] Update RemunerasiServiceImpl.java Percobaan logbook kasus studi konsultasi --- .../service/impl/RemunerasiServiceImpl.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java index 03654a4e..d9cb51e8 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java @@ -278,6 +278,10 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera */ Date tglAwal = DateUtil.startMonth(date); Date tglAkhir = DateUtil.endMonth(date); + { + tglAwal = new Date(1727370000000L); + tglAkhir = new Date(1727456399000L); + } List> listJadwalKerja = pegawaiJadwalKerjaDao.findJamMasukJamPulang(idPegawai, tglAwal, tglAkhir); /* @@ -2333,7 +2337,10 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera d.put("hargaJasa", persenRehabMedik / 100 * hargaJual); } else if (KONSULTASI.equals(d.get("idGolonganProduk"))) { d.put("persenJasa", persenKonsultasi + "%"); - d.put("hargaJasa", persenKonsultasi / 100 * hargaJual); + d.put("hargaJasa", + persenKonsultasi / 100 * hargaJual + * (1 - Double.parseDouble(d.get("persenDiskonPegawai").toString()) / 100) + * (1 - (Double.parseDouble(d.get("persenDiskonD").toString()) / 100))); } else if (VISIT.equals(d.get("idGolonganProduk"))) { d.put("persenJasa", persenVisite + "%"); d.put("hargaJasa", persenVisite / 100 * hargaJual); From f7fb78722d06eeeb15017d29bd42839cc61cf1e6 Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Wed, 2 Oct 2024 20:47:55 +0700 Subject: [PATCH 04/10] Update service remunerasi Hapus API baru, penyesuaian validasi cut-off tarif baru di controller existing --- .../service/impl/RemunerasiServiceImpl.java | 610 ++++++++++++------ .../IkiDanRemunerasiController.java | 67 +- .../controller/RemunerasiController.java | 136 +--- 3 files changed, 475 insertions(+), 338 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java index d9cb51e8..91d0fd96 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java @@ -3,6 +3,7 @@ package com.jasamedika.medifirst2000.service.impl; import com.jasamedika.medifirst2000.constants.Master; import com.jasamedika.medifirst2000.converter.BaseConverterImpl; import com.jasamedika.medifirst2000.dao.*; +import com.jasamedika.medifirst2000.dto.RemunHargaJasa; import com.jasamedika.medifirst2000.entities.*; import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.service.RemunerasiService; @@ -278,10 +279,6 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera */ Date tglAwal = DateUtil.startMonth(date); Date tglAkhir = DateUtil.endMonth(date); - { - tglAwal = new Date(1727370000000L); - tglAkhir = new Date(1727456399000L); - } List> listJadwalKerja = pegawaiJadwalKerjaDao.findJamMasukJamPulang(idPegawai, tglAwal, tglAkhir); /* @@ -398,12 +395,12 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera d.put("hargaJual", d.get("komponenTotalTarif")); d.put("isTermasukProporsi", true); double hargaJual = Double.parseDouble(d.get("hargaJual").toString()); - if (Boolean.parseBoolean(d.get("isSelisihPaket").toString())) - hargaJual -= Double.parseDouble(d.get("hargaDiskon").toString()); if (drKsmUmumList.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { - d.put("hargaJasa", persenRemunDokterUmumHD / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenRemunDokterUmumHD / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); } else if (terapisRehabMedik.contains(idPegawai)) { - d.put("hargaJasa", persenRemunTerapis / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenRemunTerapis / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) d.put("isTermasukProporsi", false); } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) @@ -412,98 +409,122 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { double persenJasa = persenOperator / 100; - d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { double persenJasa = persenAsistenIBS / 100; - d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); } else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen")) || (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan")))) && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { double persenJasa = persenAnestesi / 100; - d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d, false); + 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"))) { - d.put("hargaJasa", persenOperator / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + RemunHargaJasa hargaJasa = hargaJasa(persenOperator / 100, + (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, + false); + 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"))) { - d.put("hargaJasa", persenAsistenIBS / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + RemunHargaJasa hargaJasa = hargaJasa(persenAsistenIBS / 100, + (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, + false); + 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"))) { - d.put("hargaJasa", persenAnestesi / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + RemunHargaJasa hargaJasa = hargaJasa(persenAnestesi / 100, + (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, + false); + 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"))) { - d.put("hargaJasa", persenOperator / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenOperator / 100, hargaJual, d, false); + 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"))) { - d.put("hargaJasa", persenAsistenIBS / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenAsistenIBS / 100, hargaJual, d, false); + 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"))) { - d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenAnestesi / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); } else if (RADIOLOGI.equals(d.get("idDepartemen"))) { - d.put("hargaJasa", persenRadiologi / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenRadiologi / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) d.put("isTermasukProporsi", false); } else if (REHAB_MEDIK.equals(d.get("idDepartemen"))) { - d.put("hargaJasa", persenRehabMedik / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenRehabMedik / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) d.put("isTermasukProporsi", false); } else if (KONSULTASI.equals(d.get("idGolonganProduk"))) { - d.put("hargaJasa", persenKonsultasi / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenKonsultasi / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) d.put("isTermasukProporsi", false); } else if (VISIT.equals(d.get("idGolonganProduk"))) { - d.put("hargaJasa", persenVisite / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenVisite / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) d.put("isTermasukProporsi", false); } else if (drAnastesiList.contains(idPegawai) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { - d.put("hargaJasa", persenTindakan / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenTindakan / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); } else if (drAnastesiList.contains(idPegawai) && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { - d.put("hargaJasa", persenAnestesi / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenAnestesi / 100, hargaJual, d, false); + 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)))) { /* * A rule for claimed <= Jul 31th 2023 */ - d.put("hargaJasa", persenRemunLabGenetika / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenRemunLabGenetika / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) d.put("isTermasukProporsi", false); } else if (Arrays.asList(GENETIKA).contains(Integer.parseInt(d.get("idRuangan").toString()))) { - d.put("hargaJasa", persenRemunLabGenetika / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenRemunLabGenetika / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) d.put("isTermasukProporsi", false); } else if (drKkPatologiAnatomiList.contains(idPegawai)) { - d.put("hargaJasa", persenRemunDokterPA / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenRemunDokterPA / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) d.put("isTermasukProporsi", false); } else if (LABORATORIUM.equals(d.get("idDepartemen"))) { - d.put("hargaJasa", persenLaboratorium / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenLaboratorium / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) d.put("isTermasukProporsi", false); } else if (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) && Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString()))) { double persenJasa = persenTindakan / 100; - d.put("hargaJasa", persenJasa * persenTarifICU * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifICU, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); } else { - d.put("hargaJasa", persenTindakan / 100 * hargaJual); + RemunHargaJasa hargaJasa = hargaJasa(persenTindakan / 100, hargaJual, d, false); + d.put("hargaJasa", hargaJasa.getNilai()); } } /* @@ -1520,8 +1541,8 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera SimpleDateFormat month = new SimpleDateFormat("MMM-yyyy", new Locale("in", "ID")); listData.forEach(d -> { if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) - d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) - + "% komponen tarif, sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)"); }); List paketList = mapProdukPaketDao.findAll(); List allProdukEntriId = paketList.stream().map(MapProdukPaket::getProdukEntriId) @@ -1846,8 +1867,8 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera private List> transformPelayananKepalaPaketFixedPay(List> listData) { listData.forEach(d -> { if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) - d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) - + "% komponen tarif, sayatan ke-" + d.get("urutanSayatan").toString()); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)"); }); listData.forEach(d -> { double hargaJasa = Double.parseDouble(d.get("hargaJasaD").toString()) @@ -1878,8 +1899,6 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera System.out.println(e.getMessage()); return null; } - Locale indonesia = new Locale("in", "ID"); - NumberFormat nf = NumberFormat.getCurrencyInstance(indonesia); Map remunFfs; if (CommonUtil.isNotNullOrEmpty(data)) { remunFfs = data; @@ -1927,128 +1946,164 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera */ 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 (drKsmUmumList.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenRemunDokterUmumHD / 100, hargaJual, d, true); d.put("persenJasa", persenRemunDokterUmumHD + "%"); - d.put("hargaJasa", persenRemunDokterUmumHD / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } else if (terapisRehabMedik.contains(idPegawai)) { + RemunHargaJasa hargaJasa = hargaJasa(persenRemunTerapis / 100, hargaJual, d, true); d.put("persenJasa", persenRemunTerapis + "%"); - d.put("hargaJasa", persenRemunTerapis / 100 * hargaJual); + 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")))) && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) && DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { double persenJasa = persenOperator / 100; + RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d, false); d.put("persenJasa", persenOperator + "%"); - d.put("keterangan", "Dari " + persenTarifJasaBedah + "% tarif" + keteranganTambahan); - d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + d.put("keterangan", "Tarif Jasa Bedah (" + persenTarifJasaBedah + "%)" + 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")))) && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { double persenJasa = persenAsistenIBS / 100; + RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d, false); d.put("persenJasa", persenAsistenIBS + "%"); - d.put("keterangan", "Dari " + persenTarifJasaBedah + "% tarif" + keteranganTambahan); - d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + d.put("keterangan", "Tarif Jasa Bedah (" + persenTarifJasaBedah + "%)" + 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")))) && CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())) && DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { double persenJasa = persenAnestesi / 100; + RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d, false); d.put("persenJasa", persenAnestesi + "%"); - d.put("keterangan", "Dari " + persenTarifJasaBedah + "% tarif" + keteranganTambahan); - d.put("hargaJasa", persenJasa * persenTarifIBS * hargaJual); + d.put("keterangan", "Tarif Jasa Bedah (" + persenTarifJasaBedah + "%)" + 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()); - d.put("hargaJasa", persenOperator / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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()); - d.put("hargaJasa", persenAsistenIBS / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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()); - d.put("hargaJasa", persenAnestesi / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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("hargaJasa", persenOperator / 100 * hargaJual); + 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("hargaJasa", persenAsistenIBS / 100 * hargaJual); + 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("hargaJasa", persenAnestesi / 100 * hargaJual); + 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("hargaJasa", persenRadiologi / 100 * hargaJual); + 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("hargaJasa", persenRehabMedik / 100 * hargaJual); + 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("hargaJasa", persenKonsultasi / 100 * hargaJual); + 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("hargaJasa", persenVisite / 100 * hargaJual); + 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("hargaJasa", persenTindakan / 100 * hargaJual); + 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("hargaJasa", persenAnestesi / 100 * hargaJual); + 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(persenRemunLabGenetika / 100, hargaJual, d, true); d.put("persenJasa", persenRemunLabGenetika + "%"); - d.put("hargaJasa", persenRemunLabGenetika / 100 * hargaJual); + 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(persenRemunLabGenetika / 100, hargaJual, d, true); d.put("persenJasa", persenRemunLabGenetika + "%"); - d.put("hargaJasa", persenRemunLabGenetika / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } else if (drKkPatologiAnatomiList.contains(idPegawai)) { + RemunHargaJasa hargaJasa = hargaJasa(persenRemunDokterPA / 100, hargaJual, d, true); d.put("persenJasa", persenRemunDokterPA + "%"); - d.put("hargaJasa", persenRemunDokterPA / 100 * hargaJual); + 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("hargaJasa", persenLaboratorium / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } else if (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) && Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString()))) { double persenJasa = persenTindakan / 100; + RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifICU, hargaJual, d, false); d.put("persenJasa", persenTindakan + "%"); - d.put("keterangan", "Dari " + persenTarifJasaICU + "% tarif" + keteranganTambahan); - d.put("hargaJasa", persenJasa * persenTarifICU * hargaJual); + d.put("keterangan", "Tarif Jasa ICU (" + persenTarifJasaICU + "%)" + hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } else { + RemunHargaJasa hargaJasa = hargaJasa(persenTindakan / 100, hargaJual, d, true); d.put("persenJasa", persenTindakan + "%"); - d.put("hargaJasa", persenTindakan / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } } /* @@ -2222,8 +2277,6 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera System.out.println(e.getMessage()); return null; } - Locale indonesia = new Locale("in", "ID"); - NumberFormat nf = NumberFormat.getCurrencyInstance(indonesia); Map remunFfs; if (CommonUtil.isNotNullOrEmpty(data)) { remunFfs = data; @@ -2263,110 +2316,141 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera */ 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", persenBPJS / 100 * hargaJual); + 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("hargaJasa", persenJasaDokterUmumHD / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } else if (terapisRehabMedik.contains(idPegawai)) { + RemunHargaJasa hargaJasa = hargaJasa(persenJasaTerapis / 100, hargaJual, d, true); d.put("persenJasa", persenJasaTerapis + "%"); - d.put("hargaJasa", persenJasaTerapis / 100 * hargaJual); + 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()); - d.put("hargaJasa", persenOperator / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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()); - d.put("hargaJasa", persenAsistenIBS / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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()); - d.put("hargaJasa", persenAnestesi / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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("hargaJasa", persenOperator / 100 * hargaJual); + 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("hargaJasa", persenAsistenIBS / 100 * hargaJual); + 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("hargaJasa", persenAnestesi / 100 * hargaJual); + 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("hargaJasa", persenRadiologi / 100 * hargaJual); + 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("hargaJasa", persenRehabMedik / 100 * hargaJual); + 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("hargaJasa", - persenKonsultasi / 100 * hargaJual - * (1 - Double.parseDouble(d.get("persenDiskonPegawai").toString()) / 100) - * (1 - (Double.parseDouble(d.get("persenDiskonD").toString()) / 100))); + 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("hargaJasa", persenVisite / 100 * hargaJual); + 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("hargaJasa", persenTindakan / 100 * hargaJual); + 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("hargaJasa", persenAnestesi / 100 * hargaJual); + 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("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + 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("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + 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("hargaJasa", persenJasaDokterPA / 100 * hargaJual); + 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("hargaJasa", persenLaboratorium / 100 * hargaJual); + 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("hargaJasa", persenTindakan / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } } /* @@ -2546,8 +2630,6 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera System.out.println(e.getMessage()); return null; } - Locale indonesia = new Locale("in", "ID"); - NumberFormat nf = NumberFormat.getCurrencyInstance(indonesia); Map remunFfs; if (CommonUtil.isNotNullOrEmpty(data)) { remunFfs = data; @@ -2588,111 +2670,147 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera */ 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", persenBPJS / 100 * hargaJual); + 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("hargaJasa", persenJasaDokterUmumHD / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } else if (terapisRehabMedik.contains(idPegawai) && REHAB_MEDIK.equals(d.get("idDepartemen")) && "Eksekutif".equals(d.get("jenisRuangan"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenJasaLuarTerapis / 100, hargaJual, d, true); d.put("persenJasa", persenJasaLuarTerapis + "%"); - d.put("hargaJasa", persenJasaLuarTerapis / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } else if (terapisRehabMedik.contains(idPegawai)) { + RemunHargaJasa hargaJasa = hargaJasa(persenJasaTerapis / 100, hargaJual, d, true); d.put("persenJasa", persenJasaTerapis + "%"); - d.put("hargaJasa", persenJasaTerapis / 100 * hargaJual); + 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()); - d.put("hargaJasa", persenOperator / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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()); - d.put("hargaJasa", persenAsistenIBS / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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()); - d.put("hargaJasa", persenAnestesi / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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("hargaJasa", persenOperator / 100 * hargaJual); + 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("hargaJasa", persenAsistenIBS / 100 * hargaJual); + 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("hargaJasa", persenAnestesi / 100 * hargaJual); + 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("hargaJasa", persenRadiologi / 100 * hargaJual); + 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("hargaJasa", persenRehabMedik / 100 * hargaJual); + 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("hargaJasa", persenKonsultasi / 100 * hargaJual); + 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("hargaJasa", persenVisite / 100 * hargaJual); + 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("hargaJasa", persenTindakan / 100 * hargaJual); + 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("hargaJasa", persenAnestesi / 100 * hargaJual); + 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("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + 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("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + 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("hargaJasa", persenJasaDokterPA / 100 * hargaJual); + 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("hargaJasa", persenLaboratorium / 100 * hargaJual); + 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("hargaJasa", persenTindakan / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } } /* @@ -2772,8 +2890,6 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera 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("klaim-mpp"); @@ -2810,108 +2926,142 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera */ 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", persenBPJS / 100 * hargaJual); + 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("hargaJasa", persenJasaDokterUmumHD / 100 * hargaJual); + 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(persenOperatorIBS / 100, + (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, + false); d.put("persenJasa", persenOperatorIBS + "%"); - d.put("keterangan", "Dari " + (100.0 - Double.parseDouble(d.get("persenSayatan").toString())) - + "% tarif" + keteranganTambahan + ", sayatan ke-" + d.get("urutanSayatan").toString()); - d.put("hargaJasa", persenOperatorIBS / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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()); - d.put("hargaJasa", persenAsistenIBS / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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()); - d.put("hargaJasa", persenAnestesi / 100 - * (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual))); + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").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(persenOperatorIBS / 100, hargaJual, d, true); d.put("persenJasa", persenOperatorIBS + "%"); - d.put("hargaJasa", persenOperatorIBS / 100 * hargaJual); + 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("hargaJasa", persenAsistenIBS / 100 * hargaJual); + 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("hargaJasa", persenAnestesi / 100 * hargaJual); + 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("hargaJasa", persenRadiologi / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } else if (terapisRehabMedik.contains(idPegawai) && REHAB_MEDIK.equals(d.get("idDepartemen")) && "Eksekutif".equals(d.get("jenisRuangan"))) { + RemunHargaJasa hargaJasa = hargaJasa(persenJasaTerapis / 100, hargaJual, d, true); d.put("persenJasa", persenJasaTerapis + "%"); - d.put("hargaJasa", persenJasaTerapis / 100 * hargaJual); + 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("hargaJasa", persenRehabMedik / 100 * hargaJual); + 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("hargaJasa", persenKonsultasi / 100 * hargaJual); + 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("hargaJasa", persenVisite / 100 * hargaJual); + 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("hargaJasa", persenTindakan / 100 * hargaJual); + 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("hargaJasa", persenAnestesi / 100 * hargaJual); + 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("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + 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("hargaJasa", persenJasaLabGenetika / 100 * hargaJual); + 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("hargaJasa", persenJasaDokterPA / 100 * hargaJual); + 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("hargaJasa", persenLaboratorium / 100 * hargaJual); + 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("hargaJasa", persenTindakan / 100 * hargaJual); + d.put("keterangan", hargaJasa.getKeterangan()); + d.put("hargaJasa", hargaJasa.getNilai()); } } /* @@ -3008,4 +3158,74 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera return result; } + private RemunHargaJasa hargaJasa(double persenRemunerasi, double hargaJual, Map d, + boolean isFrontNote) { + RemunHargaJasa.RemunHargaJasaBuilder builder = RemunHargaJasa.builder(); + if (KLINIK_KARYAWAN.equals(d.get("idRuangan")) || KLINIK_GIGI_KARYAWAN.equals(d.get("idRuangan"))) { + builder.nilai(0.0); + if (isFrontNote) { + builder.keterangan("Diskon Klinik Karyawan (100%)"); + } else { + builder.keterangan(" + Diskon Klinik Karyawan (100%)"); + } + return builder.build(); + } + double persenDiskonPegawai = Double.parseDouble(d.get("persenDiskonPegawai").toString()); + double persenDiskonJasa = 0.0; + if (DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + persenDiskonJasa = Double.parseDouble(d.get("persenDiskonD").toString()); + } else if (ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + persenDiskonJasa = Double.parseDouble(d.get("persenDiskonAs").toString()); + } else if (DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + persenDiskonJasa = Double.parseDouble(d.get("persenDiskonAn").toString()); + } + builder.nilai(persenRemunerasi * hargaJual * (1 - persenDiskonPegawai / 100) * (1 - persenDiskonJasa / 100)); + if (Boolean.parseBoolean(d.get("isSelisihPaket").toString())) { + if (persenDiskonPegawai > 0.0 && persenDiskonJasa > 0.0) { + if (isFrontNote) { + builder.keterangan("Selisih Paket + Diskon Pegawai (" + persenDiskonPegawai + + "%) + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } else { + builder.keterangan(" + Selisih Paket + Diskon Pegawai (" + persenDiskonPegawai + + "%) + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } + } else if (persenDiskonPegawai > 0.0 && persenDiskonJasa <= 0.0) { + if (isFrontNote) { + builder.keterangan("Selisih Paket + Diskon Pegawai (" + persenDiskonPegawai + "%)"); + } else { + builder.keterangan(" + Selisih Paket + Diskon Pegawai (" + persenDiskonPegawai + "%)"); + } + } else if (persenDiskonPegawai <= 0.0 && persenDiskonJasa > 0.0) { + if (isFrontNote) { + builder.keterangan("Selisih Paket + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } else { + builder.keterangan(" + Selisih Paket + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } + } + } else { + if (persenDiskonPegawai > 0.0 && persenDiskonJasa > 0.0) { + if (isFrontNote) { + builder.keterangan("Diskon Pegawai (" + persenDiskonPegawai + "%) + Diskon Jasa Medis Dokter (" + + persenDiskonJasa + "%)"); + } else { + builder.keterangan(" + Diskon Pegawai (" + persenDiskonPegawai + "%) + Diskon Jasa Medis Dokter (" + + persenDiskonJasa + "%)"); + } + } else if (persenDiskonPegawai > 0.0 && persenDiskonJasa <= 0.0) { + if (isFrontNote) { + builder.keterangan("Diskon Pegawai (" + persenDiskonPegawai + "%)"); + } else { + builder.keterangan(" + Diskon Pegawai (" + persenDiskonPegawai + "%)"); + } + } else if (persenDiskonPegawai <= 0.0 && persenDiskonJasa > 0.0) { + if (isFrontNote) { + builder.keterangan("Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } else { + builder.keterangan(" + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } + } + } + return builder.build(); + } + } 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 b4d48439..c60ffd69 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 @@ -24,6 +24,8 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.text.ParseException; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; import java.util.Map; @@ -118,6 +120,9 @@ public class IkiDanRemunerasiController extends LocaleController> getLoadData(HttpServletRequest request) { try { @@ -197,11 +202,11 @@ public class IkiDanRemunerasiController extends LocaleController> getLogbookRemunTarifDokter(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { try { - Map result = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan, null); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth oct24 = YearMonth.parse("2024-09", formatter); + YearMonth month = YearMonth.parse(bulan, formatter); + Map result; + if (month.isBefore(oct24)) { + result = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan, null); + } else { + result = remunerasiService.logbookRemunTarifDokter(idPegawai, bulan, null); + } mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); @@ -2685,7 +2698,15 @@ public class IkiDanRemunerasiController extends LocaleController>> getLogbookFfsTarifDokter(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { try { - List> result = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, null); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth oct24 = YearMonth.parse("2024-09", formatter); + YearMonth month = YearMonth.parse(bulan, formatter); + List> result; + if (month.isBefore(oct24)) { + result = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, null); + } else { + result = remunerasiService.logbookFfsTarifDokter(idPegawai, bulan, null); + } mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); @@ -2704,7 +2725,15 @@ public class IkiDanRemunerasiController extends LocaleController>> getLogbookFfsLuarTarifDokter(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { try { - List> result = pelayananPasienService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth oct24 = YearMonth.parse("2024-09", formatter); + YearMonth month = YearMonth.parse(bulan, formatter); + List> result; + if (month.isBefore(oct24)) { + result = pelayananPasienService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); + } else { + result = remunerasiService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); + } mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); @@ -2725,7 +2754,15 @@ public class IkiDanRemunerasiController extends LocaleController>> getLogbookKlaimMpp(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { try { - List> result = pelayananPasienService.logbookKlaimMppDokter(idPegawai, bulan); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth oct24 = YearMonth.parse("2024-09", formatter); + YearMonth month = YearMonth.parse(bulan, formatter); + List> result; + if (month.isBefore(oct24)) { + result = pelayananPasienService.logbookKlaimMppDokter(idPegawai, bulan); + } else { + result = remunerasiService.logbookKlaimMppDokter(idPegawai, bulan); + } mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); @@ -2744,7 +2781,15 @@ public class IkiDanRemunerasiController extends LocaleController>> getLogbookFixedPay(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { try { - List> result = pelayananPasienService.logbookFixedPayDokter(idPegawai, bulan, null); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth oct24 = YearMonth.parse("2024-09", formatter); + YearMonth month = YearMonth.parse(bulan, formatter); + List> result; + if (month.isBefore(oct24)) { + result = pelayananPasienService.logbookFixedPayDokter(idPegawai, bulan, null); + } else { + result = remunerasiService.logbookFixedPayDokter(idPegawai, bulan, null); + } mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/RemunerasiController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/RemunerasiController.java index 7aa6fcb1..39fb47f2 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/RemunerasiController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/RemunerasiController.java @@ -1,26 +1,22 @@ package com.jasamedika.medifirst2000.controller; -import com.jasamedika.medifirst2000.constants.Constants; -import com.jasamedika.medifirst2000.constants.MessageResource; import com.jasamedika.medifirst2000.controller.base.LocaleController; -import com.jasamedika.medifirst2000.core.web.WebConstants; import com.jasamedika.medifirst2000.dto.superapp.request.EmailDto; import com.jasamedika.medifirst2000.dto.superapp.response.AuthorizationDto; import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.service.MapPegawaiJabatanToUnitKerjaService; import com.jasamedika.medifirst2000.service.PelayananPasienService; -import com.jasamedika.medifirst2000.service.RemunerasiService; -import com.jasamedika.medifirst2000.util.CommonUtil; -import com.jasamedika.medifirst2000.util.rest.RestUtil; import com.jasamedika.medifirst2000.vo.LogbookKinerjaVO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.orm.jpa.JpaSystemException; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.List; @@ -49,9 +45,6 @@ public class RemunerasiController extends LocaleController { @Autowired private MapPegawaiJabatanToUnitKerjaService mapPegawaiJabatanToUnitKerjaService; - @Autowired - private RemunerasiService remunerasiService; - @RequestMapping(value = "/logbook-tarif/{idPegawai}/{bulan}", method = GET) public ResponseEntity recap(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { @@ -73,125 +66,4 @@ public class RemunerasiController extends LocaleController { } } - @RequestMapping(value = "/dokter/logbook-tarif/remun/{idPegawai}/{bulan}", method = RequestMethod.GET) - public ResponseEntity> getLogbookRemunTarifDokter(HttpServletRequest request, - @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { - try { - Map result = remunerasiService.logbookRemunTarifDokter(idPegawai, bulan, null); - 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 remun 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 remun tarif dokter", jse.getMessage()); - addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); - return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); - } - } - - @RequestMapping(value = "/dokter/logbook-tarif/ffs/{idPegawai}/{bulan}", method = RequestMethod.GET) - public ResponseEntity>> getLogbookFfsTarifDokter(HttpServletRequest request, - @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { - try { - List> result = remunerasiService.logbookFfsTarifDokter(idPegawai, bulan, null); - 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 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 tarif dokter", jse.getMessage()); - addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); - return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); - } - } - - @RequestMapping(value = "/dokter/logbook-tarif/ffs-luar/{idPegawai}/{bulan}", method = RequestMethod.GET) - public ResponseEntity>> getLogbookFfsLuarTarifDokter(HttpServletRequest request, - @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { - try { - List> result = remunerasiService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); - 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/fixed-pay/{idPegawai}/{bulan}", method = RequestMethod.GET) - public ResponseEntity>> getLogbookFixedPay(HttpServletRequest request, - @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { - try { - List> result = remunerasiService.logbookFixedPayDokter(idPegawai, bulan, null); - 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 fixed pay 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 fixed pay 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) { - try { - List> result = remunerasiService.logbookKlaimMppDokter(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 klaim MPP 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 klaim MPP tarif dokter", jse.getMessage()); - addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); - return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); - } - } - - @RequestMapping(value = "/dokter/logbook-tarif/detail/{idPegawai}", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity>> getDetailLogbookTarifDokter(HttpServletRequest request, - @PathVariable("idPegawai") Integer idPegawai, @RequestBody List norecs) { - try { - List> result = remunerasiService.detailLogbookTarifDokter(idPegawai, norecs); - if (CommonUtil.isNotNullOrEmpty(result)) { - mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS_OK, - getMessage(MessageResource.LABEL_SUCCESS_OK, request)); - return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); - } else { - mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_ERROR, - getMessage(MessageResource.LABEL_ERROR, request)); - return RestUtil.getJsonHttptatus(HttpStatus.BAD_REQUEST, mapHeaderMessage); - } - } catch (ServiceVOException sve) { - LOGGER.error("Got ServiceVOException {} when get detail logbook 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 detail logbook tarif dokter", jse.getMessage()); - addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); - return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); - } - } } From eccbc161f54127da75f97eb37c74d393d3e4c6be Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Wed, 2 Oct 2024 20:48:19 +0700 Subject: [PATCH 05/10] Update LogbookTask.java Penyesuaian cut-off tarif baru untuk scheduler rekap logbook dokter --- .../task/schedule/LogbookTask.java | 77 +++++++++++++++---- 1 file changed, 61 insertions(+), 16 deletions(-) diff --git a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java index 8520c089..7b5d3673 100644 --- a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java +++ b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java @@ -5,6 +5,7 @@ import com.jasamedika.medifirst2000.entities.*; import com.jasamedika.medifirst2000.service.LogbookRemunService; import com.jasamedika.medifirst2000.service.PelayananPasienService; import com.jasamedika.medifirst2000.service.RekapLogbookDokterService; +import com.jasamedika.medifirst2000.service.RemunerasiService; import com.jasamedika.medifirst2000.util.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,7 +17,9 @@ import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.YearMonth; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; @@ -31,7 +34,7 @@ import static com.jasamedika.medifirst2000.constants.Master.Profesi.TERAPI; */ @Component public class LogbookTask { - private static final Logger LOGGER = LoggerFactory.getLogger(PasienTask.class); + private static final Logger LOGGER = LoggerFactory.getLogger(LogbookTask.class); @Autowired private PelayananPasienPetugasDao pelayananPasienPetugasDao; @@ -42,6 +45,9 @@ public class LogbookTask { @Autowired private PelayananPasienService pelayananPasienService; + @Autowired + private RemunerasiService remunerasiService; + @Autowired private RekapLogbookDokterService rekapLogbookDokterService; @@ -81,11 +87,18 @@ public class LogbookTask { Set idPegawaiByTglPelayanan = pelayananPasienPetugasDao.findPegawaiByTglPelayanan(tglAwal, tglAkhir); DateFormat df = new SimpleDateFormat("yyyy-MM"); String bulan = df.format(date); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth oct24 = YearMonth.parse("2024-10", formatter); + YearMonth month = YearMonth.parse(bulan, formatter); List models = new ArrayList<>(); idPegawaiByTglPelayanan.forEach(idPegawai -> { { - Map kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan, - null); + Map kinerjaDokter; + if (month.isBefore(oct24)) { + kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan, null); + } else { + kinerjaDokter = remunerasiService.logbookRemunTarifDokter(idPegawai, bulan, null); + } List> remun = (List>) kinerjaDokter.get("data"); List listIdKelompokPasien = new ArrayList<>(); remun.forEach(r -> { @@ -114,7 +127,12 @@ public class LogbookTask { }); } { - List> ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, null); + List> ffs; + if (month.isBefore(oct24)) { + ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, null); + } else { + ffs = remunerasiService.logbookFfsTarifDokter(idPegawai, bulan, null); + } List listJenisRuangan = new ArrayList<>(); List listIdKelompokPasien = new ArrayList<>(); ffs.forEach(r -> { @@ -150,8 +168,12 @@ public class LogbookTask { })); } { - List> fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai, bulan, - null); + List> fixedPay; + if (month.isBefore(oct24)) { + fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai, bulan, null); + } else { + fixedPay = remunerasiService.logbookFixedPayDokter(idPegawai, bulan, null); + } List listJenisRuangan = new ArrayList<>(); List listIdKelompokPasien = new ArrayList<>(); List listBulanIbuPulangRanap = new ArrayList<>(); @@ -222,6 +244,9 @@ public class LogbookTask { private void saveRekapDetailLogbookDokter(Set idPegawaiKelompokKerja, Date date) { DateFormat df = new SimpleDateFormat("yyyy-MM"); String bulan = df.format(date); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth oct24 = YearMonth.parse("2024-09", formatter); + YearMonth month = YearMonth.parse(bulan, formatter); ExecutorService executorService = Executors.newFixedThreadPool(50); CountDownLatch latch = new CountDownLatch(50); try { @@ -237,8 +262,12 @@ public class LogbookTask { logbookRemun.setTanggalTarikData(new Date()); LogbookRemun savedRemun = logbookRemunDao.save(logbookRemun); { - Map kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai, - bulan, null); + Map kinerjaDokter; + if (month.isBefore(oct24)) { + kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan, null); + } else { + kinerjaDokter = remunerasiService.logbookRemunTarifDokter(idPegawai, bulan, null); + } List> remun = (List>) kinerjaDokter.get("data"); for (Map map : remun) { List listNorecPelayananPasienPetugas = new ArrayList<>(); @@ -296,8 +325,12 @@ public class LogbookTask { } } { - List> ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, - null); + List> ffs; + if (month.isBefore(oct24)) { + ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, null); + } else { + ffs = remunerasiService.logbookFfsTarifDokter(idPegawai, bulan, null); + } for (Map fee : ffs) { List listNorecPelayananPasienPetugas = new ArrayList<>(); { @@ -355,8 +388,12 @@ public class LogbookTask { } } { - List> ffs = pelayananPasienService.logbookFfsLuarTarifDokter(idPegawai, - bulan, null); + List> ffs; + if (month.isBefore(oct24)) { + ffs = pelayananPasienService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); + } else { + ffs = remunerasiService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); + } for (Map fee : ffs) { List listNorecPelayananPasienPetugas = new ArrayList<>(); { @@ -414,8 +451,12 @@ public class LogbookTask { } } { - List> fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai, - bulan, null); + List> fixedPay; + if (month.isBefore(oct24)) { + fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai, bulan, null); + } else { + fixedPay = remunerasiService.logbookFixedPayDokter(idPegawai, bulan, null); + } for (Map pay : fixedPay) { List listNorecPelayananPasienPetugas = new ArrayList<>(); { @@ -471,8 +512,12 @@ public class LogbookTask { } } { - List> klaimMpp = pelayananPasienService.logbookKlaimMppDokter(idPegawai, - bulan); + List> klaimMpp; + if (month.isBefore(oct24)) { + klaimMpp = pelayananPasienService.logbookKlaimMppDokter(idPegawai, bulan); + } else { + klaimMpp = remunerasiService.logbookKlaimMppDokter(idPegawai, bulan); + } for (Map mpp : klaimMpp) { List listNorecPelayananPasienPetugas = new ArrayList<>(); { From c358b59f9dc6f64af79e368841e5915286f3999f Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Wed, 2 Oct 2024 20:48:19 +0700 Subject: [PATCH 06/10] Update LogbookTask.java Penyesuaian cut-off tarif baru untuk scheduler rekap logbook dokter --- .../service/impl/RemunerasiServiceImpl.java | 12 ++- .../task/schedule/LogbookTask.java | 77 +++++++++++++++---- 2 files changed, 72 insertions(+), 17 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java index 91d0fd96..884b6b28 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java @@ -3170,6 +3170,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera } return builder.build(); } + double hargaDiskon = Double.parseDouble(d.get("hargaDiskon").toString()); double persenDiskonPegawai = Double.parseDouble(d.get("persenDiskonPegawai").toString()); double persenDiskonJasa = 0.0; if (DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { @@ -3179,7 +3180,12 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera } else if (DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { persenDiskonJasa = Double.parseDouble(d.get("persenDiskonAn").toString()); } - builder.nilai(persenRemunerasi * hargaJual * (1 - persenDiskonPegawai / 100) * (1 - persenDiskonJasa / 100)); + if (Boolean.parseBoolean(d.get("isSelisihPaket").toString())) { + builder.nilai(persenRemunerasi * (hargaJual - hargaDiskon)); + } else { + builder.nilai( + persenRemunerasi * hargaJual * (1 - persenDiskonPegawai / 100) * (1 - persenDiskonJasa / 100)); + } if (Boolean.parseBoolean(d.get("isSelisihPaket").toString())) { if (persenDiskonPegawai > 0.0 && persenDiskonJasa > 0.0) { if (isFrontNote) { @@ -3201,6 +3207,8 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera } else { builder.keterangan(" + Selisih Paket + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); } + } else { + builder.keterangan(""); } } else { if (persenDiskonPegawai > 0.0 && persenDiskonJasa > 0.0) { @@ -3223,6 +3231,8 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera } else { builder.keterangan(" + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); } + } else { + builder.keterangan(""); } } return builder.build(); diff --git a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java index 8520c089..7b5d3673 100644 --- a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java +++ b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java @@ -5,6 +5,7 @@ import com.jasamedika.medifirst2000.entities.*; import com.jasamedika.medifirst2000.service.LogbookRemunService; import com.jasamedika.medifirst2000.service.PelayananPasienService; import com.jasamedika.medifirst2000.service.RekapLogbookDokterService; +import com.jasamedika.medifirst2000.service.RemunerasiService; import com.jasamedika.medifirst2000.util.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,7 +17,9 @@ import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.YearMonth; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; @@ -31,7 +34,7 @@ import static com.jasamedika.medifirst2000.constants.Master.Profesi.TERAPI; */ @Component public class LogbookTask { - private static final Logger LOGGER = LoggerFactory.getLogger(PasienTask.class); + private static final Logger LOGGER = LoggerFactory.getLogger(LogbookTask.class); @Autowired private PelayananPasienPetugasDao pelayananPasienPetugasDao; @@ -42,6 +45,9 @@ public class LogbookTask { @Autowired private PelayananPasienService pelayananPasienService; + @Autowired + private RemunerasiService remunerasiService; + @Autowired private RekapLogbookDokterService rekapLogbookDokterService; @@ -81,11 +87,18 @@ public class LogbookTask { Set idPegawaiByTglPelayanan = pelayananPasienPetugasDao.findPegawaiByTglPelayanan(tglAwal, tglAkhir); DateFormat df = new SimpleDateFormat("yyyy-MM"); String bulan = df.format(date); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth oct24 = YearMonth.parse("2024-10", formatter); + YearMonth month = YearMonth.parse(bulan, formatter); List models = new ArrayList<>(); idPegawaiByTglPelayanan.forEach(idPegawai -> { { - Map kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan, - null); + Map kinerjaDokter; + if (month.isBefore(oct24)) { + kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan, null); + } else { + kinerjaDokter = remunerasiService.logbookRemunTarifDokter(idPegawai, bulan, null); + } List> remun = (List>) kinerjaDokter.get("data"); List listIdKelompokPasien = new ArrayList<>(); remun.forEach(r -> { @@ -114,7 +127,12 @@ public class LogbookTask { }); } { - List> ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, null); + List> ffs; + if (month.isBefore(oct24)) { + ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, null); + } else { + ffs = remunerasiService.logbookFfsTarifDokter(idPegawai, bulan, null); + } List listJenisRuangan = new ArrayList<>(); List listIdKelompokPasien = new ArrayList<>(); ffs.forEach(r -> { @@ -150,8 +168,12 @@ public class LogbookTask { })); } { - List> fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai, bulan, - null); + List> fixedPay; + if (month.isBefore(oct24)) { + fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai, bulan, null); + } else { + fixedPay = remunerasiService.logbookFixedPayDokter(idPegawai, bulan, null); + } List listJenisRuangan = new ArrayList<>(); List listIdKelompokPasien = new ArrayList<>(); List listBulanIbuPulangRanap = new ArrayList<>(); @@ -222,6 +244,9 @@ public class LogbookTask { private void saveRekapDetailLogbookDokter(Set idPegawaiKelompokKerja, Date date) { DateFormat df = new SimpleDateFormat("yyyy-MM"); String bulan = df.format(date); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth oct24 = YearMonth.parse("2024-09", formatter); + YearMonth month = YearMonth.parse(bulan, formatter); ExecutorService executorService = Executors.newFixedThreadPool(50); CountDownLatch latch = new CountDownLatch(50); try { @@ -237,8 +262,12 @@ public class LogbookTask { logbookRemun.setTanggalTarikData(new Date()); LogbookRemun savedRemun = logbookRemunDao.save(logbookRemun); { - Map kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai, - bulan, null); + Map kinerjaDokter; + if (month.isBefore(oct24)) { + kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan, null); + } else { + kinerjaDokter = remunerasiService.logbookRemunTarifDokter(idPegawai, bulan, null); + } List> remun = (List>) kinerjaDokter.get("data"); for (Map map : remun) { List listNorecPelayananPasienPetugas = new ArrayList<>(); @@ -296,8 +325,12 @@ public class LogbookTask { } } { - List> ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, - null); + List> ffs; + if (month.isBefore(oct24)) { + ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, null); + } else { + ffs = remunerasiService.logbookFfsTarifDokter(idPegawai, bulan, null); + } for (Map fee : ffs) { List listNorecPelayananPasienPetugas = new ArrayList<>(); { @@ -355,8 +388,12 @@ public class LogbookTask { } } { - List> ffs = pelayananPasienService.logbookFfsLuarTarifDokter(idPegawai, - bulan, null); + List> ffs; + if (month.isBefore(oct24)) { + ffs = pelayananPasienService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); + } else { + ffs = remunerasiService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); + } for (Map fee : ffs) { List listNorecPelayananPasienPetugas = new ArrayList<>(); { @@ -414,8 +451,12 @@ public class LogbookTask { } } { - List> fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai, - bulan, null); + List> fixedPay; + if (month.isBefore(oct24)) { + fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai, bulan, null); + } else { + fixedPay = remunerasiService.logbookFixedPayDokter(idPegawai, bulan, null); + } for (Map pay : fixedPay) { List listNorecPelayananPasienPetugas = new ArrayList<>(); { @@ -471,8 +512,12 @@ public class LogbookTask { } } { - List> klaimMpp = pelayananPasienService.logbookKlaimMppDokter(idPegawai, - bulan); + List> klaimMpp; + if (month.isBefore(oct24)) { + klaimMpp = pelayananPasienService.logbookKlaimMppDokter(idPegawai, bulan); + } else { + klaimMpp = remunerasiService.logbookKlaimMppDokter(idPegawai, bulan); + } for (Map mpp : klaimMpp) { List listNorecPelayananPasienPetugas = new ArrayList<>(); { From 88c28f678da87508c27f2882a444512c90a0aea5 Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Fri, 4 Oct 2024 15:49:05 +0700 Subject: [PATCH 07/10] Update IkiDanRemunerasiController.java Perbaikan validasi testing cut-off september-oktober --- .../controller/IkiDanRemunerasiController.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 c60ffd69..dbfe82a2 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 @@ -2672,7 +2672,7 @@ public class IkiDanRemunerasiController extends LocaleController result; if (month.isBefore(oct24)) { @@ -2699,7 +2699,7 @@ public class IkiDanRemunerasiController extends LocaleController> result; if (month.isBefore(oct24)) { @@ -2726,7 +2726,7 @@ public class IkiDanRemunerasiController extends LocaleController> result; if (month.isBefore(oct24)) { @@ -2755,7 +2755,7 @@ public class IkiDanRemunerasiController extends LocaleController> result; if (month.isBefore(oct24)) { @@ -2782,7 +2782,7 @@ public class IkiDanRemunerasiController extends LocaleController> result; if (month.isBefore(oct24)) { From ca7e587a3ec8698fba956ef445e28248ce7fb98a Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Fri, 4 Oct 2024 15:49:30 +0700 Subject: [PATCH 08/10] Update PelayananPasienServiceImpl.java Cabut reset diskon unutk jasa obat sudah tidak Rp800 --- .../medifirst2000/service/impl/PelayananPasienServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 92791cf0..f249b7ba 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 @@ -423,7 +423,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel /* * Update Pelayanan Pasien */ - double jasaObat = 800.00; + double jasaObat = 0.00; for (PelayananPasien pp : layanan) { /* * Get diskon jasamedis From 926dc3b30da44215c749469ff5182db1c50c816c Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Fri, 4 Oct 2024 15:50:15 +0700 Subject: [PATCH 09/10] Update RemunerasiServiceImpl.java Perbaikan keterangan tidak ditampilkan jika sayatan ke-1 --- .../service/impl/RemunerasiServiceImpl.java | 114 ++++++++++++++---- 1 file changed, 88 insertions(+), 26 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java index 884b6b28..627121eb 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java @@ -1540,7 +1540,8 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera List drKsmObgyn = pegawaiDao.getDokterByKsm(KSM_OBGYN); SimpleDateFormat month = new SimpleDateFormat("MMM-yyyy", new Locale("in", "ID")); listData.forEach(d -> { - if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) + if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + Double.parseDouble(d.get("persenSayatan").toString()) + "%)"); }); @@ -1866,7 +1867,8 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera private List> transformPelayananKepalaPaketFixedPay(List> listData) { listData.forEach(d -> { - if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) + if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + Double.parseDouble(d.get("persenSayatan").toString()) + "%)"); }); @@ -1994,8 +1996,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenOperator + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2005,8 +2012,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenAsistenIBS + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2016,8 +2028,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenAnestesi + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2348,8 +2365,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenOperator + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2359,8 +2381,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenAsistenIBS + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2370,8 +2397,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenAnestesi + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2708,8 +2740,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenOperator + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2719,8 +2756,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenAsistenIBS + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2730,8 +2772,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenAnestesi + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2953,8 +3000,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenOperatorIBS + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2964,8 +3016,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenAsistenIBS + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) @@ -2975,8 +3032,13 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera (hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d, false); d.put("persenJasa", persenAnestesi + "%"); - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + if (CommonUtil.isNotNullOrEmpty(d.get("urutanSayatan")) + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) { + d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString()) + "%)" + hargaJasa.getKeterangan()); + } else { + 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")))) From 8c558eedbdb01a334ec036fdc5b5977a70f036ec Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Mon, 7 Oct 2024 09:03:26 +0700 Subject: [PATCH 10/10] Update RemunerasiServiceImpl.java Perbaikan keterangan dan hitung harga jasa fixed pay dan diskon pegawai --- .../service/impl/RemunerasiServiceImpl.java | 107 ++++++++++++++++-- 1 file changed, 95 insertions(+), 12 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java index 627121eb..cdccdb60 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/RemunerasiServiceImpl.java @@ -1539,12 +1539,6 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera private List> transformPelayananPaket(Integer idPegawai, List> listData) { List drKsmObgyn = pegawaiDao.getDokterByKsm(KSM_OBGYN); SimpleDateFormat month = new SimpleDateFormat("MMM-yyyy", new Locale("in", "ID")); - listData.forEach(d -> { - if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan")) - && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)"); - }); List paketList = mapProdukPaketDao.findAll(); List allProdukEntriId = paketList.stream().map(MapProdukPaket::getProdukEntriId) .collect(Collectors.toList()); @@ -1736,6 +1730,12 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera : byDetailTarifNonKelas.get().getHargaSatuan())); } }); + listData.forEach(d -> { + d.put("hargaJual", d.get("hargaJasa")); + RemunHargaJasa hargaJasa = hargaJasaFixedPay(d); + d.put("hargaJasa", hargaJasa.getNilai()); + d.put("keterangan", hargaJasa.getKeterangan()); + }); return listData; } @@ -1866,12 +1866,6 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera } private List> transformPelayananKepalaPaketFixedPay(List> listData) { - listData.forEach(d -> { - if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan")) - && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) - d.put("keterangan", "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" - + Double.parseDouble(d.get("persenSayatan").toString()) + "%)"); - }); listData.forEach(d -> { double hargaJasa = Double.parseDouble(d.get("hargaJasaD").toString()) + Double.parseDouble(d.get("hargaJasaAs").toString()) @@ -1881,6 +1875,12 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera d.put("hargaJasa", hargaJasa); d.put("isBatalPaket", false); }); + listData.forEach(d -> { + d.put("hargaJual", d.get("hargaJasa")); + RemunHargaJasa hargaJasa = hargaJasaFixedPay(d); + d.put("hargaJasa", hargaJasa.getNilai()); + d.put("keterangan", hargaJasa.getKeterangan()); + }); return listData; } @@ -3300,4 +3300,87 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera return builder.build(); } + private RemunHargaJasa hargaJasaFixedPay(Map d) { + String keterangan = ""; + RemunHargaJasa.RemunHargaJasaBuilder builder = RemunHargaJasa.builder(); + if (KLINIK_KARYAWAN.equals(d.get("idRuangan")) || KLINIK_GIGI_KARYAWAN.equals(d.get("idRuangan"))) { + builder.nilai(0.0); + builder.keterangan("Diskon Klinik Karyawan (100%)"); + return builder.build(); + } + double hargaJasa = Double.parseDouble(d.get("hargaJasa").toString()); + double hargaDiskon = Double.parseDouble(d.get("hargaDiskon").toString()); + double persenDiskonPegawai = Double.parseDouble(d.get("persenDiskonPegawai").toString()); + double persenDiskonJasa = 0.0; + if (DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana")) && CommonUtil.isNotNullOrEmpty(d.get("persenDiskonD"))) { + persenDiskonJasa = Double.parseDouble(d.get("persenDiskonD").toString()); + } else if (ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana")) + && CommonUtil.isNotNullOrEmpty(d.get("persenDiskonAs"))) { + persenDiskonJasa = Double.parseDouble(d.get("persenDiskonAs").toString()); + } else if (DOKTER_ANASTESI.equals(d.get("idJenisPelaksana")) + && CommonUtil.isNotNullOrEmpty(d.get("persenDiskonAn"))) { + persenDiskonJasa = Double.parseDouble(d.get("persenDiskonAn").toString()); + } + if (Boolean.parseBoolean(d.get("isSelisihPaket").toString())) { + builder.nilai(hargaJasa - hargaDiskon); + } else { + builder.nilai(hargaJasa * (1 - persenDiskonPegawai / 100) * (1 - persenDiskonJasa / 100)); + } + if (CommonUtil.isNotNullOrEmpty(d.get("idSayatan")) && CommonUtil.isNotNullOrEmpty("urutanSayatan") + && Integer.parseInt(d.get("urutanSayatan").toString()) != 1) + keterangan = keterangan + "Diskon Sayatan ke-" + d.get("urutanSayatan").toString() + " (" + + Double.parseDouble(d.get("persenSayatan").toString() + "%"); + if (Boolean.parseBoolean(d.get("isSelisihPaket").toString())) { + if (persenDiskonPegawai > 0.0 && persenDiskonJasa > 0.0) { + if (keterangan.isEmpty()) { + builder.keterangan("Selisih Paket + Diskon Pegawai (" + persenDiskonPegawai + + "%) + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } else { + builder.keterangan(keterangan + " + Selisih Paket + Diskon Pegawai (" + persenDiskonPegawai + + "%) + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } + } else if (persenDiskonPegawai > 0.0 && persenDiskonJasa <= 0.0) { + if (keterangan.isEmpty()) { + builder.keterangan("Selisih Paket + Diskon Pegawai (" + persenDiskonPegawai + "%)"); + } else { + builder.keterangan(keterangan + " + Selisih Paket + Diskon Pegawai (" + persenDiskonPegawai + "%)"); + } + } else if (persenDiskonPegawai <= 0.0 && persenDiskonJasa > 0.0) { + if (keterangan.isEmpty()) { + builder.keterangan("Selisih Paket + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } else { + builder.keterangan( + keterangan + " + Selisih Paket + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } + } else { + builder.keterangan(keterangan); + } + } else { + if (persenDiskonPegawai > 0.0 && persenDiskonJasa > 0.0) { + if (keterangan.isEmpty()) { + builder.keterangan("Diskon Pegawai (" + persenDiskonPegawai + "%) + Diskon Jasa Medis Dokter (" + + persenDiskonJasa + "%)"); + } else { + builder.keterangan(keterangan + " + Diskon Pegawai (" + persenDiskonPegawai + + "%) + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } + } else if (persenDiskonPegawai > 0.0 && persenDiskonJasa <= 0.0) { + if (keterangan.isEmpty()) { + builder.keterangan("Diskon Pegawai (" + persenDiskonPegawai + "%)"); + } else { + builder.keterangan(keterangan + " + Diskon Pegawai (" + persenDiskonPegawai + "%)"); + } + } else if (persenDiskonPegawai <= 0.0 && persenDiskonJasa > 0.0) { + if (keterangan.isEmpty()) { + builder.keterangan("Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } else { + builder.keterangan(keterangan + " + Diskon Jasa Medis Dokter (" + persenDiskonJasa + "%)"); + } + } else { + builder.keterangan(keterangan); + } + } + return builder.build(); + } + }