Update service pelayanan pasien

Perubahan penggunaan data produk paket sebagai entri dan mapping produk paket sebagai referensi tarif reguler
This commit is contained in:
Salman Manoe 2023-10-23 14:02:54 +07:00
parent 67b18f61fa
commit 25df6a89ca
11 changed files with 100 additions and 96 deletions

View File

@ -146,6 +146,7 @@ public final class Master {
public static final Integer[] KELAS_DUA_TIGA_NONKELAS = { 1, 2, 6 };
public static final Integer KELAS_SATU = 3;
public static final Integer[] KELAS_SATU_VIP = { 3, 5, 8, 21 };
public static final Integer NON_KELAS = 6;
public static final Integer[] REF_KELAS_KAMAR = { 1, 2, 3, 5, 6, 8 };
}

View File

@ -13,4 +13,6 @@ import java.util.Set;
*/
public interface MapProdukPaketDao extends JpaRepository<MapProdukPaket, String> {
List<MapProdukPaket> findByPaketIdIn(Set<Integer> setPaketId);
List<MapProdukPaket> findByProdukEntriIdIn(Set<Integer> setProdukPaketId);
}

View File

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

View File

@ -301,10 +301,10 @@ public interface PelayananPasienDao extends JpaRepository<PelayananPasien, Strin
+ "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.produkPaketId as produkPaketId,"
+ "mproduk.produkId as produkId) " + "from PelayananPasien pp, " + "MapProdukPaketToProduk mproduk "
@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 = mproduk.produkId " + "and pp.noRec in (:listNorec)")
+ "and pp.produkId = mpaket.produkEntriId " + "and pp.noRec in (:listNorec)")
List<Map<String, Object>> findByNorecs(@Param("listNorec") Set<String> listNorec);
}

View File

@ -35,9 +35,9 @@ public class MapProdukPaketServiceImpl implements MapProdukPaketService {
model.setPaket(paket);
}
{
Produk produkPaket = new Produk();
produkPaket.setId(vo.getProdukPaket().getId());
model.setProdukPaket(produkPaket);
Produk produkEntri = new Produk();
produkEntri.setId(vo.getProdukEntri().getId());
model.setProdukEntri(produkEntri);
}
model.setKdProfile((short) 0);
models.add(model);

View File

@ -51,9 +51,9 @@ public class MapProdukPaketToProdukServiceImpl implements MapProdukPaketToProduk
model.setMapProdukPaket(mapProdukPaket);
}
{
Produk produk = new Produk();
produk.setId(vo.getProduk().getId());
model.setProduk(produk);
Produk produkReguler = new Produk();
produkReguler.setId(vo.getProdukReguler().getId());
model.setProdukReguler(produkReguler);
}
model.setKdProfile((short) 0);
models.add(model);
@ -71,9 +71,9 @@ public class MapProdukPaketToProdukServiceImpl implements MapProdukPaketToProduk
model.setMapProdukPaket(mapProdukPaket);
}
{
Produk produk = new Produk();
produk.setId(vo.getProduk().getId());
model.setProduk(produk);
Produk produkReguler = new Produk();
produkReguler.setId(vo.getProdukReguler().getId());
model.setProdukReguler(produkReguler);
}
model.setKdProfile((short) 0);
mapProdukPaketToProdukDao.save(model);
@ -102,13 +102,13 @@ public class MapProdukPaketToProdukServiceImpl implements MapProdukPaketToProduk
{
Produk paket = produkDao.findById(mapProdukPaket.getPaket().getId());
mapProdukPaketVO.setPaket(ProdukDto.builder().id(paket.getId()).namaProduk(paket.getNamaProduk()).build());
Produk produkPaket = produkDao.findById(mapProdukPaket.getProdukPaket().getId());
mapProdukPaketVO.setProdukPaket(
Produk produkPaket = produkDao.findById(mapProdukPaket.getProdukEntri().getId());
mapProdukPaketVO.setProdukEntri(
ProdukDto.builder().id(produkPaket.getId()).namaProduk(produkPaket.getNamaProduk()).build());
result.setMapProdukPaket(mapProdukPaketVO);
}
Produk produk = produkDao.findById(result.getProdukId());
result.setProduk(ProdukDto.builder().id(produk.getId()).namaProduk(produk.getNamaProduk()).build());
Produk produk = produkDao.findById(result.getProdukRegulerId());
result.setProdukReguler(ProdukDto.builder().id(produk.getId()).namaProduk(produk.getNamaProduk()).build());
return result;
}

