- 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:
salmanoe 2021-11-19 21:34:15 +07:00
parent 39a7c5c7dd
commit 1d20232143
7 changed files with 200 additions and 51 deletions

View File

@ -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;

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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());

View File

@ -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();
}
}

View File

@ -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;