From 74b3ac482fbbd5c447386780e56299f1d9a9c64a Mon Sep 17 00:00:00 2001 From: salmanoe Date: Mon, 15 Feb 2021 13:36:56 +0700 Subject: [PATCH] persiapan service update pelayanan pasien detail saat entri klaim verifikasi tagihan untuk diskon karyawan --- .../dao/PelayananPasienDetailDao.java | 13 +- .../service/PelayananPasienService.java | 4 +- .../impl/PelayananPasienServiceImpl.java | 130 +++++++++++++++--- 3 files changed, 126 insertions(+), 21 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDetailDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDetailDao.java index 6463dfbf..1c6466a0 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDetailDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDetailDao.java @@ -1,6 +1,7 @@ package com.jasamedika.medifirst2000.dao; import java.util.List; +import java.util.Map; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; @@ -16,8 +17,16 @@ import com.jasamedika.medifirst2000.entities.PelayananPasienDetail; */ @Repository("PelayananPasienDetailDao") public interface PelayananPasienDetailDao extends PagingAndSortingRepository { - - + @Query("select model from PelayananPasienDetail model left join model.pelayananPasien a where a.noRec=:noRec") List getPelayananPasienDetail(@Param("noRec") String noRec); + + @Query("select new Map(" + "ppd.hargaDiscount as hargaDiscount," + "ppd.hargaJual as hargaJual," + + "ppd.hargaNetto as hargaNetto," + "ppd.hargaSatuan as hargaSatuan," + "ppd.jasa as jasa," + + "ppd.jumlah as jumlah," + "ppd.komponenHargaId as idKomponenHarga," + + "pd.dokterPenanggungJawabId as dpjpUtama," + "apd.pegawaiId as dpjp," + "pp.produkId as idLayanan" + + ") from PelayananPasienDetail ppd " + "inner join ppd.pelayananPasien pp " + + "inner join pp.pasienDaftar apd " + "inner join apd.pasienDaftar pd " + "where pp.strukFk is null " + + "and pd.noRegistrasi = :noRegistrasi " + "order by ppd.komponenHargaId") + List> findDetailTagihan(@Param("noRegistrasi") String noRegistrasi); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java index 897df257..3eaca465 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java @@ -15,7 +15,9 @@ public interface PelayananPasienService { Map findTindakanPasienMeninggal(Integer noCm); List> getRekapPendapatanAllRuangan(String tglAwal, String tglAkhir) throws ParseException; - + List> hitungRemunerasiDokterDenganFfs(String tglAwal, String tglAkhir); + void updateKlaimDiskonRSAB(String noRegistrasi, Double totalKlaim); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java index eaffff0c..8fb2c34c 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java @@ -22,6 +22,7 @@ import com.jasamedika.medifirst2000.converter.BaseConverterImpl; import com.jasamedika.medifirst2000.dao.AntrianPasienDiPeriksaDao; import com.jasamedika.medifirst2000.dao.LogAccDao; import com.jasamedika.medifirst2000.dao.PelayananPasienDao; +import com.jasamedika.medifirst2000.dao.PelayananPasienDetailDao; import com.jasamedika.medifirst2000.dao.StrukPelayananDao; import com.jasamedika.medifirst2000.entities.JenisObat; import com.jasamedika.medifirst2000.entities.LogAcc; @@ -41,6 +42,7 @@ import com.jasamedika.medifirst2000.vo.ProdukVO; */ @Service("pelayananPasienService") public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements PelayananPasienService { + @Autowired private BaseConverterImpl pelayananPasienConverter; @@ -53,6 +55,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel @Autowired private PelayananPasienDao pelayananPasienDao; + @Autowired + private PelayananPasienDetailDao pelayananPasienDetailDao; + @Autowired private LogAccDao logAccDao; @@ -230,20 +235,23 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel return result; } - - public Double calculateRemunWithFfs(Integer idKelPasien, Integer idDepartemen, Integer idLayanan, String namaLayanan, Integer tipePegawai, Double hargaJual, Double hargaDiskon, Double jumlahLayanan) { + + public Double calculateRemunWithFfs(Integer idKelPasien, Integer idDepartemen, Integer idLayanan, + String namaLayanan, Integer tipePegawai, Double hargaJual, Double hargaDiskon, Double jumlahLayanan) { Double result = 0.0; - + if (Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(idKelPasien)) { if (idDepartemen.equals(Master.Departemen.IGD)) { if (idLayanan.equals(Master.Produk.KONSULTASI_DOKTER_JAGA)) { result = 30000.0; } else { - result = (hargaJual - hargaDiskon) * jumlahLayanan * Master.FeeForService.HK_02_04_III_558_2015_5_B_C_D; + result = (hargaJual - hargaDiskon) * jumlahLayanan + * Master.FeeForService.HK_02_04_III_558_2015_5_B_C_D; } } else if (idDepartemen.equals(Master.Departemen.RAWAT_INAP)) { if (tipePegawai.equals(Master.TipePegawai.PURNA_WAKTU)) { - result = (hargaJual - hargaDiskon) * jumlahLayanan * Master.FeeForService.HK_02_04_III_558_2015_5_B_C_D; + result = (hargaJual - hargaDiskon) * jumlahLayanan + * Master.FeeForService.HK_02_04_III_558_2015_5_B_C_D; } else { result = 0.0; } @@ -275,7 +283,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel result = (hargaJual - hargaDiskon) * jumlahLayanan; } } - + return result; } @@ -283,7 +291,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel public List> hitungRemunerasiDokterDenganFfs(String tglAwal, String tglAkhir) { List> result = new ArrayList<>(); List listIdPegawai = new ArrayList<>(); - + DecimalFormatSymbols formatRp = new DecimalFormatSymbols(); formatRp.setCurrencySymbol("Rp"); formatRp.setMonetaryDecimalSeparator(','); @@ -291,9 +299,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel DecimalFormat kursINA = (DecimalFormat) DecimalFormat.getCurrencyInstance(); kursINA.setDecimalFormatSymbols(formatRp); - + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - + Date dateAwal = new Date(); Date dateAkhir = new Date(); try { @@ -302,15 +310,17 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } catch (ParseException e) { e.printStackTrace(); } - - List> data = pelayananPasienDao.getDataPendapatan(Master.JenisPegawai.DOKTER, dateAwal, dateAkhir); - + + List> data = pelayananPasienDao.getDataPendapatan(Master.JenisPegawai.DOKTER, dateAwal, + dateAkhir); + for (Map map : data) { - if (!listIdPegawai.contains(Integer.parseInt(map.get("idPegawai").toString())) && !map.get("namaPegawai").equals("-")) { + if (!listIdPegawai.contains(Integer.parseInt(map.get("idPegawai").toString())) + && !map.get("namaPegawai").equals("-")) { listIdPegawai.add(Integer.parseInt(map.get("idPegawai").toString())); } } - + for (Integer idPegawai : listIdPegawai) { Double remun = 0.0; Map mapRes = new HashMap<>(); @@ -324,11 +334,12 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel Double hargaJual = Double.parseDouble(map.get("hargaJual").toString()); Double hargaDiskon = Double.parseDouble(map.get("hargaDiskon").toString()); Double jumlahLayanan = Double.parseDouble(map.get("jumlahLayanan").toString()); - + if (!map.get("idJenisProduk").equals(Master.JenisProduk.OBAT_ALKES)) { - remun += calculateRemunWithFfs(idKelPasien, idDepartemen, idLayanan, namaLayanan, tipePegawai, hargaJual, hargaDiskon, jumlahLayanan); + remun += calculateRemunWithFfs(idKelPasien, idDepartemen, idLayanan, namaLayanan, tipePegawai, + hargaJual, hargaDiskon, jumlahLayanan); } - + mapRes.put("namaPegawai", map.get("namaPegawai")); } } @@ -338,7 +349,90 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel result.add(mapRes); } } - + return result; } + + @Override + public void updateKlaimDiskonRSAB(String noRegistrasi, Double totalKlaim) { + List> detailSarana = new ArrayList<>(); + List> detailUmum = new ArrayList<>(); + List> detailParamedis = new ArrayList<>(); + List> detailMedis = new ArrayList<>(); + List> detailLainlain = new ArrayList<>(); + + double totalDetailSarana = 0.0; + double totalDetailUmum = 0.0; + double totalDetailParamedis = 0.0; + double totalDetailMedis = 0.0; + double totalDetailFarmasi = 0.0; + double sisaTotalKlaim = totalKlaim; + double fracTotalKlaim = 0.0; + + List> detail = pelayananPasienDetailDao.findDetailTagihan(noRegistrasi); + for (Map map : detail) { + if (Arrays.asList(Master.KomponenHarga.JASA_SARANA).contains(map.get("idKomponenHarga"))) { + detailSarana.add(map); + totalDetailSarana += ((double) map.get("hargaJual") - (double) map.get("hargaDiscount")) + * (double) map.get("jumlah"); + totalDetailFarmasi += (double) map.get("jasa"); + } else if (map.get("idKomponenHarga").equals(Master.KomponenHarga.JASA_UMUM)) { + detailUmum.add(map); + totalDetailUmum += ((double) map.get("hargaJual") - (double) map.get("hargaDiscount")) + * (double) map.get("jumlah"); + totalDetailFarmasi += (double) map.get("jasa"); + } else if (Arrays.asList(Master.KomponenHarga.JASA_PARAMEDIS).contains(map.get("idKomponenHarga"))) { + detailParamedis.add(map); + totalDetailParamedis += ((double) map.get("hargaJual") - (double) map.get("hargaDiscount")) + * (double) map.get("jumlah"); + totalDetailFarmasi += (double) map.get("jasa"); + } else if (Arrays.asList(Master.KomponenHarga.JASA_MEDIS).contains(map.get("idKomponenHarga"))) { + detailMedis.add(map); + totalDetailMedis += ((double) map.get("hargaJual") - (double) map.get("hargaDiscount")) + * (double) map.get("jumlah"); + totalDetailFarmasi += (double) map.get("jasa"); + } else { + detailLainlain.add(map); + } + } + + if (sisaTotalKlaim <= totalDetailSarana) { + // TODO inserted by ITI-14 [Feb 15, 2021, 11:50:43 AM] : diskonkan detail sarana! + sisaTotalKlaim = 0.0; + } else { + // TODO inserted by ITI-14 [Feb 15, 2021, 11:51:36 AM] : nolkan detail sarana! + sisaTotalKlaim -= totalDetailSarana; + if (sisaTotalKlaim <= totalDetailUmum) { + // TODO inserted by ITI-14 [Feb 15, 2021, 11:52:10 AM] : diskonkan detail umum! + sisaTotalKlaim = 0.0; + } else { + // TODO inserted by ITI-14 [Feb 15, 2021, 11:52:39 AM] : nolkan detail umum! + sisaTotalKlaim -= totalDetailUmum; + if (sisaTotalKlaim <= totalDetailParamedis) { + // TODO inserted by ITI-14 [Feb 15, 2021, 11:53:20 AM] : diskonkan detail paramedis! + sisaTotalKlaim = 0.0; + } else { + // TODO inserted by ITI-14 [Feb 15, 2021, 11:54:40 AM] : nolkan detail paramedis! + sisaTotalKlaim -= totalDetailParamedis; + if (sisaTotalKlaim <= totalDetailMedis) { + // TODO inserted by ITI-14 [Feb 15, 2021, 11:55:18 AM] : diskonkan detail medis! + sisaTotalKlaim = 0.0; + } else { + // TODO inserted by ITI-14 [Feb 15, 2021, 11:55:49 AM] : nolkan detail medis! + sisaTotalKlaim -= totalDetailMedis; + if (sisaTotalKlaim <= totalDetailFarmasi) { + // TODO inserted by ITI-14 [Feb 15, 2021, 1:08:16 PM] : diskonkan detail jasa! + sisaTotalKlaim = 0.0; + } else { + // TODO inserted by ITI-14 [Feb 15, 2021, 1:08:38 PM] : nolkan detail jasa! + sisaTotalKlaim -= totalDetailFarmasi; + if (sisaTotalKlaim > 0.0) { + // TODO inserted by ITI-14 [Feb 15, 2021, 1:09:42 PM] : error! + } + } + } + } + } + } + } } \ No newline at end of file