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 048430bb..f033ddae 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,10 +80,11 @@ public class Master { } public static final class IndikatorKinerja { - public static final Integer PELAYANAN_MEDIS = 466; + public static final Integer PELAYANAN_MEDIS_JAM_KERJA = 466; + public static final Integer PELAYANAN_MEDIS_LUAR_JAM_KERJA = 522; } - public static final class IndikatorKinerjaDetail { + public static final class IndikatorKinerjaJamKerja { public static final Integer KONSUL_EKS = 1; public static final Integer KONSUL_GADAR = 2; public static final Integer KONSUL_REG = 3; @@ -95,6 +96,19 @@ public class Master { public static final Integer[] INDIKATOR_PELAYANAN_MEDIS = { 1, 2, 3, 4, 5, 6, 7, 8 }; } + + public static final class IndikatorKinerjaLuarJamKerja { + public static final Integer KONSUL_EKS = 9; + public static final Integer KONSUL_GADAR = 10; + public static final Integer KONSUL_REG = 11; + public static final Integer TINDAKAN_EKS = 12; + public static final Integer TINDAKAN_GADAR = 13; + public static final Integer TINDAKAN_OPS = 14; + public static final Integer TINDAKAN_REG = 15; + public static final Integer VISITE = 16; + + public static final Integer[] INDIKATOR_PELAYANAN_MEDIS = { 9, 10, 11, 12, 13, 14, 15, 16 }; + } public static final class Jabatan { public static final int DIRUT_STRUKTURAL = 896; @@ -265,17 +279,17 @@ public class Master { public static final class Remunerasi { public static final Integer[] JENIS_INDIKATOR = { 1, 2, 3 }; - + public static final Double BOBOT_KUANTITAS = 40.0; public static final Double BOBOT_KUALITAS = 30.0; public static final Double BOBOT_PERILAKU = 30.0; - + public static final Double IKI_STANDAR = 1.0; public static final Double IKU = 1.0; - + public static final Double PERSEN_P1 = 0.3; public static final Double PERSEN_P2 = 0.7; - + public static final Double PERSEN_SKOR_ASISTEN_SPESIALIS = 0.3; public static final Double PERSEN_SKOR_EKSEKUTIF = 1.15; } 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 7baf3556..775330b8 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 @@ -133,18 +133,20 @@ public interface IkiDanRemunerasiDao extends PagingAndSortingRepository + "group by nj.kelompokJabatanId " + "order by min(nj.nilaiTerendah)") List> findPeringkatJabatan(@Param("listKelompokJabatanId") List listIdKelompokJabatan); + @Query("select new Map(jb.id as jabatanId,jb.namaJabatan as namaJabatan) " + "from Jabatan jb " + + "where id in (:listJabatanId) " + "and jb.statusEnabled is true " + "order by jb.namaJabatan") + List> findJabatanByListId(@Param("listJabatanId") List listIdJabatan); + } 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 acca2681..5453ee4e 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 @@ -22,4 +22,15 @@ public interface LogbookKinerjaDokterDao extends PagingAndSortingRepository> getLastTargetLayananLuarJamKerja(@Param("tglAwal") String tglAwal, + @Param("tglAkhir") String tglAkhir, @Param("listIndikatorId") List listIdIndikator); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java index 2453d15c..2598d76e 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java @@ -1068,7 +1068,8 @@ public interface PegawaiDao extends PagingAndSortingRepository @Param("listKategoryPegawaiId") List listIdKategoriPegawai); @Query("select new Map(pg.id as pegawaiId,pg.namaLengkap as namaLengkap) " - + "from Pegawai pg where pg.statusEnabled is true and pg.id in (:listPegawaiId)") + + "from Pegawai pg where pg.statusEnabled is true and pg.id in (:listPegawaiId) " + + "order by pg.namaLengkap") public List> findPegawaiByListId(@Param("listPegawaiId") List listIdPegawai); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanMedisDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanMedisDao.java index a53e13d9..2fc7b5bd 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanMedisDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanMedisDao.java @@ -124,8 +124,20 @@ public interface SkoringTindakanMedisDao extends PagingAndSortingRepository> findLatestActiveSkor(); + + "and lower(sk.name) like 'kk%' " + "order by sk.name asc, stm.produkId asc, stm.tanggalPembaharuanData desc") + List> findLatestActiveSkorByKelompokKerja(); + + @Query("select new Map(pg.id as pegawaiId,pg.namaLengkap as namaLengkap," + "jb.id as jabatanId," + + "stm.produkId as produkId,stm.skor as skor," + + "stm.tanggalMulaiBerlaku as tglBerlaku,stm.tanggalPembaharuanData as tglPembaharuanData) " + + "from SkoringTindakanMedis stm, MapPegawaiJabatanToUnitKerja mj " + "inner join stm.kelompokKerja sk " + + "inner join mj.pegawai pg " + "inner join mj.jabatan jb " + + "where mj.subUnitKerjaPegawaiId = stm.kelompokKerjaId " + "and mj.subUnitKerjaPegawaiId = sk.id " + + "and stm.statusEnabled is true " + "and stm.statusVerifikasi is true " + "and mj.statusEnabled is true " + + "and sk.statusEnabled is true " + "and pg.statusEnabled is true " + "and jb.statusEnabled is true " + + "and jb.kelompokJabatanId in (3,4) " + + "order by pg.namaLengkap asc, stm.produkId asc, stm.tanggalPembaharuanData desc") + List> findLatestActiveSkorByDokter(); @Query("select distinct new Map(pr.id as produkId,pr.namaProduk as namaProduk," + "stm.skor as skor,stm.tanggalMulaiBerlaku as tglMulaiBerlaku,stm.tanggalPembaharuanData as tglPembaharuanData) " diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java index c802e1bb..24b4c8a0 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java @@ -18,10 +18,10 @@ public interface TargetLayananDao extends PagingAndSortingRepository> getLastTargetLayanan(@Param("tglAwal") String tglAwal, - @Param("tglAkhir") String tglAkhir); + public List> getLastTargetLayananJamKerja(@Param("tglAwal") String tglAwal, + @Param("tglAkhir") String tglAkhir, @Param("listIndikatorId") List listIdIndikator); @Query("select distinct new Map(tl.subUnitKerjaPegawaiId as kelompokKerjaId," + "tl.indikatorDetailId as indikatorId," + "pg.id as pegawaiId," diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java index dd411114..21010e48 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java @@ -5,9 +5,11 @@ import java.util.Date; import java.util.List; import java.util.Map; +import com.jasamedika.medifirst2000.vo.LogbookKinerjaDokterVO; import com.jasamedika.medifirst2000.vo.SettingPirSdmVO; import com.jasamedika.medifirst2000.vo.StrukHistoriVO; -import com.jasamedika.medifirst2000.vo.custom.TargetLayananCustomVO; +import com.jasamedika.medifirst2000.vo.custom.TargetLayananJamKerjaVO; +import com.jasamedika.medifirst2000.vo.custom.TargetLayananLuarJamKerjaVO; public interface IkiDanRemunerasiService { @@ -31,13 +33,17 @@ public interface IkiDanRemunerasiService { public Map savePirDanIku(List vo); - public void autoSaveTargetCapaianLayananJamKerja(String strPeriode, Integer idKsm) throws ParseException; - - public void autoSaveTargetCapaianLayananLuarJamKerja(String strPeriode, Integer idKsm) throws ParseException; + public void autoSaveTargetCapaianLayananJamKerja(String strPeriode) throws ParseException; - public void saveTargetCapaianLayanan(TargetLayananCustomVO vo, Date periodeHitung) throws ParseException; + public void saveTargetCapaianLayananKelompokKerja(TargetLayananJamKerjaVO vo, Date periodeHitung) + throws ParseException; - public List findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) + public void autoSaveTargetCapaianLayananLuarJamKerja(String strPeriode) throws ParseException; + + public void saveTargetCapaianLayananPegawai(TargetLayananLuarJamKerjaVO vo, Date periodeHitung) + throws ParseException; + + public List findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException; } 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 a8bd6f75..39ceeeb2 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 @@ -25,6 +25,7 @@ import com.jasamedika.medifirst2000.constants.Master; import com.jasamedika.medifirst2000.converter.BaseConverterImpl; import com.jasamedika.medifirst2000.dao.IkiDanRemunerasiDao; import com.jasamedika.medifirst2000.dao.IndikatorKinerjaDetailDao; +import com.jasamedika.medifirst2000.dao.JabatanDao; import com.jasamedika.medifirst2000.dao.LogbookKinerjaDokterDao; import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao; import com.jasamedika.medifirst2000.dao.MonitoringAbsenDao; @@ -61,6 +62,7 @@ import com.jasamedika.medifirst2000.util.StringUtil; import com.jasamedika.medifirst2000.vo.EvaluasiJabatanVO; import com.jasamedika.medifirst2000.vo.IkiDanRemunerasiVO; import com.jasamedika.medifirst2000.vo.IndikatorKinerjaDetailVO; +import com.jasamedika.medifirst2000.vo.JabatanVO; import com.jasamedika.medifirst2000.vo.KelompokTransaksiVO; import com.jasamedika.medifirst2000.vo.PegawaiVO; import com.jasamedika.medifirst2000.vo.RuanganVO; @@ -69,8 +71,10 @@ import com.jasamedika.medifirst2000.vo.StrukHistoriVO; import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO; import com.jasamedika.medifirst2000.vo.SuratKeputusanVO; import com.jasamedika.medifirst2000.vo.UnitKerjaPegawaiVO; -import com.jasamedika.medifirst2000.vo.custom.TargetLayananCustomDetailVO; -import com.jasamedika.medifirst2000.vo.custom.TargetLayananCustomVO; +import com.jasamedika.medifirst2000.vo.custom.TargetLayananJamKerjaDetailVO; +import com.jasamedika.medifirst2000.vo.custom.TargetLayananJamKerjaVO; +import com.jasamedika.medifirst2000.vo.custom.TargetLayananLuarJamKerjaDetailVO; +import com.jasamedika.medifirst2000.vo.custom.TargetLayananLuarJamKerjaVO; @Service("IkiDanRemunerasiService") public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements IkiDanRemunerasiService { @@ -144,6 +148,9 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik @Autowired private PegawaiDao pegawaiDao; + @Autowired + private JabatanDao jabatanDao; + @Override public Map loadData() { Map result = new HashMap<>(); @@ -475,7 +482,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } @Override - public void autoSaveTargetCapaianLayananJamKerja(String strPeriode, Integer idKsm) throws ParseException { + public void autoSaveTargetCapaianLayananJamKerja(String strPeriode) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat sdfINA = new SimpleDateFormat("MMMM yyyy", new Locale("in", "ID")); @@ -509,20 +516,14 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik List listRuangEks = splitDataSettingDatafixed("IdRuanganEksekutif"); List listKonsulTapiVisit = splitDataSettingDatafixed("konsulTapiVisit"); - List listIndikatorPelayanan = Arrays.asList(Master.IndikatorKinerjaDetail.INDIKATOR_PELAYANAN_MEDIS); + List listIndikatorPelayanan = Arrays.asList(Master.IndikatorKinerjaJamKerja.INDIKATOR_PELAYANAN_MEDIS); List listIdNonjadwal = shiftKerjaDao.findListNonjadwal(); - List> dataLayananRaw = new ArrayList<>(); - if (CommonUtil.isNotNullOrEmpty(idKsm)) { - dataLayananRaw = ikiDanRemunerasiDao.getDataLayananJamKerja(calTglAwal.getTime(), bulan.getTime(), pssbAwal, - pssbAkhir, listIdNonjadwal, Master.JenisPegawai.DOKTER, Arrays.asList(idKsm), - Arrays.asList(Master.JenisProduk.NONTINDAKAN), Master.Produk.KARCIS); - } else { - dataLayananRaw = ikiDanRemunerasiDao.getDataLayananJamKerja(calTglAwal.getTime(), bulan.getTime(), pssbAwal, - pssbAkhir, listIdNonjadwal, Master.JenisPegawai.DOKTER, Arrays.asList(Master.UnitKerja.KSM), - Arrays.asList(Master.JenisProduk.NONTINDAKAN), Master.Produk.KARCIS); - } + List> dataLayananRaw = ikiDanRemunerasiDao.getDataLayananJamKerja(calTglAwal.getTime(), + bulan.getTime(), pssbAwal, pssbAkhir, listIdNonjadwal, Master.JenisPegawai.DOKTER, + Arrays.asList(Master.UnitKerja.KSM), Arrays.asList(Master.JenisProduk.NONTINDAKAN), + Master.Produk.KARCIS); // get_kategori_bulan List listBulanPelayanan = new ArrayList<>(); @@ -544,8 +545,9 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik List> listKelompokKerja = subunitKerjaDao.findSubDanUnitKerjaById(listIdKK); - List> dataLastTargetLayanan = targetLayananDao - .getLastTargetLayanan(sdf.format(calTglAwal.getTime()), sdf.format(bulan.getTime())); + List> dataLastTargetLayanan = targetLayananDao.getLastTargetLayananJamKerja( + sdf.format(calTglAwal.getTime()), sdf.format(bulan.getTime()), + Arrays.asList(Master.IndikatorKinerjaJamKerja.INDIKATOR_PELAYANAN_MEDIS)); List> filterTarget = new ArrayList<>(); // filtering target @@ -581,7 +583,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } } - List> dataSkoringRaw = skoringTindakanMedisDao.findLatestActiveSkor(); + List> dataSkoringRaw = skoringTindakanMedisDao.findLatestActiveSkorByKelompokKerja(); List> filterSkoring = new ArrayList<>(); // filtering skoring @@ -652,8 +654,8 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik for (Map kelompokKerja : listKelompokKerja) { for (Integer idIndikator : listIndikatorPelayanan) { - TargetLayananCustomVO resultVo = new TargetLayananCustomVO(); - List listDetail = new ArrayList<>(); + TargetLayananJamKerjaVO resultVo = new TargetLayananJamKerjaVO(); + List listDetail = new ArrayList<>(); double capaianTriwulanKE = 0.0; double capaianTriwulanKG = 0.0; @@ -667,14 +669,14 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik int i = 0; for (String datePelayanan : listBulanPelayananSorted) { i++; - TargetLayananCustomDetailVO detail = new TargetLayananCustomDetailVO(); + TargetLayananJamKerjaDetailVO detail = new TargetLayananJamKerjaDetailVO(); double capaianBulanan = 0.0; double targetBulanan = 0.0; for (Map data : dataLayananScored) { if (kelompokKerja.get("subunitKerjaId").equals(data.get("idKelompokKerja")) && datePelayanan.equals(sdf.format(data.get("tglPelayanan")))) { - if (idIndikator.equals(Master.IndikatorKinerjaDetail.VISITE) + if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.VISITE) && (listKonsulTapiVisit.contains(data.get("idTindakan")) || data.get("namaTindakan") .toString().toLowerCase().contains(Master.VISIT))) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); @@ -692,7 +694,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanVI / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_EKS) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.KONSUL_EKS) && data.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL) && listRuangEks.contains(data.get("idRuangan"))) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); @@ -710,7 +712,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanKE / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_GADAR) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.KONSUL_GADAR) && data.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL) && data.get("idDepartemen").equals(Master.Departemen.IGD)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); @@ -728,7 +730,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanKG / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_REG) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.KONSUL_REG) && data.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { @@ -745,7 +747,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanKR / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_EKS) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.TINDAKAN_EKS) && listRuangEks.contains(data.get("idRuangan"))) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { @@ -762,7 +764,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanTE / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_GADAR) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.TINDAKAN_GADAR) && data.get("idDepartemen").equals(Master.Departemen.IGD)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { @@ -779,7 +781,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanTG / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_OPS) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.TINDAKAN_OPS) && data.get("idRuangan").equals(Master.Ruangan.OK)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { @@ -796,7 +798,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanTO / (listBulanPelayananSorted.size() - 1)); } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_REG)) { + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.TINDAKAN_REG)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { capaianTriwulanTR += Double.valueOf(data.get("jumlahTindakan").toString()); @@ -838,388 +840,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik resultVo.setKelompokKerja(kelompokKerjaVO); resultVo.setIndikator(detailIndikatorVO); - saveTargetCapaianLayanan(resultVo, sdf.parse(strPeriode)); - } - } - } - } - - @Override - public void autoSaveTargetCapaianLayananLuarJamKerja(String strPeriode, Integer idKsm) throws ParseException { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); - SimpleDateFormat sdfINA = new SimpleDateFormat("MMMM yyyy", new Locale("in", "ID")); - - DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - - Date periode = sdf.parse(strPeriode); - - // get_few_months_earlier - Calendar calTglAwal = Calendar.getInstance(); - calTglAwal.setTime(periode); - calTglAwal.set(Calendar.HOUR_OF_DAY, 0); - calTglAwal.set(Calendar.MINUTE, 0); - calTglAwal.set(Calendar.SECOND, 0); - calTglAwal.set(Calendar.DAY_OF_MONTH, 1); - calTglAwal.add(Calendar.MONTH, -Integer.valueOf(GetSettingDataFixed("jmlBlnHitungTargetMedis"))); - - // get_this_period - Calendar bulan = Calendar.getInstance(); - bulan.setTime(periode); - bulan.set(Calendar.HOUR_OF_DAY, 23); - bulan.set(Calendar.MINUTE, 59); - bulan.set(Calendar.SECOND, 0); - bulan.set(Calendar.DAY_OF_MONTH, bulan.getActualMaximum(Calendar.DAY_OF_MONTH)); - - LocalDateTime PSBBDate = LocalDateTime.of(2020, 9, 14, 0, 0, 0); - LocalDateTime PSBBEnd = LocalDateTime.parse(GetSettingDataFixed("psbbperiod"), dtf); - - Date pssbAwal = Date.from(PSBBDate.atZone(ZoneId.systemDefault()).toInstant()); - Date pssbAkhir = Date.from(PSBBEnd.atZone(ZoneId.systemDefault()).toInstant()); - - List listRuangEks = splitDataSettingDatafixed("IdRuanganEksekutif"); - List listKonsulTapiVisit = splitDataSettingDatafixed("konsulTapiVisit"); - - List listIndikatorPelayanan = Arrays.asList(Master.IndikatorKinerjaDetail.INDIKATOR_PELAYANAN_MEDIS); - - List listIdNonjadwal = shiftKerjaDao.findListNonjadwal(); - - List> dataLayananRaw = new ArrayList<>(); - if (CommonUtil.isNotNullOrEmpty(idKsm)) { - dataLayananRaw = ikiDanRemunerasiDao.getDataLayananLuarJamKerja(calTglAwal.getTime(), bulan.getTime(), - pssbAwal, pssbAkhir, listIdNonjadwal, Master.JenisPegawai.DOKTER, Arrays.asList(idKsm), - Arrays.asList(Master.JenisProduk.NONTINDAKAN), Master.Produk.KARCIS); - } else { - dataLayananRaw = ikiDanRemunerasiDao.getDataLayananLuarJamKerja(calTglAwal.getTime(), bulan.getTime(), - pssbAwal, pssbAkhir, listIdNonjadwal, Master.JenisPegawai.DOKTER, - Arrays.asList(Master.UnitKerja.KSM), Arrays.asList(Master.JenisProduk.NONTINDAKAN), - Master.Produk.KARCIS); - } - - // get_kategori_bulan - List listBulanPelayanan = new ArrayList<>(); - List listBulanPelayananSorted = new ArrayList<>(); - for (Map dat : dataLayananRaw) { - if (!listBulanPelayanan.contains(sdf.format(dat.get("tglPelayanan")))) { - listBulanPelayanan.add(sdf.format(dat.get("tglPelayanan"))); - } - } - listBulanPelayananSorted = listBulanPelayanan.stream().sorted().collect(Collectors.toList()); - - // get_kategori_pegawai - List listIdPegawai = new ArrayList<>(); - for (Map map : dataLayananRaw) { - if (!listIdPegawai.contains(map.get("pegawaiId"))) { - listIdPegawai.add(Integer.parseInt(map.get("pegawaiId").toString())); - } - } - - // get_kategori_kelompok_kerja -// List listIdKK = new ArrayList<>(); -// for (Map map : dataLayananRaw) { -// if (!listIdKK.contains(map.get("idKelompokKerja"))) { -// listIdKK.add(Integer.parseInt(map.get("idKelompokKerja").toString())); -// } -// } - - List> listPegawai = pegawaiDao.findPegawaiByListId(listIdPegawai); - -// List> listKelompokKerja = subunitKerjaDao.findSubDanUnitKerjaById(listIdKK); - - List> dataLastTargetLayanan = targetLayananDao - .getLastTargetLayanan(sdf.format(calTglAwal.getTime()), sdf.format(bulan.getTime())); - - List> filterTarget = new ArrayList<>(); - // filtering target - for (Map mapData : dataLastTargetLayanan) { - boolean isContained = false; - for (Map mapFilter : filterTarget) { - if (mapData.get("kelompokKerjaId").equals(mapFilter.get("kelompokKerjaId")) - && mapData.get("indikatorId").equals(mapFilter.get("indikatorId")) - && mapData.get("periode").equals(mapFilter.get("periode"))) { - isContained = true; - break; - } - } - if (!isContained) { - Map mapFilter = new HashMap<>(); - mapFilter.put("kelompokKerjaId", mapData.get("kelompokKerjaId")); - mapFilter.put("indikatorId", mapData.get("indikatorId")); - mapFilter.put("periode", mapData.get("periode")); - filterTarget.add(mapFilter); - } - } - - List> dataTargetFiltered = new ArrayList<>(); - // processing Target - for (Map mapFilter : filterTarget) { - for (Map mapData : dataLastTargetLayanan) { - if (mapData.get("kelompokKerjaId").equals(mapFilter.get("kelompokKerjaId")) - && mapData.get("indikatorId").equals(mapFilter.get("indikatorId")) - && mapData.get("periode").equals(mapFilter.get("periode"))) { - dataTargetFiltered.add(mapData); - break; - } - } - } - - List> dataSkoringRaw = skoringTindakanMedisDao.findLatestActiveSkor(); - - List> filterSkoring = new ArrayList<>(); - // filtering skoring - for (Map mapData : dataSkoringRaw) { - boolean isContained = false; - for (Map mapFilter : filterSkoring) { - if (mapData.get("produkId").equals(mapFilter.get("produkId")) - && mapData.get("kelompokKerjaId").equals(mapFilter.get("kelompokKerjaId"))) { - isContained = true; - break; - } - } - if (!isContained) { - Map mapFilter = new HashMap<>(); - mapFilter.put("produkId", mapData.get("produkId")); - mapFilter.put("kelompokKerjaId", mapData.get("kelompokKerjaId")); - filterSkoring.add(mapFilter); - } - } - - List> dataSkoringFiltered = new ArrayList<>(); - // processing skoring - for (Map mapFilter : filterSkoring) { - for (Map mapData : dataSkoringRaw) { - if (mapFilter.get("produkId").equals(mapData.get("produkId")) - && mapFilter.get("kelompokKerjaId").equals(mapData.get("kelompokKerjaId"))) { - dataSkoringFiltered.add(mapData); - break; - } - } - } - - List> dataLayananScored = new ArrayList<>(); - // scoring data layanan - for (Map layanan : dataLayananRaw) { - for (Map skoring : dataSkoringFiltered) { - if (layanan.get("idTindakan").equals(skoring.get("produkId")) - && 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"))))) { - - if (Double.valueOf(layanan.get("hargaDiskon").toString()) > 0.0 - && (CommonUtil.isNullOrEmpty(layanan.get("statusDiskon")) - || !Boolean.valueOf(layanan.get("statusDiskon").toString()))) { - layanan.put("jumlahTindakan", 0.0); - } else if (listRuangEks.contains(layanan.get("idRuangan")) - && !layanan.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL) - && !layanan.get("namaTindakan").toString().toLowerCase().contains(Master.VISIT)) { - layanan.put("jumlahTindakan", - Double.valueOf(layanan.get("jumlahTindakan").toString()) - * Double.valueOf(skoring.get("skor").toString()) - * Master.Remunerasi.PERSEN_SKOR_EKSEKUTIF); - } else if (layanan.get("jenisPetugasId").equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS)) { - layanan.put("jumlahTindakan", - Double.valueOf(layanan.get("jumlahTindakan").toString()) - * Double.valueOf(skoring.get("skor").toString()) - * Master.Remunerasi.PERSEN_SKOR_ASISTEN_SPESIALIS); - } else { - layanan.put("jumlahTindakan", Double.valueOf(layanan.get("jumlahTindakan").toString()) - * Double.valueOf(skoring.get("skor").toString())); - } - - break; - } - } - dataLayananScored.add(layanan); - } - - for (Map kelompokKerja : listKelompokKerja) { - for (Integer idIndikator : listIndikatorPelayanan) { - TargetLayananCustomVO resultVo = new TargetLayananCustomVO(); - List listDetail = new ArrayList<>(); - - double capaianTriwulanKE = 0.0; - double capaianTriwulanKG = 0.0; - double capaianTriwulanKR = 0.0; - double capaianTriwulanTE = 0.0; - double capaianTriwulanTG = 0.0; - double capaianTriwulanTO = 0.0; - double capaianTriwulanTR = 0.0; - double capaianTriwulanVI = 0.0; - - int i = 0; - for (String datePelayanan : listBulanPelayananSorted) { - i++; - TargetLayananCustomDetailVO detail = new TargetLayananCustomDetailVO(); - - double capaianBulanan = 0.0; - double targetBulanan = 0.0; - for (Map data : dataLayananScored) { - if (kelompokKerja.get("subunitKerjaId").equals(data.get("idKelompokKerja")) - && datePelayanan.equals(sdf.format(data.get("tglPelayanan")))) { - if (idIndikator.equals(Master.IndikatorKinerjaDetail.VISITE) - && (listKonsulTapiVisit.contains(data.get("idTindakan")) || data.get("namaTindakan") - .toString().toLowerCase().contains(Master.VISIT))) { - capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); - if (i < listBulanPelayananSorted.size()) { - capaianTriwulanVI += Double.valueOf(data.get("jumlahTindakan").toString()); - for (Map target : dataTargetFiltered) { - if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) - && idIndikator.equals(target.get("indikatorId")) - && datePelayanan.equals(target.get("periode"))) { - targetBulanan = Double.valueOf(target.get("target").toString()); - break; - } - } - } else if (i == listBulanPelayananSorted.size()) { - targetBulanan = Math - .floor(capaianTriwulanVI / (listBulanPelayananSorted.size() - 1)); - } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_EKS) - && data.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL) - && listRuangEks.contains(data.get("idRuangan"))) { - capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); - if (i < listBulanPelayananSorted.size()) { - capaianTriwulanKE += Double.valueOf(data.get("jumlahTindakan").toString()); - for (Map target : dataTargetFiltered) { - if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) - && idIndikator.equals(target.get("indikatorId")) - && datePelayanan.equals(target.get("periode"))) { - targetBulanan = Double.valueOf(target.get("target").toString()); - break; - } - } - } else if (i == listBulanPelayananSorted.size()) { - targetBulanan = Math - .floor(capaianTriwulanKE / (listBulanPelayananSorted.size() - 1)); - } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_GADAR) - && data.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL) - && data.get("idDepartemen").equals(Master.Departemen.IGD)) { - capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); - if (i < listBulanPelayananSorted.size()) { - capaianTriwulanKG += Double.valueOf(data.get("jumlahTindakan").toString()); - for (Map target : dataTargetFiltered) { - if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) - && idIndikator.equals(target.get("indikatorId")) - && datePelayanan.equals(target.get("periode"))) { - targetBulanan = Double.valueOf(target.get("target").toString()); - break; - } - } - } else if (i == listBulanPelayananSorted.size()) { - targetBulanan = Math - .floor(capaianTriwulanKG / (listBulanPelayananSorted.size() - 1)); - } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_REG) - && data.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL)) { - capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); - if (i < listBulanPelayananSorted.size()) { - capaianTriwulanKR += Double.valueOf(data.get("jumlahTindakan").toString()); - for (Map target : dataTargetFiltered) { - if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) - && idIndikator.equals(target.get("indikatorId")) - && datePelayanan.equals(target.get("periode"))) { - targetBulanan = Double.valueOf(target.get("target").toString()); - break; - } - } - } else if (i == listBulanPelayananSorted.size()) { - targetBulanan = Math - .floor(capaianTriwulanKR / (listBulanPelayananSorted.size() - 1)); - } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_EKS) - && listRuangEks.contains(data.get("idRuangan"))) { - capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); - if (i < listBulanPelayananSorted.size()) { - capaianTriwulanTE += Double.valueOf(data.get("jumlahTindakan").toString()); - for (Map target : dataTargetFiltered) { - if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) - && idIndikator.equals(target.get("indikatorId")) - && datePelayanan.equals(target.get("periode"))) { - targetBulanan = Double.valueOf(target.get("target").toString()); - break; - } - } - } else if (i == listBulanPelayananSorted.size()) { - targetBulanan = Math - .floor(capaianTriwulanTE / (listBulanPelayananSorted.size() - 1)); - } - } 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()) { - capaianTriwulanTG += Double.valueOf(data.get("jumlahTindakan").toString()); - for (Map target : dataTargetFiltered) { - if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) - && idIndikator.equals(target.get("indikatorId")) - && datePelayanan.equals(target.get("periode"))) { - targetBulanan = Double.valueOf(target.get("target").toString()); - break; - } - } - } else if (i == listBulanPelayananSorted.size()) { - targetBulanan = Math - .floor(capaianTriwulanTG / (listBulanPelayananSorted.size() - 1)); - } - } 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()) { - capaianTriwulanTO += Double.valueOf(data.get("jumlahTindakan").toString()); - for (Map target : dataTargetFiltered) { - if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) - && idIndikator.equals(target.get("indikatorId")) - && datePelayanan.equals(target.get("periode"))) { - targetBulanan = Double.valueOf(target.get("target").toString()); - break; - } - } - } else if (i == listBulanPelayananSorted.size()) { - targetBulanan = Math - .floor(capaianTriwulanTO / (listBulanPelayananSorted.size() - 1)); - } - } 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()); - for (Map target : dataTargetFiltered) { - if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) - && idIndikator.equals(target.get("indikatorId")) - && datePelayanan.equals(target.get("periode"))) { - targetBulanan = Double.valueOf(target.get("target").toString()); - break; - } - } - } else if (i == listBulanPelayananSorted.size()) { - targetBulanan = Math - .floor(capaianTriwulanTR / (listBulanPelayananSorted.size() - 1)); - } - } - } - } - Date bulanPelayanan = sdf.parse(datePelayanan); - - detail.setDate(datePelayanan); - detail.setBulan(sdfINA.format(bulanPelayanan)); - detail.setTarget(targetBulanan); - detail.setCapaian(capaianBulanan); - listDetail.add(detail); - } - if (Double.valueOf(listDetail.get(listDetail.size() - 1).getTarget()) > 0.0) { - resultVo.setDetail(listDetail); - SubUnitKerjaPegawaiVO kelompokKerjaVO = new SubUnitKerjaPegawaiVO(); - kelompokKerjaVO.setId(Integer.valueOf(kelompokKerja.get("subunitKerjaId").toString())); - - UnitKerjaPegawaiVO unitKerjaVO = new UnitKerjaPegawaiVO(); - unitKerjaVO.setId(Integer.valueOf(kelompokKerja.get("unitKerjaId").toString())); - kelompokKerjaVO.setUnitKerja(unitKerjaVO); - - IndikatorKinerjaDetailVO detailIndikatorVO = new IndikatorKinerjaDetailVO(); - detailIndikatorVO.setId(idIndikator); - - resultVo.setKelompokKerja(kelompokKerjaVO); - resultVo.setIndikator(detailIndikatorVO); - - saveTargetCapaianLayanan(resultVo, sdf.parse(strPeriode)); + saveTargetCapaianLayananKelompokKerja(resultVo, sdf.parse(strPeriode)); } } } @@ -1227,10 +848,11 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik @Override @Transactional(readOnly = false) - public void saveTargetCapaianLayanan(TargetLayananCustomVO vo, Date periodeHitung) throws ParseException { + public void saveTargetCapaianLayananKelompokKerja(TargetLayananJamKerjaVO vo, Date periodeHitung) + throws ParseException { Date tglHitung = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); - for (TargetLayananCustomDetailVO detail : vo.getDetail()) { + for (TargetLayananJamKerjaDetailVO detail : vo.getDetail()) { SubUnitKerjaPegawai kelompokKerja = new SubUnitKerjaPegawai(); kelompokKerja.setId(vo.getKelompokKerja().getId()); @@ -1276,6 +898,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik Pegawai pegawai = new Pegawai(); pegawai.setId(Integer.valueOf(map.get("pegawaiId").toString())); logbook.setPegawai(pegawai); + logbook.setTglHitung(tglHitung); logbookKinerjaDokterDao.save(logbook); } @@ -1284,9 +907,429 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } @Override - public List findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) + public void autoSaveTargetCapaianLayananLuarJamKerja(String strPeriode) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + SimpleDateFormat sdfINA = new SimpleDateFormat("MMMM yyyy", new Locale("in", "ID")); + + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + Date periode = sdf.parse(strPeriode); + + // get_few_months_earlier + Calendar calTglAwal = Calendar.getInstance(); + calTglAwal.setTime(periode); + calTglAwal.set(Calendar.HOUR_OF_DAY, 0); + calTglAwal.set(Calendar.MINUTE, 0); + calTglAwal.set(Calendar.SECOND, 0); + calTglAwal.set(Calendar.DAY_OF_MONTH, 1); + calTglAwal.add(Calendar.MONTH, -Integer.valueOf(GetSettingDataFixed("jmlBlnHitungTargetMedis"))); + + // get_this_period + Calendar bulan = Calendar.getInstance(); + bulan.setTime(periode); + bulan.set(Calendar.HOUR_OF_DAY, 23); + bulan.set(Calendar.MINUTE, 59); + bulan.set(Calendar.SECOND, 0); + bulan.set(Calendar.DAY_OF_MONTH, bulan.getActualMaximum(Calendar.DAY_OF_MONTH)); + + LocalDateTime PSBBDate = LocalDateTime.of(2020, 9, 14, 0, 0, 0); + LocalDateTime PSBBEnd = LocalDateTime.parse(GetSettingDataFixed("psbbperiod"), dtf); + + Date pssbAwal = Date.from(PSBBDate.atZone(ZoneId.systemDefault()).toInstant()); + Date pssbAkhir = Date.from(PSBBEnd.atZone(ZoneId.systemDefault()).toInstant()); + + List listRuangEks = splitDataSettingDatafixed("IdRuanganEksekutif"); + List listKonsulTapiVisit = splitDataSettingDatafixed("konsulTapiVisit"); + + List listIndikatorPelayanan = Arrays + .asList(Master.IndikatorKinerjaLuarJamKerja.INDIKATOR_PELAYANAN_MEDIS); + + List listIdNonjadwal = shiftKerjaDao.findListNonjadwal(); + + List> dataLayananRaw = ikiDanRemunerasiDao.getDataLayananLuarJamKerja(calTglAwal.getTime(), + bulan.getTime(), pssbAwal, pssbAkhir, listIdNonjadwal, Master.JenisPegawai.DOKTER, + Arrays.asList(Master.UnitKerja.KSM), Arrays.asList(Master.JenisProduk.NONTINDAKAN), + Master.Produk.KARCIS); + + // get_kategori_bulan + List listBulanPelayanan = new ArrayList<>(); + List listBulanPelayananSorted = new ArrayList<>(); + for (Map dat : dataLayananRaw) { + if (!listBulanPelayanan.contains(sdf.format(dat.get("tglPelayanan")))) { + listBulanPelayanan.add(sdf.format(dat.get("tglPelayanan"))); + } + } + listBulanPelayananSorted = listBulanPelayanan.stream().sorted().collect(Collectors.toList()); + + // get_kategori_pegawai + List listIdPegawai = new ArrayList<>(); + for (Map map : dataLayananRaw) { + if (!listIdPegawai.contains(map.get("pegawaiId"))) { + listIdPegawai.add(Integer.parseInt(map.get("pegawaiId").toString())); + } + } + List> listPegawai = pegawaiDao.findPegawaiByListId(listIdPegawai); + + // get_kategori_jabatan + List listIdJabatan = new ArrayList<>(); + for (Map map : dataLayananRaw) { + if (!listIdJabatan.contains(map.get("jabatanId"))) { + listIdJabatan.add(Integer.parseInt(map.get("jabatanId").toString())); + } + } + List> listJabatan = jabatanDao.findJabatanByListId(listIdJabatan); + + List> dataLastTargetLayanan = logbookKinerjaDokterDao.getLastTargetLayananLuarJamKerja( + sdf.format(calTglAwal.getTime()), sdf.format(bulan.getTime()), + Arrays.asList(Master.IndikatorKinerjaLuarJamKerja.INDIKATOR_PELAYANAN_MEDIS)); + + List> filterTarget = new ArrayList<>(); + // filtering target + for (Map mapData : dataLastTargetLayanan) { + boolean isContained = false; + for (Map mapFilter : filterTarget) { + if (mapData.get("pegawaiId").equals(mapFilter.get("pegawaiId")) + && mapData.get("jabatanId").equals(mapFilter.get("jabatanId")) + && mapData.get("indikatorId").equals(mapFilter.get("indikatorId")) + && mapData.get("periode").equals(mapFilter.get("periode"))) { + isContained = true; + break; + } + } + if (!isContained) { + Map mapFilter = new HashMap<>(); + mapFilter.put("pegawaiId", mapData.get("pegawaiId")); + mapFilter.put("jabatanId", mapData.get("jabatanId")); + mapFilter.put("indikatorId", mapData.get("indikatorId")); + mapFilter.put("periode", mapData.get("periode")); + filterTarget.add(mapFilter); + } + } + + List> dataTargetFiltered = new ArrayList<>(); + // processing Target + for (Map mapFilter : filterTarget) { + for (Map mapData : dataLastTargetLayanan) { + if (mapData.get("pegawaiId").equals(mapFilter.get("pegawaiId")) + && mapData.get("jabatanId").equals(mapFilter.get("jabatanId")) + && mapData.get("indikatorId").equals(mapFilter.get("indikatorId")) + && mapData.get("periode").equals(mapFilter.get("periode"))) { + dataTargetFiltered.add(mapData); + break; + } + } + } + + List> dataSkoringRaw = skoringTindakanMedisDao.findLatestActiveSkorByDokter(); + + List> filterSkoring = new ArrayList<>(); + // filtering skoring + for (Map mapData : dataSkoringRaw) { + boolean isContained = false; + for (Map mapFilter : filterSkoring) { + if (mapData.get("produkId").equals(mapFilter.get("produkId")) + && mapData.get("pegawaiId").equals(mapFilter.get("pegawaiId")) + && mapData.get("jabatanId").equals(mapFilter.get("jabatanId"))) { + isContained = true; + break; + } + } + if (!isContained) { + Map mapFilter = new HashMap<>(); + mapFilter.put("produkId", mapData.get("produkId")); + mapFilter.put("pegawaiId", mapData.get("pegawaiId")); + mapFilter.put("jabatanId", mapData.get("jabatanId")); + filterSkoring.add(mapFilter); + } + } + + List> dataSkoringFiltered = new ArrayList<>(); + // processing skoring + for (Map mapFilter : filterSkoring) { + for (Map mapData : dataSkoringRaw) { + if (mapFilter.get("produkId").equals(mapData.get("produkId")) + && mapFilter.get("pegawaiId").equals(mapData.get("pegawaiId")) + && mapFilter.get("jabatanId").equals(mapData.get("jabatanId"))) { + dataSkoringFiltered.add(mapData); + break; + } + } + } + + List> dataLayananScored = new ArrayList<>(); + // scoring data layanan + for (Map layanan : dataLayananRaw) { + for (Map skoring : dataSkoringFiltered) { + if (layanan.get("idTindakan").equals(skoring.get("produkId")) + && layanan.get("pegawaiId").equals(skoring.get("pegawaiId")) + && layanan.get("jabatanId").equals(skoring.get("jabatanId")) + && (((Date) skoring.get("tglBerlaku")).before(((Date) layanan.get("tglPelayanan"))) + || ((Date) skoring.get("tglBerlaku")).equals(((Date) layanan.get("tglPelayanan"))))) { + + if (Double.valueOf(layanan.get("hargaDiskon").toString()) > 0.0 + && (CommonUtil.isNullOrEmpty(layanan.get("statusDiskon")) + || !Boolean.valueOf(layanan.get("statusDiskon").toString()))) { + layanan.put("jumlahTindakan", 0.0); + } else if (listRuangEks.contains(layanan.get("idRuangan")) + && !layanan.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL) + && !layanan.get("namaTindakan").toString().toLowerCase().contains(Master.VISIT)) { + layanan.put("jumlahTindakan", + Double.valueOf(layanan.get("jumlahTindakan").toString()) + * Double.valueOf(skoring.get("skor").toString()) + * Master.Remunerasi.PERSEN_SKOR_EKSEKUTIF); + } else if (layanan.get("jenisPetugasId").equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS)) { + layanan.put("jumlahTindakan", + Double.valueOf(layanan.get("jumlahTindakan").toString()) + * Double.valueOf(skoring.get("skor").toString()) + * Master.Remunerasi.PERSEN_SKOR_ASISTEN_SPESIALIS); + } else { + layanan.put("jumlahTindakan", Double.valueOf(layanan.get("jumlahTindakan").toString()) + * Double.valueOf(skoring.get("skor").toString())); + } + + break; + } + } + dataLayananScored.add(layanan); + } + + for (Map pegawai : listPegawai) { + for (Map jabatan : listJabatan) { + for (Integer idIndikator : listIndikatorPelayanan) { + TargetLayananLuarJamKerjaVO resultVo = new TargetLayananLuarJamKerjaVO(); + List listDetail = new ArrayList<>(); + + double capaianTriwulanKE = 0.0; + double capaianTriwulanKG = 0.0; + double capaianTriwulanKR = 0.0; + double capaianTriwulanTE = 0.0; + double capaianTriwulanTG = 0.0; + double capaianTriwulanTO = 0.0; + double capaianTriwulanTR = 0.0; + double capaianTriwulanVI = 0.0; + + int i = 0; + for (String datePelayanan : listBulanPelayananSorted) { + i++; + TargetLayananLuarJamKerjaDetailVO detail = new TargetLayananLuarJamKerjaDetailVO(); + + double capaianBulanan = 0.0; + double targetBulanan = 0.0; + for (Map data : dataLayananScored) { + if (pegawai.get("pegawaiId").equals(data.get("pegawaiId")) + && jabatan.get("jabatanId").equals(data.get("jabatanId")) + && datePelayanan.equals(sdf.format(data.get("tglPelayanan")))) { + if (idIndikator.equals(Master.IndikatorKinerjaLuarJamKerja.VISITE) + && (listKonsulTapiVisit.contains(data.get("idTindakan")) || data + .get("namaTindakan").toString().toLowerCase().contains(Master.VISIT))) { + capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); + if (i < listBulanPelayananSorted.size()) { + capaianTriwulanVI += Double.valueOf(data.get("jumlahTindakan").toString()); + for (Map target : dataTargetFiltered) { + if (pegawai.get("pegawaiId").equals(target.get("pegawaiId")) + && jabatan.get("jabatanId").equals(target.get("jabatanId")) + && idIndikator.equals(target.get("indikatorId")) + && datePelayanan.equals(target.get("periode"))) { + targetBulanan = Double.valueOf(target.get("target").toString()); + break; + } + } + } else if (i == listBulanPelayananSorted.size()) { + targetBulanan = Math + .floor(capaianTriwulanVI / (listBulanPelayananSorted.size() - 1)); + } + } else if (idIndikator.equals(Master.IndikatorKinerjaLuarJamKerja.KONSUL_EKS) + && data.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL) + && listRuangEks.contains(data.get("idRuangan"))) { + capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); + if (i < listBulanPelayananSorted.size()) { + capaianTriwulanKE += Double.valueOf(data.get("jumlahTindakan").toString()); + for (Map target : dataTargetFiltered) { + if (pegawai.get("pegawaiId").equals(target.get("pegawaiId")) + && jabatan.get("jabatanId").equals(target.get("jabatanId")) + && idIndikator.equals(target.get("indikatorId")) + && datePelayanan.equals(target.get("periode"))) { + targetBulanan = Double.valueOf(target.get("target").toString()); + break; + } + } + } else if (i == listBulanPelayananSorted.size()) { + targetBulanan = Math + .floor(capaianTriwulanKE / (listBulanPelayananSorted.size() - 1)); + } + } else if (idIndikator.equals(Master.IndikatorKinerjaLuarJamKerja.KONSUL_GADAR) + && data.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL) + && data.get("idDepartemen").equals(Master.Departemen.IGD)) { + capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); + if (i < listBulanPelayananSorted.size()) { + capaianTriwulanKG += Double.valueOf(data.get("jumlahTindakan").toString()); + for (Map target : dataTargetFiltered) { + if (pegawai.get("pegawaiId").equals(target.get("pegawaiId")) + && jabatan.get("jabatanId").equals(target.get("jabatanId")) + && idIndikator.equals(target.get("indikatorId")) + && datePelayanan.equals(target.get("periode"))) { + targetBulanan = Double.valueOf(target.get("target").toString()); + break; + } + } + } else if (i == listBulanPelayananSorted.size()) { + targetBulanan = Math + .floor(capaianTriwulanKG / (listBulanPelayananSorted.size() - 1)); + } + } else if (idIndikator.equals(Master.IndikatorKinerjaLuarJamKerja.KONSUL_REG) + && data.get("namaTindakan").toString().toLowerCase().contains(Master.KONSUL)) { + capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); + if (i < listBulanPelayananSorted.size()) { + capaianTriwulanKR += Double.valueOf(data.get("jumlahTindakan").toString()); + for (Map target : dataTargetFiltered) { + if (pegawai.get("pegawaiId").equals(target.get("pegawaiId")) + && jabatan.get("jabatanId").equals(target.get("jabatanId")) + && idIndikator.equals(target.get("indikatorId")) + && datePelayanan.equals(target.get("periode"))) { + targetBulanan = Double.valueOf(target.get("target").toString()); + break; + } + } + } else if (i == listBulanPelayananSorted.size()) { + targetBulanan = Math + .floor(capaianTriwulanKR / (listBulanPelayananSorted.size() - 1)); + } + } else if (idIndikator.equals(Master.IndikatorKinerjaLuarJamKerja.TINDAKAN_EKS) + && listRuangEks.contains(data.get("idRuangan"))) { + capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); + if (i < listBulanPelayananSorted.size()) { + capaianTriwulanTE += Double.valueOf(data.get("jumlahTindakan").toString()); + for (Map target : dataTargetFiltered) { + if (pegawai.get("pegawaiId").equals(target.get("pegawaiId")) + && jabatan.get("jabatanId").equals(target.get("jabatanId")) + && idIndikator.equals(target.get("indikatorId")) + && datePelayanan.equals(target.get("periode"))) { + targetBulanan = Double.valueOf(target.get("target").toString()); + break; + } + } + } else if (i == listBulanPelayananSorted.size()) { + targetBulanan = Math + .floor(capaianTriwulanTE / (listBulanPelayananSorted.size() - 1)); + } + } else if (idIndikator.equals(Master.IndikatorKinerjaLuarJamKerja.TINDAKAN_GADAR) + && data.get("idDepartemen").equals(Master.Departemen.IGD)) { + capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); + if (i < listBulanPelayananSorted.size()) { + capaianTriwulanTG += Double.valueOf(data.get("jumlahTindakan").toString()); + for (Map target : dataTargetFiltered) { + if (pegawai.get("pegawaiId").equals(target.get("pegawaiId")) + && jabatan.get("jabatanId").equals(target.get("jabatanId")) + && idIndikator.equals(target.get("indikatorId")) + && datePelayanan.equals(target.get("periode"))) { + targetBulanan = Double.valueOf(target.get("target").toString()); + break; + } + } + } else if (i == listBulanPelayananSorted.size()) { + targetBulanan = Math + .floor(capaianTriwulanTG / (listBulanPelayananSorted.size() - 1)); + } + } else if (idIndikator.equals(Master.IndikatorKinerjaLuarJamKerja.TINDAKAN_OPS) + && data.get("idRuangan").equals(Master.Ruangan.OK)) { + capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); + if (i < listBulanPelayananSorted.size()) { + capaianTriwulanTO += Double.valueOf(data.get("jumlahTindakan").toString()); + for (Map target : dataTargetFiltered) { + if (pegawai.get("pegawaiId").equals(target.get("pegawaiId")) + && jabatan.get("jabatanId").equals(target.get("jabatanId")) + && idIndikator.equals(target.get("indikatorId")) + && datePelayanan.equals(target.get("periode"))) { + targetBulanan = Double.valueOf(target.get("target").toString()); + break; + } + } + } else if (i == listBulanPelayananSorted.size()) { + targetBulanan = Math + .floor(capaianTriwulanTO / (listBulanPelayananSorted.size() - 1)); + } + } else if (idIndikator.equals(Master.IndikatorKinerjaLuarJamKerja.TINDAKAN_REG)) { + capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); + if (i < listBulanPelayananSorted.size()) { + capaianTriwulanTR += Double.valueOf(data.get("jumlahTindakan").toString()); + for (Map target : dataTargetFiltered) { + if (pegawai.get("pegawaiId").equals(target.get("pegawaiId")) + && jabatan.get("jabatanId").equals(target.get("jabatanId")) + && idIndikator.equals(target.get("indikatorId")) + && datePelayanan.equals(target.get("periode"))) { + targetBulanan = Double.valueOf(target.get("target").toString()); + break; + } + } + } else if (i == listBulanPelayananSorted.size()) { + targetBulanan = Math + .floor(capaianTriwulanTR / (listBulanPelayananSorted.size() - 1)); + } + } + } + } + Date bulanPelayanan = sdf.parse(datePelayanan); + + detail.setDate(datePelayanan); + detail.setBulan(sdfINA.format(bulanPelayanan)); + detail.setTarget(targetBulanan); + detail.setCapaian(capaianBulanan); + listDetail.add(detail); + } + if (Double.valueOf(listDetail.get(listDetail.size() - 1).getTarget()) > 0.0) { + resultVo.setDetail(listDetail); + + PegawaiVO pegawaiVO = new PegawaiVO(); + pegawaiVO.setId(Integer.valueOf(pegawai.get("pegawaiId").toString())); + resultVo.setPegawai(pegawaiVO); + + JabatanVO jabatanVO = new JabatanVO(); + jabatanVO.setId(Integer.valueOf(jabatan.get("jabatanId").toString())); + resultVo.setJabatan(jabatanVO); + + IndikatorKinerjaDetailVO detailIndikatorVO = new IndikatorKinerjaDetailVO(); + detailIndikatorVO.setId(idIndikator); + resultVo.setIndikator(detailIndikatorVO); + + saveTargetCapaianLayananPegawai(resultVo, sdf.parse(strPeriode)); + } + } + } + } + } + + @Override + @Transactional(readOnly = false) + public void saveTargetCapaianLayananPegawai(TargetLayananLuarJamKerjaVO vo, Date periodeHitung) throws ParseException { - List result = new ArrayList<>(); + Date tglHitung = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + for (TargetLayananLuarJamKerjaDetailVO detail : vo.getDetail()) { + LogbookKinerjaDokter logbook = new LogbookKinerjaDokter(); + logbook.setKdProfile((short) 0); + logbook.setStatusEnabled(true); + logbook.setBulan(sdf.parse(detail.getDate())); + logbook.setDetailTarget(detail.getTarget()); + logbook.setDetailCapaian(detail.getCapaian()); + IndikatorKinerjaDetail indikator = new IndikatorKinerjaDetail(); + indikator.setId(vo.getIndikator().getId()); + logbook.setIndikatorDetail(indikator); + Jabatan jabatan = new Jabatan(); + jabatan.setId(vo.getJabatan().getId()); + logbook.setJabatan(jabatan); + Pegawai pegawai = new Pegawai(); + pegawai.setId(vo.getPegawai().getId()); + logbook.setPegawai(pegawai); + logbook.setTglHitung(tglHitung); + + logbookKinerjaDokterDao.save(logbook); + } + } + + @Override + public List findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) + throws ParseException { + List result = new ArrayList<>(); List data = new ArrayList<>(); List> listKelompokKerja = new ArrayList<>(); List listIdKelompokKerja = new ArrayList<>(); @@ -1332,18 +1375,18 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } List> listIndikatorPelayanan = indikatorKinerjaDetailDao - .findByListId(Arrays.asList(Master.IndikatorKinerjaDetail.INDIKATOR_PELAYANAN_MEDIS)); + .findByListId(Arrays.asList(Master.IndikatorKinerjaJamKerja.INDIKATOR_PELAYANAN_MEDIS)); for (Map kelompokKerja : listKelompokKerja) { for (Map indikator : listIndikatorPelayanan) { List paramPeriode = new ArrayList<>(); - TargetLayananCustomVO resultVo = new TargetLayananCustomVO(); - List listDetail = new ArrayList<>(); + TargetLayananJamKerjaVO resultVo = new TargetLayananJamKerjaVO(); + List listDetail = new ArrayList<>(); for (TargetLayanan targetLayanan : data) { if (kelompokKerja.get("subId").equals(targetLayanan.getSubUnitKerjaPegawai().getId()) && indikator.get("id").equals(targetLayanan.getIndikatorDetail().getId())) { - TargetLayananCustomDetailVO detail = new TargetLayananCustomDetailVO(); + TargetLayananJamKerjaDetailVO detail = new TargetLayananJamKerjaDetailVO(); detail.setDate(sdf.format(targetLayanan.getPeriode())); detail.setBulan(sdfINA.format(targetLayanan.getPeriode())); detail.setTarget(targetLayanan.getTarget()); 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 7b63d07a..bcdef61c 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 @@ -433,7 +433,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb jenisIndikator.put("jenisIndikator", ji); for (Map map : rs) { if (map.get("jenisIndikator").equals(ji)) { - if (map.get("idIndikator").equals(Master.IndikatorKinerja.PELAYANAN_MEDIS)) { + if (map.get("idIndikator").equals(Master.IndikatorKinerja.PELAYANAN_MEDIS_JAM_KERJA)) { List> logbookDokter = findLogbookJamKerjaDokter(idPegawai, bulan); double capaian = 0.0; for (Map ld : logbookDokter) { @@ -660,39 +660,39 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb for (Map mapLayanan : dataLayanan) { if (listKonsulTapiVisit.contains(mapLayanan.get("produkId")) || mapLayanan.get("namaProduk").toString().toLowerCase().contains(Master.VISIT)) { - mapLayanan.put("indikatorId", Master.IndikatorKinerjaDetail.VISITE); + mapLayanan.put("indikatorId", Master.IndikatorKinerjaJamKerja.VISITE); mapLayanan.put("namaIndikator", - indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaDetail.VISITE)); + indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaJamKerja.VISITE)); } else if (mapLayanan.get("namaProduk").toString().toLowerCase().contains(Master.KONSUL) && listRuangEks.contains(mapLayanan.get("ruanganId"))) { - mapLayanan.put("indikatorId", Master.IndikatorKinerjaDetail.KONSUL_EKS); + mapLayanan.put("indikatorId", Master.IndikatorKinerjaJamKerja.KONSUL_EKS); mapLayanan.put("namaIndikator", - indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaDetail.KONSUL_EKS)); + indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaJamKerja.KONSUL_EKS)); } else if (mapLayanan.get("namaProduk").toString().toLowerCase().contains(Master.KONSUL) && mapLayanan.get("departemenId").equals(Master.Departemen.IGD)) { - mapLayanan.put("indikatorId", Master.IndikatorKinerjaDetail.KONSUL_GADAR); + mapLayanan.put("indikatorId", Master.IndikatorKinerjaJamKerja.KONSUL_GADAR); mapLayanan.put("namaIndikator", - indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaDetail.KONSUL_GADAR)); + indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaJamKerja.KONSUL_GADAR)); } else if (mapLayanan.get("namaProduk").toString().toLowerCase().contains(Master.KONSUL)) { - mapLayanan.put("indikatorId", Master.IndikatorKinerjaDetail.KONSUL_REG); + mapLayanan.put("indikatorId", Master.IndikatorKinerjaJamKerja.KONSUL_REG); mapLayanan.put("namaIndikator", - indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaDetail.KONSUL_REG)); + indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaJamKerja.KONSUL_REG)); } else if (listRuangEks.contains(mapLayanan.get("ruanganId"))) { - mapLayanan.put("indikatorId", Master.IndikatorKinerjaDetail.TINDAKAN_EKS); + mapLayanan.put("indikatorId", Master.IndikatorKinerjaJamKerja.TINDAKAN_EKS); mapLayanan.put("namaIndikator", - indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaDetail.TINDAKAN_EKS)); + indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaJamKerja.TINDAKAN_EKS)); } else if (mapLayanan.get("departemenId").equals(Master.Departemen.IGD)) { - mapLayanan.put("indikatorId", Master.IndikatorKinerjaDetail.TINDAKAN_GADAR); + mapLayanan.put("indikatorId", Master.IndikatorKinerjaJamKerja.TINDAKAN_GADAR); mapLayanan.put("namaIndikator", - indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaDetail.TINDAKAN_GADAR)); + indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaJamKerja.TINDAKAN_GADAR)); } else if (mapLayanan.get("ruanganId").equals(Master.Ruangan.OK)) { - mapLayanan.put("indikatorId", Master.IndikatorKinerjaDetail.TINDAKAN_OPS); + mapLayanan.put("indikatorId", Master.IndikatorKinerjaJamKerja.TINDAKAN_OPS); mapLayanan.put("namaIndikator", - indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaDetail.TINDAKAN_OPS)); + indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaJamKerja.TINDAKAN_OPS)); } else { - mapLayanan.put("indikatorId", Master.IndikatorKinerjaDetail.TINDAKAN_REG); + mapLayanan.put("indikatorId", Master.IndikatorKinerjaJamKerja.TINDAKAN_REG); mapLayanan.put("namaIndikator", - indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaDetail.TINDAKAN_REG)); + indikatorKinerjaDetailDao.findNamaIndikator(Master.IndikatorKinerjaJamKerja.TINDAKAN_REG)); } } @@ -815,7 +815,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb Arrays.asList(Master.JenisProduk.NONTINDAKAN), Master.Produk.KARCIS); for (Map mapLayanan : dataLayanan) { - if (idIndikator.equals(Master.IndikatorKinerjaDetail.VISITE) + if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.VISITE) && (listKonsulTapiVisit.contains(mapLayanan.get("produkId")) || mapLayanan.get("namaProduk").toString().toLowerCase().contains(Master.VISIT))) { if (idJenisPetugas.equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) @@ -857,7 +857,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb result.add(mapLayanan); } } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_EKS) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.KONSUL_EKS) && mapLayanan.get("namaProduk").toString().toLowerCase().contains(Master.KONSUL) && listRuangEks.contains(mapLayanan.get("ruanganId"))) { if (idJenisPetugas.equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) @@ -899,7 +899,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb result.add(mapLayanan); } } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_GADAR) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.KONSUL_GADAR) && mapLayanan.get("namaProduk").toString().toLowerCase().contains(Master.KONSUL) && mapLayanan.get("departemenId").equals(Master.Departemen.IGD)) { if (idJenisPetugas.equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) @@ -941,7 +941,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb result.add(mapLayanan); } } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.KONSUL_REG) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.KONSUL_REG) && mapLayanan.get("namaProduk").toString().toLowerCase().contains(Master.KONSUL)) { if (idJenisPetugas.equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) && mapLayanan.get("jenisPetugasId").equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS)) { @@ -982,7 +982,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb result.add(mapLayanan); } } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_EKS) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.TINDAKAN_EKS) && listRuangEks.contains(mapLayanan.get("ruanganId"))) { if (idJenisPetugas.equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) && mapLayanan.get("jenisPetugasId").equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS)) { @@ -1023,7 +1023,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb result.add(mapLayanan); } } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_GADAR) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.TINDAKAN_GADAR) && mapLayanan.get("departemenId").equals(Master.Departemen.IGD)) { if (idJenisPetugas.equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) && mapLayanan.get("jenisPetugasId").equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS)) { @@ -1064,7 +1064,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb result.add(mapLayanan); } } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_OPS) + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.TINDAKAN_OPS) && mapLayanan.get("ruanganId").equals(Master.Ruangan.OK)) { if (idJenisPetugas.equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) && mapLayanan.get("jenisPetugasId").equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS)) { @@ -1105,7 +1105,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb result.add(mapLayanan); } } - } else if (idIndikator.equals(Master.IndikatorKinerjaDetail.TINDAKAN_REG)) { + } else if (idIndikator.equals(Master.IndikatorKinerjaJamKerja.TINDAKAN_REG)) { if (idJenisPetugas.equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) && mapLayanan.get("jenisPetugasId").equals(Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS)) { if (skor.equals(0.0) && Double.valueOf(mapLayanan.get("hargaDiskon").toString()) > 0.0 diff --git a/jasamedika-config/src/main/resources/jdbc.localhost.properties b/jasamedika-config/src/main/resources/jdbc.localhost.properties index 838e15db..e6beebf7 100644 --- a/jasamedika-config/src/main/resources/jdbc.localhost.properties +++ b/jasamedika-config/src/main/resources/jdbc.localhost.properties @@ -8,11 +8,11 @@ hibernate.show_sql = true hikari.config.maximum.pool.size = 5 # DB Development -jdbc.url = jdbc:postgresql://localhost:5432/backup_01Mar21 +jdbc.url = jdbc:postgresql://localhost:5432/rsabhk_backup jdbc.username = postgres jdbc.password = root jdbc.serverName = localhost -jdbc.databaseName = backup_01Mar21 +jdbc.databaseName = rsabhk_backup jdbc.portNumber = 5432 corePoolSizeAsyncConfigurer = 5 diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/LogbookKinerjaDokter.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/LogbookKinerjaDokter.java index 087bf6f8..522e57cd 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/LogbookKinerjaDokter.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/LogbookKinerjaDokter.java @@ -57,6 +57,11 @@ public class LogbookKinerjaDokter extends BaseTransaction { @Column(name = "objectindikatordetailfk", insertable = false, updatable = false, nullable = true) private Integer indikatorDetailId; + + @Column(name = "tglhitung") + @Temporal(TemporalType.TIMESTAMP) + @Caption(value = "Tanggal Hitung") + public Date tglHitung; public Date getBulan() { return bulan; @@ -130,4 +135,12 @@ public class LogbookKinerjaDokter extends BaseTransaction { this.indikatorDetailId = indikatorDetailId; } + public Date getTglHitung() { + return tglHitung; + } + + public void setTglHitung(Date tglHitung) { + this.tglHitung = tglHitung; + } + } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/LogbookKinerjaDokterVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/LogbookKinerjaDokterVO.java index 7beb7843..dabfe6db 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/LogbookKinerjaDokterVO.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/LogbookKinerjaDokterVO.java @@ -31,6 +31,9 @@ public class LogbookKinerjaDokterVO extends BaseTransactionVO { private Integer indikatorDetailId; + @Caption(value = "Tanggal Hitung") + public Date tglHitung; + public Date getBulan() { return bulan; } @@ -103,4 +106,12 @@ public class LogbookKinerjaDokterVO extends BaseTransactionVO { this.indikatorDetailId = indikatorDetailId; } + public Date getTglHitung() { + return tglHitung; + } + + public void setTglHitung(Date tglHitung) { + this.tglHitung = tglHitung; + } + } 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/TargetLayananJamKerjaDetailVO.java similarity index 95% rename from jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomDetailVO.java rename to jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananJamKerjaDetailVO.java index c97894b5..1671f3f9 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/TargetLayananJamKerjaDetailVO.java @@ -2,7 +2,7 @@ package com.jasamedika.medifirst2000.vo.custom; import com.jasamedika.medifirst2000.helper.Caption; -public class TargetLayananCustomDetailVO { +public class TargetLayananJamKerjaDetailVO { @Caption(value = "Date") String date; diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananJamKerjaVO.java similarity index 83% rename from jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomVO.java rename to jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananJamKerjaVO.java index 66d9d718..88d5c36d 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomVO.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananJamKerjaVO.java @@ -5,10 +5,9 @@ import java.util.List; import com.jasamedika.medifirst2000.base.vo.BaseTransactionVO; import com.jasamedika.medifirst2000.helper.Caption; import com.jasamedika.medifirst2000.vo.IndikatorKinerjaDetailVO; -import com.jasamedika.medifirst2000.vo.IndikatorKinerjaVO; import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO; -public class TargetLayananCustomVO extends BaseTransactionVO { +public class TargetLayananJamKerjaVO extends BaseTransactionVO { private static final long serialVersionUID = 3163629696201167352L; @@ -25,7 +24,7 @@ public class TargetLayananCustomVO extends BaseTransactionVO { public Integer kelompokKerjaId; @Caption(value = "Detail") - public List detail; + public List detail; public IndikatorKinerjaDetailVO getIndikator() { return indikator; @@ -59,11 +58,11 @@ public class TargetLayananCustomVO extends BaseTransactionVO { this.kelompokKerjaId = kelompokKerjaId; } - public List getDetail() { + public List getDetail() { return detail; } - public void setDetail(List detail) { + public void setDetail(List detail) { this.detail = detail; } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananLuarJamKerjaDetailVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananLuarJamKerjaDetailVO.java new file mode 100644 index 00000000..8922f2d5 --- /dev/null +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananLuarJamKerjaDetailVO.java @@ -0,0 +1,62 @@ +package com.jasamedika.medifirst2000.vo.custom; + +import com.jasamedika.medifirst2000.helper.Caption; + +public class TargetLayananLuarJamKerjaDetailVO { + + @Caption(value = "Date") + String date; + + @Caption(value = "Bulan") + String bulan; + + @Caption(value = "Capaian") + Double capaian; + + @Caption(value = "Target") + Double target; + + @Caption(value = "Tanggal Hitung") + String tglHitung; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public String getBulan() { + return bulan; + } + + public void setBulan(String bulan) { + this.bulan = bulan; + } + + public Double getCapaian() { + return capaian; + } + + public void setCapaian(Double capaian) { + this.capaian = capaian; + } + + public Double getTarget() { + return target; + } + + public void setTarget(Double target) { + this.target = target; + } + + public String getTglHitung() { + return tglHitung; + } + + public void setTglHitung(String tglHitung) { + this.tglHitung = tglHitung; + } + +} diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananLuarJamKerjaVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananLuarJamKerjaVO.java new file mode 100644 index 00000000..a3032d35 --- /dev/null +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananLuarJamKerjaVO.java @@ -0,0 +1,92 @@ +package com.jasamedika.medifirst2000.vo.custom; + +import java.util.List; + +import com.jasamedika.medifirst2000.base.vo.BaseTransactionVO; +import com.jasamedika.medifirst2000.helper.Caption; +import com.jasamedika.medifirst2000.vo.IndikatorKinerjaDetailVO; +import com.jasamedika.medifirst2000.vo.JabatanVO; +import com.jasamedika.medifirst2000.vo.PegawaiVO; + +public class TargetLayananLuarJamKerjaVO extends BaseTransactionVO { + + private static final long serialVersionUID = 204121701316648329L; + + @Caption(value = "Indikator Kinerja") + public IndikatorKinerjaDetailVO indikator; + + @Caption(value = "Id Indikator Kinerja") + public Integer indikatorId; + + @Caption(value = "Pegawai") + public PegawaiVO pegawai; + + @Caption(value = "Id Pegawai") + public Integer pegawaiId; + + @Caption(value = "Jabatan") + public JabatanVO jabatan; + + @Caption(value = "Id Jabatan") + public Integer jabatanId; + + @Caption(value = "Detail") + public List detail; + + public IndikatorKinerjaDetailVO getIndikator() { + return indikator; + } + + public void setIndikator(IndikatorKinerjaDetailVO indikator) { + this.indikator = indikator; + } + + public Integer getIndikatorId() { + return indikatorId; + } + + public void setIndikatorId(Integer indikatorId) { + this.indikatorId = indikatorId; + } + + public PegawaiVO getPegawai() { + return pegawai; + } + + public void setPegawai(PegawaiVO pegawai) { + this.pegawai = pegawai; + } + + public Integer getPegawaiId() { + return pegawaiId; + } + + public void setPegawaiId(Integer pegawaiId) { + this.pegawaiId = pegawaiId; + } + + public JabatanVO getJabatan() { + return jabatan; + } + + public void setJabatan(JabatanVO jabatan) { + this.jabatan = jabatan; + } + + public Integer getJabatanId() { + return jabatanId; + } + + public void setJabatanId(Integer jabatanId) { + this.jabatanId = jabatanId; + } + + public List getDetail() { + return detail; + } + + public void setDetail(List detail) { + this.detail = detail; + } + +} diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java index cdb36d9b..23a1beb3 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java @@ -46,8 +46,10 @@ public class TargetLayananGenerating extends LocaleController { try { if (CommonUtil.isNotNullOrEmpty(remunerasiService)) { LOGGER.info("Task Target Layanan : Running Generate Target Layanan"); - remunerasiService.autoSaveTargetCapaianLayananJamKerja(new SimpleDateFormat("yyyy-MM").format(new Date()), - null); + remunerasiService + .autoSaveTargetCapaianLayananJamKerja(new SimpleDateFormat("yyyy-MM").format(new Date())); + remunerasiService + .autoSaveTargetCapaianLayananLuarJamKerja(new SimpleDateFormat("yyyy-MM").format(new Date())); } else { LOGGER.warn("Task Target Layanan : Undefined service"); } 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 8d2b15e7..f6673665 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 @@ -50,7 +50,7 @@ import com.jasamedika.medifirst2000.vo.RemunerasiOperasionalVO; import com.jasamedika.medifirst2000.vo.SettingPirSdmVO; import com.jasamedika.medifirst2000.vo.SkoringTindakanMedisVO; import com.jasamedika.medifirst2000.vo.StrukHistoriVO; -import com.jasamedika.medifirst2000.vo.custom.TargetLayananCustomVO; +import com.jasamedika.medifirst2000.vo.custom.TargetLayananJamKerjaVO; @RestController @RequestMapping("/iki-remunerasi") @@ -245,11 +245,11 @@ public class IkiDanRemunerasiController extends LocaleController> getAllTargetLayanan(HttpServletRequest request, + public ResponseEntity> getAllTargetLayanan(HttpServletRequest request, @RequestParam(value = "periode", required = true) String periode, @RequestParam(value = "ksmId", required = false) Integer idKsm) throws ParseException { try { - List result = service.findAllTargetCapaianLayanan(periode, idKsm); + List result = service.findAllTargetCapaianLayanan(periode, idKsm); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage);