From 167f95dfcb2b834785ec4b5891e754f448520e0d Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Sat, 25 Mar 2023 00:01:35 +0700 Subject: [PATCH] Update service pelayanan pasien Pembuatan awal logbook dokter berbasis tarif --- .../medifirst2000/dao/PelayananPasienDao.java | 17 +++++++ .../service/PelayananPasienService.java | 3 +- .../impl/PelayananPasienServiceImpl.java | 46 ++++++++++++++++++- .../IkiDanRemunerasiController.java | 22 +++++++++ 4 files changed, 86 insertions(+), 2 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 f5ae3a06..f99290a4 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 @@ -197,4 +197,21 @@ public interface PelayananPasienDao extends PagingAndSortingRepository findAll(@Param("noRegistrasi") String noRegistrasi); + @Query("select new Map(pr.id as idProduk,pr.namaProduk as namaProduk,pr.detailJenisProdukId as idDetailJenisProduk," + + "kp.id as idKelompokPasien,kp.kelompokPasien as kelompokPasien," + + "kls.id as idKelas,kls.namaKelas as namaKelas," + "ppp.noRec as idPelayananPasienPetugas," + + "pp.noRec as idPelayananPasien,pp.hargaJual as hargaJual,pp.tglPelayanan as tglPelayanan," + + "apd.noRec as idAntrianPasienDiperiksa," + "pd.noRec as idPasienDaftar) " + + "from PelayananPasienPetugas ppp " + "inner join ppp.pelayananPasien pp " + + "inner join pp.pasienDaftar apd " + "inner join apd.pasienDaftar pd " + "left join pp.produk pr " + + "left join pp.kelas kls " + "left join pd.kelompokPasien kp " + + "where (ppp.statusEnabled is true or ppp.statusEnabled is null) " + + "and (pp.statusEnabled is true or pp.statusEnabled is null) " + + "and (pd.statusEnabled is true or pd.statusEnabled is null) " + "and ppp.ObjectPegawaiId = :pegawaiId " + + "and pp.tglPelayanan between :tglAwal and :tglAkhir " + + "order by case when kp.id = 2 then 1 when kp.id = 4 then 2 when kp.id = 8 then 3 when kp.id = 9 then 4 " + + "when kp.id = 1 then 5 when kp.id = 5 then 6 when kp.id = 6 then 7 when kp.id = 3 then 8 when kp.id = 7 then 9 else 10 end asc, " + + "pp.tglPelayanan") + List> findPelayananPasienByPetugasAndTanggal(@Param("pegawaiId") Integer idPegawai, + @Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir); } 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 951720e9..92c49400 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 @@ -16,7 +16,8 @@ public interface PelayananPasienService { List> hitungRemunerasiDokterDenganFfs(String tglAwal, String tglAkhir); List updateKlaimDiskon(String noRegistrasi, Double totalKlaim, Integer jenisDiskon); - + String resetKlaimDiskon(String noRegistrasi); + List> logbookTarifDokter(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 1882099c..71e8a5cc 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 @@ -5,12 +5,14 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Queue; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -30,6 +32,7 @@ import com.jasamedika.medifirst2000.entities.PelayananPasienDetail; import com.jasamedika.medifirst2000.entities.Produk; import com.jasamedika.medifirst2000.service.PelayananPasienService; import com.jasamedika.medifirst2000.util.CommonUtil; +import com.jasamedika.medifirst2000.util.DateUtil; import com.jasamedika.medifirst2000.vo.JenisObatVO; import com.jasamedika.medifirst2000.vo.PelayananPasienVO; import com.jasamedika.medifirst2000.vo.ProdukVO; @@ -146,7 +149,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel public Double calculateRemunWithFfs(Integer idKelPasien, Integer idDepartemen, Integer idLayanan, String namaLayanan, Integer tipePegawai, Double hargaJual, Double hargaDiskon, Double jumlahLayanan) { Double result = 0.0; - + List idsKonsultasiDokterJaga = splitDataSettingDatafixed("pr_konsultasi_dokter_jaga"); if (Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(idKelPasien)) { @@ -389,4 +392,45 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel return result; } + @Override + public List> logbookTarifDokter(Integer idPegawai, String bulan) { + List> result = new ArrayList<>(); + Map remun = new HashMap<>(); + Map ffs = new HashMap<>(); + DateFormat df = new SimpleDateFormat("yyyy-MM"); + Date date = new Date(); + try { + date = df.parse(bulan); + } catch (ParseException e) { + e.printStackTrace(); + } + Date tglAwal = DateUtil.startMonth(date); + Date tglAkhir = DateUtil.endMonth(date); + Double targetRemun = 5_000_000.00; + List> listPelayanan = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai, + tglAwal, tglAkhir); + Queue> queuePelayanan = new ArrayDeque<>(); + listPelayanan.forEach(pelayanan -> { + queuePelayanan.offer(pelayanan); + }); + List> listPelayananRemun = new ArrayList<>(); + List> listPelayananFfs = new ArrayList<>(); + Double capaianRemun = 0.0; + for (Map 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("hargaJual").toString()); + } else if (capaianRemun <= targetRemun) { + listPelayananRemun.add(next); + capaianRemun += Double.valueOf(next.get("hargaJual").toString()); + } else { + listPelayananFfs.add(next); + } + remun.put("remun", listPelayananRemun); + ffs.put("ffs", listPelayananFfs); + result.add(remun); + result.add(ffs); + return result; + } + } \ 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 964c0b41..fb67c43b 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 @@ -43,6 +43,7 @@ import com.jasamedika.medifirst2000.service.PelayananFarmakologiService; import com.jasamedika.medifirst2000.service.PelayananNakesService; import com.jasamedika.medifirst2000.service.PelayananPasienNakesService; import com.jasamedika.medifirst2000.service.PelayananPasienPerawatService; +import com.jasamedika.medifirst2000.service.PelayananPasienService; import com.jasamedika.medifirst2000.service.PenilaianKinerjaService; import com.jasamedika.medifirst2000.service.ProdukFarmakologiService; import com.jasamedika.medifirst2000.service.ProdukNakesService; @@ -112,6 +113,9 @@ public class IkiDanRemunerasiController extends LocaleController>> getDetailLogbookSkoringFarmakologi(HttpServletRequest request, + @PathVariable("idPegawai") Integer idPegawai, @PathVariable("bulan") String bulan) { + try { + List> result = pelayananPasienService.logbookTarifDokter(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()); + 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()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } }