Update service pelayanan pasien

Pembuatan sub-rutin filter dan transformasi data untuk logbook fixed pay
This commit is contained in:
Salman Manoe 2023-09-24 10:58:42 +07:00
parent 01cec76765
commit 786a672eec
6 changed files with 251 additions and 116 deletions

View File

@ -3,10 +3,14 @@ package com.jasamedika.medifirst2000.dao;
import com.jasamedika.medifirst2000.entities.MapProdukPaket; import com.jasamedika.medifirst2000.entities.MapProdukPaket;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Set;
/** /**
* @author Salman Manoe * @author Salman Manoe
* @version 1.0.0 * @version 1.0.0
* @since 21 Sep 2023 * @since 21 Sep 2023
*/ */
public interface MapProdukPaketDao extends JpaRepository<MapProdukPaket, String> { public interface MapProdukPaketDao extends JpaRepository<MapProdukPaket, String> {
List<MapProdukPaket> findByPaketIdIn(Set<Integer> setPaketId);
} }

View File

@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @author Salman * @author Salman
@ -20,5 +21,7 @@ public interface MapProdukPaketToProdukDao extends JpaRepository<MapProdukPaketT
*/ */
@Query("select mproduk from MapProdukPaketToProduk mproduk " + "inner join mproduk.mapProdukPaket mpaket " @Query("select mproduk from MapProdukPaketToProduk mproduk " + "inner join mproduk.mapProdukPaket mpaket "
+ "where mpaket.paketId = :paketId") + "where mpaket.paketId = :paketId")
List<MapProdukPaketToProduk> findAllByPaketId(@Param("paketId") Integer paketId); List<MapProdukPaketToProduk> findByPaketId(@Param("paketId") Integer paketId);
List<MapProdukPaketToProduk> findByProdukIdIn(Set<Integer> setProdukId);
} }

View File

