Update PelayananPasienServiceImpl.java

Penerapan aturan surat edaran remunerasi baru dan aturan remunerasi kk eria
This commit is contained in:
Salman Manoe 2023-05-10 19:35:14 +07:00
parent 16ab9227ca
commit b45c45652c

View File

@ -28,6 +28,7 @@ import com.jasamedika.medifirst2000.constants.Master;
import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.dao.AntrianPasienDiPeriksaDao;
import com.jasamedika.medifirst2000.dao.LogAccDao;
import com.jasamedika.medifirst2000.dao.MapPegawaiLaboratRadiologiDao;
import com.jasamedika.medifirst2000.dao.PasienDaftarDao;
import com.jasamedika.medifirst2000.dao.PegawaiDao;
import com.jasamedika.medifirst2000.dao.PegawaiJadwalKerjaDao;
@ -90,6 +91,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
@Autowired
private PegawaiDao pegawaiDao;
@Autowired
private MapPegawaiLaboratRadiologiDao mapPegawaiLaboratRadiologiDao;
@Override
public Map<String, Object> savePelayananPasien(PelayananPasienVO vo) {
Map<String, Object> result = new HashMap<String, Object>();
@ -458,6 +462,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
Double persenKonsultasi = Double.parseDouble(GetSettingDataFixed("persenRemunKonsultasiDokter").toString());
Double persenVisite = Double.parseDouble(GetSettingDataFixed("persenRemunVisiteDokter").toString());
Double persenTindakan = Double.parseDouble(GetSettingDataFixed("persenRemunTindakanDokter").toString());
Double persenTarifJasaBedah = Double.parseDouble(GetSettingDataFixed("persenTarifJasaBedah").toString());
/*
* Mendapatkan data mentah pelayanan pasien
*/
@ -473,14 +478,26 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
*/
for (Map<String, Object> d : listData)
if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))
&& Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
d.put("hargaJasa", persenOperatorIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))
&& Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
d.put("hargaJasa", persenAsistenIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))
&& Master.JenisPetugasPelaksana.DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) {
d.put("hargaJasa", persenAnestesiIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
&& Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(d.get("idKelompokPasien"))) {
double persenTarif = persenTarifJasaBedah / 100;
if (Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
double persenJasa = persenOperatorIBS / 100;
d.put("hargaJasa", persenJasa * persenTarif * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
double persenJasa = persenAsistenIBS / 100;
d.put("hargaJasa", persenJasa * persenTarif * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.JenisPetugasPelaksana.DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) {
double persenJasa = persenAnestesiIBS / 100;
d.put("hargaJasa", persenJasa * persenTarif * Double.parseDouble(d.get("hargaJual").toString()));
}
} else if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))) {
if (Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
d.put("hargaJasa", persenOperatorIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
d.put("hargaJasa", persenAsistenIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.JenisPetugasPelaksana.DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) {
d.put("hargaJasa", persenAnestesiIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
}
} else if (Master.Departemen.RADIOLOGI.equals(d.get("idDepartemen"))) {
d.put("hargaJasa", persenRadiologi / 100 * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.Departemen.LABORATORIUM.equals(d.get("idDepartemen"))) {
@ -496,12 +513,37 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
}
/*
* Alokasi data diambil terlebih dahulu untuk kelompok BPJS, Jaminan
* Kemenkes, dan Jaminan Kesda
* Kemenkes
*/
List<Map<String, Object>> listDataBpjs = new ArrayList<>();
for (Map<String, Object> d : listData)
if (Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(d.get("idKelompokPasien")))
listDataBpjs.add(d);
/*
* Filter tindakan operasi untuk pasien BPJS hanya diambil tarif
* tertinggi saja dalam satu siklus pelayanan
*/
List<Map<String, Object>> listRawDataBpjs = listDataBpjs.stream()
.filter(d -> Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen")))
.sorted(Comparator.comparing(o -> Double.parseDouble(o.get("hargaJual").toString()),
Comparator.reverseOrder()))
.sorted(Comparator.comparing(o -> o.get("idPasienDaftar").toString())).collect(Collectors.toList());
List<String> listIdPelayananPasien = new ArrayList<>();
List<String> listIdPasienDaftar = new ArrayList<>();
for (Map<String, Object> b : listRawDataBpjs)
if (!listIdPasienDaftar.contains(b.get("idPasienDaftar"))) {
listIdPasienDaftar.add(b.get("idPasienDaftar").toString());
listIdPelayananPasien.add(b.get("idPelayananPasien").toString());
}
List<Map<String, Object>> listDataBpjsNew = new ArrayList<>();
for (Map<String, Object> d : listDataBpjs) {
if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))
&& listIdPelayananPasien.contains(d.get("idPelayananPasien").toString())) {
listDataBpjsNew.add(d);
} else {
listDataBpjsNew.add(d);
}
}
/*
* Alokasi data diurutkan dulu untuk jam kerja. Asumsi jam kerja dokter
* nonshift
@ -565,7 +607,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
* Offer data yang sudah diurutkan dalam queue
*/
Queue<Map<String, Object>> queuePelayanan = new ArrayDeque<>();
listDataBpjs.forEach(pelayanan -> {
listDataBpjsNew.forEach(pelayanan -> {
queuePelayanan.offer(pelayanan);
});
listDataJamKerja.forEach(pelayanan -> {
@ -574,6 +616,37 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
listDataLuarJamKerja.forEach(pelayanan -> {
queuePelayanan.offer(pelayanan);
});
/*
* Persiapan filter logic remunerasi
*/
List<Integer> listDetailJenisProduk = new ArrayList<>();
List<Integer> listDetailJenisProdukException = new ArrayList<>();
List<Integer> drKkPediatrikGDList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PEDIATRIK_GD);
List<Integer> drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_UMUM);
List<Integer> drKkPerinatologiList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PERINATOLOGI);
List<Integer> laboranRadiologList = mapPegawaiLaboratRadiologiDao.findPegawaiLaboranRadiolog();
List<Integer> idsRegDJPAdminNonPK = splitDataSettingDatafixed("admin_nonpk");
List<Integer> idsRegDJPMedisUtama = splitDataSettingDatafixed("medis_utama");
List<Integer> idsRegDJPPenunjangPA = splitDataSettingDatafixed("penunjang_pa");
List<Integer> idsRegDJPPenunjangPK = splitDataSettingDatafixed("penunjang_pk");
List<Integer> idsRegDJPPenunjangRad = splitDataSettingDatafixed("penunjang_radiologi");
List<Integer> idsDokterUmumIGD = splitDataSettingDatafixed("pr_dokter_umum_igd");
List<Integer> idsDokterPerinatologi = splitDataSettingDatafixed("pr_dokter_perinatologi");
List<Integer> idsDokterBPJSffs = splitDataSettingDatafixed("dokterBPJSffs");
List<Integer> idsDokterPediatrikGD = splitDataSettingDatafixed("pr_dokter_pediatrik_gd");
if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_ANATOMI).contains(idPegawai)) {
listDetailJenisProduk = idsRegDJPPenunjangPA;
} else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_KLINIK).contains(idPegawai)) {
listDetailJenisProduk = idsRegDJPPenunjangPK;
} else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_RADIOLOGI).contains(idPegawai)) {
listDetailJenisProduk = idsRegDJPPenunjangRad;
} else {
listDetailJenisProduk = idsRegDJPMedisUtama;
}
if (laboranRadiologList.contains(idPegawai)) {
listDetailJenisProdukException = idsRegDJPAdminNonPK;
listDetailJenisProdukException.removeAll(listDetailJenisProduk);
}
/*
* Memisahkan data diurutkan menjadi logbook remun dan logbook ffs
*/
@ -582,16 +655,122 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
Double capaianRemun = 0.0;
if (pegawaiDao.getPegawaiByKategoryPegawai(Arrays.asList(Master.KategoryPegawai.DOKTER_LUAR))
.contains(idPegawai)) {
for (Map<String, Object> next = queuePelayanan.poll(); next != null; next = queuePelayanan.poll())
listPelayananFfs.add(next);
for (Map<String, Object> next = queuePelayanan.poll(); next != null; next = queuePelayanan.poll()) {
if (Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(next.get("idKelompokPasien"))
&& idsDokterBPJSffs.contains(idPegawai)) {
listPelayananFfs.add(next);
} else {
listPelayananFfs.add(next);
}
}
} else {
for (Map<String, Object> next = queuePelayanan.poll(); next != null; next = queuePelayanan.poll())
if (Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(next.get("idKelompokPasien"))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
if (drKkPediatrikGDList.contains(idPegawai)) {
if (idsDokterPediatrikGD.contains(next.get("idProduk"))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP)
.contains(Integer.parseInt(next.get("idDepartemen").toString()))
&& Master.GolonganProduk.VISIT.equals(next.get("idGolonganProduk"))
&& idPegawai.equals(next.get("idDPJP"))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
}
} else if (!drKkPediatrikGDList.contains(idPegawai)) {
if (listDetailJenisProduk.contains(next.get("idDetailJenisProduk"))) {
if (idsRegDJPPenunjangPA.contains(next.get("idDetailJenisProduk"))
|| idsRegDJPPenunjangPK.contains(next.get("idDetailJenisProduk"))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
}
} else if (!listDetailJenisProduk
.contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))
&& next.get("idDepartemen").equals(Master.Departemen.IGD)
&& drKsmUmumList.contains(idPegawai)
&& idsDokterUmumIGD.contains(Integer.parseInt(next.get("idProduk").toString()))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else if (!listDetailJenisProduk
.contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))
&& drKkPerinatologiList.contains(idPegawai)
&& idsDokterPerinatologi.contains(Integer.parseInt(next.get("idProduk").toString()))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException)
&& listDetailJenisProdukException
.contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))) {
if (idsRegDJPPenunjangPA
.contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))
|| idsRegDJPPenunjangPK
.contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
}
}
}
} else if (capaianRemun < targetRemun && (date.equals(dateLine) || date.after(dateLine))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
if (drKkPediatrikGDList.contains(idPegawai)) {
if (idsDokterPediatrikGD.contains(next.get("idProduk"))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP)
.contains(Integer.parseInt(next.get("idDepartemen").toString()))
&& Master.GolonganProduk.VISIT.equals(next.get("idGolonganProduk"))
&& idPegawai.equals(next.get("idDPJP"))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
}
} else if (!drKkPediatrikGDList.contains(idPegawai)) {
if (listDetailJenisProduk.contains(next.get("idDetailJenisProduk"))) {
if (idsRegDJPPenunjangPA.contains(next.get("idDetailJenisProduk"))
|| idsRegDJPPenunjangPK.contains(next.get("idDetailJenisProduk"))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
}
} else if (!listDetailJenisProduk
.contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))
&& next.get("idDepartemen").equals(Master.Departemen.IGD)
&& drKsmUmumList.contains(idPegawai)
&& idsDokterUmumIGD.contains(Integer.parseInt(next.get("idProduk").toString()))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else if (!listDetailJenisProduk
.contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))
&& drKkPerinatologiList.contains(idPegawai)
&& idsDokterPerinatologi.contains(Integer.parseInt(next.get("idProduk").toString()))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException)
&& listDetailJenisProdukException
.contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))) {
if (idsRegDJPPenunjangPA
.contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))
|| idsRegDJPPenunjangPK
.contains(Integer.parseInt(next.get("idDetailJenisProduk").toString()))) {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
} else {
listPelayananRemun.add(next);
capaianRemun += Double.valueOf(next.get("hargaJasa").toString());
}
}
}
} else {
listPelayananFfs.add(next);
}
@ -648,22 +827,38 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
Double persenKonsultasi = Double.parseDouble(GetSettingDataFixed("persenRemunKonsultasiDokter").toString());
Double persenVisite = Double.parseDouble(GetSettingDataFixed("persenRemunVisiteDokter").toString());
Double persenTindakan = Double.parseDouble(GetSettingDataFixed("persenRemunTindakanDokter").toString());
Double persenTarifJasaBedah = Double.parseDouble(GetSettingDataFixed("persenTarifJasaBedah").toString());
/*
* Mapping persentase jasa remunerasi
*/
for (Map<String, Object> d : listData) {
if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))
&& Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
d.put("persenJasa", persenOperatorIBS.toString() + "%");
d.put("hargaJasa", persenOperatorIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))
&& Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
d.put("persenJasa", persenAsistenIBS.toString() + "%");
d.put("hargaJasa", persenAsistenIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))
&& Master.JenisPetugasPelaksana.DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) {
d.put("persenJasa", persenAnestesiIBS.toString() + "%");
d.put("hargaJasa", persenAnestesiIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
&& Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(d.get("idKelompokPasien"))) {
double persenTarif = persenTarifJasaBedah / 100;
if (Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
double persenJasa = persenOperatorIBS / 100;
d.put("persenJasa", persenOperatorIBS.toString() + "%");
d.put("hargaJasa", persenJasa * persenTarif * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
double persenJasa = persenAsistenIBS / 100;
d.put("persenJasa", persenAsistenIBS.toString() + "%");
d.put("hargaJasa", persenJasa * persenTarif * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.JenisPetugasPelaksana.DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) {
double persenJasa = persenAnestesiIBS / 100;
d.put("persenJasa", persenAnestesiIBS.toString() + "%");
d.put("hargaJasa", persenJasa * persenTarif * Double.parseDouble(d.get("hargaJual").toString()));
}
} else if (Master.Departemen.BEDAH_SENTRAL.equals(d.get("idDepartemen"))) {
if (Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana"))) {
d.put("persenJasa", persenOperatorIBS.toString() + "%");
d.put("hargaJasa", persenOperatorIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS.equals(d.get("idJenisPelaksana"))) {
d.put("persenJasa", persenAsistenIBS.toString() + "%");
d.put("hargaJasa", persenAsistenIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
} else if (Master.JenisPetugasPelaksana.DOKTER_ANASTESI.equals(d.get("idJenisPelaksana"))) {
d.put("persenJasa", persenAnestesiIBS.toString() + "%");
d.put("hargaJasa", persenAnestesiIBS / 100 * Double.parseDouble(d.get("hargaJual").toString()));
}
} else if (Master.Departemen.RADIOLOGI.equals(d.get("idDepartemen"))) {
d.put("persenJasa", persenRadiologi.toString() + "%");
d.put("hargaJasa", persenRadiologi / 100 * Double.parseDouble(d.get("hargaJual").toString()));