persiapan service update pelayanan pasien detail saat entri klaim verifikasi tagihan untuk diskon karyawan

This commit is contained in:
salmanoe 2021-02-15 13:36:56 +07:00
parent 3c74ae5f63
commit 74b3ac482f
3 changed files with 126 additions and 21 deletions

View File

@ -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<PelayananPasienDetail, String> {
@Query("select model from PelayananPasienDetail model left join model.pelayananPasien a where a.noRec=:noRec")
List<PelayananPasienDetail> 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<Map<String, Object>> findDetailTagihan(@Param("noRegistrasi") String noRegistrasi);
}

View File

@ -15,7 +15,9 @@ public interface PelayananPasienService {
Map<String, Object> findTindakanPasienMeninggal(Integer noCm);
List<Map<String, Object>> getRekapPendapatanAllRuangan(String tglAwal, String tglAkhir) throws ParseException;
List<Map<String, Object>> hitungRemunerasiDokterDenganFfs(String tglAwal, String tglAkhir);
void updateKlaimDiskonRSAB(String noRegistrasi, Double totalKlaim);
}

View File

@ -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<PelayananPasienVO, PelayananPasien> 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<Map<String, Object>> hitungRemunerasiDokterDenganFfs(String tglAwal, String tglAkhir) {
List<Map<String, Object>> result = new ArrayList<>();
List<Integer> 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<Map<String, Object>> data = pelayananPasienDao.getDataPendapatan(Master.JenisPegawai.DOKTER, dateAwal, dateAkhir);
List<Map<String, Object>> data = pelayananPasienDao.getDataPendapatan(Master.JenisPegawai.DOKTER, dateAwal,
dateAkhir);
for (Map<String, Object> 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<String, Object> 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<Map<String, Object>> detailSarana = new ArrayList<>();
List<Map<String, Object>> detailUmum = new ArrayList<>();
List<Map<String, Object>> detailParamedis = new ArrayList<>();
List<Map<String, Object>> detailMedis = new ArrayList<>();
List<Map<String, Object>> 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<Map<String, Object>> detail = pelayananPasienDetailDao.findDetailTagihan(noRegistrasi);
for (Map<String, Object> 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!
}
}
}
}
}
}
}
}