@ -12,6 +12,7 @@ import org.springframework.stereotype.Repository;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* Repository class for PelayananPasien * Repository class for PelayananPasien
@ -183,7 +184,7 @@ public interface PelayananPasienDao extends JpaRepository<PelayananPasien, Strin
@Query("select pp from PelayananPasien pp where pp.noRec in (:listNoRec)") @Query("select pp from PelayananPasien pp where pp.noRec in (:listNoRec)")
List<PelayananPasien> findAll(@Param("listNoRec") List<String> listNoRec); List<PelayananPasien> findAll(@Param("listNoRec") List<String> 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," + "pr.detailJenisProdukId as idDetailJenisProduk,pr.golonganProdukId as idGolonganProduk,"
+ "djp.jenisProdukId as idJenisProduk," + "pd.voucherPaketId as idVoucherDaftar," + "djp.jenisProdukId as idJenisProduk," + "pd.voucherPaketId as idVoucherDaftar,"
+ "pd.kelompokPasienId as idKelompokPasien," + "case when pd.kelompokPasienId = 2 then 1 " + "pd.kelompokPasienId as idKelompokPasien," + "case when pd.kelompokPasienId = 2 then 1 "
@ -202,34 +203,40 @@ public interface PelayananPasienDao extends JpaRepository<PelayananPasien, Strin
+ "pp.tglPelayanan as tglPelayanan,to_char(pp.tglPelayanan,'yyyy-MM-dd') as tanggal," + "pp.tglPelayanan as tglPelayanan,to_char(pp.tglPelayanan,'yyyy-MM-dd') as tanggal,"
+ "pp.sayatanId as idSayatan,sy.urutan as urutanSayatan," + "pp.sayatanId as idSayatan,sy.urutan as urutanSayatan,"
+ "coalesce(sy.persen,0) as persenSayatan,coalesce(sy.nama,'') as keterangan," + "coalesce(sy.persen,0) as persenSayatan,coalesce(sy.nama,'') as keterangan,"
+ "vp.paketId as idPaketLayanan," + "apd.noRec as idAntrianPasienDiperiksa,apd.pegawaiId as idDPJP," + "apd.noRec as idAntrianPasienDiperiksa,apd.pegawaiId as idDPJP," + "apd.ruanganId as idRuangan,"
+ "apd.ruanganId as idRuangan,"
+ "case when lower(ru.namaRuangan) like '%eksekutif%' then 'Eksekutif' else 'Reguler' end as jenisRuangan," + "case when lower(ru.namaRuangan) like '%eksekutif%' then 'Eksekutif' else 'Reguler' end as jenisRuangan,"
+ "ru.departemenId as idDepartemen," + "pd.noRec as idPasienDaftar," + "ru.departemenId as idDepartemen," + "pd.noRec as idPasienDaftar,"
+ "sum(case when ppd.komponenHargaId = 35 then ppd.hargaDiscount else 0.0 end) as totalDiskon) " + "sum(case when ppd.komponenHargaId = 35 then ppd.hargaDiscount else 0.0 end) as totalDiskon) "
+ "from PelayananPasienDetail ppd, PelayananPasienPetugas ppp " + "inner join ppp.pelayananPasien pp " + "from PelayananPasienDetail ppd, PelayananPasienPetugas ppp " + "inner join ppp.pelayananPasien pp "
+ "inner join pp.pasienDaftar apd " + "inner join apd.pasienDaftar pd " + "left join pp.produk pr " + "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 apd.ruangan ru " + "left join pp.kelas kls " + "left join pd.kelompokPasien kp " + "left join apd.ruangan ru "
+ "left join pr.detailJenisProduk djp " + "left join pp.sayatan sy " + "left join pp.voucherPaket vp " + "left join pr.detailJenisProduk djp " + "left join pp.sayatan sy ";
+ "where ppd.pelayananPasienId = pp.noRec and (ppp.statusEnabled is true or ppp.statusEnabled is null) "
String WHERE_LOGBOOK_DOKTER = "where ppd.pelayananPasienId = pp.noRec and (ppp.statusEnabled is true or ppp.statusEnabled is null) "
+ "and (pp.statusEnabled is true or pp.statusEnabled is null) and pp.strukResepId is null " + "and (pp.statusEnabled is true or pp.statusEnabled is null) and pp.strukResepId is null "
+ "and (pd.statusEnabled is true or pd.statusEnabled is null) " + "and ppp.ObjectPegawaiId = :pegawaiId " + "and (pd.statusEnabled is true or pd.statusEnabled is null) ";
+ "and pp.tglPelayanan between :tglAwal and :tglAkhir " + "group by pr.id,pr.namaProduk,"
+ "pr.detailJenisProdukId,pr.golonganProdukId," + "djp.jenisProdukId," + "pd.voucherPaketId," String PARAMATER_LOGBOOK_DOKTER = "and ppp.ObjectPegawaiId = :pegawaiId "
+ "pd.kelompokPasienId," + "case when pd.kelompokPasienId = 2 then 1 " + "and pp.tglPelayanan between :tglAwal and :tglAkhir ";
+ "when pd.kelompokPasienId = 4 then 2 " + "when pd.kelompokPasienId = 8 then 3 "
+ "when pd.kelompokPasienId = 9 then 4 " + "when pd.kelompokPasienId = 1 then 5 " String GROUP_LOGBOOK_DOKTER = "group by pr.id,pr.namaProduk," + "pr.detailJenisProdukId,pr.golonganProdukId,"
+ "when pd.kelompokPasienId = 5 then 6 " + "when pd.kelompokPasienId = 6 then 7 " + "djp.jenisProdukId," + "pd.voucherPaketId," + "pd.kelompokPasienId,"
+ "when pd.kelompokPasienId = 3 then 8 " + "when pd.kelompokPasienId = 7 then 9 " + "else 10 end," + "case when pd.kelompokPasienId = 2 then 1 " + "when pd.kelompokPasienId = 4 then 2 "
+ "kp.kelompokPasien," + "pp.kelasId," + "case when pp.kelasId = 6 then 1 " + "when pp.kelasId = 1 then 2 " + "when pd.kelompokPasienId = 8 then 3 " + "when pd.kelompokPasienId = 9 then 4 "
+ "when pp.kelasId = 2 then 3 " + "when pp.kelasId = 3 then 4 " + "when pp.kelasId = 8 then 5 " + "when pd.kelompokPasienId = 1 then 5 " + "when pd.kelompokPasienId = 5 then 6 "
+ "when pp.kelasId = 5 then 6 " + "when pp.kelasId = 21 then 7 " + "else 8 end," + "kls.namaKelas," + "when pd.kelompokPasienId = 6 then 7 " + "when pd.kelompokPasienId = 3 then 8 "
+ "ppp.noRec," + "ppp.ObjectJenisPetugasPeId,ppp.ObjectPegawaiId," + "when pd.kelompokPasienId = 7 then 9 " + "else 10 end," + "kp.kelompokPasien," + "pp.kelasId,"
+ "pp.noRec,coalesce(pp.hargaJual,0),coalesce(pp.jumlah,0),pp.sayatanId,sy.urutan," + "case when pp.kelasId = 6 then 1 " + "when pp.kelasId = 1 then 2 " + "when pp.kelasId = 2 then 3 "
+ "coalesce(sy.persen,0),coalesce(sy.nama,'')," + "pp.tglPelayanan,to_char(pp.tglPelayanan,'yyyy-MM-dd')," + "when pp.kelasId = 3 then 4 " + "when pp.kelasId = 8 then 5 " + "when pp.kelasId = 5 then 6 "
+ "vp.paketId," + "apd.noRec,apd.pegawaiId," + "apd.ruanganId," + "when pp.kelasId = 21 then 7 " + "else 8 end," + "kls.namaKelas," + "ppp.noRec,"
+ "ppp.ObjectJenisPetugasPeId,ppp.ObjectPegawaiId,"
+ "pp.noRec,coalesce(pp.hargaJual,0),coalesce(pp.jumlah,0)," + "coalesce(pp.isPaket,false),"
+ "pp.tglPelayanan,to_char(pp.tglPelayanan,'yyyy-MM-dd')," + "pp.sayatanId,sy.urutan,"
+ "coalesce(sy.persen,0),coalesce(sy.nama,'')," + "apd.noRec,apd.pegawaiId," + "apd.ruanganId,"
+ "case when lower(ru.namaRuangan) like '%eksekutif%' then 'Eksekutif' else 'Reguler' end," + "case when lower(ru.namaRuangan) like '%eksekutif%' then 'Eksekutif' else 'Reguler' end,"
+ "ru.departemenId," + "pd.noRec " + "order by case when pd.kelompokPasienId = 2 then 1 " + "ru.departemenId," + "pd.noRec ";
String ORDER_LOGBOOK_DOKTER = "order by case when pd.kelompokPasienId = 2 then 1 "
+ "when pd.kelompokPasienId = 4 then 2 " + "when pd.kelompokPasienId = 8 then 3 " + "when pd.kelompokPasienId = 4 then 2 " + "when pd.kelompokPasienId = 8 then 3 "
+ "when pd.kelompokPasienId = 9 then 4 " + "when pd.kelompokPasienId = 1 then 5 " + "when pd.kelompokPasienId = 9 then 4 " + "when pd.kelompokPasienId = 1 then 5 "
+ "when pd.kelompokPasienId = 5 then 6 " + "when pd.kelompokPasienId = 6 then 7 " + "when pd.kelompokPasienId = 5 then 6 " + "when pd.kelompokPasienId = 6 then 7 "
@ -237,10 +244,20 @@ public interface PelayananPasienDao extends JpaRepository<PelayananPasien, Strin
+ "pp.tglPelayanan, " + "pp.hargaJual, " + "case when pp.kelasId = 6 then 1 " + "pp.tglPelayanan, " + "pp.hargaJual, " + "case when pp.kelasId = 6 then 1 "
+ "when pp.kelasId = 1 then 2 " + "when pp.kelasId = 2 then 3 " + "when pp.kelasId = 3 then 4 " + "when pp.kelasId = 1 then 2 " + "when pp.kelasId = 2 then 3 " + "when pp.kelasId = 3 then 4 "
+ "when pp.kelasId = 8 then 5 " + "when pp.kelasId = 5 then 6 " + "when pp.kelasId = 21 then 7 " + "when pp.kelasId = 8 then 5 " + "when pp.kelasId = 5 then 6 " + "when pp.kelasId = 21 then 7 "
+ "else 8 end asc," + "pr.namaProduk") + "else 8 end asc," + "pr.namaProduk";
@Query(LOGBOOK_DOKTER + WHERE_LOGBOOK_DOKTER + PARAMATER_LOGBOOK_DOKTER + GROUP_LOGBOOK_DOKTER
+ ORDER_LOGBOOK_DOKTER)
List<Map<String, Object>> findPelayananPasienByPetugasAndTanggal(@Param("pegawaiId") Integer idPegawai, List<Map<String, Object>> findPelayananPasienByPetugasAndTanggal(@Param("pegawaiId") Integer idPegawai,
@Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir); @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<Map<String, Object>> findPelayananPasienByPaket(@Param("setIdVoucher") Set<String> setIdVoucher,
@Param("listIdPaket") List<Integer> listIdPaket);
@Query("select new Map(jp.jenisPetugasPe as jenisPelaksana," + "pr.namaProduk as namaProduk," @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.hargaJual,0) as hargaJual," + "coalesce(pp.hargaDiscount,0) as diskon,"
+ "coalesce(pp.jumlah,0) as jumlah," + "kp.kelompokPasien as kelompokPasien," + "coalesce(pp.jumlah,0) as jumlah," + "kp.kelompokPasien as kelompokPasien,"
@ -276,4 +293,11 @@ public interface PelayananPasienDao extends JpaRepository<PelayananPasien, Strin
List<Map<String, Object>> findPelayananPasienByTagihanPendaftaran(@Param("noRegistrasi") String noRegistrasi); List<Map<String, Object>> findPelayananPasienByTagihanPendaftaran(@Param("noRegistrasi") String noRegistrasi);
List<PelayananPasien> findByPasienDaftarPasienDaftarNoRecIn(List<String> idDaftarList); List<PelayananPasien> findByPasienDaftarPasienDaftarNoRecIn(List<String> 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<Map<String, Object>> findJumlahLayananByVoucherIn(@Param("listIdVoucher") Set<String> listIdVoucher);
} }

