Update service remunerasi
Penerapan jasa dokter akumulatif dokter pemeriksa dan asisten spesialis
This commit is contained in:
parent
c2e48ab16c
commit
52d4ac2a6c
@ -134,6 +134,7 @@ public final class Master {
|
||||
public static final Integer DOKTER_ANASTESI = 6;
|
||||
public static final Integer[] DOKTER_ANASTESI_OR_ASISTEN_SPESIALIS = { 6, 13 };
|
||||
public static final Integer DOKTER_PEMERIKSA = 4;
|
||||
public static final Integer[] DOKTER_PEMERIKSA_AND_ASISTEN = { 4, 13 };
|
||||
public static final Integer PETUGAS_PELAKSANA = 2;
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.jasamedika.medifirst2000.dao;
|
||||
|
||||
import com.jasamedika.medifirst2000.dto.PelayananDokterBedahDto;
|
||||
import com.jasamedika.medifirst2000.entities.PelayananPasien;
|
||||
import com.jasamedika.medifirst2000.entities.PelayananPasienDetail;
|
||||
import com.jasamedika.medifirst2000.entities.StrukPelayanan;
|
||||
@ -327,4 +328,40 @@ public interface PelayananPasienDao extends JpaRepository<PelayananPasien, Strin
|
||||
Set<Map<String, Object>> findPasienPaketDiRanapByDokter(@Param("listIdSpog") List<Integer> listIdSpog,
|
||||
@Param("listProdukEntriId") List<Integer> listProdukEntriId,
|
||||
@Param("listRanapId") List<Integer> listRanapId);
|
||||
|
||||
@Query(nativeQuery = true, value = "select distinct pp.norec " + "from pelayananpasien_t pp "
|
||||
+ "inner join pelayananpasienpetugas_t ppp on pp.norec = ppp.pelayananpasien "
|
||||
+ "inner join mappegawaijabatantounitkerja_m mj on ppp.objectpegawaifk = mj.objectpegawaifk "
|
||||
+ "where ppp.objectpegawaifk = :pegawaiId " + "and pp.tglpelayanan between :tglAwal and :tglAkhir "
|
||||
+ "and mj.statusenabled = true " + "and ppp.objectjenispetugaspefk in (:listJenisPetugasPelaksanaId)")
|
||||
List<String> findIdPelayananByDokter(@Param("pegawaiId") Integer idPegawai, @Param("tglAwal") Date tglAwal,
|
||||
@Param("tglAkhir") Date tglAkhir,
|
||||
@Param("listJenisPetugasPelaksanaId") List<Integer> listIdJenisPetugasPelaksana);
|
||||
|
||||
@Query(nativeQuery = true, value = "select pp.norec " + "from pelayananpasien_t pp "
|
||||
+ "inner join pelayananpasienpetugas_t ppp on pp.norec = ppp.pelayananpasien "
|
||||
+ "inner join mappegawaijabatantounitkerja_m mj on ppp.objectpegawaifk = mj.objectpegawaifk "
|
||||
+ "where pp.tglpelayanan between :tglAwal and :tglAkhir " + "and mj.statusenabled = true "
|
||||
+ "and mj.objectunitkerjapegawaifk in (:listKsmId) "
|
||||
+ "and ppp.objectjenispetugaspefk in (:listJenisPetugasPelaksanaId) "
|
||||
+ "group by pp.norec having count(pp.norec) > 1")
|
||||
List<String> findIdPelayananByKsm(@Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir,
|
||||
@Param("listKsmId") List<Integer> listIdKsm,
|
||||
@Param("listJenisPetugasPelaksanaId") List<Integer> listIdJenisPetugasPelaksana);
|
||||
|
||||
@Query("select distinct new com.jasamedika.medifirst2000.dto.PelayananDokterBedahDto("
|
||||
+ "pp.noRec as noRec,pp.produkId as idProduk,"
|
||||
+ "ppp.ObjectPegawaiId as idPegawai,ppp.ObjectJenisPetugasPeId as idJenisPetugasPelaksana) "
|
||||
+ "from PelayananPasienPetugas ppp, MapPegawaiJabatanToUnitKerja mj " + "inner join ppp.pelayananPasien pp "
|
||||
+ "inner join mj.pegawai pg " + "where mj.statusEnabled is true "
|
||||
+ "and ppp.ObjectPegawaiId = mj.pegawaiId " + "and ppp.ObjectPegawaiId = pg.id "
|
||||
+ "and pp.tglPelayanan between :tglAwal and :tglAkhir " + "and mj.unitKerjaPegawaiId in (:listKsmId) "
|
||||
+ "and ppp.ObjectJenisPetugasPeId in (:listJenisPetugasPelaksanaId) "
|
||||
+ "and pp.noRec in (:listPelayananIdByDokter) " + "and pp.noRec in (:listPelayananIdByKsm)")
|
||||
List<PelayananDokterBedahDto> findPelayananBedah(@Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir,
|
||||
@Param("listKsmId") List<Integer> listIdKsm,
|
||||
@Param("listJenisPetugasPelaksanaId") List<Integer> listIdJenisPetugasPelaksana,
|
||||
@Param("listPelayananIdByDokter") List<String> listIdPelayananByDokter,
|
||||
@Param("listPelayananIdByKsm") List<String> listIdPelayananByKsm);
|
||||
|
||||
}
|
||||
|
||||
@ -3,8 +3,10 @@ package com.jasamedika.medifirst2000.service.impl;
|
||||
import com.jasamedika.medifirst2000.constants.Master;
|
||||
import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
|
||||
import com.jasamedika.medifirst2000.dao.*;
|
||||
import com.jasamedika.medifirst2000.dto.PelayananDokterBedahDto;
|
||||
import com.jasamedika.medifirst2000.dto.RemunHargaJasa;
|
||||
import com.jasamedika.medifirst2000.entities.*;
|
||||
import com.jasamedika.medifirst2000.entities.constant.StatusPersenBedah;
|
||||
import com.jasamedika.medifirst2000.exception.ServiceVOException;
|
||||
import com.jasamedika.medifirst2000.service.RemunerasiService;
|
||||
import com.jasamedika.medifirst2000.util.CommonUtil;
|
||||
@ -37,7 +39,9 @@ import static com.jasamedika.medifirst2000.constants.Master.KomponenHarga.*;
|
||||
import static com.jasamedika.medifirst2000.constants.Master.Profesi.TERAPI;
|
||||
import static com.jasamedika.medifirst2000.constants.Master.Ruangan.*;
|
||||
import static com.jasamedika.medifirst2000.constants.Master.SubUnitKerja.*;
|
||||
import static com.jasamedika.medifirst2000.constants.Master.UnitKerja.KSM;
|
||||
import static com.jasamedika.medifirst2000.constants.Master.UnitKerja.KSM_OBGYN;
|
||||
import static com.jasamedika.medifirst2000.entities.constant.StatusPersenBedah.*;
|
||||
import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.PERAWAT;
|
||||
import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.TINDAKAN_UTAMA;
|
||||
|
||||
@ -307,7 +311,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
* Mendapatkan persentase jasa
|
||||
*/
|
||||
double persenOperator = toDoubleSettingFix("persenRemunOperatorIBS", tglAkhir);
|
||||
double persenAsistenIBS = toDoubleSettingFix("persenRemunAsistenIBS", tglAkhir);
|
||||
double persenAsisten = toDoubleSettingFix("persenRemunAsistenIBS", tglAkhir);
|
||||
double persenAnestesi = toDoubleSettingFix("persenRemunAnestesiIBS", tglAkhir);
|
||||
double persenRadiologi = toDoubleSettingFix("persenRemunRadiologi", tglAkhir);
|
||||
double persenLaboratorium = toDoubleSettingFix("persenRemunLaboratorium", tglAkhir);
|
||||
@ -324,6 +328,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
double persenRemunVisiteDokterKelompokBudiRahmat = toDoubleSettingFix(
|
||||
"persenRemunVisiteDokterKelompokBudiRahmat", tglAkhir);
|
||||
long millisTarif2024 = Long.parseLong(getSettingDataFixed("tmtTarif2024"));
|
||||
long millisPersenJasa2024 = Long.parseLong(getSettingDataFixed("tmtPersenJasa2024"));
|
||||
/*
|
||||
* Persiapan filter logic remunerasi
|
||||
*/
|
||||
@ -372,11 +377,26 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
* TMT Tarif baru tahun 2024
|
||||
*/
|
||||
Date tmtTarif2024 = new Date(millisTarif2024);
|
||||
/*
|
||||
* TMT persentase jasa tahun 2024
|
||||
*/
|
||||
Date tmtPersenJasa2024 = new Date(millisPersenJasa2024);
|
||||
/*
|
||||
* Mendapatkan data mentah pelayanan pasien
|
||||
*/
|
||||
List<Map<String, Object>> listRatedPay = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai,
|
||||
tglAwal, tglAkhir, idsKarcis);
|
||||
/*
|
||||
* Filtering tools: pelayanan bedah
|
||||
*/
|
||||
List<Integer> dokterAndAsisten = Arrays.asList(DOKTER_PEMERIKSA_AND_ASISTEN);
|
||||
List<Integer> listKsm = Arrays.asList(KSM);
|
||||
List<String> idPelayananByDokter = pelayananPasienDao.findIdPelayananByDokter(idPegawai, tglAwal, tglAkhir,
|
||||
dokterAndAsisten);
|
||||
List<String> idPelayananByKsm = pelayananPasienDao.findIdPelayananByKsm(tglAwal, tglAkhir, listKsm,
|
||||
dokterAndAsisten);
|
||||
List<PelayananDokterBedahDto> pelayananBedah = pelayananPasienDao.findPelayananBedah(tglAwal, tglAkhir, listKsm,
|
||||
dokterAndAsisten, idPelayananByDokter, idPelayananByKsm);
|
||||
/*
|
||||
* Pemisahan produk kepala paket untuk fixed pay
|
||||
*/
|
||||
@ -410,6 +430,11 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
if (pegawaiDao.getPegawaiByKategoryPegawai(Arrays.asList(DOKTER_LUAR)).contains(idPegawai))
|
||||
persenVisite = persenRemunVisiteDokterKelompokBudiRahmat;
|
||||
for (Map<String, Object> d : listRatedPay) {
|
||||
double persenOperatorAkumulatif = persenOperator;
|
||||
StatusPersenBedah statusPersenBedah = decidePercentBedah(pelayananBedah, d);
|
||||
if (CommonUtil.isNotNullOrEmpty(statusPersenBedah) && FULL_OPERATOR.equals(statusPersenBedah)
|
||||
&& (tglAwal.equals(tmtPersenJasa2024) || tglAwal.after(tmtPersenJasa2024)))
|
||||
persenOperatorAkumulatif += persenAsisten;
|
||||
if (paketBukanFixedPay.contains(Integer.parseInt(d.get("idProduk").toString())))
|
||||
d.put("hargaJual", d.get("komponenTotalTarif"));
|
||||
d.put("isTermasukProporsi", true);
|
||||
@ -427,7 +452,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
&& CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien"))
|
||||
&& Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString()))
|
||||
&& DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
|
||||
double persenJasa = persenOperator / 100;
|
||||
double persenJasa = persenOperatorAkumulatif / 100;
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d);
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
@ -435,7 +460,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
&& CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien"))
|
||||
&& Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString()))
|
||||
&& ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
|
||||
double persenJasa = persenAsistenIBS / 100;
|
||||
double persenJasa = persenAsisten / 100;
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d);
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
@ -450,14 +475,14 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))
|
||||
&& CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperator / 100,
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperatorAkumulatif / 100,
|
||||
(hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d);
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))
|
||||
&& CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsistenIBS / 100,
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsisten / 100,
|
||||
(hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d);
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
@ -470,12 +495,12 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperator / 100, hargaJual, d);
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperatorAkumulatif / 100, hargaJual, d);
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsistenIBS / 100, hargaJual, d);
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsisten / 100, hargaJual, d);
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
@ -2190,9 +2215,10 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
/*
|
||||
* Mendapatkan persentase jasa
|
||||
*/
|
||||
Date tglAkhir = DateUtil.endMonth(bulan);
|
||||
Date tglAwal = DateUtil.startMonth(date);
|
||||
Date tglAkhir = DateUtil.endMonth(date);
|
||||
double persenOperator = toDoubleSettingFix("persenRemunOperatorIBS", tglAkhir);
|
||||
double persenAsistenIBS = toDoubleSettingFix("persenRemunAsistenIBS", tglAkhir);
|
||||
double persenAsisten = toDoubleSettingFix("persenRemunAsistenIBS", tglAkhir);
|
||||
double persenAnestesi = toDoubleSettingFix("persenRemunAnestesiIBS", tglAkhir);
|
||||
double persenRadiologi = toDoubleSettingFix("persenRemunRadiologi", tglAkhir);
|
||||
double persenLaboratorium = toDoubleSettingFix("persenRemunLaboratorium", tglAkhir);
|
||||
@ -2208,6 +2234,11 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
double persenRemunTerapis = toDoubleSettingFix("persenRemunTerapis", tglAkhir);
|
||||
double persenRemunVisiteDokterKelompokBudiRahmat = toDoubleSettingFix(
|
||||
"persenRemunVisiteDokterKelompokBudiRahmat", tglAkhir);
|
||||
long millisPersenJasa2024 = Long.parseLong(getSettingDataFixed("tmtPersenJasa2024"));
|
||||
/*
|
||||
* TMT persentase jasa tahun 2024
|
||||
*/
|
||||
Date tmtPersenJasa2024 = new Date(millisPersenJasa2024);
|
||||
/*
|
||||
* Persiapan filter logic remunerasi
|
||||
*/
|
||||
@ -2219,6 +2250,17 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
List<Integer> idsLabGenetikaLuarRuangan = toListIntegerSettingFix("idProdukLabGenetikaLuarRuangan", tglAkhir);
|
||||
List<Integer> listIdPegawaiRemunKelompokBudiRahmat = splitDataSettingDatafixed(
|
||||
"listIdPegawaiRemunKelompokBudiRahmat");
|
||||
/*
|
||||
* Filtering tools: pelayanan bedah
|
||||
*/
|
||||
List<Integer> dokterAndAsisten = Arrays.asList(DOKTER_PEMERIKSA_AND_ASISTEN);
|
||||
List<Integer> listKsm = Arrays.asList(KSM);
|
||||
List<String> idPelayananByDokter = pelayananPasienDao.findIdPelayananByDokter(idPegawai, tglAwal, tglAkhir,
|
||||
dokterAndAsisten);
|
||||
List<String> idPelayananByKsm = pelayananPasienDao.findIdPelayananByKsm(tglAwal, tglAkhir, listKsm,
|
||||
dokterAndAsisten);
|
||||
List<PelayananDokterBedahDto> pelayananBedah = pelayananPasienDao.findPelayananBedah(tglAwal, tglAkhir, listKsm,
|
||||
dokterAndAsisten, idPelayananByDokter, idPelayananByKsm);
|
||||
/*
|
||||
* Set persen jasa dan harga jasa pasien bpjs di ibs, icu
|
||||
*/
|
||||
@ -2231,6 +2273,11 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
&& listIdPegawaiRemunKelompokBudiRahmat.contains(idPegawai))
|
||||
persenVisite = persenRemunVisiteDokterKelompokBudiRahmat;
|
||||
for (Map<String, Object> d : listData) {
|
||||
double persenOperatorAkumulatif = persenOperator;
|
||||
StatusPersenBedah statusPersenBedah = decidePercentBedah(pelayananBedah, d);
|
||||
if (CommonUtil.isNotNullOrEmpty(statusPersenBedah) && FULL_OPERATOR.equals(statusPersenBedah)
|
||||
&& (tglAwal.equals(tmtPersenJasa2024) || tglAwal.after(tmtPersenJasa2024)))
|
||||
persenOperatorAkumulatif += persenAsisten;
|
||||
double hargaJual = Double.parseDouble(d.get("hargaJual").toString());
|
||||
if (drKsmUmumList.contains(idPegawai) && ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenRemunDokterUmumHD / 100, hargaJual, d);
|
||||
@ -2247,9 +2294,9 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
&& CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien"))
|
||||
&& Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString()))
|
||||
&& DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
|
||||
double persenJasa = persenOperator / 100;
|
||||
double persenJasa = persenOperatorAkumulatif / 100;
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d);
|
||||
d.put("persenJasa", persenOperator + "%");
|
||||
d.put("persenJasa", persenOperatorAkumulatif + "%");
|
||||
d.put("keterangan", "Tarif Jasa Bedah (" + persenTarifJasaBedah + "%)" + hargaJasa.getKeterangan());
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
@ -2257,9 +2304,9 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
&& CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien"))
|
||||
&& Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString()))
|
||||
&& ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
|
||||
double persenJasa = persenAsistenIBS / 100;
|
||||
double persenJasa = persenAsisten / 100;
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d);
|
||||
d.put("persenJasa", persenAsistenIBS + "%");
|
||||
d.put("persenJasa", persenAsisten + "%");
|
||||
d.put("keterangan", "Tarif Jasa Bedah (" + persenTarifJasaBedah + "%)" + hargaJasa.getKeterangan());
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
@ -2276,18 +2323,18 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))
|
||||
&& CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperator / 100,
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperatorAkumulatif / 100,
|
||||
(hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d);
|
||||
d.put("persenJasa", persenOperator + "%");
|
||||
d.put("persenJasa", persenOperatorAkumulatif + "%");
|
||||
d.put("keterangan", hargaJasa.getKeterangan());
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))
|
||||
&& CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsistenIBS / 100,
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsisten / 100,
|
||||
(hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d);
|
||||
d.put("persenJasa", persenAsistenIBS + "%");
|
||||
d.put("persenJasa", persenAsisten + "%");
|
||||
d.put("keterangan", hargaJasa.getKeterangan());
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
@ -2302,15 +2349,15 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperator / 100, hargaJual, d);
|
||||
d.put("persenJasa", persenOperator + "%");
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperatorAkumulatif / 100, hargaJual, d);
|
||||
d.put("persenJasa", persenOperatorAkumulatif + "%");
|
||||
d.put("keterangan", hargaJasa.getKeterangan());
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsistenIBS / 100, hargaJual, d);
|
||||
d.put("persenJasa", persenAsistenIBS + "%");
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsisten / 100, hargaJual, d);
|
||||
d.put("persenJasa", persenAsisten + "%");
|
||||
d.put("keterangan", hargaJasa.getKeterangan());
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
@ -2568,10 +2615,11 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
/*
|
||||
* Mendapatkan persentase jasa
|
||||
*/
|
||||
Date tglAkhir = DateUtil.endMonth(bulan);
|
||||
Date tglAwal = DateUtil.startMonth(date);
|
||||
Date tglAkhir = DateUtil.endMonth(date);
|
||||
double persenBPJS = toDoubleSettingFix("persenJasaBPJS", tglAkhir);
|
||||
double persenOperator = toDoubleSettingFix("persenJasaOperatorIBS", tglAkhir);
|
||||
double persenAsistenIBS = toDoubleSettingFix("persenJasaAsistenIBS", tglAkhir);
|
||||
double persenAsisten = toDoubleSettingFix("persenJasaAsistenIBS", tglAkhir);
|
||||
double persenAnestesi = toDoubleSettingFix("persenJasaAnestesiIBS", tglAkhir);
|
||||
double persenRadiologi = toDoubleSettingFix("persenJasaRadiologi", tglAkhir);
|
||||
double persenLaboratorium = toDoubleSettingFix("persenJasaLaboratorium", tglAkhir);
|
||||
@ -2595,10 +2643,31 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
List<Integer> drAnastesiList = pegawaiDao.getDokterByKelompokKerja(KK_ANESTESI);
|
||||
List<Integer> terapisRehabMedik = mapJabatanProfesiDao.findIdPegawaiByProfesiIn(Arrays.asList(TERAPI));
|
||||
List<Integer> idsLabGenetikaLuarRuangan = toListIntegerSettingFix("idProdukLabGenetikaLuarRuangan", tglAkhir);
|
||||
/*
|
||||
* TMT persentase jasa tahun 2024
|
||||
*/
|
||||
long millisPersenJasa2024 = Long.parseLong(getSettingDataFixed("tmtPersenJasa2024"));
|
||||
Date tmtPersenJasa2024 = new Date(millisPersenJasa2024);
|
||||
/*
|
||||
* Filtering tools: pelayanan bedah
|
||||
*/
|
||||
List<Integer> dokterAndAsisten = Arrays.asList(DOKTER_PEMERIKSA_AND_ASISTEN);
|
||||
List<Integer> listKsm = Arrays.asList(KSM);
|
||||
List<String> idPelayananByDokter = pelayananPasienDao.findIdPelayananByDokter(idPegawai, tglAwal, tglAkhir,
|
||||
dokterAndAsisten);
|
||||
List<String> idPelayananByKsm = pelayananPasienDao.findIdPelayananByKsm(tglAwal, tglAkhir, listKsm,
|
||||
dokterAndAsisten);
|
||||
List<PelayananDokterBedahDto> pelayananBedah = pelayananPasienDao.findPelayananBedah(tglAwal, tglAkhir, listKsm,
|
||||
dokterAndAsisten, idPelayananByDokter, idPelayananByKsm);
|
||||
/*
|
||||
* Mapping persentase jasa remunerasi
|
||||
*/
|
||||
for (Map<String, Object> d : listData) {
|
||||
double persenOperatorAkumulatif = persenOperator;
|
||||
StatusPersenBedah statusPersenBedah = decidePercentBedah(pelayananBedah, d);
|
||||
if (CommonUtil.isNotNullOrEmpty(statusPersenBedah) && FULL_OPERATOR.equals(statusPersenBedah)
|
||||
&& (tglAwal.equals(tmtPersenJasa2024) || tglAwal.after(tmtPersenJasa2024)))
|
||||
persenOperatorAkumulatif += persenAsisten;
|
||||
double hargaJual = Double.parseDouble(d.get("hargaJual").toString());
|
||||
if (CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien"))
|
||||
&& Arrays.asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString()))) {
|
||||
@ -2636,18 +2705,18 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))
|
||||
&& CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperator / 100,
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperatorAkumulatif / 100,
|
||||
(hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d);
|
||||
d.put("persenJasa", persenOperator + "%");
|
||||
d.put("persenJasa", persenOperatorAkumulatif + "%");
|
||||
d.put("keterangan", hargaJasa.getKeterangan());
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))
|
||||
&& CommonUtil.isNotNullOrEmpty(d.get("idSayatan"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsistenIBS / 100,
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsisten / 100,
|
||||
(hargaJual - (Double.parseDouble(d.get("persenSayatan").toString()) / 100 * hargaJual)), d);
|
||||
d.put("persenJasa", persenAsistenIBS + "%");
|
||||
d.put("persenJasa", persenAsisten + "%");
|
||||
d.put("keterangan", hargaJasa.getKeterangan());
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
@ -2662,15 +2731,15 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperator / 100, hargaJual, d);
|
||||
d.put("persenJasa", persenOperator + "%");
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenOperatorAkumulatif / 100, hargaJual, d);
|
||||
d.put("persenJasa", persenOperatorAkumulatif + "%");
|
||||
d.put("keterangan", hargaJasa.getKeterangan());
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
|
||||
&& ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsistenIBS / 100, hargaJual, d);
|
||||
d.put("persenJasa", persenAsistenIBS + "%");
|
||||
RemunHargaJasa hargaJasa = hargaJasa(persenAsisten / 100, hargaJual, d);
|
||||
d.put("persenJasa", persenAsisten + "%");
|
||||
d.put("keterangan", hargaJasa.getKeterangan());
|
||||
d.put("hargaJasa", hargaJasa.getNilai());
|
||||
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|
||||
@ -3635,4 +3704,29 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
private StatusPersenBedah decidePercentBedah(List<PelayananDokterBedahDto> dtoList, Map<String, Object> data) {
|
||||
String noRec = data.get("idPelayananPasien").toString();
|
||||
int idJenisPetugasPelaksana = Integer.parseInt(data.get("idJenisPelaksana").toString());
|
||||
if (DOKTER_PEMERIKSA.equals(idJenisPetugasPelaksana)) {
|
||||
Optional<PelayananDokterBedahDto> first = dtoList.stream().filter(
|
||||
dto -> noRec.equals(dto.getNoRec()) && ASISTEN_SPESIALIS.equals(dto.getIdJenisPetugasPelaksana()))
|
||||
.findFirst();
|
||||
if (first.isPresent()) {
|
||||
return OPERATOR_ONLY;
|
||||
} else {
|
||||
return FULL_OPERATOR;
|
||||
}
|
||||
} else if (ASISTEN_SPESIALIS.equals(idJenisPetugasPelaksana)) {
|
||||
Optional<PelayananDokterBedahDto> first = dtoList.stream().filter(
|
||||
dto -> noRec.equals(dto.getNoRec()) && DOKTER_PEMERIKSA.equals(dto.getIdJenisPetugasPelaksana()))
|
||||
.findFirst();
|
||||
if (first.isPresent()) {
|
||||
return ASISTEN_ONLY;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
package com.jasamedika.medifirst2000.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Salman
|
||||
* @version 1.0.0
|
||||
* @since 3/6/2025
|
||||
*/
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PelayananDokterBedahDto {
|
||||
|
||||
private String noRec;
|
||||
|
||||
private Integer idProduk;
|
||||
|
||||
private Integer idPegawai;
|
||||
|
||||
private Integer idJenisPetugasPelaksana;
|
||||
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package com.jasamedika.medifirst2000.entities.constant;
|
||||
|
||||
/**
|
||||
* @author Salman
|
||||
* @version 1.0.0
|
||||
* @since 3/6/2025
|
||||
*/
|
||||
public enum StatusPersenBedah {
|
||||
|
||||
FULL_OPERATOR, OPERATOR_ONLY, ASISTEN_ONLY
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user