- penghapusan konstanta integrasi BIOS G2
- pembuatan service util hitung tanggal awal bulan dan akhir bulan - penambahan kondisi query untuk mendapatkan list dokter ksm yang mendapatkan remun - pembuatan service hitung capaian visite dokter per individu per bulan - penambahan perhitungan capaian visite dokter real time untuk tampilan logbook kinerja dokter
This commit is contained in:
parent
39a7c5c7dd
commit
1d20232143
@ -26,19 +26,6 @@ public class Master {
|
||||
"HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED", "HTTP_X_CLUSTER_CLIENT_IP", "HTTP_CLIENT_IP",
|
||||
"HTTP_FORWARDED_FOR", "HTTP_FORWARDED", "HTTP_VIA", "REMOTE_ADDR" };
|
||||
|
||||
public static final class BIOS {
|
||||
public static final Integer KODE_JUMLAH_PASIEN = 5;
|
||||
public static final Integer KODE_INDIKATOR_PELAYANAN = 6;
|
||||
public static final Integer KODE_LAYANAN_KESEHATAN = 1;
|
||||
public static final Integer KODE_PENERIMAAN = 2;
|
||||
public static final Integer KODE_PENGELUARAN = 3;
|
||||
public static final Integer KODE_SALDO = 4;
|
||||
|
||||
public static final String[] INDIKATOR_PELAYANAN = { "20008", "20009", "20010", "20011", "20012" };
|
||||
public static final String[] JUMLAH_PASIEN = { "20001", "20002", "20003", "20004", "20005", "20006", "20007" };
|
||||
public static final String[] LAYANAN_KESEHATAN = { "01", "02", "03", "04", "05" };
|
||||
}
|
||||
|
||||
public static final class CutiBersama {
|
||||
public static final Integer HK_02_03_XXI_2_698_2019_5 = 24;
|
||||
}
|
||||
@ -92,6 +79,10 @@ public class Master {
|
||||
public static final Integer PELAYANAN_NON_PASIEN_NAKES = 673;
|
||||
}
|
||||
|
||||
public static final class IndikatorKinerjaDetail {
|
||||
public static final Integer KEPATUHAN_WAKTU_VISITE = 17;
|
||||
}
|
||||
|
||||
public static final class IndikatorKinerjaJamKerja {
|
||||
public static final Integer KONSUL_EKS = 1;
|
||||
public static final Integer KONSUL_GADAR = 2;
|
||||
|
||||
@ -498,6 +498,8 @@ public interface MapPegawaiJabatanToUnitKerjaDao extends CrudRepository<MapPegaw
|
||||
+ "where mj.statusEnabled is true " + "and pg.statusEnabled is true " + "and pg.jenisPegawaiId = 1 "
|
||||
+ "and jb.levelJabatan = 5 ";
|
||||
|
||||
String remun = "and mj.unitKerjaPegawaiId in (:ksmListId) and pg.kategoryPegawaiId in (1,10,14) ";
|
||||
|
||||
String ksm = "and mj.unitKerjaPegawaiId = :ksmId ";
|
||||
|
||||
String kk = "and mj.subUnitKerjaPegawaiId = :kkId ";
|
||||
@ -522,4 +524,11 @@ public interface MapPegawaiJabatanToUnitKerjaDao extends CrudRepository<MapPegaw
|
||||
@Query(strDokter + dr + sortDr)
|
||||
List<Map<String, Object>> findDokterById(@Param("drId") Integer idDr);
|
||||
|
||||
@Query(strDokter + remun + sortDr)
|
||||
List<Map<String, Object>> findDokterByRemun(@Param("ksmListId") List<Integer> ksmListId);
|
||||
|
||||
@Query(strDokter + remun + dr + sortDr)
|
||||
List<Map<String, Object>> findDokterByRemun(@Param("ksmListId") List<Integer> ksmListId,
|
||||
@Param("drId") Integer idPegawai);
|
||||
|
||||
}
|
||||
|
||||
@ -15,9 +15,11 @@ import com.jasamedika.medifirst2000.vo.CatatanPerkembanganPasienTerintegrasiVO;
|
||||
public interface CatatanPerkembanganPasienTerintegrasiService
|
||||
extends BaseVoService<CatatanPerkembanganPasienTerintegrasi, CatatanPerkembanganPasienTerintegrasiVO, String> {
|
||||
|
||||
List<Map<String, Object>> findDokter(Integer idKsm, Integer idKk, Integer idDr) throws JpaSystemException;
|
||||
|
||||
List<Map<String, Object>> findPresensiVisiteDokter(Integer idKsm, Integer idKk, Integer idDr, Long startDate,
|
||||
Long endDate) throws JpaSystemException;
|
||||
|
||||
List<Map<String, Object>> findDokter(Integer idKsm, Integer idKk, Integer idDr) throws JpaSystemException;
|
||||
Map<String, Object> findPresensiVisiteDokter(Integer idPegawai, Long bulan) throws JpaSystemException;
|
||||
|
||||
}
|
||||
|
||||
@ -2,7 +2,11 @@ package com.jasamedika.medifirst2000.service.impl;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -12,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.orm.jpa.JpaSystemException;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.jasamedika.medifirst2000.constants.Master;
|
||||
import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
|
||||
import com.jasamedika.medifirst2000.dao.CatatanPerkembanganPasienTerintegrasiDao;
|
||||
import com.jasamedika.medifirst2000.dao.KalenderDao;
|
||||
@ -279,4 +284,50 @@ public class CatatanPerkembanganPasienTerintegrasiServiceImpl extends BaseVoServ
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> findPresensiVisiteDokter(Integer idPegawai, Long bulan) throws JpaSystemException {
|
||||
Date startDate = CommonUtil.firstDayOfMonth(bulan);
|
||||
Date endDate = CommonUtil.lastDayOfMonth(bulan);
|
||||
|
||||
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
||||
DateFormat hf = new SimpleDateFormat("HH:mm:ss");
|
||||
|
||||
String strStartDate = df.format(startDate);
|
||||
String strEndDate = df.format(endDate);
|
||||
|
||||
List<Date> listTgl = kalenderDao.getDateFromPeriodicParameter(strStartDate, strEndDate);
|
||||
|
||||
int daysOfMonth = listTgl.size();
|
||||
|
||||
List<Integer> listIdDokter = new ArrayList<>();
|
||||
List<Map<String, Object>> listDokter = mapJabatanDao.findDokterByRemun(Arrays.asList(Master.UnitKerja.KSM),
|
||||
idPegawai);
|
||||
for (Map<String, Object> dokter : listDokter) {
|
||||
if (!listIdDokter.contains(Integer.valueOf(dokter.get("pegawaiId").toString()))) {
|
||||
listIdDokter.add(Integer.valueOf(dokter.get("pegawaiId").toString()));
|
||||
}
|
||||
}
|
||||
|
||||
List<CatatanPerkembanganPasienTerintegrasi> rawData = cpptDao.findPresensiCPPT(listIdDokter, strStartDate,
|
||||
strEndDate);
|
||||
for (Map<String, Object> dokter : listDokter) {
|
||||
double totCapaian = 0.0;
|
||||
for (CatatanPerkembanganPasienTerintegrasi cppt : rawData) {
|
||||
if (dokter.get("pegawaiId").equals(cppt.getPegawai().getId())) {
|
||||
LocalDateTime tenthOClock = LocalDateTime.of(LocalDate.parse(df.format(cppt.getTglInput())),
|
||||
LocalTime.of(10, 0, 0, 0));
|
||||
LocalDateTime tglInput = LocalDateTime.of(LocalDate.parse(df.format(cppt.getTglInput())),
|
||||
LocalTime.parse(hf.format(cppt.getTglInput())));
|
||||
if (tglInput.isBefore(tenthOClock) || tglInput.equals(tenthOClock)) {
|
||||
totCapaian += 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
double avgCapaian = totCapaian / daysOfMonth;
|
||||
dokter.put("rataCapaian", avgCapaian);
|
||||
}
|
||||
|
||||
return listDokter.get(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -51,6 +51,7 @@ import com.jasamedika.medifirst2000.entities.LogbookKinerjaDokter;
|
||||
import com.jasamedika.medifirst2000.entities.Pegawai;
|
||||
import com.jasamedika.medifirst2000.entities.SatuanIndikator;
|
||||
import com.jasamedika.medifirst2000.exception.ServiceVOException;
|
||||
import com.jasamedika.medifirst2000.service.CatatanPerkembanganPasienTerintegrasiService;
|
||||
import com.jasamedika.medifirst2000.service.LogbookKinerjaService;
|
||||
import com.jasamedika.medifirst2000.util.CommonUtil;
|
||||
import com.jasamedika.medifirst2000.vo.IndikatorKinerjaVO;
|
||||
@ -126,6 +127,9 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
|
||||
@Autowired
|
||||
private JabatanDao jabatanDao;
|
||||
|
||||
@Autowired
|
||||
private CatatanPerkembanganPasienTerintegrasiService cpptService;
|
||||
|
||||
@Override
|
||||
public LogbookKinerjaVO add(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException {
|
||||
Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai());
|
||||
@ -615,6 +619,41 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
|
||||
new BigDecimal(Double.valueOf(map.get("fragCapaian").toString()) * 100).setScale(2,
|
||||
RoundingMode.HALF_UP));
|
||||
data.add(map);
|
||||
} else if (map.get("idIndikator").equals(Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS)) {
|
||||
List<Map<String, Object>> listDetail = logbookKinerjaDokterDao.findDetailKontrakKinerja(
|
||||
mf.format(new Date(bulan)), idJabatan, idPegawai,
|
||||
Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS);
|
||||
|
||||
int detailSize = listDetail.size();
|
||||
double persenCapaian = 0.0;
|
||||
for (Map<String, Object> detail : listDetail) {
|
||||
if (Master.IndikatorKinerjaDetail.KEPATUHAN_WAKTU_VISITE.equals(detail.get("id"))) {
|
||||
Map<String, Object> presensiVisite = cpptService.findPresensiVisite(idPegawai,
|
||||
bulan);
|
||||
if (CommonUtil.isNotNullOrEmpty(presensiVisite)) {
|
||||
persenCapaian += Double.valueOf(presensiVisite.get("rataCapaian").toString())
|
||||
/ Double.valueOf(detail.get("detailTarget").toString());
|
||||
}
|
||||
} else {
|
||||
// TODO inserted by ITI-14 [Nov 19, 2021,
|
||||
// 5:14:28 PM] : Detail Indikator Kinerja
|
||||
// lainnya
|
||||
}
|
||||
}
|
||||
|
||||
double capaian = 0.0;
|
||||
if (detailSize > 0) {
|
||||
capaian = persenCapaian / detailSize;
|
||||
}
|
||||
|
||||
String fragCapaian = df.format(capaian * Double.valueOf(map.get("target").toString()));
|
||||
hasil += capaian * Double.valueOf(map.get("target").toString()) / 100
|
||||
* Double.valueOf(map.get("bobot").toString());
|
||||
map.put("fragCapaian", Double.parseDouble(fragCapaian));
|
||||
map.put("persenCapaianDibulatkan",
|
||||
new BigDecimal(Double.valueOf(map.get("fragCapaian").toString())).setScale(2,
|
||||
RoundingMode.HALF_UP));
|
||||
data.add(map);
|
||||
} else {
|
||||
hasil += Double.parseDouble(df.format(Double.valueOf(map.get("fragCapaian").toString())))
|
||||
* Double.valueOf(map.get("bobot").toString());
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package com.jasamedika.medifirst2000.util;
|
||||
|
||||
import java.util.AbstractMap;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
@ -63,8 +64,7 @@ public final class CommonUtil {
|
||||
try {
|
||||
value = PropertyUtils.getProperty(source, property);
|
||||
} catch (java.lang.Exception e) {
|
||||
LOG.error("Error when getting property: " + property
|
||||
+ " from source: " + source, e);
|
||||
LOG.error("Error when getting property: " + property + " from source: " + source, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -141,14 +141,12 @@ public final class CommonUtil {
|
||||
* @param objectsToCompare
|
||||
* @return
|
||||
*/
|
||||
public static boolean checkEquality(Object object,
|
||||
Object... objectsToCompare) {
|
||||
public static boolean checkEquality(Object object, Object... objectsToCompare) {
|
||||
if (object == null) {
|
||||
return false;
|
||||
}
|
||||
if (objectsToCompare == null || objectsToCompare.length == 0) {
|
||||
throw new IllegalArgumentException(
|
||||
"ObjectsToCompare cannot be null or empty.");
|
||||
throw new IllegalArgumentException("ObjectsToCompare cannot be null or empty.");
|
||||
}
|
||||
for (Object objectToCompare : objectsToCompare) {
|
||||
if (objectToCompare == null) {
|
||||
@ -169,14 +167,12 @@ public final class CommonUtil {
|
||||
* @param stringsToCompare
|
||||
* @return
|
||||
*/
|
||||
public static boolean checkEqualityIgnoreCase(String string,
|
||||
String... stringsToCompare) {
|
||||
public static boolean checkEqualityIgnoreCase(String string, String... stringsToCompare) {
|
||||
if (string == null) {
|
||||
throw new IllegalArgumentException("String cannot be null.");
|
||||
}
|
||||
if (stringsToCompare == null || stringsToCompare.length == 0) {
|
||||
throw new IllegalArgumentException(
|
||||
"StringsToCompare cannot be null or empty.");
|
||||
throw new IllegalArgumentException("StringsToCompare cannot be null or empty.");
|
||||
}
|
||||
for (String stringToCompare : stringsToCompare) {
|
||||
if (string.equalsIgnoreCase(stringToCompare)) {
|
||||
@ -185,30 +181,92 @@ public final class CommonUtil {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Boolean isNotNullOrEmpty(Object object) {
|
||||
return !isNullOrEmpty(object);
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static Boolean isNullOrEmpty(Object object) {
|
||||
if (object == null) {
|
||||
return true;
|
||||
} else {
|
||||
if (object instanceof Collection) {
|
||||
if (((Collection) object).isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
} else if (object instanceof AbstractMap) {
|
||||
if (((AbstractMap) object).isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (object.toString().trim().equals("")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static Boolean isNotNullOrEmpty(Object object) {
|
||||
return !isNullOrEmpty(object);
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static Boolean isNullOrEmpty(Object object) {
|
||||
if (object == null) {
|
||||
return true;
|
||||
} else {
|
||||
if (object instanceof Collection) {
|
||||
if (((Collection) object).isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
} else if (object instanceof AbstractMap) {
|
||||
if (((AbstractMap) object).isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (object.toString().trim().equals("")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return first day of current month
|
||||
*/
|
||||
public static Date firstDayOfMonth() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calendar.set(Calendar.MINUTE, 0);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
return calendar.getTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return last day of current month
|
||||
*/
|
||||
public static Date lastDayOfMonth() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||
calendar.set(Calendar.MINUTE, 59);
|
||||
calendar.set(Calendar.SECOND, 59);
|
||||
calendar.set(Calendar.MILLISECOND, 9999);
|
||||
|
||||
return calendar.getTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param timestamp
|
||||
* a specified time milliseconds
|
||||
* @return first day of month from specified time milliseconds
|
||||
*/
|
||||
public static Date firstDayOfMonth(Long timestamp) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(new Date(timestamp));
|
||||
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calendar.set(Calendar.MINUTE, 0);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
return calendar.getTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param timestamp
|
||||
* a specified time milliseconds
|
||||
* @return last day of month from specified time milliseconds
|
||||
*/
|
||||
public static Date lastDayOfMonth(Long timestamp) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(new Date(timestamp));
|
||||
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||
calendar.set(Calendar.MINUTE, 59);
|
||||
calendar.set(Calendar.SECOND, 59);
|
||||
calendar.set(Calendar.MILLISECOND, 9999);
|
||||
|
||||
return calendar.getTime();
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,7 +37,6 @@ import com.jasamedika.medifirst2000.util.DateUtil;
|
||||
import com.jasamedika.medifirst2000.util.JsonUtil;
|
||||
import com.jasamedika.medifirst2000.util.rest.RestUtil;
|
||||
import com.jasamedika.medifirst2000.vo.AgamaVO;
|
||||
import com.jasamedika.medifirst2000.vo.JadwalDokter_VO;
|
||||
import com.jasamedika.medifirst2000.vo.LoginUserVO;
|
||||
import com.jasamedika.medifirst2000.vo.custom.AuthVO;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user