View File

@ -2,11 +2,9 @@ package com.jasamedika.medifirst2000.dao;
import com.jasamedika.medifirst2000.entities.VoucherPaket; import com.jasamedika.medifirst2000.entities.VoucherPaket;
import org.springframework.data.jpa.repository.JpaRepository; 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.List;
import java.util.Map; import java.util.Set;
/** /**
* @author Salman * @author Salman
@ -23,10 +21,13 @@ public interface VoucherPaketDao extends JpaRepository<VoucherPaket, String> {
*/ */
VoucherPaket findByKode(String kode); 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) " * Query untuk mendapatkan data voucher paket bedasarkan kumpulan no record
+ "from MapProdukPaketToProduk mproduk " + "inner join mproduk.mapProdukPaket mpaket, VoucherPaket vp " * tertentu
+ "where vp.paketId = mpaket.paketId " + "and vp.isSelesai is true and vp.isBatal is false " *
+ "and vp.noRec in (:listNorec)") * @param norecs
List<Map<String, Object>> findPelayananPaket(@Param("listNorec") List<String> listIdVoucherPaket); * daftar no record data voucher
* @return data entitas <code>VoucherPaket</code>
*/
List<VoucherPaket> findAllByNoRecIn(Set<String> norecs);
} }

View File

@ -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.SubUnitKerja.*;
import static com.jasamedika.medifirst2000.constants.Master.TipePegawai.PURNA_WAKTU; 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.TINDAKAN_UTAMA;
import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.VISITE_UTAMA;
/** /**
* Implement class for PelayananPasienService * Implement class for PelayananPasienService
@ -117,6 +118,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
@Autowired @Autowired
private VoucherPaketDao voucherPaketDao; private VoucherPaketDao voucherPaketDao;
@Autowired
private MapProdukPaketDao mapProdukPaketDao;
@Autowired @Autowired
private MapProdukPaketToProdukDao mapProdukPaketToProdukDao; private MapProdukPaketToProdukDao mapProdukPaketToProdukDao;
@ -552,27 +556,32 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
*/ */
List<Map<String, Object>> listData = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai, List<Map<String, Object>> listData = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai,
tglAwal, tglAkhir); tglAwal, tglAkhir);
List<Map<String, Object>> listRatedPay = new ArrayList<>(listData);
List<Map<String, Object>> listFixedPay = new ArrayList<>();
Set<String> listIdVoucher = listData.stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")))
.map(d -> d.get("idVoucherDaftar").toString()).collect(Collectors.toSet());
if (CommonUtil.isNotNullOrEmpty(listIdVoucher)) {
List<VoucherPaket> listVoucher = voucherPaketDao.findAllByNoRecIn(listIdVoucher);
Set<Integer> listIdPaket = listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toSet());
/* /*
* Filtering selain logbook fixed pay * Filtering selain logbook fixed pay
*/ */
List<Map<String, Object>> listRatedPay = listData.stream().filter( listRatedPay = listData.stream()
d -> (CommonUtil.isNullOrEmpty(d.get("isPaket")) || !Boolean.parseBoolean(d.get("isPaket").toString())) .filter(d -> !Boolean.parseBoolean(d.get("isPaket").toString())
&& (CommonUtil.isNullOrEmpty(d.get("idPaketLayanan")) && !listIdPaket.contains(Integer.parseInt(d.get("idProduk").toString())))
&& !Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan"))))
.collect(Collectors.toList()); .collect(Collectors.toList());
/* /*
* Set awal logbook fixed pay * Set awal logbook fixed pay
*/ */
List<Map<String, Object>> listFixedPay = listData.stream() listFixedPay = listData.stream()
.filter(d -> (CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar"))
&& !Boolean.parseBoolean(d.get("isPaket").toString()) && (!Boolean.parseBoolean(d.get("isPaket").toString())
&& CommonUtil.isNotNullOrEmpty(d.get("idPaketLayanan")) && listIdPaket.contains(Integer.parseInt(d.get("idProduk").toString())))
&& Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan")))
|| (CommonUtil.isNotNullOrEmpty(d.get("idVoucherLayanan")) || (CommonUtil.isNotNullOrEmpty(d.get("idVoucherLayanan"))
&& Boolean.parseBoolean(d.get("isPaket").toString()) && CommonUtil && Boolean.parseBoolean(d.get("isPaket").toString()) && !listIdPaket
.isNotNullOrEmpty(d.get("idPaketLayanan")) .contains(Integer.parseInt(d.get("idProduk").toString()))))
&& !Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan"))))
.collect(Collectors.toList()); .collect(Collectors.toList());
}
/* /*
* Set persen jasa dan harga jasa pasien bpjs di ibs, icu * 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 * Mapping set awal persentase jasa remunerasi dan harga jasa remunerasi
*/ */
for (Map<String, Object> d : listData) for (Map<String, Object> d : listRatedPay)
if (DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana")) && CommonUtil.isNotNullOrEmpty(d.get("totalDiskon")) if (DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana")) && CommonUtil.isNotNullOrEmpty(d.get("totalDiskon"))
&& Double.parseDouble(d.get("totalDiskon").toString()) > 0.0 && Double.parseDouble(d.get("totalDiskon").toString()) > 0.0
&& CommonUtil.isNullOrEmpty(d.get("idSayatan"))) { && 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 * Alokasi data diambil terlebih dahulu untuk kelompok BPJS, Jaminan
* Kemenkes * Kemenkes
*/ */
List<Map<String, Object>> rawDataBpjs0 = listData List<Map<String, Object>> rawDataBpjs0 = listRatedPay
.stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && Arrays .stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && Arrays
.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString()))) .asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString())))
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -996,7 +1005,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
* nonshift * nonshift
*/ */
List<Map<String, Object>> listDataJamKerja = new ArrayList<>(); List<Map<String, Object>> listDataJamKerja = new ArrayList<>();
for (Map<String, Object> d : listData) { for (Map<String, Object> d : listRatedPay) {
if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) { if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) {
LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault())
.toLocalDate(); .toLocalDate();
@ -1028,7 +1037,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
* Asumsi jam kerja dokter nonshift * Asumsi jam kerja dokter nonshift
*/ */
List<Map<String, Object>> listDataLuarJamKerja = new ArrayList<>(); List<Map<String, Object>> listDataLuarJamKerja = new ArrayList<>();
for (Map<String, Object> d : listData) { for (Map<String, Object> d : listRatedPay) {
if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) { if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) {
LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault())
.toLocalDate(); .toLocalDate();
@ -1486,68 +1495,19 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
.sorted(Comparator.comparing(o -> o.get("namaProduk").toString())).collect(Collectors.toList()); .sorted(Comparator.comparing(o -> o.get("namaProduk").toString())).collect(Collectors.toList());
result.put("klaim-mpp", listPelayananKlaimMpp); result.put("klaim-mpp", listPelayananKlaimMpp);
} }
// { if (CommonUtil.isNotNullOrEmpty(listFixedPay)) {
// List<Map<String, Object>> listPelayananFixedPay = List<Map<String, Object>> listPelayananFixedPay = setPelayananPaket(listFixedPay);
// setPelayananFixedPay(listFixedPay); result.put("fixed-pay", listPelayananFixedPay);
// result.put("fixed-pay", listPelayananFixedPay); }
// }
return result; return result;
} }
private List<Map<String, Object>> setPelayananFixedPay(List<Map<String, Object>> listData) { private List<Map<String, Object>> setPelayananPaket(List<Map<String, Object>> listData) {
List<Integer> listIdProduk = new ArrayList<>(); List<Map<String, Object>> listFixedPay = transformPelayananPaket(listData);
List<String> listPersenJasa = new ArrayList<>();
List<Double> listHargaJasa = new ArrayList<>();
List<Double> listHargaJual = new ArrayList<>();
List<Integer> listIdKelompokPasien = new ArrayList<>();
List<String> listTanggal = new ArrayList<>();
List<String> listJenisRuangan = new ArrayList<>();
List<Map<String, Object>> listFixedPay = new ArrayList<>();
{
List<Map<String, Object>> 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<String> listIdVoucherKepalaPaket = listKepalaPaket.stream()
.map(p -> p.get("idVoucherLayanan").toString()).collect(Collectors.toSet());
List<Map<String, Object>> pelayananKepalaPaket = voucherPaketDao
.findPelayananPaket(new ArrayList<>(listIdVoucherKepalaPaket));
Set<Integer> 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<Map<String, Object>> listDataUtama = listData.stream()
.filter(d -> listIdEntri.contains(Integer.parseInt(d.get("idProduk").toString())))
.collect(Collectors.toList());
listIdVoucherKepalaPaket.forEach(idVoucher -> {
List<Map<String, Object>> dataUtama = listDataUtama.stream()
.filter(d -> idVoucher.equals(d.get("idVoucherLayanan"))).collect(Collectors.toList());
});
}
/* /*
* Populate data filter * Populate data filter
*/ */
listFixedPay.forEach(d -> { List<Map<String, Object>> dataTanggal = groupingTanggalPaket(listFixedPay);
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<Map<String, Object>> dataTanggal = groupingTanggalFfs(listFixedPay);
/* /*
* Pengelompokkan produk layanan * Pengelompokkan produk layanan
*/ */
@ -1585,6 +1545,143 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
return result; return result;
} }
private List<Map<String, Object>> groupingTanggalPaket(List<Map<String, Object>> listFixedPay) {
List<Integer> listIdProduk = new ArrayList<>();
List<String> listPersenJasa = new ArrayList<>();
List<Double> listHargaJasa = new ArrayList<>();
List<Double> listHargaJual = new ArrayList<>();
List<Integer> listIdKelompokPasien = new ArrayList<>();
List<String> listTanggal = new ArrayList<>();
List<String> 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<Map<String, Object>> transformPelayananPaket(List<Map<String, Object>> listData) {
Set<String> setIdVoucher = listData.stream().map(d -> d.get("idVoucherDaftar").toString())
.collect(Collectors.toSet());
List<VoucherPaket> listVoucher = voucherPaketDao.findAllByNoRecIn(setIdVoucher);
List<MapProdukPaket> listMapPaket = mapProdukPaketDao
.findByPaketIdIn(listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toSet()));
List<MapProdukPaketToProduk> listMapProduk = mapProdukPaketToProdukDao.findByProdukIdIn(
listData.stream().map(d -> Integer.parseInt(d.get("idProduk").toString())).collect(Collectors.toSet()));
List<String> listUndonePaketUtama = new ArrayList<>();
{
/*
* Mengecek seluruh data layanan lintas logbook untuk paket tindakan
* utama yang belum selesai
*/
List<Map<String, Object>> listPelayanan = pelayananPasienDao.findJumlahLayananByVoucherIn(setIdVoucher);
listVoucher.forEach(voucher -> {
List<MapProdukPaket> 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<Integer> 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<Map<String, Object>> listData1;
{
/*
* Penerapan hasil pengecekan lintas logbook untuk logbook yang
* dievaluasi
*/
List<Integer> setIdPaket = listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toList());
List<MapProdukPaket> listPaketUtama = listMapPaket.stream()
.filter(mpaket -> setIdPaket.contains(mpaket.getPaketId())
&& (TINDAKAN_UTAMA.equals(mpaket.getJenisMapping())
|| VISITE_UTAMA.equals(mpaket.getJenisMapping())))
.collect(Collectors.toList());
List<String> listIdMapPaket = listPaketUtama.stream().map(MapProdukPaket::getNoRec)
.collect(Collectors.toList());
List<Integer> listIdEntri = listMapProduk.stream()
.filter(mproduk -> listIdMapPaket.contains(mproduk.getMapProdukPaketId()))
.map(MapProdukPaketToProduk::getProdukId).collect(Collectors.toList());
List<Map<String, Object>> 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<String> 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<String> setIdVoucherFiltered = listData1.stream().map(d -> d.get("idVoucherDaftar").toString())
.collect(Collectors.toSet());
List<VoucherPaket> listVoucherFiltered = voucherPaketDao.findAllByNoRecIn(setIdVoucherFiltered);
List<Integer> listIdPaket = listVoucherFiltered.stream().map(VoucherPaket::getPaketId)
.collect(Collectors.toList());
List<Map<String, Object>> listData3 = new ArrayList<>();
{
/*
* Transformasi data tindakan utama dan reduce visite utama
*/
List<Map<String, Object>> listData2 = pelayananPasienDao.findPelayananPasienByPaket(setIdVoucherFiltered,
listIdPaket);
listData3.addAll(listData2);
}
{
/*
* Transformasi data tindakan lain-lain
*/
List<MapProdukPaket> listPaketUtama = listMapPaket.stream()
.filter(mpaket -> listIdPaket.contains(mpaket.getPaketId())
&& (TINDAKAN_UTAMA.equals(mpaket.getJenisMapping())
|| VISITE_UTAMA.equals(mpaket.getJenisMapping())))
.collect(Collectors.toList());
List<String> listIdMapPaket = listPaketUtama.stream().map(MapProdukPaket::getNoRec)
.collect(Collectors.toList());
List<Integer> listIdEntri = listMapProduk.stream()
.filter(mproduk -> listIdMapPaket.contains(mproduk.getMapProdukPaketId()))
.map(MapProdukPaketToProduk::getProdukId).collect(Collectors.toList());
List<Map<String, Object>> 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<String> 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 @Override
public Map<String, Object> logbookRemunTarifDokter(Integer idPegawai, String bulan) { public Map<String, Object> logbookRemunTarifDokter(Integer idPegawai, String bulan) {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
@ -2571,7 +2668,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
} }
{ {
List<MapProdukPaketToProduk> mappingProdukPaket = mapProdukPaketToProdukDao List<MapProdukPaketToProduk> mappingProdukPaket = mapProdukPaketToProdukDao
.findAllByPaketId(voucher.getPaket().getId()); .findByPaketId(voucher.getPaket().getId());
List<Integer> idProdukMapping = mappingProdukPaket.stream().map(MapProdukPaketToProduk::getProdukId) List<Integer> idProdukMapping = mappingProdukPaket.stream().map(MapProdukPaketToProduk::getProdukId)
.collect(Collectors.toList()); .collect(Collectors.toList());
Optional<TagihanPendaftaranDto> dtoPaket = dtoList.stream().filter(TagihanPendaftaranDto::getIsPaket) Optional<TagihanPendaftaranDto> dtoPaket = dtoList.stream().filter(TagihanPendaftaranDto::getIsPaket)
@ -2801,7 +2898,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
} }
List<String> idDaftarList = listPendaftaran.stream().map(PasienDaftar::getNoRec).collect(Collectors.toList()); List<String> idDaftarList = listPendaftaran.stream().map(PasienDaftar::getNoRec).collect(Collectors.toList());
List<PelayananPasien> listPelayanan = pelayananPasienDao.findByPasienDaftarPasienDaftarNoRecIn(idDaftarList); List<PelayananPasien> listPelayanan = pelayananPasienDao.findByPasienDaftarPasienDaftarNoRecIn(idDaftarList);
List<MapProdukPaketToProduk> produkMapping = mapProdukPaketToProdukDao.findAllByPaketId(voucher.getPaketId()); List<MapProdukPaketToProduk> produkMapping = mapProdukPaketToProdukDao.findByPaketId(voucher.getPaketId());
List<Integer> idProdukMapping = produkMapping.stream().map(MapProdukPaketToProduk::getProdukId) List<Integer> idProdukMapping = produkMapping.stream().map(MapProdukPaketToProduk::getProdukId)
.collect(Collectors.toList()); .collect(Collectors.toList());
{ {

View File

@ -11,6 +11,12 @@ public enum JenisMappingProdukPaket {
* Produk ditandai sebagai tindakan utama di dalam sebuah paket layanan. * Produk ditandai sebagai tindakan utama di dalam sebuah paket layanan.
* Digunakan untuk mengelompokkan hak remunerasi dokter yang bersangkutan * 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
} }