From 28db7ea50b59aa03ead45f668d4f1d254392a95e Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Sat, 12 Jun 2021 20:40:17 +0700 Subject: [PATCH] - penyesuaian aturan jam kerja untuk perhitungan target pelayanan medis bulanan - penyesuaian detail indikator kinerja dokter di dalam kontrak kinerja dokter - pembuatan service cek duplikat data pengaturan bobot jenis indikator - penyesuaian aturan 115% untuk skoring tindakan eksekutif - penambahan informasi tanggal hitung untuk pencarian data hasil hitung target pelayanan medis bulanan - pembuatan service get persentase bobot jenis indikator di dalam kontrak kinerja individu --- .../medifirst2000/constants/Master.java | 8 ++- .../dao/BobotJenisIndikatorDao.java | 45 ++++++++++++---- .../dao/IkiDanRemunerasiDao.java | 4 ++ .../dao/LogbookKinerjaDokterDao.java | 14 +++++ .../service/BobotJenisIndikatorService.java | 6 ++- .../impl/BobotJenisIndikatorServiceImpl.java | 39 ++++++++++++++ .../impl/IkiDanRemunerasiServiceImpl.java | 38 +++++++++----- .../impl/LogbookKinerjaServiceImpl.java | 24 ++++++++- .../custom/TargetLayananCustomDetailVO.java | 11 ++++ .../IkiDanRemunerasiController.java | 51 +++++++++++++++++-- 10 files changed, 209 insertions(+), 31 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java index 51e622d1..7c55f451 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java @@ -80,6 +80,10 @@ public class Master { } public static final class IndikatorKinerja { + public static final Integer PELAYANAN_MEDIS = 466; + } + + public static final class IndikatorKinerjaDetail { public static final Integer KONSUL_EKS = 1; public static final Integer KONSUL_GADAR = 2; public static final Integer KONSUL_REG = 3; @@ -250,10 +254,11 @@ public class Master { public static final class Produk { public static final int KARCIS = 395; + public static final Integer[] DOKTER_UMUM_IGD = { 783, 401333, 402413, 402414, 402449, 402484 }; + public static final Integer[] KONSULTASI_EKSEKUTIF = { 401092, 401093 }; public static final Integer[] PENUNJANG_BUKAN_ANASTESI = { 13409, 15208, 19325, 19346, 19371, 19405, 19406, 19535, 19599, 402009, 10009835, 10012269, 1002117344, 1002117938, 1002117963, 1002117964, 1002117965, 1002117966 }; - public static final Integer[] DOKTER_UMUM_IGD = { 783, 401333, 402413, 402414, 402449, 402484 }; public static final Integer KONSULTASI_DOKTER_JAGA = 400; } @@ -266,6 +271,7 @@ public class Master { public static final Double BOBOT_PERILAKU = 30.0; public static final Double IKI_STANDAR = 1.0; + public static final Double PERSEN_SKOR_EKSEKUTIF = 1.15; public static final Double PERSEN_P1 = 0.3; public static final Double PERSEN_P2 = 0.7; } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/BobotJenisIndikatorDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/BobotJenisIndikatorDao.java index 184d853a..4cff4132 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/BobotJenisIndikatorDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/BobotJenisIndikatorDao.java @@ -25,19 +25,44 @@ public interface BobotJenisIndikatorDao extends PagingAndSortingRepository> findAllBobotJenis(@Param("periode") String periode); + @Query("select distinct bj.bulan " + "from BobotJenisIndikator bj, Jabatan jb " + + "where bj.kelompokJabatanId = jb.kelompokJabatanId " + "and bj.statusEnabled is true " + + "and to_char(bj.bulan,'yyyy-MM') <= :periode " + "and jb.id = :jabatanId " + "order by bj.bulan desc") + public List findBulanBerlaku(@Param("periode") String periode, @Param("jabatanId") Integer idJabatan); + @Query("select distinct bj.bulan " + "from BobotJenisIndikator bj " + "where bj.statusEnabled is true " - + "and bj.bulan <= :periode " + "order by bj.bulan desc") - public List findBulanBerlakuByPeriode(@Param("periode") Date periode); + + "and to_char(bj.bulan,'yyyy-MM') <= :periode " + "and bj.kelompokJabatanId is null " + + "order by bj.bulan desc") + public List findBulanBerlaku(@Param("periode") String periode); - @Query("select new Map(bj.jenisIndikator as jenisIndikatorId," + "bj.persentase as persentase) " - + "from BobotJenisIndikator bj " + "where bj.statusEnabled is true " + "and bj.bulan = :periode " + @Query("select distinct new Map(bj.jenisIndikator as id," + "(case when bj.jenisIndikator = 1 then 'Kuantitas' " + + "when bj.jenisIndikator = 2 then 'Kualitas' " + + "when bj.jenisIndikator = 3 then 'Perilaku' end) as jenisIndikator," + "bj.persentase as persentase) " + + "from BobotJenisIndikator bj, Jabatan jb " + "where bj.kelompokJabatanId = jb.kelompokJabatanId " + + "and bj.statusEnabled is true " + "and bj.bulan = :periode " + "and jb.id = :jabatanId " + "order by bj.jenisIndikator") - public List> findBobotJenis(@Param("periode") Date periode); + public List> findBobotJenisKontrak(@Param("periode") Date periode, + @Param("jabatanId") Integer idJabatan); - @Query("select new Map(bj.jenisIndikator as jenisIndikatorId," + "bj.persentase as persentase) " - + "from BobotJenisIndikator bj " + "inner join bj.kelompokJabatan kj " + "where bj.statusEnabled is true " - + "and bj.bulan = :periode " + "and kj.id = :kelompokJabatanId " + "order by bj.jenisIndikator") - public List> findBobotJenis(@Param("periode") Date periode, - @Param("kelompokJabatanId") Integer idKelompokJabatan); + @Query("select distinct new Map(bj.jenisIndikator as id," + "(case when bj.jenisIndikator = 1 then 'Kuantitas' " + + "when bj.jenisIndikator = 2 then 'Kualitas' " + + "when bj.jenisIndikator = 3 then 'Perilaku' end) as jenisIndikator," + "bj.persentase as persentase) " + + "from BobotJenisIndikator bj " + "where bj.statusEnabled is true " + "and bj.bulan = :periode " + + "and bj.kelompokJabatanId is null " + "order by bj.jenisIndikator") + public List> findBobotJenisKontrak(@Param("periode") Date periode); + + @Query("select new Map(bj.noRec as noRec,bj.jenisIndikator as id,bj.persentase as persentase) " + + "from BobotJenisIndikator bj " + "where bj.statusEnabled is true " + + "and to_char(bj.bulan,'yyyy-MM-dd') = :periode " + "and bj.jenisIndikator = :jenisIndikator " + + "and bj.kelompokJabatanId = :kelompokJabatanId") + public List> findBobotJenis(@Param("periode") String periode, + @Param("jenisIndikator") Integer jenisIndikator, @Param("kelompokJabatanId") Integer idKelompokJabatan); + + @Query("select new Map(bj.noRec as noRec,bj.jenisIndikator as id,bj.persentase as persentase) " + + "from BobotJenisIndikator bj " + "where bj.statusEnabled is true " + + "and to_char(bj.bulan,'yyyy-MM-dd') = :periode " + "and bj.jenisIndikator = :jenisIndikator " + + "and bj.kelompokJabatanId is null") + public List> findBobotJenis(@Param("periode") String periode, + @Param("jenisIndikator") Integer jenisIndikator); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IkiDanRemunerasiDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IkiDanRemunerasiDao.java index e76ea33f..322ebb00 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IkiDanRemunerasiDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IkiDanRemunerasiDao.java @@ -112,6 +112,10 @@ public interface IkiDanRemunerasiDao extends PagingAndSortingRepository :karcisId order by su.name, pr.id") public List> getDataLayanan(@Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir, diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDokterDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDokterDao.java index 205eaac6..acca2681 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDokterDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDokterDao.java @@ -1,6 +1,11 @@ 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; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.jasamedika.medifirst2000.entities.LogbookKinerjaDokter; @@ -8,4 +13,13 @@ import com.jasamedika.medifirst2000.entities.LogbookKinerjaDokter; @Repository("logbookKinerjaDokterDao") public interface LogbookKinerjaDokterDao extends PagingAndSortingRepository { + @Query("select new Map(ikd.id as id,ikd.detailIndikator as detailIndikator,ld.detailTarget as detailTarget) " + + "from LogbookKinerjaDokter ld " + "inner join ld.indikatorDetail ikd " + "where ld.statusEnabled is true " + + "and ikd.statusEnabled is true " + "and to_char(ld.bulan,'yyyy-MM') = :bulan " + + "and ld.jabatanId = :jabatanId " + "and ld.pegawaiId = :pegawaiId " + + "and ikd.indikatorKinerjaId = :indikatorId") + public List> findDetailKontrakKinerja(@Param("bulan") String bulan, + @Param("jabatanId") Integer idJabatan, @Param("pegawaiId") Integer idPegawai, + @Param("indikatorId") Integer idIndikator); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/BobotJenisIndikatorService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/BobotJenisIndikatorService.java index 453d6bc4..e6c68636 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/BobotJenisIndikatorService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/BobotJenisIndikatorService.java @@ -9,5 +9,9 @@ import com.jasamedika.medifirst2000.vo.BobotJenisIndikatorVO; public interface BobotJenisIndikatorService extends BaseVoService { public List> findAllBobotJenis(Long periode); - + + public List> findBobotJenisJabatan(Long periode, Integer idJabatan); + + public List> findBobotJenis(Long periode, Integer idjenisIndikator, Integer idKelompokJabatan); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/BobotJenisIndikatorServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/BobotJenisIndikatorServiceImpl.java index 5d062914..cb61badb 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/BobotJenisIndikatorServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/BobotJenisIndikatorServiceImpl.java @@ -1,5 +1,6 @@ package com.jasamedika.medifirst2000.service.impl; +import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -119,4 +120,42 @@ public class BobotJenisIndikatorServiceImpl extends BaseVoServiceImpl implements return result; } + @Override + public List> findBobotJenisJabatan(Long periode, Integer idJabatan) { + List> result = new ArrayList<>(); + List bulanBerlaku = new ArrayList<>(); + + DateFormat df = new SimpleDateFormat("yyyy-MM"); + + bulanBerlaku = bobotJenisIndikatorDao.findBulanBerlaku(df.format(new Date(periode)), idJabatan); + if (CommonUtil.isNullOrEmpty(bulanBerlaku)) { + bulanBerlaku = bobotJenisIndikatorDao.findBulanBerlaku(df.format(new Date(periode))); + } + + if (CommonUtil.isNotNullOrEmpty(bulanBerlaku)) { + result = bobotJenisIndikatorDao.findBobotJenisKontrak(bulanBerlaku.get(0), idJabatan); + if (CommonUtil.isNullOrEmpty(result)) { + result = bobotJenisIndikatorDao.findBobotJenisKontrak(bulanBerlaku.get(0)); + } + } + + return result; + } + + @Override + public List> findBobotJenis(Long periode, Integer idjenisIndikator, Integer idKelompokJabatan) { + List> result = new ArrayList<>(); + + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + + if (CommonUtil.isNotNullOrEmpty(idKelompokJabatan)) { + result = bobotJenisIndikatorDao.findBobotJenis(df.format(new Date(periode)), idjenisIndikator, + idKelompokJabatan); + } else { + result = bobotJenisIndikatorDao.findBobotJenis(df.format(new Date(periode)), idjenisIndikator); + } + + return result; + } + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java index da6aef0f..e9ef5847 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java @@ -489,7 +489,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik List listRuangEks = splitDataSettingDatafixed("IdRuanganEksekutif"); - List listIndikatorPelayanan = Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS); + List listIndikatorPelayanan = Arrays.asList(Master.IndikatorKinerjaDetail.INDIKATOR_PELAYANAN_MEDIS); List> dataLayananRaw = new ArrayList<>(); if (CommonUtil.isNotNullOrEmpty(idKsm)) { @@ -601,8 +601,17 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik && layanan.get("idKelompokKerja").equals(skoring.get("kelompokKerjaId")) && (((Date) skoring.get("tglBerlaku")).before(((Date) layanan.get("tglPelayanan"))) || ((Date) skoring.get("tglBerlaku")).equals(((Date) layanan.get("tglPelayanan"))))) { - layanan.put("jumlahTindakan", Double.valueOf(layanan.get("jumlahTindakan").toString()) - * Double.valueOf(skoring.get("skor").toString())); + if (listRuangEks.contains(layanan.get("idRuangan")) + && !Arrays.asList(Master.Produk.KONSULTASI_EKSEKUTIF).contains(layanan.get("idTindakan"))) { + layanan.put("jumlahTindakan", + Double.valueOf(layanan.get("jumlahTindakan").toString()) + * Double.valueOf(skoring.get("skor").toString()) + * Master.Remunerasi.PERSEN_SKOR_EKSEKUTIF); + } else { + layanan.put("jumlahTindakan", Double.valueOf(layanan.get("jumlahTindakan").toString()) + * Double.valueOf(skoring.get("skor").toString())); + } + break; } } @@ -633,7 +642,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik for (Map data : dataLayananScored) { if (kelompokKerja.get("subunitKerjaId").equals(data.get("idKelompokKerja")) && datePelayanan.equals(sdf.format(data.get("tglPelayanan")))) { - if (idIndikator.equals(Master.IndikatorKinerja.KONSUL_EKS) + if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_EKS) && data.get("namaTindakan").equals(Master.KONSUL) && listRuangEks.contains(data.get("idRuangan"))) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); @@ -651,7 +660,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanKE / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerja.KONSUL_GADAR) + } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_GADAR) && data.get("namaTindakan").equals(Master.KONSUL) && data.get("idDepartemen").equals(Master.Departemen.IGD)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); @@ -669,7 +678,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanKG / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerja.KONSUL_REG) + } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_REG) && data.get("namaTindakan").equals(Master.KONSUL)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { @@ -686,7 +695,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanKR / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerja.VISITE) + } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.VISITE) && data.get("namaTindakan").equals(Master.VISIT)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { @@ -703,7 +712,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanVI / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerja.TINDAKAN_EKS) + } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_EKS) && listRuangEks.contains(data.get("idRuangan"))) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { @@ -720,7 +729,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanTE / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerja.TINDAKAN_GADAR) + } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_GADAR) && data.get("idDepartemen").equals(Master.Departemen.IGD)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { @@ -737,7 +746,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanTG / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerja.TINDAKAN_OPS) + } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_OPS) && data.get("idRuangan").equals(Master.Ruangan.OK)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { @@ -754,7 +763,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanTO / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerja.TINDAKAN_REG)) { + } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_REG)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { capaianTriwulanTR += Double.valueOf(data.get("jumlahTindakan").toString()); @@ -846,8 +855,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik logbook.setStatusEnabled(true); logbook.setBulan(targetLayanan.getPeriode()); logbook.setDetailTarget(detailTarget); - logbook.setDetailCapaian( - CommonUtil.isNotNullOrEmpty(targetLayanan.getCapaian()) ? targetLayanan.getCapaian() : 0); + logbook.setDetailCapaian(0.0); logbook.setIndikatorDetail(targetLayanan.getIndikatorDetail()); Jabatan jabatan = new Jabatan(); jabatan.setId(Integer.valueOf(map.get("jabatanId").toString())); @@ -871,6 +879,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik List listIdKelompokKerja = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); SimpleDateFormat sdfINA = new SimpleDateFormat("MMMM yyyy", new Locale("in", "ID")); Date periode = sdf.parse(strPeriode); @@ -910,7 +919,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } List> listIndikatorPelayanan = indikatorKinerjaDetailDao - .findByListId(Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS)); + .findByListId(Arrays.asList(Master.IndikatorKinerjaDetail.INDIKATOR_PELAYANAN_MEDIS)); for (Map kelompokKerja : listKelompokKerja) { for (Map indikator : listIndikatorPelayanan) { @@ -926,6 +935,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik detail.setBulan(sdfINA.format(targetLayanan.getPeriode())); detail.setTarget(targetLayanan.getTarget()); detail.setCapaian(targetLayanan.getCapaian()); + detail.setTglHitung(formatter.format(targetLayanan.getTglHitung())); if (!paramPeriode.contains(sdf.format(targetLayanan.getPeriode()))) { listDetail.add(detail); diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java index df07f0c1..baae465f 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java @@ -24,6 +24,7 @@ import com.jasamedika.medifirst2000.dao.AnggaranRemunerasiDao; import com.jasamedika.medifirst2000.dao.IndikatorKinerjaDao; import com.jasamedika.medifirst2000.dao.LogbookKinerjaDao; import com.jasamedika.medifirst2000.dao.LogbookKinerjaDetailDao; +import com.jasamedika.medifirst2000.dao.LogbookKinerjaDokterDao; import com.jasamedika.medifirst2000.dao.PegawaiDao; import com.jasamedika.medifirst2000.entities.IndikatorKinerja; import com.jasamedika.medifirst2000.entities.Jabatan; @@ -72,6 +73,9 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb @Autowired private PegawaiDao pegawaiDao; + @Autowired + private LogbookKinerjaDokterDao logbookKinerjaDokterDao; + @Override public LogbookKinerjaVO add(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException { Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai()); @@ -274,6 +278,20 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb for (Map map : listMap) { if (!listIdIndikator.contains(map.get("indikatorId"))) { listIdIndikator.add(Integer.valueOf(map.get("indikatorId").toString())); + + List> detailIndikator = logbookKinerjaDokterDao.findDetailKontrakKinerja( + df.format(new Date(bulan)), idJabatan, idPegawai, + Integer.valueOf(map.get("indikatorId").toString())); + + if (CommonUtil.isNotNullOrEmpty(detailIndikator)) { + double detailTarget = 0.0; + for (Map detail : detailIndikator) { + detailTarget += Double.parseDouble(detail.get("detailTarget").toString()); + } + map.put("target", detailTarget); + map.put("detail", detailIndikator); + } + listRes.add(map); } } @@ -297,7 +315,11 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb } if (CommonUtil.isNullOrEmpty(res.get("noRec"))) { res.put("noRec", null); - res.put("target", null); + if (CommonUtil.isNotNullOrEmpty(res.get("target"))) { + res.put("target", res.get("target")); + } else { + res.put("target", null); + } res.put("bobot", null); res.put("isStatusVerifikasi", null); res.put("statusVerifikasi", null); diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomDetailVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomDetailVO.java index 906b7750..c97894b5 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomDetailVO.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomDetailVO.java @@ -16,6 +16,9 @@ public class TargetLayananCustomDetailVO { @Caption(value = "Target") Double target; + @Caption(value = "Tanggal Hitung") + String tglHitung; + public String getDate() { return date; } @@ -48,4 +51,12 @@ public class TargetLayananCustomDetailVO { this.target = target; } + public String getTglHitung() { + return tglHitung; + } + + public void setTglHitung(String tglHitung) { + this.tglHitung = tglHitung; + } + } 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 495aff48..46c2a5eb 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 @@ -391,7 +391,7 @@ public class IkiDanRemunerasiController extends LocaleController>> getDuplicateIndikatorKinerja(HttpServletRequest request, + public ResponseEntity>> getDuplikatIndikatorKinerja(HttpServletRequest request, @RequestParam(value = "idIndikator", required = false) Integer idIndikator, @RequestParam(value = "namaIndikator", required = true) String namaIndikator) throws ParseException { try { @@ -507,7 +507,7 @@ public class IkiDanRemunerasiController extends LocaleController>> getDupIndikatorJabatan(HttpServletRequest request, + public ResponseEntity>> getDuplikatIndikatorJabatan(HttpServletRequest request, @RequestParam(value = "indikatorId", required = true) Integer idIndikator, @RequestParam(value = "jabatanId", required = true) Integer idJabatan, @RequestParam(value = "tglBerlaku", required = true) Long tglBerlaku) throws ParseException { @@ -601,7 +601,7 @@ public class IkiDanRemunerasiController extends LocaleController>> getDuplicateSkoringTindakanMedis(HttpServletRequest request, + public ResponseEntity>> getDuplikatSkoringTindakanMedis(HttpServletRequest request, @RequestParam(value = "noRec", required = false) String noRec, @RequestParam(value = "namaProduk", required = true) String namaProduk, @RequestParam(value = "kelompokKerjaId", required = true) Integer idKelompokKerja, @@ -804,7 +804,7 @@ public class IkiDanRemunerasiController extends LocaleController>> getDuplicateKontrakKinerja(HttpServletRequest request, + public ResponseEntity>> getDuplikatKontrakKinerja(HttpServletRequest request, @RequestParam(value = "pegawaiId", required = true) Integer idPegawai, @RequestParam(value = "jabatanId", required = true) Integer idJabatan, @RequestParam(value = "bulan", required = true) Long bulan, @@ -1004,4 +1004,47 @@ public class IkiDanRemunerasiController extends LocaleController>> getBobotJenisIndikatorByJabatan(HttpServletRequest request, + @RequestParam(value = "periode", required = true) Long periode, + @RequestParam(value = "jabatanId", required = true) Integer idJabatan) throws ParseException { + try { + List> result = bobotJenisIndikatorService.findBobotJenisJabatan(periode, idJabatan); + 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 bobot jenis indikator by jabatan", 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 bobot jenis indikator by jabatan", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/get-duplikat-bobot-jenis-indikator", method = RequestMethod.GET) + public ResponseEntity>> getDuplikatBobotJenisIndikator(HttpServletRequest request, + @RequestParam(value = "periode", required = true) Long periode, + @RequestParam(value = "jenisIndikatorId", required = true) Integer idJenisIndikator, + @RequestParam(value = "kelompokJabatanId", required = false) Integer idKelompokJabatan) + throws ParseException { + try { + List> result = bobotJenisIndikatorService.findBobotJenis(periode, idJenisIndikator, + idKelompokJabatan); + 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 duplikat bobot jenis indikator", 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 duplikat bobot jenis indikator", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } }