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 4f5cad14..749ef3a3 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 @@ -198,10 +198,12 @@ public interface PelayananPasienDao extends PagingAndSortingRepository findAll(@Param("noRegistrasi") String noRegistrasi); @Query("select new Map(pr.id as idProduk,pr.namaProduk as namaProduk,pr.detailJenisProdukId as idDetailJenisProduk," - + "djp.jenisProdukId as idJenisProduk," + "kp.id as idKelompokPasien,kp.kelompokPasien as kelompokPasien," - + "kls.id as idKelas,kls.namaKelas as namaKelas," - + "ppp.noRec as idPelayananPasienPetugas,ppp.ObjectPegawaiId as idPegawai," - + "pp.noRec as idPelayananPasien,pp.hargaJual as hargaJual,pp.jumlah as jumlah," + + "djp.jenisProdukId as idJenisProduk," + "kp.id as idKelompokPasien," + + "case when kp.id = 2 then 1 when kp.id = 4 then 2 when kp.id = 8 then 3 when kp.id = 9 then 4 when kp.id = 1 then 5 when kp.id = 5 then 6 when kp.id = 6 then 7 when kp.id = 3 then 8 when kp.id = 7 then 9 else 10 end as sortIdKelompokPasien," + + "kp.kelompokPasien as kelompokPasien," + "kls.id as idKelas," + + "case when kls.id = 6 then 1 when kls.id = 1 then 2 when kls.id = 2 then 3 when kls.id =3 then 4 when kls.id = 8 then 5 when kls.id = 5 then 6 when kls.id = 21 then 7 else 8 end as sortIdKelas," + + "kls.namaKelas as namaKelas," + "ppp.noRec as idPelayananPasienPetugas,ppp.ObjectPegawaiId as idPegawai," + + "pp.noRec as idPelayananPasien,coalesce(pp.hargaJual,0) as hargaJual,coalesce(pp.jumlah,0) as jumlah," + "pp.tglPelayanan as tglPelayanan,to_char(pp.tglPelayanan,'yyyy-MM-dd') as tanggal," + "apd.noRec as idAntrianPasienDiperiksa,apd.pegawaiId as idDPJP," + "ru.departemenId as idDepartemen," + "pd.noRec as idPasienDaftar) " + "from PelayananPasienPetugas ppp " + "inner join ppp.pelayananPasien pp " @@ -213,7 +215,30 @@ public interface PelayananPasienDao extends PagingAndSortingRepository> findPelayananPasienByPetugasAndTanggal(@Param("pegawaiId") Integer idPegawai, @Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir); + + @Query("select new Map(pr.namaProduk as namaProduk," + + "coalesce(pp.hargaJual,0) as hargaJual,coalesce(pp.jumlah,0) as jumlah," + + "kp.kelompokPasien as kelompokPasien," + "kls.namaKelas as namaKelas," + + "to_char(pp.tglPelayanan,'yyyy-MM-dd HH24:MI:ss') as tanggal," + "ru.namaRuangan as namaRuangan," + + "ps.namaPasien as namaPasien,ps.noCm as noCm," + "pd.noRegistrasi as noRegistrasi) " + + "from PelayananPasienPetugas ppp " + "inner join ppp.pelayananPasien pp " + + "inner join pp.pasienDaftar apd " + "inner join apd.pasienDaftar pd " + "left join pp.produk pr " + + "left join pp.kelas kls " + "left join pd.kelompokPasien kp " + "left join pd.pasien ps " + + "left join apd.ruangan ru " + "left join pr.detailJenisProduk djp " + + "where (ppp.statusEnabled is true or ppp.statusEnabled is null) " + + "and (pp.statusEnabled is true or pp.statusEnabled is null) " + + "and (pd.statusEnabled is true or pd.statusEnabled is null) " + "and ppp.ObjectPegawaiId = :pegawaiId " + + "and pp.noRec in (:norecs) " + + "order by case when kp.id = 2 then 1 when kp.id = 4 then 2 when kp.id = 8 then 3 when kp.id = 9 then 4 " + + "when kp.id = 1 then 5 when kp.id = 5 then 6 when kp.id = 6 then 7 when kp.id = 3 then 8 when kp.id = 7 then 9 else 10 end asc, " + + "pp.tglPelayanan, " + "pp.hargaJual, " + + "case when kls.id = 6 then 1 when kls.id = 1 then 2 when kls.id = 2 then 3 when kls.id =3 then 4 when kls.id = 8 then 5 when kls.id = 5 then 6 when kls.id = 21 then 7 else 8 end asc," + + "pr.namaProduk") + List> findPelayananPasienByPetugasAndPelayananPasien(@Param("pegawaiId") Integer idPegawai, + @Param("norecs") List norecs); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java index e1422e40..14c4c789 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java @@ -19,9 +19,11 @@ public interface PelayananPasienService { String resetKlaimDiskon(String noRegistrasi); - Map>> splitRemunFfs(Integer idPegawai, String bulan); + Map splitRemunFfs(Integer idPegawai, String bulan); + + Map logbookRemunTarifDokter(Integer idPegawai, String bulan); - List> logbookRemunTarifDokter(Integer idPegawai, String bulan); - List> logbookFfsTarifDokter(Integer idPegawai, String bulan); + + List> detailLogbookTarifDokter(Integer idPegawai, List norecs); } 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 0f986c19..b8ab3e7c 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 @@ -409,8 +409,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } @Override - public Map>> splitRemunFfs(Integer idPegawai, String bulan) { - Map>> result = new HashMap<>(); + 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 = new Date(); @@ -428,13 +428,24 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel List> listJadwalKerja = pegawaiJadwalKerjaDao.findJamMasukJamPulang(idPegawai, tglAwal, tglAkhir); /* - * Mendapatkan nominal target remunerasi + * 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); - Double targetRemun = 33_000_000.00; - if (CommonUtil.isNotNullOrEmpty(target) && CommonUtil.isNotNullOrEmpty(target.getRupiah())) { + if (CommonUtil.isNotNullOrEmpty(target) && CommonUtil.isNotNullOrEmpty(target.getRupiah())) targetRemun = target.getRupiah(); - } + /* + * Mendapatkan persentase jasa + */ + Double persenKonsultasi = Double.parseDouble(GetSettingDataFixed("persenRemunKonsultasiDokter").toString()); + Double persenVisite = Double.parseDouble(GetSettingDataFixed("persenRemunVisiteDokter").toString()); + Double persenTindakan = Double.parseDouble(GetSettingDataFixed("persenRemunTindakanDokter").toString()); /* * Mendapatkan data mentah pelayanan pasien */ @@ -449,15 +460,22 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Mapping persentase jasa remunerasi - Konsultasi 15% - Visite 20% - * Tindakan 15% */ - for (Map d : listData) { + for (Map d : listData) if (d.get("namaProduk").toString().toLowerCase().contains("konsul")) { - d.put("hargaJasa", 0.15 * Double.parseDouble(d.get("hargaJual").toString())); + d.put("hargaJasa", persenKonsultasi / 100 * Double.parseDouble(d.get("hargaJual").toString())); } else if (d.get("namaProduk").toString().toLowerCase().contains("visit")) { - d.put("hargaJasa", 0.2 * Double.parseDouble(d.get("hargaJual").toString())); + d.put("hargaJasa", persenVisite / 100 * Double.parseDouble(d.get("hargaJual").toString())); } else { - d.put("hargaJasa", 0.15 * Double.parseDouble(d.get("hargaJual").toString())); + d.put("hargaJasa", persenTindakan / 100 * Double.parseDouble(d.get("hargaJual").toString())); } - } + /* + * Alokasi data diambil terlebih dahulu untuk kelompok BPJS, Jaminan + * Kemenkes, dan Jaminan Kesda + */ + List> listDataBpjs = new ArrayList<>(); + for (Map d : listData) + if (Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(d.get("idKelompokPasien"))) + listDataBpjs.add(d); /* * Alokasi data diurutkan dulu untuk jam kerja. Asumsi jam kerja dokter * nonshift @@ -469,7 +487,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel LocalDateTime tglJamPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) .toLocalDateTime(); for (Map j : listJadwalKerja) { - if (CommonUtil.isNotNullOrEmpty(j.get("jamMasuk"))) { + if (!Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(d.get("idKelompokPasien")) + && 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())); @@ -483,7 +502,6 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel break; } } - } } /* @@ -498,28 +516,32 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel .toLocalDateTime(); for (Map j : listJadwalKerja) { LocalDate tglMasuk = ((Date) j.get("tanggal")).toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); - if (CommonUtil.isNullOrEmpty(j.get("jamMasuk"))) { - if (tglPelayanan.isEqual(tglMasuk)) { - listDataLuarJamKerja.add(d); - break; + if (!Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(d.get("idKelompokPasien"))) + if (CommonUtil.isNullOrEmpty(j.get("jamMasuk"))) { + if (tglPelayanan.isEqual(tglMasuk)) { + 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))) { + 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))) { - listDataLuarJamKerja.add(d); - break; - } - } } } /* * Offer data yang sudah diurutkan dalam queue */ Queue> queuePelayanan = new ArrayDeque<>(); + listDataBpjs.forEach(pelayanan -> { + queuePelayanan.offer(pelayanan); + }); listDataJamKerja.forEach(pelayanan -> { queuePelayanan.offer(pelayanan); }); @@ -536,7 +558,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel if (Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(next.get("idKelompokPasien"))) { listPelayananRemun.add(next); capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); - } else if (capaianRemun <= targetRemun) { + } else if (capaianRemun < targetRemun) { listPelayananRemun.add(next); capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); } else { @@ -545,32 +567,48 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel /* * Sorting data remun diurutkan */ - List> remunSorted = listPelayananRemun.stream() - .sorted(Comparator.comparing(o1 -> o1.get("namaProduk").toString())) - .sorted(Comparator.comparing(o2 -> o2.get("namaKelas").toString())) - .sorted(Comparator.comparing(o3 -> (Date) o3.get("tglPelayanan"))).collect(Collectors.toList()); - result.put("remun", remunSorted); + listPelayananRemun = listPelayananRemun.stream() + .sorted(Comparator.comparing(o1 -> (Date) o1.get("tglPelayanan"))) + .sorted(Comparator.comparing(o2 -> Integer.parseInt(o2.get("sortIdKelompokPasien").toString()))) + .sorted(Comparator.comparing(o3 -> Integer.parseInt(o3.get("sortIdKelas").toString()))) + .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 ffs diurutkan */ - List> ffsSorted = listPelayananFfs.stream() - .sorted(Comparator.comparing(o1 -> o1.get("namaProduk").toString())) - .sorted(Comparator.comparing(o2 -> o2.get("namaKelas").toString())) - .sorted(Comparator.comparing(o3 -> (Date) o3.get("tglPelayanan"))).collect(Collectors.toList()); - result.put("ffs", ffsSorted); + listPelayananFfs = listPelayananFfs.stream().sorted(Comparator.comparing(o -> (Date) o.get("tglPelayanan"))) + .sorted(Comparator.comparing(o -> Integer.parseInt(o.get("sortIdKelompokPasien").toString()))) + .sorted(Comparator.comparing(o -> Integer.parseInt(o.get("sortIdKelas").toString()))) + .sorted(Comparator.comparing(o -> o.get("namaProduk").toString())).collect(Collectors.toList()); + result.put("ffs", listPelayananFfs); return result; } @Override - public List> logbookRemunTarifDokter(Integer idPegawai, String bulan) { - List> result = new ArrayList<>(); + public Map logbookRemunTarifDokter(Integer idPegawai, String bulan) { + Map result = new HashMap<>(); + List> dataResult = new ArrayList<>(); List> dataTanggal = new ArrayList<>(); List listIdProduk = new ArrayList<>(); List listHargaJual = new ArrayList<>(); List listIdKelompokPasien = new ArrayList<>(); List listTanggal = new ArrayList<>(); - Map>> remunFfs = this.splitRemunFfs(idPegawai, bulan); - List> listData = remunFfs.get("remun"); + Map 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 persenKonsultasi = Double.parseDouble(GetSettingDataFixed("persenRemunKonsultasiDokter").toString()); + Double persenVisite = Double.parseDouble(GetSettingDataFixed("persenRemunVisiteDokter").toString()); + Double persenTindakan = Double.parseDouble(GetSettingDataFixed("persenRemunTindakanDokter").toString()); /* * Mapping persentase jasa remunerasi - Konsultasi 15% - Visite 20% - * Tindakan 15% @@ -578,13 +616,13 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel for (Map d : listData) { if (d.get("namaProduk").toString().toLowerCase().contains("konsul")) { d.put("persenJasa", "15%"); - d.put("hargaJasa", 0.15 * Double.parseDouble(d.get("hargaJual").toString())); + d.put("hargaJasa", persenKonsultasi / 100 * Double.parseDouble(d.get("hargaJual").toString())); } else if (d.get("namaProduk").toString().toLowerCase().contains("visit")) { d.put("persenJasa", "20%"); - d.put("hargaJasa", 0.2 * Double.parseDouble(d.get("hargaJual").toString())); + d.put("hargaJasa", persenVisite / 100 * Double.parseDouble(d.get("hargaJual").toString())); } else { d.put("persenJasa", "15%"); - d.put("hargaJasa", 0.15 * Double.parseDouble(d.get("hargaJual").toString())); + d.put("hargaJasa", persenTindakan / 100 * Double.parseDouble(d.get("hargaJual").toString())); } } /* @@ -609,6 +647,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel for (String tanggal : listTanggal) { Map mapData = new HashMap<>(); double jumlah = 0.0; + List norecs = new ArrayList<>(); int dataHitungKe = 0; for (Map map : listData) { if (Integer.parseInt(map.get("idProduk").toString()) == idProduk @@ -616,6 +655,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel && Integer.parseInt(map.get("idKelompokPasien").toString()) == idKelompokPasien && map.get("tanggal").toString().equals(tanggal)) { jumlah += Double.parseDouble(map.get("jumlah").toString()); + norecs.add(map.get("idPelayananPasien").toString()); dataHitungKe++; if (dataHitungKe == 1) mapData.putAll(map); @@ -623,6 +663,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } if (CommonUtil.isNotNullOrEmpty(mapData.get("jumlah"))) { mapData.put("jumlah", jumlah); + mapData.put("norecs", norecs); dataTanggal.add(mapData); } } @@ -646,6 +687,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel && Double.parseDouble(map.get("hargaJual").toString()) == hargaJual && Integer.parseInt(map.get("idKelompokPasien").toString()) == idKelompokPasien) { mapCount.put("jumlah", map.get("jumlah")); + mapCount.put("norecs", map.get("norecs")); mapCount.put("tanggal", map.get("tanggal")); detail.add(mapCount); counter++; @@ -665,25 +707,42 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Tambahkan data detail */ mapResult.put("detail", detail); - /* - * Hapus informasi tidak perlu - */ - mapResult.remove("idDPJP"); - mapResult.remove("tglPelayanan"); - mapResult.remove("tanggal"); - mapResult.remove("idKelas"); - mapResult.remove("namaKelas"); - mapResult.remove("idPelayananPasienPetugas"); - mapResult.remove("idPelayananPasien"); - mapResult.remove("idDepartemen"); - mapResult.remove("idPasienDaftar"); - mapResult.remove("idPegawai"); - mapResult.remove("idAntrianPasienDiperiksa"); - result.add(mapResult); + + dataResult.add(mapResult); } } } } + /* + * Final sorting + */ + dataResult = dataResult.stream().sorted(Comparator.comparing(o1 -> (Date) o1.get("tglPelayanan"))) + .sorted(Comparator.comparing(o2 -> Integer.parseInt(o2.get("sortIdKelompokPasien").toString()))) + .sorted(Comparator.comparing(o3 -> Integer.parseInt(o3.get("sortIdKelas").toString()))) + .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; } @@ -692,10 +751,18 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel List> result = new ArrayList<>(); List> dataTanggal = new ArrayList<>(); List listIdProduk = new ArrayList<>(); + List listHargaJual = new ArrayList<>(); List listIdKelompokPasien = new ArrayList<>(); List listTanggal = new ArrayList<>(); - Map>> remunFfs = this.splitRemunFfs(idPegawai, bulan); - List> listData = remunFfs.get("ffs"); + Map remunFfs = this.splitRemunFfs(idPegawai, bulan); + @SuppressWarnings("unchecked") + List> listData = (List>) remunFfs.get("ffs"); + /* + * Mendapatkan persentase jasa + */ + Double persenKonsultasi = Double.parseDouble(GetSettingDataFixed("persenJasaKonsultasiDokter").toString()); + Double persenVisite = Double.parseDouble(GetSettingDataFixed("persenJasaVisiteDokter").toString()); + Double persenTindakan = Double.parseDouble(GetSettingDataFixed("persenJasaTindakanDokter").toString()); /* * Mapping persentase jasa remunerasi - Konsultasi 60% - Visite 60% - * Tindakan 30% @@ -703,13 +770,13 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel for (Map d : listData) { if (d.get("namaProduk").toString().toLowerCase().contains("konsul")) { d.put("persenJasa", "60%"); - d.put("hargaJasa", 0.6 * Double.parseDouble(d.get("hargaJual").toString())); + d.put("hargaJasa", persenKonsultasi / 100 * Double.parseDouble(d.get("hargaJual").toString())); } else if (d.get("namaProduk").toString().toLowerCase().contains("visit")) { d.put("persenJasa", "60%"); - d.put("hargaJasa", 0.6 * Double.parseDouble(d.get("hargaJual").toString())); + d.put("hargaJasa", persenVisite / 100 * Double.parseDouble(d.get("hargaJual").toString())); } else { d.put("persenJasa", "30%"); - d.put("hargaJasa", 0.3 * Double.parseDouble(d.get("hargaJual").toString())); + d.put("hargaJasa", persenTindakan / 100 * Double.parseDouble(d.get("hargaJual").toString())); } } /* @@ -718,6 +785,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel listData.forEach(d -> { if (!listIdProduk.contains(Integer.valueOf(d.get("idProduk").toString()))) listIdProduk.add(Integer.valueOf(d.get("idProduk").toString())); + if (!listHargaJual.contains(Double.valueOf(d.get("hargaJual").toString()))) + listHargaJual.add(Double.valueOf(d.get("hargaJual").toString())); if (!listIdKelompokPasien.contains(Integer.valueOf(d.get("idKelompokPasien").toString()))) listIdKelompokPasien.add(Integer.valueOf(d.get("idKelompokPasien").toString())); if (!listTanggal.contains(d.get("tanggal").toString())) @@ -727,24 +796,30 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Pengelompokkan tanggal pelayanan */ for (Integer idProduk : listIdProduk) { - for (Integer idKelompokPasien : listIdKelompokPasien) { - for (String tanggal : listTanggal) { - Map mapData = new HashMap<>(); - double jumlah = 0.0; - int dataHitungKe = 0; - for (Map map : listData) { - if (Integer.parseInt(map.get("idProduk").toString()) == idProduk - && Integer.parseInt(map.get("idKelompokPasien").toString()) == idKelompokPasien - && map.get("tanggal").toString().equals(tanggal)) { - jumlah += Double.parseDouble(map.get("jumlah").toString()); - dataHitungKe++; - if (dataHitungKe == 1) - mapData.putAll(map); + for (Double hargaJual : listHargaJual) { + for (Integer idKelompokPasien : listIdKelompokPasien) { + for (String tanggal : listTanggal) { + Map mapData = new HashMap<>(); + double jumlah = 0.0; + List norecs = new ArrayList<>(); + int dataHitungKe = 0; + for (Map map : listData) { + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Double.parseDouble(map.get("hargaJual").toString()) == hargaJual + && Integer.parseInt(map.get("idKelompokPasien").toString()) == idKelompokPasien + && map.get("tanggal").toString().equals(tanggal)) { + jumlah += Double.parseDouble(map.get("jumlah").toString()); + norecs.add(map.get("idPelayananPasien").toString()); + dataHitungKe++; + if (dataHitungKe == 1) + mapData.putAll(map); + } + } + if (CommonUtil.isNotNullOrEmpty(mapData.get("jumlah"))) { + mapData.put("jumlah", jumlah); + mapData.put("norecs", norecs); + dataTanggal.add(mapData); } - } - if (CommonUtil.isNotNullOrEmpty(mapData.get("jumlah"))) { - mapData.put("jumlah", jumlah); - dataTanggal.add(mapData); } } } @@ -753,54 +828,75 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Pengelompokkan produk layanan */ for (Integer idProduk : listIdProduk) { - for (Integer idKelompokPasien : listIdKelompokPasien) { - Map mapResult = new HashMap<>(); - List> detail = new ArrayList<>(); - int counter = 0; - double jumlah = 0.0; - double jumlahHargaJasa = 0.0; - for (Map map : dataTanggal) { - Map mapCount = new HashMap<>(); - if (Integer.parseInt(map.get("idProduk").toString()) == idProduk - && Integer.parseInt(map.get("idKelompokPasien").toString()) == idKelompokPasien) { - mapCount.put("jumlah", map.get("jumlah")); - mapCount.put("tanggal", map.get("tanggal")); - detail.add(mapCount); - counter++; - jumlah += Double.parseDouble(map.get("jumlah").toString()); - if (counter == 1) - mapResult.putAll(map); + for (Double hargaJual : listHargaJual) { + for (Integer idKelompokPasien : listIdKelompokPasien) { + Map mapResult = new HashMap<>(); + List> detail = new ArrayList<>(); + int counter = 0; + double jumlah = 0.0; + double jumlahHargaJasa = 0.0; + for (Map map : dataTanggal) { + Map mapCount = new HashMap<>(); + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Double.parseDouble(map.get("hargaJual").toString()) == hargaJual + && Integer.parseInt(map.get("idKelompokPasien").toString()) == idKelompokPasien) { + mapCount.put("jumlah", map.get("jumlah")); + mapCount.put("norecs", map.get("norecs")); + mapCount.put("tanggal", map.get("tanggal")); + detail.add(mapCount); + counter++; + jumlah += Double.parseDouble(map.get("jumlah").toString()); + if (counter == 1) + mapResult.putAll(map); + } + } + if (CommonUtil.isNotNullOrEmpty(mapResult.get("jumlah"))) { + /* + * Tambahkan data total + */ + jumlahHargaJasa = jumlah * Double.parseDouble(mapResult.get("hargaJasa").toString()); + mapResult.put("jumlah", jumlah); + mapResult.put("jumlahHargaJasa", jumlahHargaJasa); + /* + * Tambahkan data detail + */ + mapResult.put("detail", detail); + result.add(mapResult); } - } - if (CommonUtil.isNotNullOrEmpty(mapResult.get("jumlah"))) { - /* - * Tambahkan data total - */ - jumlahHargaJasa = jumlah * Double.parseDouble(mapResult.get("hargaJasa").toString()); - mapResult.put("jumlah", jumlah); - mapResult.put("jumlahHargaJasa", jumlahHargaJasa); - /* - * Tambahkan data detail - */ - mapResult.put("detail", detail); - /* - * Hapus informasi tidak perlu - */ - mapResult.remove("idDPJP"); - mapResult.remove("tglPelayanan"); - mapResult.remove("tanggal"); - mapResult.remove("idKelas"); - mapResult.remove("namaKelas"); - mapResult.remove("idPelayananPasienPetugas"); - mapResult.remove("idPelayananPasien"); - mapResult.remove("idDepartemen"); - mapResult.remove("idPasienDaftar"); - mapResult.remove("idPegawai"); - mapResult.remove("idAntrianPasienDiperiksa"); - result.add(mapResult); } } } + /* + * Final sorting + */ + result = result.stream().sorted(Comparator.comparing(o1 -> (Date) o1.get("tglPelayanan"))) + .sorted(Comparator.comparing(o2 -> Integer.parseInt(o2.get("sortIdKelompokPasien").toString()))) + .sorted(Comparator.comparing(o3 -> Integer.parseInt(o3.get("sortIdKelas").toString()))) + .sorted(Comparator.comparing(o4 -> o4.get("namaProduk").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; + } + + @Override + public List> detailLogbookTarifDokter(Integer idPegawai, List norecs) { + List> result = pelayananPasienDao.findPelayananPasienByPetugasAndPelayananPasien(idPegawai, + norecs); return result; } diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java index 85a1e1fd..3049b049 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 @@ -2730,10 +2730,10 @@ public class IkiDanRemunerasiController extends LocaleController>> getLogbookRemunTarifDokter(HttpServletRequest request, + public ResponseEntity> getLogbookRemunTarifDokter(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { try { - List> result = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan); + Map result = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); @@ -2766,4 +2766,29 @@ public class IkiDanRemunerasiController extends LocaleController>> getDetailLogbookTarifDokter(HttpServletRequest request, + @PathVariable("idPegawai") Integer idPegawai, @RequestBody List norecs) { + try { + List> result = pelayananPasienService.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 exception {} 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 exception {} when get detail logbook tarif dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } }