Update logbook kinerja service

Pembuatan service otomatis pembuatan kontrak kinerja dokter
This commit is contained in:
salmanoe 2022-09-14 00:35:56 +07:00
parent 3804590d35
commit e422673457
5 changed files with 224 additions and 39 deletions

View File

@ -49,6 +49,19 @@ public interface LogbookKinerjaDao extends PagingAndSortingRepository<LogbookKin
List<Map<String, Object>> findIndikatorByJabatan(@Param("jabatanId") Integer idJabatan,
@Param("bulan") String bulan);
@Query("select new Map(ikt.jabatanId as jabatanId,"
+ "ikm.jenisIndikator as jenisIndikatorId,ikm.id as indikatorId,ikm.namaIndikator as namaIndikator,"
+ "si.id as satuanId,si.satuanIndikator as satuanIndikator,"
+ "ikt.noRec as noRecMap,ikt.tanggalMulaiBerlaku as tglBerlaku,ikt.tanggalPembaharuanData as tglPembaharuanData) "
+ "from IndikatorKinerjaJabatan ikt " + "inner join ikt.indikatorKinerja ikm "
+ "inner join ikm.satuanIndikator si " + "where ikt.statusEnabled is true "
+ "and ikm.statusEnabled is true " + "and ikm.statusVerifikasi is true " + "and si.statusEnabled is true "
+ "and ikt.jabatanId in (:listIdJabatan) " + "and to_char(ikt.tanggalMulaiBerlaku,'yyyy-MM') <= :bulan "
+ "order by ikm.jenisIndikator, ikm.namaIndikator, "
+ "ikt.tanggalMulaiBerlaku desc, ikt.tanggalPembaharuanData desc")
List<Map<String, Object>> findIndikatorByJabatan(@Param("listIdJabatan") List<Integer> listIdJabatan,
@Param("bulan") String bulan);
@Query("select new Map(lkh.noRec as noRec,ikm.jenisIndikator as jenisIndikatorId,"
+ "ikm.id as indikatorId,ikm.namaIndikator as namaIndikator,"
+ "si.id as satuanId,si.satuanIndikator as satuanIndikator," + "lkh.target as target,lkh.bobot as bobot,"

View File

@ -537,8 +537,8 @@ public interface MapPegawaiJabatanToUnitKerjaDao extends CrudRepository<MapPegaw
Optional<Double> findByPegawaiAndJabatan(@Param("pegawaiId") Integer idPegawai,
@Param("jabatanId") Integer idJabatan);
@Query("select distinct mj.pegawaiId " + "from MapPegawaiJabatanToUnitKerja mj "
+ "where mj.jabatanId in (:listIdJabatan)")
List<Integer> listIdPegawaiByAllJabatan(@Param("listIdJabatan") List<Integer> listIdJabatan);
@Query("select distinct new Map(mj.pegawaiId as pegawaiId,mj.jabatanId as jabatanId) "
+ "from MapPegawaiJabatanToUnitKerja mj " + "where mj.jabatanId in (:listIdJabatan)")
List<Map<String, Object>> findAllPegawaiByJabatan(@Param("listIdJabatan") List<Integer> listIdJabatan);
}

View File

@ -28,4 +28,10 @@ public interface TargetSkorDokterDetailDao extends PagingAndSortingRepository<Ta
public List<Double> findTargetByPegawai(@Param("pegawaiId") Integer idPegawai, @Param("bulan") String bulan,
@Param("tahun") String tahun) throws JpaSystemException;
@Query("select new Map(tsd.pegawaiId as pegawaiId,tsd.skor as skor) " + "from TargetSkorDokterDetail tsd " + "inner join tsd.targetSkor ts "
+ "where tsd.pegawaiId in (:listIdPegawai) " + "and to_char(ts.tmt,'yyyy-MM') <= :bulan "
+ "and to_char(ts.tmt,'yyyy') = :tahun " + "order by ts.tmt desc")
public List<Map<String, Object>> findTargetByPegawai(@Param("listIdPegawai") List<Integer> listIdPegawai,
@Param("bulan") String bulan, @Param("tahun") String tahun) throws JpaSystemException;
}

View File

