diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java index 3c633e6a..d5876c94 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java @@ -208,6 +208,8 @@ public final class Master { public static final Integer[] JASA_MEDIS = { 21, 22, 35 }; public static final Integer[] JASA_PARAMEDIS = { 25, 26, 27 }; public static final Integer[] JASA_SARANA = { 6, 38 }; + public static final Integer SPOG_ASISTEN = 206; + public static final Integer SPOG_OPERATOR = 201; } public static final class KomponenIndex { @@ -379,6 +381,7 @@ public final class Master { public static final Integer INS_REKAM_MEDIK = 57; public static final Integer IP3RS = 40; public static final Integer KSM_LAIN = 61; + public static final Integer KSM_OBGYN = 59; } public static final class User { diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HargaNettoProdukByKelasDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HargaNettoProdukByKelasDao.java index 50132db7..eed9a174 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HargaNettoProdukByKelasDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HargaNettoProdukByKelasDao.java @@ -41,8 +41,4 @@ public interface HargaNettoProdukByKelasDao extends JpaRepository> findTarifTindakan(@Param("produkId") Integer idProduk, @Param("listKelasId") List listIdKelas); - - @Query("select hnk from HargaNettoProdukByKelas hnk " + "where hnk.reportDisplay = 'tarif_2022_Nov' " - + "and concat(hnk.produkId,'',hnk.kelasId) in (:concatProdukKelas)") - List findByConcateProdukKelas(@Param("concatProdukKelas") List concatProdukKelas); } 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 5722fc06..b5a5b914 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 @@ -2,6 +2,7 @@ package com.jasamedika.medifirst2000.dao; import com.jasamedika.medifirst2000.entities.MapProdukPaket; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import java.util.List; import java.util.Set; @@ -12,7 +13,9 @@ import java.util.Set; * @since 21 Sep 2023 */ public interface MapProdukPaketDao extends JpaRepository { - List findByPaketIdIn(Set setPaketId); + @Query("select mpaket.paketId from MapProdukPaket mpaket") + Set findPaketId(); - List findByProdukEntriIdIn(Set setProdukPaketId); + @Query("select mpaket.produkEntriId from MapProdukPaket mpaket") + List findProdukEntriId(); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java index c209b495..2bb1dd79 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java @@ -823,6 +823,11 @@ public interface PegawaiDao extends JpaRepository, JpaSpecific + "and p.shiftKerjaId in (1,2) " + "order by p.id asc") List getPegawaiNonshift(); + @Query("select distinct pgw.id " + "from MapPegawaiJabatanToUnitKerja mpj " + "inner join mpj.pegawai pgw " + + "where mpj.statusEnabled is true " + "and pgw.statusEnabled is true " + "and pgw.jenisPegawaiId = 1 " + + "and mpj.unitKerjaPegawaiId = :ksmId") + List getDokterByKsm(@Param("ksmId") Integer ksmId); + @Query("select distinct pgw.id " + "from MapPegawaiJabatanToUnitKerja mpj " + "inner join mpj.pegawai pgw " + "where mpj.statusEnabled is true " + "and pgw.statusEnabled is true " + "and pgw.jenisPegawaiId = 1 " + "and mpj.subUnitKerjaPegawaiId = :subunitKerjaId") 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 440c9d7c..85e1f0a8 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,7 +12,6 @@ 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 @@ -205,7 +204,7 @@ 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," @@ -294,17 +286,12 @@ public interface PelayananPasienDao extends JpaRepository 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); - - @Query("select new Map(pp.noRec as noRec," + "vp.paketId as paketId," + "mpaket.produkEntriId as produkPaketId," - + "mproduk.produkRegulerId as produkId) " + "from PelayananPasien pp, " + "MapProdukPaketToProduk mproduk " - + "inner join pp.pasienDaftar apd " + "inner join pp.voucherPaket vp " + "inner join apd.pasienDaftar pd " - + "inner join mproduk.mapProdukPaket mpaket " + "where vp.paketId = mpaket.paketId " - + "and pp.produkId = mpaket.produkEntriId " + "and pp.noRec in (:listNorec)") - List> findByNorecs(@Param("listNorec") Set listNorec); + @Query("select distinct new Map(vp.pasienId as pasienId," + "vp.paketId as paketId," + + "apd.tglKeluar as tglKeluar) " + "from PelayananPasienPetugas ppp, " + "Ruangan ru, " + "VoucherPaket vp " + + "inner join ppp.pelayananPasien pp " + "inner join pp.pasienDaftar apd " + + "inner join apd.pasienDaftar pd " + "where apd.ruanganId = ru.id " + "and pd.pasienId = vp.pasienId " + + "and ppp.ObjectPegawaiId = :pegawaiId " + "and pp.produkId in (:listProdukEntriId) " + + "and ru.departemenId = 16 " + "order by vp.pasienId, " + "vp.paketId, " + "apd.tglKeluar desc") + List> findPasienPaketDiRanapByDokter(@Param("pegawaiId") Integer idPegawai, + @Param("listProdukEntriId") List listProdukEntriId); } 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 e33c8fb7..e15a4a2a 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 @@ -3,9 +3,6 @@ package com.jasamedika.medifirst2000.dao; import com.jasamedika.medifirst2000.entities.VoucherPaket; import org.springframework.data.jpa.repository.JpaRepository; -import java.util.List; -import java.util.Set; - /** * @author Salman * @version 1.0.0 @@ -20,14 +17,4 @@ public interface VoucherPaketDao extends JpaRepository { * @return data entitas VoucherPaket */ VoucherPaket findByKode(String kode); - - /** - * 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 8b205c7c..e9e67c6c 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 @@ -46,8 +46,8 @@ import static com.jasamedika.medifirst2000.constants.Master.KomponenHarga.*; 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.constants.Master.UnitKerja.KSM_OBGYN; import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.TINDAKAN_UTAMA; -import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.VISITE_UTAMA; /** * Implement class for PelayananPasienService @@ -562,32 +562,17 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel */ List> listRatedPay = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai, tglAwal, tglAkhir); - Set listIdVoucher = listRatedPay.stream() - .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar"))) - .map(d -> d.get("idVoucherDaftar").toString()).collect(Collectors.toSet()); - List> listFixedPay = new ArrayList<>(); - if (CommonUtil.isNotNullOrEmpty(listIdVoucher)) { - List listVoucher = voucherPaketDao.findAllByNoRecIn(listIdVoucher); - Set listIdPaket = listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toSet()); - /* - * Set awal logbook fixed pay - */ - listFixedPay = listRatedPay.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()); - /* - * Filtering selain logbook fixed pay - */ - listRatedPay = listRatedPay.stream() - .filter(d -> !Boolean.parseBoolean(d.get("isPaket").toString()) - && !listIdPaket.contains(Integer.parseInt(d.get("idProduk").toString()))) - .collect(Collectors.toList()); - } + List allPaketId = mapProdukPaketDao.findProdukEntriId(); + allPaketId.addAll(mapProdukPaketDao.findPaketId()); + List> listFixedPay = listRatedPay.stream() + .filter(d -> allPaketId.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + /* + * Filtering selain logbook fixed pay + */ + listRatedPay = listRatedPay.stream() + .filter(d -> !allPaketId.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); /* * Set persen jasa dan harga jasa pasien bpjs di ibs, icu */ @@ -1504,18 +1489,19 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel { List> listPelayananFixedPay = new ArrayList<>(); if (CommonUtil.isNotNullOrEmpty(listFixedPay)) - listPelayananFixedPay = setPelayananPaket(listFixedPay); + listPelayananFixedPay = setPelayananPaket(idPegawai, bulan, listFixedPay); result.put("fixed-pay", listPelayananFixedPay); } return result; } - private List> setPelayananPaket(List> listData) { + private List> setPelayananPaket(Integer idPegawai, String bulan, + List> listData) { /* * Transformasi data paket menggunakan mapprodukpaket dan * mapprodukpakettoproduk */ - List> listFixedPay = transformPelayananPaket(listData); + List> listFixedPay = transformPelayananPaket(idPegawai, bulan, listData); /* * Populate data filter */ @@ -1584,223 +1570,146 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel return groupingTanggalFixedPay(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 = mapProdukPaketDao.findByProdukEntriIdIn( - 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(mpaket -> paket.getNoRec().equals(mpaket.getNoRec())) - .map(MapProdukPaket::getProdukEntriId).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()); + private List> transformPelayananPaket(Integer idPegawai, String bulan, + List> listData) { + List drKsmObgyn = pegawaiDao.getDokterByKsm(KSM_OBGYN); + DateFormat df = new SimpleDateFormat("yyyy-MM"); + Date date; + try { + date = df.parse(bulan); + } catch (ParseException e) { + throw new ServiceVOException(e.getMessage()); + } + /* + * Mendapatkan daftar jadwal kerja, tanggal dan jam kerja + */ + Date tglAwal = DateUtil.startMonth(date); + 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()); + d.put("paketType", mapProdukPaket.getJenisMapping().name()); }); - } - List> dataExcludeUndone; - { - /* - * 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(mpaket -> listIdMapPaket.contains(mpaket.getNoRec())).map(MapProdukPaket::getProdukEntriId) - .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()); - dataExcludeUndone = listData.stream() - .filter(d -> !setIdPelayanan.contains(d.get("idPelayananPasien").toString())) - .collect(Collectors.toList()); - } - Set setIdVoucherExcludeUndone = dataExcludeUndone.stream().map(d -> d.get("idVoucherDaftar").toString()) - .collect(Collectors.toSet()); - List> result = new ArrayList<>(); - if (CommonUtil.isNotNullOrEmpty(setIdVoucherExcludeUndone)) { - List listVoucherExcludeUndone = voucherPaketDao.findAllByNoRecIn(setIdVoucherExcludeUndone); - List listIdPaketExcludeUndone = listVoucherExcludeUndone.stream().map(VoucherPaket::getPaketId) - .collect(Collectors.toList()); - if (CommonUtil.isNotNullOrEmpty(listIdPaketExcludeUndone)) { - { - /* - * Transformasi data tindakan utama dan reduce visite utama - */ - List> layananKepalaPaket = pelayananPasienDao - .findPelayananPasienByPaket(setIdVoucherExcludeUndone, listIdPaketExcludeUndone); - List concatIdProdukKelas = layananKepalaPaket.stream() - .map(l -> l.get("idProduk").toString() + l.get("idKelas").toString()) - .collect(Collectors.toList()); - if (CommonUtil.isNotNullOrEmpty(concatIdProdukKelas)) { - List listTarif = hargaNettoProdukByKelasDao - .findByConcateProdukKelas(concatIdProdukKelas); - layananKepalaPaket.forEach(l -> { - Optional first = listTarif.stream() - .filter(t -> t.getProdukId().equals(l.get("idProduk")) - && t.getKelasId().equals(l.get("idKelas"))) - .findFirst(); - if (first.isPresent() && CommonUtil.isNotNullOrEmpty(first.get().getHargaNetto1()) - && first.get().getHargaNetto1() > 0.0) { - l.put("hargaJual", first.get().getHargaNetto1()); - } else if (first.isPresent() && CommonUtil.isNotNullOrEmpty(first.get().getHargaSatuan()) - && first.get().getHargaSatuan() > 0.0) { - l.put("hargaJual", first.get().getHargaSatuan()); - } - }); - List listDetailTarif = hargaNettoProdukByKelasDDao - .findByConcateProdukKelas(concatIdProdukKelas); - layananKepalaPaket.forEach(l -> { - Optional first = listDetailTarif.stream() - .filter(t -> t.getProdukId().equals(l.get("idProduk")) - && t.getKelasId().equals(l.get("idKelas")) - && JASA_DOKTER_OBGYN.equals(t.getKomponenHargaId())) - .findFirst(); - if (first.isPresent() && CommonUtil.isNotNullOrEmpty(first.get().getHargaNetto1()) - && first.get().getHargaNetto1() > 0.0) { - l.put("hargaJasa", first.get().getHargaNetto1()); - } else if (first.isPresent() && CommonUtil.isNotNullOrEmpty(first.get().getHargaSatuan()) - && first.get().getHargaSatuan() > 0.0) { - l.put("hargaJasa", first.get().getHargaSatuan()); - } else { - l.put("hargaJasa", 0.0); - } - }); - result.addAll(layananKepalaPaket); + }); + 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()); + 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()); + List tarifDetailNonKelas = hargaNettoProdukByKelasDDao + .findByConcateProdukKelas(allConcatProdukNonkelas); + List> ibuPaketDiRanapByDokter = pelayananPasienDao.findPasienPaketDiRanapByDokter(idPegawai, + allProdukEntriId); + listData.forEach(d -> { + Optional> first = ibuPaketDiRanapByDokter.stream() + .filter(paket -> Integer.parseInt(d.get("pasienId").toString()) == 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("hargaJasa", 0.0); + if (first.isPresent()) { + d.put("tglPulangIbu", first.get().get("tglKeluar")); + if (tglAwal.equals(first.get().get("tglKeluar")) && ((Date) first.get().get("tglKeluar")).after(tglAwal) + && 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(byDetailTarif.get().getHargaNetto1()) ? byDetailTarif.get().getHargaNetto1() : byDetailTarif.get().getHargaSatuan())); + } + } else if (tglAwal.equals(first.get().get("tglKeluar")) + && ((Date) first.get().get("tglKeluar")).after(tglAwal) && 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(byDetailTarif.get().getHargaNetto1()) ? byDetailTarif.get().getHargaNetto1() : byDetailTarif.get().getHargaSatuan())); } } - { - /* - * Transformasi data tindakan lain-lain - */ - List listPaketUtama = listMapPaket.stream() - .filter(mpaket -> listIdPaketExcludeUndone.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(mpaket -> listIdMapPaket.contains(mpaket.getNoRec())) - .map(MapProdukPaket::getProdukEntriId).collect(Collectors.toList()); - List> listDataUtama = dataExcludeUndone.stream() - .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) - && setIdVoucherExcludeUndone.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()); - List> layananBadanPaket = dataExcludeUndone.stream() - .filter(d -> !setIdPelayananUtama.contains(d.get("idPelayananPasien").toString())) - .collect(Collectors.toList()); - List concatIdProdukKelas = layananBadanPaket.stream() - .map(l -> l.get("idProduk").toString() + l.get("idKelas").toString()) - .collect(Collectors.toList()); - if (CommonUtil.isNotNullOrEmpty(concatIdProdukKelas)) { - List listDetailTarif = hargaNettoProdukByKelasDDao - .findByConcateProdukKelas(concatIdProdukKelas); - Set setNorecs = layananBadanPaket.stream() - .map(l -> l.get("idPelayananPasien").toString()).collect(Collectors.toSet()); - List> mappingBadanPaket = pelayananPasienDao.findByNorecs(setNorecs); - layananBadanPaket.forEach(l -> { - Optional> firstMap = mappingBadanPaket.stream() - .filter(m -> l.get("idPelayananPasien").toString().equals(m.get("norec"))) - .findFirst(); - if (firstMap.isPresent()) { - if (DOKTER_PEMERIKSA.equals(l.get("idJenisPelaksana"))) { - Optional first = listDetailTarif.stream() - .filter(t -> t.getProdukId().equals(firstMap.get().get("produkPaketId")) - && t.getKelasId().equals(l.get("idKelas")) - && JASA_DOKTER.equals(t.getKomponenHargaId())) - .findFirst(); - if (first.isPresent() && CommonUtil.isNotNullOrEmpty(first.get().getHargaNetto1()) - && first.get().getHargaNetto1() > 0.0) { - l.put("hargaJasa", first.get().getHargaNetto1()); - } else if (first.isPresent() - && CommonUtil.isNotNullOrEmpty(first.get().getHargaSatuan()) - && first.get().getHargaSatuan() > 0.0) { - l.put("hargaJasa", first.get().getHargaSatuan()); - } else { - l.put("hargaJasa", 0.0); - } - } else if (ASISTEN_SPESIALIS.equals(l.get("idJenisPelaksana"))) { - Optional first = listDetailTarif.stream() - .filter(t -> t.getProdukId().equals(firstMap.get().get("produkPaketId")) - && t.getKelasId().equals(l.get("idKelas")) - && JASA_ASISTEN_SPESIALIS.equals(t.getKomponenHargaId())) - .findFirst(); - if (first.isPresent() && CommonUtil.isNotNullOrEmpty(first.get().getHargaNetto1()) - && first.get().getHargaNetto1() > 0.0) { - l.put("hargaJasa", first.get().getHargaNetto1()); - } else if (first.isPresent() - && CommonUtil.isNotNullOrEmpty(first.get().getHargaSatuan()) - && first.get().getHargaSatuan() > 0.0) { - l.put("hargaJasa", first.get().getHargaSatuan()); - } else { - l.put("hargaJasa", 0.0); - } - } else if (DOKTER_ANASTESI.equals(l.get("idJenisPelaksana"))) { - Optional first = listDetailTarif.stream() - .filter(t -> t.getProdukId().equals(firstMap.get().get("produkPaketId")) - && t.getKelasId().equals(l.get("idKelas")) - && JASA_DOKTER_ANASTESI.equals(t.getKomponenHargaId())) - .findFirst(); - if (first.isPresent() && CommonUtil.isNotNullOrEmpty(first.get().getHargaNetto1()) - && first.get().getHargaNetto1() > 0.0) { - l.put("hargaJasa", first.get().getHargaNetto1()); - } else if (first.isPresent() - && CommonUtil.isNotNullOrEmpty(first.get().getHargaSatuan()) - && first.get().getHargaSatuan() > 0.0) { - l.put("hargaJasa", first.get().getHargaSatuan()); - } else { - l.put("hargaJasa", 0.0); - } - } - } else { - l.put("hargaJasa", 0.0); - } - }); + } else { + if (DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) { + 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(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("paketId"))) + .filter(dt -> dt.getKelasId().equals(NON_KELAS)) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_DOKTER)).findFirst(); + byDetailTarifNonKelas.ifPresent(hargaNettoProdukByKelasD -> d.put("hargaJasa", CommonUtil.isNotNullOrEmpty(byDetailTarif.get().getHargaNetto1()) ? byDetailTarif.get().getHargaNetto1() : byDetailTarif.get().getHargaSatuan())); + } + } else if (ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) { + 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(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("paketId"))) + .filter(dt -> dt.getKelasId().equals(NON_KELAS)) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_ASISTEN_SPESIALIS)).findFirst(); + byDetailTarifNonKelas.ifPresent(hargaNettoProdukByKelasD -> d.put("hargaJasa", CommonUtil.isNotNullOrEmpty(byDetailTarif.get().getHargaNetto1()) ? byDetailTarif.get().getHargaNetto1() : byDetailTarif.get().getHargaSatuan())); + } + } else if (DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) { + 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(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("paketId"))) + .filter(dt -> dt.getKelasId().equals(NON_KELAS)) + .filter(dt -> dt.getKomponenHargaId().equals(JASA_DOKTER_ANASTESI)).findFirst(); + byDetailTarifNonKelas.ifPresent(hargaNettoProdukByKelasD -> d.put("hargaJasa", CommonUtil.isNotNullOrEmpty(byDetailTarif.get().getHargaNetto1()) ? byDetailTarif.get().getHargaNetto1() : byDetailTarif.get().getHargaSatuan())); } - result.addAll(layananBadanPaket); } } - } - return result; + }); + return listData; } @Override @@ -2902,13 +2811,14 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel List> tarifProdukReguler = hargaNettoProdukByKelasDao .checkExisting(voucher.getKelasId(), produkReguler.getId()); if (CommonUtil.isNullOrEmpty(tarifProdukReguler) && tarifProdukReguler.isEmpty()) { - tarifProdukReguler = hargaNettoProdukByKelasDao - .checkExisting(NON_KELAS, produkReguler.getId()); + tarifProdukReguler = hargaNettoProdukByKelasDao.checkExisting(NON_KELAS, + produkReguler.getId()); if (CommonUtil.isNullOrEmpty(tarifProdukReguler) && tarifProdukReguler.isEmpty()) - throw new ServiceVOException("Referensi harga tarif reguler tidak ditemukan untuk produk " - + mproduk.getMapProdukPaket().getProdukEntri().getNamaProduk() + " -> " - + produkReguler.getNamaProduk() + " dan kelas " - + voucher.getKelas().getNamaKelas()); + throw new ServiceVOException( + "Referensi harga tarif reguler tidak ditemukan untuk produk " + + mproduk.getMapProdukPaket().getProdukEntri().getNamaProduk() + " -> " + + produkReguler.getNamaProduk() + " dan kelas " + + voucher.getKelas().getNamaKelas()); } }); } diff --git a/jasamedika-domain/src/main/resources/hibernate.cfg.xml b/jasamedika-domain/src/main/resources/hibernate.cfg.xml index 5ac39f65..dd45c865 100644 --- a/jasamedika-domain/src/main/resources/hibernate.cfg.xml +++ b/jasamedika-domain/src/main/resources/hibernate.cfg.xml @@ -877,7 +877,12 @@ - + + + + + + +