|
|
|
|
@ -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());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|