@ -48,6 +48,7 @@ import com.jasamedika.medifirst2000.dao.PelayananNakesDao;
import com.jasamedika.medifirst2000.dao.PelayananPasienNakesDao;
import com.jasamedika.medifirst2000.dao.PelayananPasienPerawatDao;
import com.jasamedika.medifirst2000.dao.PelayananPasienPetugasDao;
import com.jasamedika.medifirst2000.dao.SettingDataFixedDao;
import com.jasamedika.medifirst2000.dao.ShiftKerjaDao;
import com.jasamedika.medifirst2000.dao.SkoringTindakanMedisDao;
import com.jasamedika.medifirst2000.dao.TabelAcuanIndeksIKIDao;
@ -169,6 +170,9 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
@Autowired
private IndikatorKinerjaJabatanDao indikatorKinerjaJabatanDao;
@Autowired
private SettingDataFixedDao settingDataFixedDao;
@Override
public LogbookKinerjaVO add(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException {
Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai());
@ -3078,48 +3082,191 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
DateFormat yf = new SimpleDateFormat("yyyy");
DateFormat mf = new SimpleDateFormat("yyyy-MM");
Integer targetHariKerja = hitungTargetHariKerja(bulan);
Double targetJamKerja = hitungTargetMenitKerja(bulan);
List<Integer> listIdPegawai = new ArrayList<>();
List<Integer> listIdJabatan = new ArrayList<>();
List<String> listJabatanIndikator = new ArrayList<>();
List<Map<String, Object>> listMapFilter = new ArrayList<>();
/*
* Get All Mapping Indikator Dokter
*/
List<Map<String, Object>> listIndikatorDokter = indikatorKinerjaJabatanDao
.findAllByIndikator(Master.IndikatorKinerja.PELAYANAN_MEDIS_JAM_KERJA);
List<Integer> listIdIndikator = new ArrayList<>();
for (Map<String, Object> map : listIndikatorDokter) {
listIdIndikator.add(Integer.parseInt(map.get("jabatanId").toString()));
if (!listIdJabatan.contains(Integer.parseInt(map.get("jabatanId").toString()))) {
listIdJabatan.add(Integer.parseInt(map.get("jabatanId").toString()));
}
}
// Double targetSkorJamKerja = 0.0;
// List<Double> target = targetSkorDokterDetailDao.findTargetByPegawai(idPegawai, mf.format(bulan),
// yf.format(bulan));
// if (CommonUtil.isNotNullOrEmpty(target)) {
// targetSkorJamKerja = Math.floor(target.get(0));
// }
List<Map<String, Object>> listMapIndikator = logbookKinerjaDao.findIndikatorByJabatan(listIdJabatan,
mf.format(bulan));
for (Map<String, Object> map : listMapIndikator) {
if (!listJabatanIndikator
.contains(map.get("jabatanId").toString() + "" + map.get("indikatorId").toString())) {
listMapFilter.add(map);
}
}
// List<IndikatorKinerjaDetail> ikds = indikatorKinerjaDetailDao
// .findByIndikator(Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS);
// List<LogbookKinerjaDokter> lkds = new ArrayList<>();
// for (IndikatorKinerjaDetail ikd : ikds) {
// Jabatan jb = jabatanDao.findOne(idJabatan);
// Pegawai pg = pegawaiDao.findOne(idPegawai);
//
// LogbookKinerjaDokter logbookKinerjaLama = logbookKinerjaDokterDao.findOne(mf.format(bulan), idPegawai,
// idJabatan, ikd.getId());
// if (CommonUtil.isNullOrEmpty(logbookKinerjaLama)) {
// LogbookKinerjaDokter logbookKinerjaBaru = new LogbookKinerjaDokter();
// logbookKinerjaBaru.setBulan(bulan);
// logbookKinerjaBaru.setDetailTarget(70.0);
// logbookKinerjaBaru.setKdProfile((short) 0);
// logbookKinerjaBaru.setStatusEnabled(true);
// logbookKinerjaBaru.setTglHitung(new Date());
// logbookKinerjaBaru.setIndikatorDetail(ikd);
// logbookKinerjaBaru.setJabatan(jb);
// logbookKinerjaBaru.setPegawai(pg);
// lkds.add(logbookKinerjaBaru);
// }
// }
// if (CommonUtil.isNotNullOrEmpty(lkds)) {
// logbookKinerjaDokterDao.save(lkds);
// }
/*
* Get All Dokter Mapped Indikator
*/
List<Map<String, Object>> listKontrak = mapPegawaiJabatanToUnitKerjaDao.findAllPegawaiByJabatan(listIdJabatan);
for (Map<String, Object> map : listKontrak) {
if (!listIdPegawai.contains(Integer.parseInt(map.get("pegawaiId").toString()))) {
listIdPegawai.add(Integer.parseInt(map.get("pegawaiId").toString()));
}
}
/*
* Get Target Jumlah Pemenuhan Medis
*/
List<Map<String, Object>> listTargetSkor = targetSkorDokterDetailDao.findTargetByPegawai(listIdPegawai,
mf.format(bulan), yf.format(bulan));
/*
* Get Bobot Jumlah Pemenuhan Medis
*/
Double bobotSkor = Double.parseDouble(settingDataFixedDao.getSettingDataFixed("bobotSkorDokter"));
/*
* Get Target Pemenuhan Hari Kerja
*/
Integer targetHariKerja = hitungTargetHariKerja(bulan);
/*
* Get Bobot Pemenuhan Hari Kerja
*/
Double bobotHariKerja = Double.parseDouble(settingDataFixedDao.getSettingDataFixed("bobotHariKerja"));
/*
* Get Target Pemenuhan Jam Kerja
*/
Double targetJamKerja = hitungTargetMenitKerja(bulan);
/*
* Get Bobot Pemenuhan Jam Kerja
*/
Double bobotJamKerja = Double.parseDouble(settingDataFixedDao.getSettingDataFixed("bobotJamKerja"));
/*
* Get Target Kepatuhan Pelayanan Medis
*/
Double targetKualitasPelayanan = Double
.parseDouble(settingDataFixedDao.getSettingDataFixed("targetKualitasDokter"));
/*
* Get Bobot Kepatuhan Pelayanan Medis
*/
Double bobotKualitasPelayanan = Double
.parseDouble(settingDataFixedDao.getSettingDataFixed("bobotKualitasDokter"));
/*
* Get Detail Target Kepatuhan Pelayanan Medis
*/
List<IndikatorKinerjaDetail> ikds = indikatorKinerjaDetailDao
.findByIndikator(Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS);
/*
* Get Target Kepatuhan Waktu Visite
*/
Double targetPatuhWaktuVisite = Double
.parseDouble(settingDataFixedDao.getSettingDataFixed("targetPatuhWaktuVisite"));
/*
* Get Target Ketepatan Kehadiran
*/
Double targetPerilakuDokter = Double
.parseDouble(settingDataFixedDao.getSettingDataFixed("targetPerilakuDokter"));
/*
* Get Bobot Ketepatan Kehadiran
*/
Double bobotPerilakuDokter = Double.parseDouble(settingDataFixedDao.getSettingDataFixed("bobotPerilakuDokter"));
/*
* Merge for virtual object logbook kinerja
*/
for (Map<String, Object> map : listMapFilter) {
Integer idJabatan1 = Integer.parseInt(map.get("jabatanId").toString());
for (Map<String, Object> kontrak : listKontrak) {
Integer idJabatan2 = Integer.parseInt(kontrak.get("jabatanId").toString());
if (idJabatan1.equals(idJabatan2)) {
map.putAll(kontrak);
}
}
}
/*
* Save logbook kinerja dokter
*/
for (Map<String, Object> map : listMapFilter) {
if (CommonUtil.isNotNullOrEmpty(map.get("pegawaiId"))
&& CommonUtil.isNotNullOrEmpty(map.get("jabatanId"))) {
LogbookKinerjaVO vo = new LogbookKinerjaVO();
vo.setBulan(bulan);
Integer idPegawai = Integer.parseInt(map.get("pegawaiId").toString());
PegawaiVO pegawaiVO = new PegawaiVO();
pegawaiVO.setId(idPegawai);
vo.setPegawai(pegawaiVO);
Integer idJabatan = Integer.parseInt(map.get("jabatanId").toString());
JabatanVO jabatanVO = new JabatanVO();
jabatanVO.setId(idJabatan);
vo.setJabatan(jabatanVO);
vo.setKdProfile((short) 0);
vo.setStatusEnabled(true);
vo.setStatusVerifikasi(true);
IndikatorKinerjaVO logbookKinerjaVO = new IndikatorKinerjaVO();
List<LogbookKinerjaDokter> lkds = new ArrayList<>();
if (map.get("indikatorId").equals(Master.IndikatorKinerja.PELAYANAN_MEDIS_JAM_KERJA)) {
logbookKinerjaVO.setId(Integer.parseInt(map.get("indikatorId").toString()));
vo.setIndikatorKinerja(logbookKinerjaVO);
vo.setBobot(bobotSkor);
for (Map<String, Object> targetSkor : listTargetSkor) {
if (idPegawai.equals(targetSkor.get("pegawaiId"))) {
double target = Double.parseDouble(targetSkor.get("skor").toString());
vo.setTarget(Math.floor(target));
break;
}
}
} else if (map.get("indikatorId").equals(Master.IndikatorKinerja.PEMENUHAN_HARI_KERJA)) {
logbookKinerjaVO.setId(Integer.parseInt(map.get("indikatorId").toString()));
vo.setIndikatorKinerja(logbookKinerjaVO);
vo.setBobot(bobotHariKerja);
vo.setTarget(targetHariKerja.doubleValue());
vo.setCapaian(targetHariKerja.doubleValue());
} else if (map.get("indikatorId").equals(Master.IndikatorKinerja.PEMENUHAN_JAM_KERJA)) {
logbookKinerjaVO.setId(Integer.parseInt(map.get("indikatorId").toString()));
vo.setIndikatorKinerja(logbookKinerjaVO);
vo.setBobot(bobotJamKerja);
vo.setTarget(targetJamKerja);
vo.setCapaian(targetJamKerja);
} else if (map.get("indikatorId").equals(Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS)) {
logbookKinerjaVO.setId(Integer.parseInt(map.get("indikatorId").toString()));
vo.setIndikatorKinerja(logbookKinerjaVO);
vo.setBobot(bobotKualitasPelayanan);
vo.setTarget(targetKualitasPelayanan);
vo.setCapaian(targetKualitasPelayanan);
/*
* Set Detail Target Kepatuhan Pelayanan Medis
*/
for (IndikatorKinerjaDetail ikd : ikds) {
LogbookKinerjaDokter logbookKinerjaBaru = new LogbookKinerjaDokter();
logbookKinerjaBaru.setBulan(bulan);
logbookKinerjaBaru.setDetailTarget(targetPatuhWaktuVisite);
logbookKinerjaBaru.setKdProfile((short) 0);
logbookKinerjaBaru.setStatusEnabled(true);
logbookKinerjaBaru.setTglHitung(new Date());
logbookKinerjaBaru.setIndikatorDetail(ikd);
Jabatan jb = new Jabatan();
jb.setId(Integer.parseInt(map.get("jabatanId").toString()));
logbookKinerjaBaru.setJabatan(jb);
Pegawai pg = new Pegawai();
pg.setId(Integer.parseInt(map.get("pegawaiId").toString()));
logbookKinerjaBaru.setPegawai(pg);
lkds.add(logbookKinerjaBaru);
}
} else if (map.get("indikatorId").equals(Master.IndikatorKinerja.KETEPATAN_KEHADIRAN)) {
logbookKinerjaVO.setId(Integer.parseInt(map.get("indikatorId").toString()));
vo.setIndikatorKinerja(logbookKinerjaVO);
vo.setBobot(bobotPerilakuDokter);
vo.setTarget(targetPerilakuDokter);
vo.setCapaian(targetPerilakuDokter);
}
if (CommonUtil.isNotNullOrEmpty(lkds) && CommonUtil.isNotNullOrEmpty(vo.getTarget())) {
logbookKinerjaDokterDao.save(lkds);
this.add(vo);
} else if (CommonUtil.isNotNullOrEmpty(vo.getTarget())) {
this.add(vo);
}
}
}
}
@Override

View File

@ -1,6 +1,7 @@
package com.jasamedika.medifirst2000.controller;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -813,6 +814,24 @@ public class IkiDanRemunerasiController extends LocaleController<IkiDanRemuneras
}
}
@RequestMapping(value = "/set-kontrak-kinerja", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Boolean> setKontrakKinerja(HttpServletRequest request, @RequestBody Long bulan) {
try {
logbookKinerjaService.autoVerifKontrakJamKerjaDokter(new Date(bulan));
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,
getMessage(MessageResource.LABEL_SUCCESS, request));
return RestUtil.getJsonResponse(true, HttpStatus.CREATED, mapHeaderMessage);
} catch (ServiceVOException sve) {
LOGGER.error("Got exception {} when add/update working record", sve.getMessage());
addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, sve.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage);
} catch (JpaSystemException jse) {
LOGGER.error("Got exception {} when add/update working record", jse.getMessage());
addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage);
}
}
@RequestMapping(value = "/get-kontrak-kinerja", method = RequestMethod.GET)
public ResponseEntity<Map<String, Object>> getKontrakKinerja(HttpServletRequest request,
@RequestParam(value = "pegawaiId", required = true) Integer idPegawai,