Update service pelayanan pasien

Penyesuaian logbook fixed-pay dokter untuk detail paket persalinan terbaru
This commit is contained in:
Salman Manoe 2023-10-31 08:32:46 +07:00
parent 779ee704d7
commit 292bebee83
8 changed files with 186 additions and 290 deletions

View File

@ -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 {

View File

@ -41,8 +41,4 @@ public interface HargaNettoProdukByKelasDao extends JpaRepository<HargaNettoProd
+ "and hnk.kelasId in (:listKelasId) " + "order by hnk.hargaNetto1")
List<Map<String, Object>> findTarifTindakan(@Param("produkId") Integer idProduk,
@Param("listKelasId") List<Integer> listIdKelas);
@Query("select hnk from HargaNettoProdukByKelas hnk " + "where hnk.reportDisplay = 'tarif_2022_Nov' "
+ "and concat(hnk.produkId,'',hnk.kelasId) in (:concatProdukKelas)")
List<HargaNettoProdukByKelas> findByConcateProdukKelas(@Param("concatProdukKelas") List<String> concatProdukKelas);
}

View File

@ -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<MapProdukPaket, String> {
List<MapProdukPaket> findByPaketIdIn(Set<Integer> setPaketId);
@Query("select mpaket.paketId from MapProdukPaket mpaket")
Set<Integer> findPaketId();
List<MapProdukPaket> findByProdukEntriIdIn(Set<Integer> setProdukPaketId);
@Query("select mpaket.produkEntriId from MapProdukPaket mpaket")
List<Integer> findProdukEntriId();
}

View File

@ -823,6 +823,11 @@ public interface PegawaiDao extends JpaRepository<Pegawai, Integer>, JpaSpecific
+ "and p.shiftKerjaId in (1,2) " + "order by p.id asc")
List<Integer> 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<Integer> 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")

View File

@ -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<PelayananPasien, Strin
+ "coalesce(sy.persen,0) as persenSayatan,coalesce(sy.nama,'') as keterangan,"
+ "apd.noRec as idAntrianPasienDiperiksa,apd.pegawaiId as idDPJP," + "apd.ruanganId as idRuangan,"
+ "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,pd.pasienId as pasienId,"
+ "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 "
+ "inner join pp.pasienDaftar apd " + "inner join apd.pasienDaftar pd " + "left join pp.produk pr "
@ -251,13 +250,6 @@ public interface PelayananPasienDao extends JpaRepository<PelayananPasien, Strin
List<Map<String, Object>> 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<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,"
+ "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<PelayananPasien, Strin
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);
@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<Map<String, Object>> findByNorecs(@Param("listNorec") Set<String> 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<Map<String, Object>> findPasienPaketDiRanapByDokter(@Param("pegawaiId") Integer idPegawai,
@Param("listProdukEntriId") List<Integer> listProdukEntriId);
}

View File

@ -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<VoucherPaket, String> {
* @return data entitas <code>VoucherPaket</code>
*/
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 <code>VoucherPaket</code>
*/
List<VoucherPaket> findAllByNoRecIn(Set<String> norecs);
}

View File

