From e19c4f9f2f86dbef128f0322eb24c7d93084cbd6 Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Wed, 29 Mar 2023 17:19:58 +0700 Subject: [PATCH] Update service pelayanan pasien Penerapan aturan remun dan pemisahan API remun dan fee for service --- .../medifirst2000/dao/PelayananPasienDao.java | 9 +- .../service/PelayananPasienService.java | 6 +- .../impl/PelayananPasienServiceImpl.java | 200 +++++++++++++++++- .../IkiDanRemunerasiController.java | 29 ++- 4 files changed, 225 insertions(+), 19 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java index f99290a4..1f7af511 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java @@ -199,12 +199,13 @@ public interface PelayananPasienDao extends PagingAndSortingRepository> logbookTarifDokter(Integer idPegawai, String bulan); + Map>> splitRemunFfs(Integer idPegawai, String bulan); + + List> logbookRemunTarifDokter(Integer idPegawai, String bulan); + + List> logbookFfsTarifDokter(Integer idPegawai, String bulan); } 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 72c8cfc8..b167842b 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 @@ -28,7 +28,9 @@ 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; import com.jasamedika.medifirst2000.dao.PelayananPasienDao; import com.jasamedika.medifirst2000.dao.StrukPelayananDao; @@ -63,6 +65,12 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel @Autowired private BaseConverterImpl produkConverter; + @Autowired + private PegawaiDao pegawaiDao; + + @Autowired + private MapPegawaiLaboratRadiologiDao mapPegawaiLaboratRadiologiDao; + @Autowired private PasienDaftarDao pasienDaftarDao; @@ -404,10 +412,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } @Override - public List> logbookTarifDokter(Integer idPegawai, String bulan) { - List> result = new ArrayList<>(); - Map remun = new HashMap<>(); - Map ffs = new HashMap<>(); + public Map>> splitRemunFfs(Integer idPegawai, String bulan) { + Map>> result = new HashMap<>(); DateFormat df = new SimpleDateFormat("yyyy-MM"); DateTimeFormatter jamFormat = DateTimeFormatter.ofPattern("HH.mm"); Date date = new Date(); @@ -415,7 +421,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel date = df.parse(bulan); } catch (ParseException e) { e.printStackTrace(); - return result; + return null; } /* * Mendapatkan daftar jadwal kerja, tanggal dan jam kerja @@ -524,7 +530,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel .sorted(Comparator.comparing(o1 -> o1.get("namaProduk").toString())) .sorted(Comparator.comparing(o2 -> o2.get("namaKelas").toString())) .sorted(Comparator.comparing(o3 -> (Date) o3.get("tglPelayanan"))).collect(Collectors.toList()); - remun.put("remun", remunSorted); + result.put("remun", remunSorted); /* * Sorting data ffs diurutkan */ @@ -532,10 +538,186 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel .sorted(Comparator.comparing(o1 -> o1.get("namaProduk").toString())) .sorted(Comparator.comparing(o2 -> o2.get("namaKelas").toString())) .sorted(Comparator.comparing(o3 -> (Date) o3.get("tglPelayanan"))).collect(Collectors.toList()); - ffs.put("ffs", ffsSorted); - result.add(remun); - result.add(ffs); + result.put("ffs", ffsSorted); return result; } + @Override + public List> logbookRemunTarifDokter(Integer idPegawai, String bulan) { + + Map>> remunFfs = this.splitRemunFfs(idPegawai, bulan); + List> listData = remunFfs.get("remun"); + /* + * Dokter luar tidak mendapatkan hak remunerasi + */ + if (pegawaiDao.getPegawaiByKategoryPegawai(Arrays.asList(Master.KategoryPegawai.DOKTER_LUAR)) + .contains(idPegawai)) { + return new ArrayList<>(); + } + List> rawResult = new ArrayList<>(); + + List drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_UMUM); + List drKkPediatrikGDList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PEDIATRIK_GD); + List drKkPerinatologiList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PERINATOLOGI); + List laboranRadiologList = mapPegawaiLaboratRadiologiDao.findPegawaiLaboranRadiolog(); + + List idsDokterUmumIGD = splitDataSettingDatafixed("pr_dokter_umum_igd"); + List idsDokterPediatrikGD = splitDataSettingDatafixed("pr_dokter_pediatrik_gd"); + List idsDokterPerinatologi = splitDataSettingDatafixed("pr_dokter_perinatologi"); + + List listDetailJenisProduk = new ArrayList<>(); + List idsRegDJPMedisUtama = splitDataSettingDatafixed("medis_utama"); + List idsRegDJPPenunjangPA = splitDataSettingDatafixed("penunjang_pa"); + List idsRegDJPPenunjangPK = splitDataSettingDatafixed("penunjang_pk"); + List idsRegDJPPenunjangRad = splitDataSettingDatafixed("penunjang_radiologi"); + List idsRegDJPAdminNonPK = splitDataSettingDatafixed("admin_nonpk"); + { + /* + * Daftar detail jenis produk yang boleh masuk remunerasi + */ + 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; + } + } + List listDetailJenisProdukException = new ArrayList<>(); + if (laboranRadiologList.contains(idPegawai)) { + listDetailJenisProdukException = idsRegDJPAdminNonPK; + listDetailJenisProdukException.removeAll(listDetailJenisProduk); + } + if (CommonUtil.isNotNullOrEmpty(listData)) { + for (Map map : listData) { + if (drKkPediatrikGDList.contains(map.get("idPegawai"))) { + if (idsDokterPediatrikGD.contains(map.get("idProduk"))) { + /* + * Layanan dokter pediatrik gawat darurat tertentu + */ + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("idDepartemen").toString()))) { + /* + * Layanan rawat jalan pediatrik gawat darurat + */ + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("idDepartemen").toString()))) { + if (map.get("namaProduk").toString().toLowerCase().contains(Master.VISIT) + && map.get("idPegawai").toString().equals(map.get("idDPJP"))) { + /* + * Layanan rawat inap pediatrik gawat darurat hanya + * untuk visit + */ + rawResult.add(map); + } + } + } else if (!drKkPediatrikGDList.contains(map.get("idPegawai"))) { + if (listDetailJenisProduk.contains(Integer.parseInt(map.get("idDetailJenisProduk").toString()))) { + if (idsRegDJPPenunjangPA.contains(Integer.parseInt(map.get("idDetailJenisProduk").toString())) + || idsRegDJPPenunjangPK + .contains(Integer.parseInt(map.get("idDetailJenisProduk").toString()))) { + /* + * Layanan detail jenis tertentu untuk di patologi + * anatomi dan patologi klinik + */ + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("idDepartemen").toString()))) { + /* + * Layanan detail jenis produk tertentu di rawat + * inap + */ + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("idDepartemen").toString()))) { + /* + * Layanan detail jenis produk tertentu di rawat + * jalan + */ + rawResult.add(map); + } + } else if (!listDetailJenisProduk + .contains(Integer.parseInt(map.get("idDetailJenisProduk").toString())) + && map.get("idDepartemen").equals(Master.Departemen.IGD) + && drKsmUmumList.contains(idPegawai) + && idsDokterUmumIGD.contains(Integer.parseInt(map.get("idProduk").toString()))) { + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("idDepartemen").toString()))) { + /* + * Layanan detail jenis produk tertentu dokter umum + * di rawat inap + */ + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("idDepartemen").toString()))) { + /* + * Layanan detail jenis produk tertentu dokter umum + * di rawat jalan + */ + rawResult.add(map); + } + } else if (!listDetailJenisProduk + .contains(Integer.parseInt(map.get("idDetailJenisProduk").toString())) + && drKkPerinatologiList.contains(idPegawai) + && idsDokterPerinatologi.contains(Integer.parseInt(map.get("idProduk").toString()))) { + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("idDepartemen").toString()))) { + /* + * Layanan detail jenis produk tertentu dokter + * perinatologi di rawat inap + */ + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("idDepartemen").toString()))) { + /* + * Layanan detail jenis produk tertentu dokter + * perinatologi di rawat jalan + */ + rawResult.add(map); + } + } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException) + && listDetailJenisProdukException + .contains(Integer.parseInt(map.get("idDetailJenisProduk").toString()))) { + if (idsRegDJPPenunjangPA.contains(Integer.parseInt(map.get("idDetailJenisProduk").toString())) + || idsRegDJPPenunjangPK + .contains(Integer.parseInt(map.get("idDetailJenisProduk").toString()))) { + /* + * Layanan detail jenis tertentu untuk laboran + * radiolog di patologi anatomi dan patologi klinik + */ + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("idDepartemen").toString()))) { + /* + * Layanan detail jenis produk tertentu laboran + * radiolog di rawat inap + */ + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("idDepartemen").toString()))) { + /* + * Layanan detail jenis produk tertentu laboran + * radiolog di rawat jalan + */ + rawResult.add(map); + } + } + } + } + } + return listData; + } + + @Override + public List> logbookFfsTarifDokter(Integer idPegawai, String bulan) { + Map>> remunFfs = this.splitRemunFfs(idPegawai, bulan); + List> listData = remunFfs.get("ffs"); + return listData; + } + } \ No newline at end of file diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java index fb67c43b..85a1e1fd 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java @@ -2729,20 +2729,39 @@ public class IkiDanRemunerasiController extends LocaleController>> getDetailLogbookSkoringFarmakologi(HttpServletRequest request, + @RequestMapping(value = "/dokter/logbook-tarif/remun/{idPegawai}/{bulan}", method = RequestMethod.GET) + public ResponseEntity>> getLogbookRemunTarifDokter(HttpServletRequest request, @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { try { - List> result = pelayananPasienService.logbookTarifDokter(idPegawai, bulan); + List> result = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); } catch (ServiceVOException sve) { - LOGGER.error("Got exception {} when get logbook tarif dokter", sve.getMessage()); + LOGGER.error("Got exception {} when get logbook remun tarif dokter", sve.getMessage()); addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, sve.getMessage()); return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage); } catch (JpaSystemException jse) { - LOGGER.error("Got exception {} when get logbook tarif dokter", jse.getMessage()); + LOGGER.error("Got exception {} when get logbook remun tarif dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/dokter/logbook-tarif/ffs/{idPegawai}/{bulan}", method = RequestMethod.GET) + public ResponseEntity>> getLogbookFfsTarifDokter(HttpServletRequest request, + @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { + try { + List> result = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); + } catch (ServiceVOException sve) { + LOGGER.error("Got exception {} when get logbook ffs tarif dokter", sve.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, sve.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage); + } catch (JpaSystemException jse) { + LOGGER.error("Got exception {} when get logbook ffs tarif dokter", jse.getMessage()); addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); }