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 cf52896b..6ee9f81d 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 @@ -185,46 +185,49 @@ public interface PelayananPasienDao extends JpaRepository { * @return data entitas VoucherPaket */ VoucherPaket findByKode(String kode); + + @Query("select new Map(vp.noRec as idVoucher,vp.paketId as idPaket," + + "mpaket.produkId as idProduk,mpaket.produkPaketId as idProdukPaket," + + "mpaket.jenisMapping as jenisMapping) " + "from VoucherPaket vp, MapProdukPaketToProduk mpaket " + + "where vp.paketId = mpaket.paketId " + "and vp.isSelesai is true and vp.isBatal is false " + + "and vp.noRec in (:listNorec)") + List> findPelayananPaket(@Param("listNorec") List listIdVoucherPaket); } 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 c6bd88e8..734ece11 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 @@ -27,7 +27,9 @@ public interface PelayananPasienService { List> logbookFfsTarifDokter(Integer idPegawai, String bulan); - List> logbookKlaimMpp(Integer idPegawai, String bulan); + List> logbookKlaimMppDokter(Integer idPegawai, String bulan); + + List> logbookFixedPayDokter(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 3c6c08f9..dbb56da7 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 @@ -43,6 +43,7 @@ import static com.jasamedika.medifirst2000.constants.Master.KelompokUser.TATA_RE import static com.jasamedika.medifirst2000.constants.Master.Ruangan.*; import static com.jasamedika.medifirst2000.constants.Master.SubUnitKerja.*; import static com.jasamedika.medifirst2000.constants.Master.TipePegawai.PURNA_WAKTU; +import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.TINDAKAN_UTAMA; /** * Implement class for PelayananPasienService @@ -551,6 +552,25 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel */ List> listData = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai, tglAwal, tglAkhir); + /* + * Filtering selain logbook fixed pay + */ + List> listRatedPay = listData.stream().filter( + d -> (CommonUtil.isNullOrEmpty(d.get("isPaket")) || !Boolean.parseBoolean(d.get("isPaket").toString())) + && (CommonUtil.isNullOrEmpty(d.get("idPaketLayanan")) + && !Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan")))) + .collect(Collectors.toList()); + /* + * Set awal logbook fixed pay + */ + List> listFixedPay = listData.stream() + .filter(d -> (CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) + && !Boolean.parseBoolean(d.get("isPaket").toString()) + && Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan"))) + || (CommonUtil.isNotNullOrEmpty(d.get("idVoucherLayanan")) + && Boolean.parseBoolean(d.get("isPaket").toString()) && !Integer + .valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan")))) + .collect(Collectors.toList()); /* * Set persen jasa dan harga jasa pasien bpjs di ibs, icu */ @@ -559,7 +579,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel /* * Mapping set awal persentase jasa remunerasi dan harga jasa remunerasi */ - for (Map d : listData) + for (Map d : listRatedPay) if (DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana")) && CommonUtil.isNotNullOrEmpty(d.get("totalDiskon")) && Double.parseDouble(d.get("totalDiskon").toString()) > 0.0 && CommonUtil.isNullOrEmpty(d.get("idSayatan"))) { @@ -660,7 +680,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Alokasi data diambil terlebih dahulu untuk kelompok BPJS, Jaminan * Kemenkes */ - List> rawDataBpjs0 = listData + 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()); @@ -974,7 +994,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * nonshift */ List> listDataJamKerja = new ArrayList<>(); - for (Map d : listData) { + for (Map d : listRatedPay) { if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) { LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) .toLocalDate(); @@ -1006,7 +1026,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Asumsi jam kerja dokter nonshift */ List> listDataLuarJamKerja = new ArrayList<>(); - for (Map d : listData) { + for (Map d : listRatedPay) { if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) { LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) .toLocalDate(); @@ -1464,6 +1484,94 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel .sorted(Comparator.comparing(o -> o.get("namaProduk").toString())).collect(Collectors.toList()); result.put("klaim-mpp", listPelayananKlaimMpp); } + { + List> listPelayananFixedPay = setPelayananFixedPay(listFixedPay); + result.put("fixed-pay", listPelayananFixedPay); + } + return result; + } + + private List> setPelayananFixedPay(List> listData) { + 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<>(); + List> listKepalaPaket = listData.stream() + .filter(d -> (CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) + && !Boolean.parseBoolean(d.get("isPaket").toString()) + && Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan")))) + .collect(Collectors.toList()); + List listIdVoucherKepalaPaket = listKepalaPaket.stream().map(p -> p.get("idVoucherLayanan").toString()) + .collect(Collectors.toList()); + List> pelayananKepalaPaket = voucherPaketDao.findPelayananPaket(listIdVoucherKepalaPaket); + List listIdEntri = pelayananKepalaPaket.stream() + .filter(kp -> TINDAKAN_UTAMA.name().equals(kp.get("jenisMapping").toString())) + .map(kp -> Integer.valueOf(kp.get("idProduk").toString())) + .collect(Collectors.toList()); + List> listDataUtama = listData.stream() + .filter(d -> listIdEntri.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + List> listFixedPay = new ArrayList<>(); + /* + * Populate data filter + */ + listFixedPay.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(listFixedPay); + /* + * 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; } @@ -2138,7 +2246,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } @Override - public List> logbookKlaimMpp(Integer idPegawai, String bulan) { + public List> logbookKlaimMppDokter(Integer idPegawai, String bulan) { List listIdProduk = new ArrayList<>(); List listPersenJasa = new ArrayList<>(); List listHargaJasa = new ArrayList<>(); @@ -2360,6 +2468,14 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel return result; } + @Override + public List> logbookFixedPayDokter(Integer idPegawai, String bulan) { + Map remunFfs = this.splitRemunFfs(idPegawai, bulan); + @SuppressWarnings("unchecked") + List> listData = (List>) remunFfs.get("klaim-mpp"); + return listData; + } + @Override public List> detailLogbookTarifDokter(Integer idPegawai, List norecs) { return pelayananPasienDao.findPelayananPasienByPetugasAndPelayananPasien(idPegawai, norecs); 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 dd1e1f09..725d8705 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,16 +2672,35 @@ public class IkiDanRemunerasiController extends LocaleController>> getLogbookKlaimMpp(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { try { - List> result = pelayananPasienService.logbookKlaimMpp(idPegawai, bulan); + List> result = pelayananPasienService.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 exception {} when get logbook ffs tarif dokter", sve.getMessage()); + LOGGER.error("Got exception {} 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 exception {} when get logbook ffs tarif dokter", jse.getMessage()); + LOGGER.error("Got exception {} 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/fixed-pay/{idPegawai}/{bulan}", method = RequestMethod.GET) + public ResponseEntity>> getLogbookFixedPay(HttpServletRequest request, + @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { + try { + List> result = pelayananPasienService.logbookFixedPayDokter(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 exception {} 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 exception {} when get logbook fixed pay tarif dokter", jse.getMessage()); addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); }