@ -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<Map<String, Object>> listRatedPay = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai,
tglAwal, tglAkhir);
Set<String> listIdVoucher = listRatedPay.stream()
.filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")))
.map(d -> d.get("idVoucherDaftar").toString()).collect(Collectors.toSet());
List<Map<String, Object>> listFixedPay = new ArrayList<>();
if (CommonUtil.isNotNullOrEmpty(listIdVoucher)) {
List<VoucherPaket> listVoucher = voucherPaketDao.findAllByNoRecIn(listIdVoucher);
Set<Integer> 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<Integer> allPaketId = mapProdukPaketDao.findProdukEntriId();
allPaketId.addAll(mapProdukPaketDao.findPaketId());
List<Map<String, Object>> 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<Map<String, Object>> listPelayananFixedPay = new ArrayList<>();
if (CommonUtil.isNotNullOrEmpty(listFixedPay))
listPelayananFixedPay = setPelayananPaket(listFixedPay);
listPelayananFixedPay = setPelayananPaket(idPegawai, bulan, listFixedPay);
result.put("fixed-pay", listPelayananFixedPay);
}
return result;
}
private List<Map<String, Object>> setPelayananPaket(List<Map<String, Object>> listData) {
private List<Map<String, Object>> setPelayananPaket(Integer idPegawai, String bulan,
List<Map<String, Object>> listData) {
/*
* Transformasi data paket menggunakan mapprodukpaket dan
* mapprodukpakettoproduk
*/
List<Map<String, Object>> listFixedPay = transformPelayananPaket(listData);
List<Map<String, Object>> listFixedPay = transformPelayananPaket(idPegawai, bulan, listData);
/*
* Populate data filter
*/
@ -1584,223 +1570,146 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
return groupingTanggalFixedPay(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<MapProdukPaket> listMapProduk = mapProdukPaketDao.findByProdukEntriIdIn(
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(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<Map<String, Object>> transformPelayananPaket(Integer idPegawai, String bulan,
List<Map<String, Object>> listData) {
List<Integer> 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<MapProdukPaket> paketList = mapProdukPaketDao.findAll();
List<Integer> allProdukEntriId = paketList.stream().map(MapProdukPaket::getProdukEntriId)
.collect(Collectors.toList());
listData.forEach(d -> {
Optional<MapProdukPaket> 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<Map<String, Object>> dataExcludeUndone;
{
/*
* 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(mpaket -> listIdMapPaket.contains(mpaket.getNoRec())).map(MapProdukPaket::getProdukEntriId)
.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());
dataExcludeUndone = listData.stream()
.filter(d -> !setIdPelayanan.contains(d.get("idPelayananPasien").toString()))
.collect(Collectors.toList());
}
Set<String> setIdVoucherExcludeUndone = dataExcludeUndone.stream().map(d -> d.get("idVoucherDaftar").toString())
.collect(Collectors.toSet());
List<Map<String, Object>> result = new ArrayList<>();
if (CommonUtil.isNotNullOrEmpty(setIdVoucherExcludeUndone)) {
List<VoucherPaket> listVoucherExcludeUndone = voucherPaketDao.findAllByNoRecIn(setIdVoucherExcludeUndone);
List<Integer> listIdPaketExcludeUndone = listVoucherExcludeUndone.stream().map(VoucherPaket::getPaketId)
.collect(Collectors.toList());
if (CommonUtil.isNotNullOrEmpty(listIdPaketExcludeUndone)) {
{
/*
* Transformasi data tindakan utama dan reduce visite utama
*/
List<Map<String, Object>> layananKepalaPaket = pelayananPasienDao
.findPelayananPasienByPaket(setIdVoucherExcludeUndone, listIdPaketExcludeUndone);
List<String> concatIdProdukKelas = layananKepalaPaket.stream()
.map(l -> l.get("idProduk").toString() + l.get("idKelas").toString())
.collect(Collectors.toList());
if (CommonUtil.isNotNullOrEmpty(concatIdProdukKelas)) {
List<HargaNettoProdukByKelas> listTarif = hargaNettoProdukByKelasDao
.findByConcateProdukKelas(concatIdProdukKelas);
layananKepalaPaket.forEach(l -> {
Optional<HargaNettoProdukByKelas> 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<HargaNettoProdukByKelasD> listDetailTarif = hargaNettoProdukByKelasDDao
.findByConcateProdukKelas(concatIdProdukKelas);
layananKepalaPaket.forEach(l -> {
Optional<HargaNettoProdukByKelasD> 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<MapProdukPaketToProduk> regulerList = mapProdukPaketToProdukDao.findAll();
listData.forEach(d -> {
Optional<MapProdukPaketToProduk> 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<String> allConcatProdukKelas = listData.stream()
.filter(d -> CommonUtil.isNotNullOrEmpty(d.get("regRefId")))
.map(d -> d.get("regRefId").toString() + d.get("idKelas").toString()).collect(Collectors.toList());
List<HargaNettoProdukByKelasD> tarifDetailReguler = hargaNettoProdukByKelasDDao
.findByConcateProdukKelas(allConcatProdukKelas);
List<String> allConcatProdukNonkelas = listData.stream()
.filter(d -> CommonUtil.isNotNullOrEmpty(d.get("regRefId")))
.map(d -> d.get("regRefId").toString() + NON_KELAS).collect(Collectors.toList());
List<HargaNettoProdukByKelasD> tarifDetailNonKelas = hargaNettoProdukByKelasDDao
.findByConcateProdukKelas(allConcatProdukNonkelas);
List<Map<String, Object>> ibuPaketDiRanapByDokter = pelayananPasienDao.findPasienPaketDiRanapByDokter(idPegawai,
allProdukEntriId);
listData.forEach(d -> {
Optional<Map<String, Object>> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<MapProdukPaket> listPaketUtama = listMapPaket.stream()
.filter(mpaket -> listIdPaketExcludeUndone.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(mpaket -> listIdMapPaket.contains(mpaket.getNoRec()))
.map(MapProdukPaket::getProdukEntriId).collect(Collectors.toList());
List<Map<String, Object>> 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<String> setIdPelayananUtama = listDataUtama.stream()
.map(d -> d.get("idPelayananPasien").toString()).collect(Collectors.toSet());
List<Map<String, Object>> layananBadanPaket = dataExcludeUndone.stream()
.filter(d -> !setIdPelayananUtama.contains(d.get("idPelayananPasien").toString()))
.collect(Collectors.toList());
List<String> concatIdProdukKelas = layananBadanPaket.stream()
.map(l -> l.get("idProduk").toString() + l.get("idKelas").toString())
.collect(Collectors.toList());
if (CommonUtil.isNotNullOrEmpty(concatIdProdukKelas)) {
List<HargaNettoProdukByKelasD> listDetailTarif = hargaNettoProdukByKelasDDao
.findByConcateProdukKelas(concatIdProdukKelas);
Set<String> setNorecs = layananBadanPaket.stream()
.map(l -> l.get("idPelayananPasien").toString()).collect(Collectors.toSet());
List<Map<String, Object>> mappingBadanPaket = pelayananPasienDao.findByNorecs(setNorecs);
layananBadanPaket.forEach(l -> {
Optional<Map<String, Object>> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<HargaNettoProdukByKelasD> 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<Map<String, Object>> 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());
}
});
}

View File

@ -877,7 +877,12 @@
<mapping class="com.jasamedika.medifirst2000.entities.VoucherPaket" />
<mapping
class="com.jasamedika.medifirst2000.entities.PelayananPasienTidakTerklaim" />
<mapping
class="com.jasamedika.medifirst2000.entities.Sayatan" />
<mapping class="com.jasamedika.medifirst2000.entities.Sayatan" />
<mapping class="com.jasamedika.medifirst2000.entities.AturanPakai" />
<mapping class="com.jasamedika.medifirst2000.entities.AturanPakaiSigna" />
<mapping class="com.jasamedika.medifirst2000.entities.FrekuensiPakaiObat" />
<mapping class="com.jasamedika.medifirst2000.entities.JumlahDosis" />
<mapping class="com.jasamedika.medifirst2000.entities.KeteranganPakaiObat" />
<mapping class="com.jasamedika.medifirst2000.entities.SatuanDosis" />
</session-factory>
</hibernate-configuration>