diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketDao.java index 915b8e55..8faf45d6 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketDao.java @@ -3,10 +3,14 @@ package com.jasamedika.medifirst2000.dao; import com.jasamedika.medifirst2000.entities.MapProdukPaket; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; +import java.util.Set; + /** * @author Salman Manoe * @version 1.0.0 * @since 21 Sep 2023 */ public interface MapProdukPaketDao extends JpaRepository { + List findByPaketIdIn(Set setPaketId); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java index f9019756..3164348b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; +import java.util.Set; /** * @author Salman @@ -20,5 +21,7 @@ public interface MapProdukPaketToProdukDao extends JpaRepository findAllByPaketId(@Param("paketId") Integer paketId); + List findByPaketId(@Param("paketId") Integer paketId); + + List findByProdukIdIn(Set setProdukId); } 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 c9af4388..f8cbe417 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 @@ -12,6 +12,7 @@ import org.springframework.stereotype.Repository; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Set; /** * Repository class for PelayananPasien @@ -183,7 +184,7 @@ public interface PelayananPasienDao extends JpaRepository findAll(@Param("listNoRec") List listNoRec); - @Query("select new Map(pr.id as idProduk,pr.namaProduk as namaProduk," + String LOGBOOK_DOKTER = "select new Map(pr.id as idProduk,pr.namaProduk as namaProduk," + "pr.detailJenisProdukId as idDetailJenisProduk,pr.golonganProdukId as idGolonganProduk," + "djp.jenisProdukId as idJenisProduk," + "pd.voucherPaketId as idVoucherDaftar," + "pd.kelompokPasienId as idKelompokPasien," + "case when pd.kelompokPasienId = 2 then 1 " @@ -202,34 +203,40 @@ public interface PelayananPasienDao extends JpaRepository> findPelayananPasienByPetugasAndTanggal(@Param("pegawaiId") Integer idPegawai, @Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir); + String PARAMETER_LOGBOOK_PAKET = "and pd.voucherPaketId in (:setIdVoucher) " + "and pp.produkId in (:listIdPaket) "; + + @Query(LOGBOOK_DOKTER + WHERE_LOGBOOK_DOKTER + PARAMETER_LOGBOOK_PAKET + GROUP_LOGBOOK_DOKTER + + ORDER_LOGBOOK_DOKTER) + List> findPelayananPasienByPaket(@Param("setIdVoucher") Set setIdVoucher, + @Param("listIdPaket") List listIdPaket); + @Query("select new Map(jp.jenisPetugasPe as jenisPelaksana," + "pr.namaProduk as namaProduk," + "coalesce(pp.hargaJual,0) as hargaJual," + "coalesce(pp.hargaDiscount,0) as diskon," + "coalesce(pp.jumlah,0) as jumlah," + "kp.kelompokPasien as kelompokPasien," @@ -276,4 +293,11 @@ public interface PelayananPasienDao extends JpaRepository> findPelayananPasienByTagihanPendaftaran(@Param("noRegistrasi") String noRegistrasi); List findByPasienDaftarPasienDaftarNoRecIn(List idDaftarList); + + @Query("select new Map(pd.voucherPaketId as norecVoucher," + "pp.produkId as idProduk," + "pp.jumlah as jumlah) " + + "from PelayananPasien pp " + "inner join pp.pasienDaftar apd " + "inner join apd.pasienDaftar pd " + + "where (pp.statusEnabled is true or pp.statusEnabled is null) " + + "and (pd.statusEnabled is true or pd.statusEnabled is null) " + "and pp.strukResepId is null " + + "and pd.voucherPaketId in (:listIdVoucher)") + List> findJumlahLayananByVoucherIn(@Param("listIdVoucher") Set listIdVoucher); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java index d71ceda2..e33c8fb7 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java @@ -2,11 +2,9 @@ package com.jasamedika.medifirst2000.dao; import com.jasamedika.medifirst2000.entities.VoucherPaket; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; import java.util.List; -import java.util.Map; +import java.util.Set; /** * @author Salman @@ -23,10 +21,13 @@ public interface VoucherPaketDao extends JpaRepository { */ VoucherPaket findByKode(String kode); - @Query("select new Map(vp.noRec as idVoucher,vp.paketId as idPaket," + "mproduk.produkId as idProduk," - + "mpaket.produkPaketId as idProdukPaket," + "mpaket.jenisMapping as jenisMapping) " - + "from MapProdukPaketToProduk mproduk " + "inner join mproduk.mapProdukPaket mpaket, VoucherPaket vp " - + "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); + /** + * Query untuk mendapatkan data voucher paket bedasarkan kumpulan no record + * tertentu + * + * @param norecs + * daftar no record data voucher + * @return data entitas VoucherPaket + */ + List findAllByNoRecIn(Set 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 a51aafb7..bfb536cb 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 @@ -44,6 +44,7 @@ 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; +import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.VISITE_UTAMA; /** * Implement class for PelayananPasienService @@ -117,6 +118,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel @Autowired private VoucherPaketDao voucherPaketDao; + @Autowired + private MapProdukPaketDao mapProdukPaketDao; + @Autowired private MapProdukPaketToProdukDao mapProdukPaketToProdukDao; @@ -552,27 +556,32 @@ 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()) - && CommonUtil.isNotNullOrEmpty(d.get("idPaketLayanan")) - && Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan"))) - || (CommonUtil.isNotNullOrEmpty(d.get("idVoucherLayanan")) - && Boolean.parseBoolean(d.get("isPaket").toString()) && CommonUtil - .isNotNullOrEmpty(d.get("idPaketLayanan")) - && !Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan")))) - .collect(Collectors.toList()); + List> listRatedPay = new ArrayList<>(listData); + List> listFixedPay = new ArrayList<>(); + Set listIdVoucher = listData.stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar"))) + .map(d -> d.get("idVoucherDaftar").toString()).collect(Collectors.toSet()); + if (CommonUtil.isNotNullOrEmpty(listIdVoucher)) { + List listVoucher = voucherPaketDao.findAllByNoRecIn(listIdVoucher); + Set listIdPaket = listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toSet()); + /* + * Filtering selain logbook fixed pay + */ + listRatedPay = listData.stream() + .filter(d -> !Boolean.parseBoolean(d.get("isPaket").toString()) + && !listIdPaket.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + /* + * Set awal logbook fixed pay + */ + listFixedPay = listData.stream() + .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) + && (!Boolean.parseBoolean(d.get("isPaket").toString()) + && listIdPaket.contains(Integer.parseInt(d.get("idProduk").toString()))) + || (CommonUtil.isNotNullOrEmpty(d.get("idVoucherLayanan")) + && Boolean.parseBoolean(d.get("isPaket").toString()) && !listIdPaket + .contains(Integer.parseInt(d.get("idProduk").toString())))) + .collect(Collectors.toList()); + } /* * Set persen jasa dan harga jasa pasien bpjs di ibs, icu */ @@ -581,7 +590,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"))) { @@ -682,7 +691,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()); @@ -996,7 +1005,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(); @@ -1028,7 +1037,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(); @@ -1486,68 +1495,19 @@ 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); - // } + if (CommonUtil.isNotNullOrEmpty(listFixedPay)) { + List> listPelayananFixedPay = setPelayananPaket(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> listFixedPay = new ArrayList<>(); - { - List> listKepalaPaket = listData.stream() - .filter(d -> (CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) - && !Boolean.parseBoolean(d.get("isPaket").toString()) - && CommonUtil.isNotNullOrEmpty(d.get("idPaketLayanan")) - && Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan")))) - .collect(Collectors.toList()); - Set listIdVoucherKepalaPaket = listKepalaPaket.stream() - .map(p -> p.get("idVoucherLayanan").toString()).collect(Collectors.toSet()); - List> pelayananKepalaPaket = voucherPaketDao - .findPelayananPaket(new ArrayList<>(listIdVoucherKepalaPaket)); - Set listIdEntri = pelayananKepalaPaket.stream() - .filter(kp -> TINDAKAN_UTAMA.name().equals(kp.get("jenisMapping").toString())) - .map(kp -> Integer.valueOf(kp.get("idProduk").toString())).collect(Collectors.toSet()); - List> listDataUtama = listData.stream() - .filter(d -> listIdEntri.contains(Integer.parseInt(d.get("idProduk").toString()))) - .collect(Collectors.toList()); - listIdVoucherKepalaPaket.forEach(idVoucher -> { - List> dataUtama = listDataUtama.stream() - .filter(d -> idVoucher.equals(d.get("idVoucherLayanan"))).collect(Collectors.toList()); - }); - } + private List> setPelayananPaket(List> listData) { + List> listFixedPay = transformPelayananPaket(listData); /* * 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); + List> dataTanggal = groupingTanggalPaket(listFixedPay); /* * Pengelompokkan produk layanan */ @@ -1585,6 +1545,143 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel return result; } + private List> groupingTanggalPaket(List> listFixedPay) { + 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<>(); + 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 + */ + return groupingTanggalFfs(listFixedPay); + } + + private List> transformPelayananPaket(List> listData) { + Set setIdVoucher = listData.stream().map(d -> d.get("idVoucherDaftar").toString()) + .collect(Collectors.toSet()); + List listVoucher = voucherPaketDao.findAllByNoRecIn(setIdVoucher); + List listMapPaket = mapProdukPaketDao + .findByPaketIdIn(listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toSet())); + List listMapProduk = mapProdukPaketToProdukDao.findByProdukIdIn( + listData.stream().map(d -> Integer.parseInt(d.get("idProduk").toString())).collect(Collectors.toSet())); + List listUndonePaketUtama = new ArrayList<>(); + { + /* + * Mengecek seluruh data layanan lintas logbook untuk paket tindakan + * utama yang belum selesai + */ + List> listPelayanan = pelayananPasienDao.findJumlahLayananByVoucherIn(setIdVoucher); + listVoucher.forEach(voucher -> { + List listPaketUtama = listMapPaket.stream() + .filter(mpaket -> mpaket.getPaketId().equals(voucher.getPaketId()) + && (TINDAKAN_UTAMA.equals(mpaket.getJenisMapping()) + || VISITE_UTAMA.equals(mpaket.getJenisMapping()))) + .collect(Collectors.toList()); + boolean paketUtamaSelesai = true; + for (MapProdukPaket paket : listPaketUtama) { + List listIdEntri = listMapProduk.stream() + .filter(mproduk -> paket.getNoRec().equals(mproduk.getMapProdukPaketId())) + .map(MapProdukPaketToProduk::getProdukId).collect(Collectors.toList()); + Double jumlahLayanan = listPelayanan.stream() + .filter(p -> listIdEntri.contains(Integer.parseInt(p.get("idProduk").toString()))) + .map(p -> Double.parseDouble(p.get("jumlah").toString())).reduce(Double::sum).orElse(0.0); + if (paket.getJumlah().doubleValue() < jumlahLayanan) { + paketUtamaSelesai = false; + break; + } + } + if (!paketUtamaSelesai) + listUndonePaketUtama.add(voucher.getNoRec()); + }); + } + List> listData1; + { + /* + * Penerapan hasil pengecekan lintas logbook untuk logbook yang + * dievaluasi + */ + List setIdPaket = listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toList()); + List listPaketUtama = listMapPaket.stream() + .filter(mpaket -> setIdPaket.contains(mpaket.getPaketId()) + && (TINDAKAN_UTAMA.equals(mpaket.getJenisMapping()) + || VISITE_UTAMA.equals(mpaket.getJenisMapping()))) + .collect(Collectors.toList()); + List listIdMapPaket = listPaketUtama.stream().map(MapProdukPaket::getNoRec) + .collect(Collectors.toList()); + List listIdEntri = listMapProduk.stream() + .filter(mproduk -> listIdMapPaket.contains(mproduk.getMapProdukPaketId())) + .map(MapProdukPaketToProduk::getProdukId).collect(Collectors.toList()); + List> listDataUndone = listData.stream() + .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherLayanan")) + && listUndonePaketUtama.contains(d.get("idVoucherLayanan").toString()) + && listIdEntri.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + Set setIdPelayanan = listDataUndone.stream().map(d -> d.get("idPelayananPasien").toString()) + .collect(Collectors.toSet()); + listData1 = listData.stream().filter(d -> !setIdPelayanan.contains(d.get("idPelayananPasien").toString())) + .collect(Collectors.toList()); + } + Set setIdVoucherFiltered = listData1.stream().map(d -> d.get("idVoucherDaftar").toString()) + .collect(Collectors.toSet()); + List listVoucherFiltered = voucherPaketDao.findAllByNoRecIn(setIdVoucherFiltered); + List listIdPaket = listVoucherFiltered.stream().map(VoucherPaket::getPaketId) + .collect(Collectors.toList()); + List> listData3 = new ArrayList<>(); + { + /* + * Transformasi data tindakan utama dan reduce visite utama + */ + List> listData2 = pelayananPasienDao.findPelayananPasienByPaket(setIdVoucherFiltered, + listIdPaket); + listData3.addAll(listData2); + } + { + /* + * Transformasi data tindakan lain-lain + */ + List listPaketUtama = listMapPaket.stream() + .filter(mpaket -> listIdPaket.contains(mpaket.getPaketId()) + && (TINDAKAN_UTAMA.equals(mpaket.getJenisMapping()) + || VISITE_UTAMA.equals(mpaket.getJenisMapping()))) + .collect(Collectors.toList()); + List listIdMapPaket = listPaketUtama.stream().map(MapProdukPaket::getNoRec) + .collect(Collectors.toList()); + List listIdEntri = listMapProduk.stream() + .filter(mproduk -> listIdMapPaket.contains(mproduk.getMapProdukPaketId())) + .map(MapProdukPaketToProduk::getProdukId).collect(Collectors.toList()); + List> listDataUtama = listData1.stream() + .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) + && setIdVoucherFiltered.contains(d.get("idVoucherDaftar").toString()) + && listIdEntri.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + Set setIdPelayananUtama = listDataUtama.stream().map(d -> d.get("idPelayananPasien").toString()) + .collect(Collectors.toSet()); + listData3.addAll( + listData1.stream().filter(d -> !setIdPelayananUtama.contains(d.get("idPelayananPasien").toString())) + .collect(Collectors.toList())); + } + return listData3; + } + @Override public Map logbookRemunTarifDokter(Integer idPegawai, String bulan) { Map result = new HashMap<>(); @@ -2571,7 +2668,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } { List mappingProdukPaket = mapProdukPaketToProdukDao - .findAllByPaketId(voucher.getPaket().getId()); + .findByPaketId(voucher.getPaket().getId()); List idProdukMapping = mappingProdukPaket.stream().map(MapProdukPaketToProduk::getProdukId) .collect(Collectors.toList()); Optional dtoPaket = dtoList.stream().filter(TagihanPendaftaranDto::getIsPaket) @@ -2801,7 +2898,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } List idDaftarList = listPendaftaran.stream().map(PasienDaftar::getNoRec).collect(Collectors.toList()); List listPelayanan = pelayananPasienDao.findByPasienDaftarPasienDaftarNoRecIn(idDaftarList); - List produkMapping = mapProdukPaketToProdukDao.findAllByPaketId(voucher.getPaketId()); + List produkMapping = mapProdukPaketToProdukDao.findByPaketId(voucher.getPaketId()); List idProdukMapping = produkMapping.stream().map(MapProdukPaketToProduk::getProdukId) .collect(Collectors.toList()); { diff --git a/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/enums/JenisMappingProdukPaket.java b/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/enums/JenisMappingProdukPaket.java index 3f990f77..c229c59e 100644 --- a/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/enums/JenisMappingProdukPaket.java +++ b/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/enums/JenisMappingProdukPaket.java @@ -11,6 +11,12 @@ public enum JenisMappingProdukPaket { * Produk ditandai sebagai tindakan utama di dalam sebuah paket layanan. * Digunakan untuk mengelompokkan hak remunerasi dokter yang bersangkutan */ - TINDAKAN_UTAMA + TINDAKAN_UTAMA, + + /** + * Produk ditandai sebagai visite utama dalam sebuah paket layanan. + * Digunakan untuk mengelompokkan hak remunerasi dokter yang bersangkutan + */ + VISITE_UTAMA }