View File

@ -39,6 +39,7 @@ import static com.jasamedika.medifirst2000.constants.Master.JenisProduk.NONLOGBO
import static com.jasamedika.medifirst2000.constants.Master.JenisProduk.OBAT_ALKES;
import static com.jasamedika.medifirst2000.constants.Master.KONSUL_VISIT;
import static com.jasamedika.medifirst2000.constants.Master.KategoryPegawai.DOKTER_LUAR;
import static com.jasamedika.medifirst2000.constants.Master.Kelas.NON_KELAS;
import static com.jasamedika.medifirst2000.constants.Master.KelompokPasien.KELOMPOK_BPJS;
import static com.jasamedika.medifirst2000.constants.Master.KelompokUser.TATA_REKENING;
import static com.jasamedika.medifirst2000.constants.Master.KomponenHarga.*;
@ -1589,7 +1590,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
List<VoucherPaket> listVoucher = voucherPaketDao.findAllByNoRecIn(setIdVoucher);
List<MapProdukPaket> listMapPaket = mapProdukPaketDao
.findByPaketIdIn(listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toSet()));
List<MapProdukPaketToProduk> listMapProduk = mapProdukPaketToProdukDao.findByProdukIdIn(
List<MapProdukPaket> listMapProduk = mapProdukPaketDao.findByProdukEntriIdIn(
listData.stream().map(d -> Integer.parseInt(d.get("idProduk").toString())).collect(Collectors.toSet()));
List<String> listUndonePaketUtama = new ArrayList<>();
{
@ -1607,8 +1608,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
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());
.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);
@ -1636,8 +1637,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
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());
.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())
@ -1666,40 +1667,42 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
List<String> concatIdProdukKelas = layananKepalaPaket.stream()
.map(l -> l.get("idProduk").toString() + l.get("idKelas").toString())
.collect(Collectors.toList());
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);
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);
}
}
{
/*
@ -1713,8 +1716,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
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());
.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())
@ -2881,8 +2884,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
{
List<MapProdukPaketToProduk> mappingProdukPaket = mapProdukPaketToProdukDao
.findByPaketId(voucher.getPaket().getId());
List<Integer> idProdukMapping = mappingProdukPaket.stream().map(MapProdukPaketToProduk::getProdukId)
.collect(Collectors.toList());
List<Integer> idProdukMapping = mappingProdukPaket.stream()
.map(mproduk -> mproduk.getMapProdukPaket().getProdukEntriId()).collect(Collectors.toList());
Optional<TagihanPendaftaranDto> dtoPaket = dtoList.stream().filter(TagihanPendaftaranDto::getIsPaket)
.filter(dto -> !idProdukMapping.contains(dto.getIdProduk()))
.filter(dto -> !dto.getIdProduk().equals(voucher.getPaketId())).findFirst();
@ -2892,15 +2895,22 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
+ " belum dilakukan mapping /" + " tidak dapat dilakukan diskon");
List<Integer> idProdukPaketDto = dtoList.stream().map(TagihanPendaftaranDto::getIdProduk)
.filter(dto -> !dto.equals(voucher.getPaketId())).collect(Collectors.toList());
mappingProdukPaket.stream().filter(d -> idProdukPaketDto.contains(d.getProdukId())).forEach(d -> {
Produk produkPaket = d.getMapProdukPaket().getProdukPaket();
List<Map<String, Object>> tarifProdukPaket = hargaNettoProdukByKelasDao
.checkExisting(voucher.getKelasId(), produkPaket.getId());
if (CommonUtil.isNullOrEmpty(tarifProdukPaket) && tarifProdukPaket.isEmpty())
throw new ServiceVOException(
"Harga tarif tidak ditemukan untuk produk " + d.getProduk().getNamaProduk() + " ("
+ produkPaket.getNamaProduk() + ") dan kelas " + voucher.getKelas().getNamaKelas());
});
mappingProdukPaket.stream()
.filter(mproduk -> idProdukPaketDto.contains(mproduk.getMapProdukPaket().getProdukEntriId()))
.forEach(mproduk -> {
Produk produkReguler = mproduk.getProdukReguler();
List<Map<String, Object>> tarifProdukReguler = hargaNettoProdukByKelasDao
.checkExisting(voucher.getKelasId(), produkReguler.getId());
if (CommonUtil.isNullOrEmpty(tarifProdukReguler) && tarifProdukReguler.isEmpty()) {
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());
}
});
}
{
List<PelayananPasienDetail> detailPelayanan = new ArrayList<>();
@ -3118,8 +3128,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
List<PelayananPasien> listPelayanan = pelayananPasienDao
.findByPasienDaftarPasienDaftarNoRecIn(idDaftarList);
List<MapProdukPaketToProduk> produkMapping = mapProdukPaketToProdukDao.findByPaketId(voucher.getPaketId());
List<Integer> idProdukMapping = produkMapping.stream().map(MapProdukPaketToProduk::getProdukId)
.collect(Collectors.toList());
List<Integer> idProdukMapping = produkMapping.stream()
.map(mproduk -> mproduk.getMapProdukPaket().getProdukEntriId()).collect(Collectors.toList());
listPelayanan.forEach(p -> p.setIsPaket(false));
listPelayanan.stream().filter(p -> idProdukMapping.contains(p.getProdukId()))
.forEach(p -> p.setHargaDiscount(0.0));

View File

@ -1,24 +1,17 @@
package com.jasamedika.medifirst2000.entities;
import static javax.persistence.EnumType.STRING;
import static javax.persistence.FetchType.LAZY;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.NotNull;
import com.jasamedika.medifirst2000.base.BaseTransaction;
import com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket;
import com.jasamedika.medifirst2000.helper.Caption;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import static javax.persistence.EnumType.STRING;
import static javax.persistence.FetchType.LAZY;
/**
* @author Salman Manoe
* @version 1.0.0
@ -43,10 +36,10 @@ public class MapProdukPaket extends BaseTransaction {
@JoinColumn(name = "produkpaketfk")
@NotNull(message = "Produk paket tidak boleh kosong")
@Caption(value = "Produk paket")
private Produk produkPaket;
private Produk produkEntri;
@Column(name = "produkpaketfk", insertable = false, updatable = false, nullable = false)
private Integer produkPaketId;
private Integer produkEntriId;
private Integer jumlah;

View File

@ -18,9 +18,10 @@ import static javax.persistence.FetchType.LAZY;
@Getter
@Setter
@Entity
@Table(name = "mapprodukpakettoproduk_m")
@Table(name = "mapprodukpakettoproduk_m", uniqueConstraints = {
@UniqueConstraint(columnNames = { "mappaketfk", "produkfk" }), })
public class MapProdukPaketToProduk extends BaseTransaction {
private static final long serialVersionUID = 8688145804014486942L;
private static final long serialVersionUID = -3625190975075093756L;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "mappaketfk")
@ -35,8 +36,8 @@ public class MapProdukPaketToProduk extends BaseTransaction {
@JoinColumn(name = "produkfk")
@NotNull(message = "Produk tidak boleh kosong")
@Caption(value = "Produk")
private Produk produk;
private Produk produkReguler;
@Column(name = "produkfk", insertable = false, updatable = false, nullable = false)
private Integer produkId;
private Integer produkRegulerId;
}

View File

@ -25,8 +25,8 @@ public class MapProdukPaketToProdukVO extends BaseTransactionVO {
@NotNull(message = "Produk tidak boleh kosong")
@Caption(value = "Produk")
private ProdukDto produk;
private ProdukDto produkReguler;
@Caption(value = "ID Produk")
private Integer produkId;
private Integer produkRegulerId;
}

View File

@ -29,10 +29,10 @@ public class MapProdukPaketVO extends BaseTransactionVO {
@NotNull(message = "Produk paket tidak boleh kosong")
@Caption(value = "Produk Paket")
private ProdukDto produkPaket;
private ProdukDto produkEntri;
@Caption(value = "ID Produk Paket")
private Integer produkPaketId;
private Integer produkEntriId;
private Integer jumlah;