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 cc11e2c1..80fe03a4 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 @@ -98,30 +98,66 @@ public interface IkiDanRemunerasiDao extends PagingAndSortingRepository :karcisId " + + "order by su.name, pr.id") + public List> getDataLayananJamKerja(@Param("tglAwal") Date tglAwal, + @Param("tglAkhir") Date tglAkhir, @Param("listNonjadwalId") List listIdNonjadwal, + @Param("jenisPegawaiId") Integer idJenisPegawai, @Param("listKsmId") List listIdKsm, + @Param("listNontindakanId") List listIdNontindakan, @Param("karcisId") Integer idKarcis); + + // Target_pelayanan_luar_jam_kerja + @Query("select distinct new Map(ppp.ObjectJenisPetugasPeId as jenisPetugasId," + + "pp.noRec as noRec,pp.tglPelayanan as tglPelayanan,pp.hargaDiscount as hargaDiskon,pp.jumlah as jumlahTindakan," + + "pr.id as idTindakan,pr.namaProduk as namaTindakan," + + "ru.departemenId as idDepartemen,ru.id as idRuangan," + "pd.isDiskonPegawai as statusDiskon) " + + "from PelayananPasienPetugas ppp, MapRuanganToProduk mrtp, PegawaiJadwalKerja pjk " + + "left join ppp.pelayananPasien pp " + "left join ppp.kdpegawai pg " + "left join pp.produk pr " + + "left join pp.pasienDaftar apd " + "left join pr.detailJenisProduk djp " + + "left join apd.pasienDaftar pd " + "left join apd.ruangan ru " + "left join pjk.shift sk " + + "left join pjk.tanggal kl " + "where mrtp.produkId = pr.id " + "and mrtp.ruanganId = apd.ruanganId " + + "and ppp.ObjectPegawaiId = mpju.pegawaiId " + "and mpju.pegawaiId = pg.id " + + "and pjk.pegawaiId = ppp.ObjectPegawaiId " + "and pjk.pegawaiId = mpju.pegawaiId " + + "and pjk.pegawaiId = pg.id " + "and mpju.unitKerjaPegawaiId in (:listKsmId) " + + "and mrtp.statusEnabled is true " + "and mpju.statusEnabled is true " + "and pg.statusEnabled is true " + + "and su.statusEnabled is true " + "and pd.statusEnabled is true " + "and sk.statusEnabled is true " + + "and pp.tglPelayanan between :tglAwal and :tglAkhir " + + "and cast(pp.tglPelayanan as date) = cast(kl.tanggal as date) " + + "and (((to_char(pp.tglPelayanan,'dy') in ('mon','tue','wed','thu') " + + "and (to_char(pp.tglPelayanan,'HH24:MM:ss') between '15:30:01' and '23:59:59' " + + "or to_char(pp.tglPelayanan,'HH24:MM:ss') between '00:00:00' and '06:59:59') " + + "or (to_char(pp.tglPelayanan,'dy') in ('fri') " + + "and (to_char(pp.tglPelayanan,'HH24:MM:ss') between '16:00:00' and '23:59:59' " + + "or to_char(pp.tglPelayanan,'HH24:MM:ss') between '00:00:00' and '06:59:59'))) and sk.id not in (:listNonjadwalId)) " + + "or (to_char(pp.tglPelayanan,'dy') in ('mon','tue','wed','thu','fri') and sk.id in (:listNonjadwalId)) " + + "or (to_char(pp.tglPelayanan,'dy') in ('sat','sun') and sk.id in (:listNonjadwalId))) " + "and pg.jenisPegawaiId = :jenisPegawaiId " + "and djp.jenisProdukId not in (:listNontindakanId) " + "and pr.id <> :karcisId " + "order by su.name, pr.id") - public List> getDataLayanan(@Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir, - @Param("jenisPegawaiId") Integer idJenisPegawai, @Param("listKsmId") List listIdKsm, + public List> getDataLayananLuarJamKerja(@Param("tglAwal") Date tglAwal, + @Param("tglAkhir") Date tglAkhir, @Param("listNonjadwalId") List listIdNonjadwal, + @Param("jenisPegawaiId") Integer idJenisPegawai, @Param("listNontindakanId") List listIdNontindakan, @Param("karcisId") Integer idKarcis); // Logbook_kinerja_dokter @@ -129,21 +165,26 @@ public interface IkiDanRemunerasiDao extends PagingAndSortingRepository :karcisId " + "and pg.id = :pegawaiId " + "order by pr.namaProduk, pp.tglPelayanan") + + "and sk.id not in (:listNonjadwalId)) " + "and pg.jenisPegawaiId = :jenisPegawaiId " + + "and djp.jenisProdukId not in (:listNontindakanId) " + "and pr.id <> :karcisId " + + "and pg.id = :pegawaiId " + "order by pr.namaProduk, pp.tglPelayanan") public List> getDataLogbookDokter(@Param("bulan") String bulan, - @Param("jenisPegawaiId") Integer idJenisPegawai, @Param("pegawaiId") Integer idPegawai, - @Param("listNontindakanId") List listIdNontindakan, @Param("karcisId") Integer idKarcis); + @Param("listNonjadwalId") List listIdNonjadwal, @Param("jenisPegawaiId") Integer idJenisPegawai, + @Param("pegawaiId") Integer idPegawai, @Param("listNontindakanId") List listIdNontindakan, + @Param("karcisId") Integer idKarcis); @Query("select distinct new Map(jpp.id as jenisPetugasId, jpp.jenisPetugasPe as jenisPetugas," + "pr.id as produkId,pr.namaProduk as namaProduk," + "pp.noRec as noRec," @@ -153,21 +194,25 @@ public interface IkiDanRemunerasiDao extends PagingAndSortingRepository :karcisId " + "and pg.id = :pegawaiId " + "order by pr.namaProduk, pp.tglPelayanan") + + "and sk.id not in (:listNonjadwalId)) " + "and pg.jenisPegawaiId = :jenisPegawaiId " + + "and djp.jenisProdukId not in (:listNontindakanId) " + "and pr.id <> :karcisId " + + "and pg.id = :pegawaiId " + "order by pr.namaProduk, pp.tglPelayanan") public List> findDetailPasienLogbook(@Param("produkId") Integer idProduk, - @Param("tglPelayanan") String tglPelayanan, @Param("jenisPegawaiId") Integer idJenisPegawai, - @Param("pegawaiId") Integer idPegawai, @Param("listNontindakanId") List listIdNontindakan, - @Param("karcisId") Integer idKarcis); + @Param("tglPelayanan") String tglPelayanan, @Param("listNonjadwalId") List listIdNonjadwal, + @Param("jenisPegawaiId") Integer idJenisPegawai, @Param("pegawaiId") Integer idPegawai, + @Param("listNontindakanId") List listIdNontindakan, @Param("karcisId") Integer idKarcis); } \ No newline at end of file diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/ShiftKerjaDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/ShiftKerjaDao.java index 9e0320eb..7b2a061e 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/ShiftKerjaDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/ShiftKerjaDao.java @@ -18,31 +18,18 @@ import com.jasamedika.medifirst2000.entities.ShiftKerja; @Repository("ShiftKerjaDao") public interface ShiftKerjaDao extends PagingAndSortingRepository { - @Query("select new Map(model.factorRate as factorRate, " - + "model.flagKetidakhadiran as flagKetidakhadiran, " - + "model.id as id, " - + "model.jadwalPraktekId as jadwalPraktekId, " - + "model.jamBreakAkhir as jamBreakAkhir, " - + "model.jamBreakAwal as jamBreakAwal, " - + "model.jamMasuk as jamMasuk, " - + "model.jamPraktekId as jamPraktekId, " - + "model.jamPulang as jamPulang, " - + "model.kdProfile as kdProfile, " - + "model.kdShift as kdShift, " - + "model.kelompokShiftId as kelompokShiftId, " - + "model.kodeExternal as kodeExternal, " - + "model.komponenIndexId as komponenIndexId, " - + "model.namaExternal as namaExternal, " - + "model.namaShift as namaShift, " - + "model.noRec as noRec, " - + "model.operatorFactorRate as operatorFactorRate, " - + "model.qShift as qShift, " - + "model.reportDisplay as reportDisplay, " - + "model.statusEnabled as statusEnabled, " - + "model.waktuIstirahat as waktuIstirahat) " - + "from ShiftKerja model " - + "where model.kelompokShift.id=:id " - + "and model.statusEnabled is true") + @Query("select new Map(model.factorRate as factorRate, " + "model.flagKetidakhadiran as flagKetidakhadiran, " + + "model.id as id, " + "model.jadwalPraktekId as jadwalPraktekId, " + + "model.jamBreakAkhir as jamBreakAkhir, " + "model.jamBreakAwal as jamBreakAwal, " + + "model.jamMasuk as jamMasuk, " + "model.jamPraktekId as jamPraktekId, " + "model.jamPulang as jamPulang, " + + "model.kdProfile as kdProfile, " + "model.kdShift as kdShift, " + + "model.kelompokShiftId as kelompokShiftId, " + "model.kodeExternal as kodeExternal, " + + "model.komponenIndexId as komponenIndexId, " + "model.namaExternal as namaExternal, " + + "model.namaShift as namaShift, " + "model.noRec as noRec, " + + "model.operatorFactorRate as operatorFactorRate, " + "model.qShift as qShift, " + + "model.reportDisplay as reportDisplay, " + "model.statusEnabled as statusEnabled, " + + "model.waktuIstirahat as waktuIstirahat) " + "from ShiftKerja model " + + "where model.kelompokShift.id=:id " + "and model.statusEnabled is true") List> findByKelompokShiftId(@Param("id") Integer idShift); @Query(" select new map (komponenIndex.komponenIndex as namaKomponen, " + " komponenIndex.id as idKomponenIndex) " @@ -57,14 +44,14 @@ public interface ShiftKerjaDao extends PagingAndSortingRepository> getListShiftKerja(); @Query("select new Map(model.id as id,model.kodeExternal as kodeExternal,model.kelompokShiftId as kelompokShiftId,model.flagKetidakhadiran as flagKetidakhadiran) " - + "from ShiftKerja model " + "where lower(model.kodeExternal) in (:listKdShift) " + "and model.statusEnabled is true " - + "and model.flagKetidakhadiran is false") + + "from ShiftKerja model " + "where lower(model.kodeExternal) in (:listKdShift) " + + "and model.statusEnabled is true " + "and model.flagKetidakhadiran is false") List> getListShiftKerja(@Param("listKdShift") List listKdShift); @Query("select distinct new Map(s.kodeExternal as kodeExternal, " + "s.namaShift as namaShift, " @@ -72,4 +59,7 @@ public interface ShiftKerjaDao extends PagingAndSortingRepository> getListKetShift(); + @Query("select sk.id from ShiftKerja sk where sk.statusEnabled is true and sk.jamMasuk = '' and sk.jamPulang = ''") + public List findListNonjadwal(); + } 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 8ce4c0d8..6c8a1fc6 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 @@ -31,7 +31,9 @@ public interface IkiDanRemunerasiService { public Map savePirDanIku(List vo); - public void autoSaveTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException; + public void autoSaveTargetCapaianLayananJamKerja(String strPeriode, Integer idKsm) throws ParseException; + + public void autoSaveTargetCapaianLayananLuarJamKerja(String strPeriode) throws ParseException; public void saveTargetCapaianLayanan(TargetLayananCustomVO vo, Date periodeHitung) 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 f719b24c..ef7ac886 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 @@ -27,6 +27,7 @@ import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao; import com.jasamedika.medifirst2000.dao.MonitoringAbsenDao; import com.jasamedika.medifirst2000.dao.RunningNumberDao; import com.jasamedika.medifirst2000.dao.SettingPirSdmDao; +import com.jasamedika.medifirst2000.dao.ShiftKerjaDao; import com.jasamedika.medifirst2000.dao.SkoringTindakanMedisDao; import com.jasamedika.medifirst2000.dao.StrukHistoriDao; import com.jasamedika.medifirst2000.dao.StrukPelayananDao; @@ -133,6 +134,9 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik @Autowired private LogbookKinerjaDokterDao logbookKinerjaDokterDao; + @Autowired + private ShiftKerjaDao shiftKerjaDao; + @Override public Map loadData() { Map result = new HashMap<>(); @@ -464,7 +468,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } @Override - public void autoSaveTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException { + public void autoSaveTargetCapaianLayananJamKerja(String strPeriode, Integer idKsm) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat sdfINA = new SimpleDateFormat("MMMM yyyy", new Locale("in", "ID")); @@ -492,14 +496,16 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik List listIndikatorPelayanan = Arrays.asList(Master.IndikatorKinerjaDetail.INDIKATOR_PELAYANAN_MEDIS); + List listIdNonjadwal = shiftKerjaDao.findListNonjadwal(); + List> dataLayananRaw = new ArrayList<>(); if (CommonUtil.isNotNullOrEmpty(idKsm)) { - dataLayananRaw = ikiDanRemunerasiDao.getDataLayanan(calTglAwal.getTime(), bulan.getTime(), - Master.JenisPegawai.DOKTER, Arrays.asList(idKsm), Arrays.asList(Master.JenisProduk.NONTINDAKAN), - Master.Produk.KARCIS); + dataLayananRaw = ikiDanRemunerasiDao.getDataLayananJamKerja(calTglAwal.getTime(), bulan.getTime(), + listIdNonjadwal, Master.JenisPegawai.DOKTER, Arrays.asList(idKsm), + Arrays.asList(Master.JenisProduk.NONTINDAKAN), Master.Produk.KARCIS); } else { - dataLayananRaw = ikiDanRemunerasiDao.getDataLayanan(calTglAwal.getTime(), bulan.getTime(), - Master.JenisPegawai.DOKTER, Arrays.asList(Master.UnitKerja.KSM), + dataLayananRaw = ikiDanRemunerasiDao.getDataLayananJamKerja(calTglAwal.getTime(), bulan.getTime(), + listIdNonjadwal, Master.JenisPegawai.DOKTER, Arrays.asList(Master.UnitKerja.KSM), Arrays.asList(Master.JenisProduk.NONTINDAKAN), Master.Produk.KARCIS); } @@ -821,7 +827,361 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } } } + } + @Override + public void autoSaveTargetCapaianLayananLuarJamKerja(String strPeriode) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + SimpleDateFormat sdfINA = new SimpleDateFormat("MMMM yyyy", new Locale("in", "ID")); + + 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)); + + List listRuangEks = splitDataSettingDatafixed("IdRuanganEksekutif"); + List listKonsulTapiVisit = splitDataSettingDatafixed("konsulTapiVisit"); + + List listIndikatorPelayanan = Arrays.asList(Master.IndikatorKinerjaDetail.INDIKATOR_PELAYANAN_MEDIS); + + List listIdNonjadwal = shiftKerjaDao.findListNonjadwal(); + + List> dataLayananRaw = ikiDanRemunerasiDao.getDataLayananLuarJamKerja(calTglAwal.getTime(), + bulan.getTime(), listIdNonjadwal, Master.JenisPegawai.DOKTER, + 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_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> 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)); + } + } + } } @Override @@ -984,4 +1344,5 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik return result; } + } 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 2b498aad..9b949b7c 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 @@ -29,6 +29,7 @@ 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.dao.ShiftKerjaDao; import com.jasamedika.medifirst2000.dao.SkoringTindakanMedisDao; import com.jasamedika.medifirst2000.dao.TabelAcuanIndeksIKIDao; import com.jasamedika.medifirst2000.entities.IndikatorKinerja; @@ -93,6 +94,9 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb @Autowired private TabelAcuanIndeksIKIDao tabelAcuanIndeksIKIDao; + @Autowired + private ShiftKerjaDao shiftKerjaDao; + @Override public LogbookKinerjaVO add(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException { Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai()); @@ -587,8 +591,10 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb List listRuangEks = splitDataSettingDatafixed("IdRuanganEksekutif"); List listKonsulTapiVisit = splitDataSettingDatafixed("konsulTapiVisit"); + List listIdNonjadwal = shiftKerjaDao.findListNonjadwal(); + List> dataLayanan = ikiDanRemunerasiDao.getDataLogbookDokter(mf.format(new Date(bulan)), - Master.JenisPegawai.DOKTER, idPegawai, Arrays.asList(Master.JenisProduk.NONTINDAKAN), + listIdNonjadwal, Master.JenisPegawai.DOKTER, idPegawai, Arrays.asList(Master.JenisProduk.NONTINDAKAN), Master.Produk.KARCIS); List> dataSkor = skoringTindakanMedisDao @@ -774,8 +780,10 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb List listRuangEks = splitDataSettingDatafixed("IdRuanganEksekutif"); List listKonsulTapiVisit = splitDataSettingDatafixed("konsulTapiVisit"); + List listIdNonjadwal = shiftKerjaDao.findListNonjadwal(); + List> dataLayanan = ikiDanRemunerasiDao.findDetailPasienLogbook(idProduk, tglPelayanan, - Master.JenisPegawai.DOKTER, idPegawai, Arrays.asList(Master.JenisProduk.NONTINDAKAN), + listIdNonjadwal, Master.JenisPegawai.DOKTER, idPegawai, Arrays.asList(Master.JenisProduk.NONTINDAKAN), Master.Produk.KARCIS); for (Map mapLayanan : dataLayanan) { 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 8d3294c6..cdb36d9b 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,7 +46,7 @@ public class TargetLayananGenerating extends LocaleController { try { if (CommonUtil.isNotNullOrEmpty(remunerasiService)) { LOGGER.info("Task Target Layanan : Running Generate Target Layanan"); - remunerasiService.autoSaveTargetCapaianLayanan(new SimpleDateFormat("yyyy-MM").format(new Date()), + remunerasiService.autoSaveTargetCapaianLayananJamKerja(new SimpleDateFormat("yyyy-MM").format(new Date()), null); } else { LOGGER.warn("Task Target Layanan : Undefined service");