pembuatan perhitungan skor tindakan medis dokter anestesi menggunakan persentase klasifikasi asa berdasarkan surat keputusan the indonesian society of anesthesiology and intensive therapy tahun 2015

This commit is contained in:
salmanoe 2021-11-26 17:39:09 +07:00
parent bd3ad9bb2d
commit e28f120d30
6 changed files with 285 additions and 6 deletions

View File

@ -170,7 +170,7 @@ public interface IkiDanRemunerasiDao extends PagingAndSortingRepository<IkiDanRe
@Param("karcisId") Integer idKarcis);
// Kinerja_jam_kerja_dokter
String kinerjaJamKerjaDokter = "select distinct new Map(ppp.ObjectJenisPetugasPeId as jenisPetugasId,"
String kinerjaJamKerjaDokter = "select distinct new Map(ppp.ObjectJenisPetugasPeId as jenisPetugasId,coalesce(ppp.asaId,1) as asaId,"
+ "pg.id as pegawaiId," + "pr.id as produkId,pr.namaProduk as namaProduk,"
+ "djp.id as detailJenisProdukId,"
+ "pp.noRec as noRec,pp.tglPelayanan as tglPelayanan,pp.jumlah as jumlah,coalesce(pp.hargaDiscount,0) as hargaDiskon,"

View File

@ -1,6 +1,11 @@
package com.jasamedika.medifirst2000.dao;
import java.util.List;
import java.util.Map;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.jasamedika.medifirst2000.entities.PelayananPasienPetugas;
@ -12,6 +17,24 @@ import com.jasamedika.medifirst2000.entities.PelayananPasienPetugas;
*/
@Repository("PelayananPasienPetugasDao")
public interface PelayananPasienPetugasDao extends PagingAndSortingRepository<PelayananPasienPetugas, String> {
@Query("select new Map(ppp.pelayananPasienId as pelayananId, count(ppp.pelayananPasienId) as sumPelayananId) "
+ "from PelayananPasienPetugas ppp " + "inner join ppp.pelayananPasien pp "
+ "where ppp.statusEnabled is true " + "and pp.statusEnabled is true "
+ "and ppp.ObjectJenisPetugasPeId in (4,6) " + "and ppp.pelayananPasienId in (:listPelayananId) "
+ "group by ppp.pelayananPasienId " + "having count(ppp.pelayananPasienId) > 1")
List<Map<String, Object>> countReferensiSkorPelayananAnestesi(
@Param("listPelayananId") List<String> listPelayananId);
@Query("select new Map(ppp.pelayananPasienId as pelayananId," + "ppp.ObjectJenisPetugasPeId as jenisPetugasId,"
+ "ppp.ObjectPegawaiId as petugasId," + "coalesce(ppp.asaId,1) as asaId,"
+ "mj.subUnitKerjaPegawaiId as kkId," + "pp.produkId as produkId) " + "from PelayananPasienPetugas ppp, "
+ "MapPegawaiJabatanToUnitKerja mj " + "inner join ppp.pelayananPasien pp "
+ "where ppp.ObjectPegawaiId = mj.pegawaiId " + "and ppp.statusEnabled is true "
+ "and pp.statusEnabled is true " + "and mj.statusEnabled is true "
+ "and ppp.ObjectJenisPetugasPeId in (4,6) " + "and ppp.pelayananPasienId in (:listPelayananId) "
+ "and mj.unitKerjaPegawaiId in (:listKsmId) " + "order by ppp.pelayananPasienId")
List<Map<String, Object>> findReferensiSkorPelayananAnestesi(@Param("listPelayananId") List<String> listPelayananId,
@Param("listKsmId") List<Integer> listKsmId);
}

View File

@ -0,0 +1,18 @@
package com.jasamedika.medifirst2000.dao.custom;
import java.util.List;
import java.util.Map;
import com.jasamedika.medifirst2000.dao.custom.base.CoreDao;
import com.jasamedika.medifirst2000.entities.SkoringTindakanMedis;
import com.jasamedika.medifirst2000.vo.ReferensiSkorAnestesiVO;
/**
* @author ITI-14
* @since Nov 23, 2021
*/
public interface SkoringTindakanMedisDaoCustom extends CoreDao<SkoringTindakanMedis> {
List<Map<String, Object>> findSkoringLogbookDokter(String bulan, List<ReferensiSkorAnestesiVO> listReferensiSkor);
}

View File

@ -0,0 +1,69 @@
package com.jasamedika.medifirst2000.dao.custom.impl;
import java.util.List;
import java.util.Map;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import com.jasamedika.medifirst2000.dao.custom.SkoringTindakanMedisDaoCustom;
import com.jasamedika.medifirst2000.dao.custom.base.impl.CoreDaoImpl;
import com.jasamedika.medifirst2000.entities.SkoringTindakanMedis;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.ReferensiSkorAnestesiVO;
/**
* @author ITI-14
* @since Nov 23, 2021
*/
@Repository
public class SkoringTindakanMedisDaoCustomImpl extends CoreDaoImpl<SkoringTindakanMedis>
implements SkoringTindakanMedisDaoCustom {
public SkoringTindakanMedisDaoCustomImpl() {
super(SkoringTindakanMedis.class);
}
@Override
public List<Map<String, Object>> findSkoringLogbookDokter(String bulan,
List<ReferensiSkorAnestesiVO> listReferensiSkor) {
StringBuffer buffer = new StringBuffer();
buffer.append(
"select distinct new Map(" + "mj.subUnitKerjaPegawaiId as kelompokKerjaId,mj.pegawaiId as pegawaiId,"
+ "pr.id as produkId,pr.namaProduk as namaProduk,"
+ "stm.skor as skor,stm.tanggalMulaiBerlaku as tglMulaiBerlaku,stm.tanggalPembaharuanData as tglPembaharuanData) "
+ "from SkoringTindakanMedis stm, " + "MapPegawaiJabatanToUnitKerja mj "
+ "inner join stm.produk pr " + "where stm.kelompokKerjaId = mj.subUnitKerjaPegawaiId "
+ "and stm.statusEnabled is true " + "and stm.statusVerifikasi is true "
+ "and pr.statusEnabled is true " + "and mj.statusEnabled is true "
+ "and to_char(stm.tanggalMulaiBerlaku,'yyyy-MM') <= '" + bulan + "' and ");
if (CommonUtil.isNotNullOrEmpty(listReferensiSkor)) {
String appendData = "";
for (ReferensiSkorAnestesiVO ref : listReferensiSkor) {
if (appendData.isEmpty()) {
appendData += "((mj.pegawaiId = " + ref.getDokterPemeriksaId() + " and mj.subUnitKerjaPegawaiId = "
+ ref.getKelompokKerjaId() + " and pr.id = " + ref.getProdukId() + ")";
} else {
appendData += " or (mj.pegawaiId = " + ref.getDokterPemeriksaId()
+ " and mj.subUnitKerjaPegawaiId = " + ref.getKelompokKerjaId() + " and pr.id = "
+ ref.getProdukId() + ")";
}
}
appendData += ") ";
buffer.append(appendData);
}
buffer.append(" order by pr.namaProduk, stm.skor desc, stm.tanggalPembaharuanData desc");
Query query = em.createQuery(buffer.toString());
@SuppressWarnings("unchecked")
List<Map<String, Object>> result = query.getResultList();
return result;
}
}

View File

@ -39,9 +39,11 @@ import com.jasamedika.medifirst2000.dao.LogbookKinerjaDokterDao;
import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao;
import com.jasamedika.medifirst2000.dao.MapPegawaiLaboratRadiologiDao;
import com.jasamedika.medifirst2000.dao.PegawaiDao;
import com.jasamedika.medifirst2000.dao.PelayananPasienPetugasDao;
import com.jasamedika.medifirst2000.dao.ShiftKerjaDao;
import com.jasamedika.medifirst2000.dao.SkoringTindakanMedisDao;
import com.jasamedika.medifirst2000.dao.TabelAcuanIndeksIKIDao;
import com.jasamedika.medifirst2000.dao.custom.SkoringTindakanMedisDaoCustom;
import com.jasamedika.medifirst2000.entities.IndikatorKinerja;
import com.jasamedika.medifirst2000.entities.IndikatorKinerjaDetail;
import com.jasamedika.medifirst2000.entities.Jabatan;
@ -58,6 +60,7 @@ import com.jasamedika.medifirst2000.vo.IndikatorKinerjaVO;
import com.jasamedika.medifirst2000.vo.JabatanVO;
import com.jasamedika.medifirst2000.vo.LogbookKinerjaVO;
import com.jasamedika.medifirst2000.vo.PegawaiVO;
import com.jasamedika.medifirst2000.vo.ReferensiSkorAnestesiVO;
import com.jasamedika.medifirst2000.vo.SatuanIndikatorVO;
import com.jasamedika.medifirst2000.vo.SkorDokterVO;
@ -103,6 +106,9 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
@Autowired
private SkoringTindakanMedisDao skoringTindakanMedisDao;
@Autowired
private SkoringTindakanMedisDaoCustom skoringTindakanMedisDaoCustom;
@Autowired
private IndikatorKinerjaDetailDao indikatorKinerjaDetailDao;
@ -130,6 +136,9 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
@Autowired
private CatatanPerkembanganPasienTerintegrasiService cpptService;
@Autowired
private PelayananPasienPetugasDao pelayananPasienPetugasDao;
@Override
public LogbookKinerjaVO add(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException {
Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai());
@ -640,12 +649,12 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
// 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());
@ -858,13 +867,96 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
Arrays.asList(Master.JenisProduk.NONTINDAKAN), Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS),
Master.KelompokPasien.ASURANSI_LAIN, Master.Rekanan.JAMINAN_KEMENKES, Master.Produk.KARCIS);
/**
* Menghitung skor asa dokter anestesi
*/
List<String> listIdPelayananAnestesi = new ArrayList<>();
{
List<Map<String, Object>> dataLayananAnestesi = new ArrayList<>();
List<ReferensiSkorAnestesiVO> listRefSkor = new ArrayList<>();
for (Map<String, Object> map : dataLayanan) {
if (map.get("jenisPetugasId").equals(Master.JenisPetugasPelaksana.DOKTER_ANASTESI)) {
listIdPelayananAnestesi.add(map.get("noRec").toString());
dataLayananAnestesi.add(map);
}
}
List<Map<String, Object>> listCountReferensiSkor = pelayananPasienPetugasDao
.countReferensiSkorPelayananAnestesi(listIdPelayananAnestesi);
List<String> listIdRefSkor = new ArrayList<>();
for (Map<String, Object> map : listCountReferensiSkor) {
listIdRefSkor.add(map.get("pelayananId").toString());
}
List<Map<String, Object>> listDataReferensiSkor = pelayananPasienPetugasDao
.findReferensiSkorPelayananAnestesi(listIdRefSkor, Arrays.asList(Master.UnitKerja.KSM));
for (String idRefSkor : listIdRefSkor) {
ReferensiSkorAnestesiVO ref = new ReferensiSkorAnestesiVO();
for (Map<String, Object> map : listDataReferensiSkor) {
if (idRefSkor.equals(map.get("pelayananId"))) {
ref.setPelayananId(map.get("pelayananId").toString());
ref.setProdukId(Integer.valueOf(map.get("produkId").toString()));
if (map.get("jenisPetugasId").equals(Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA)) {
ref.setDokterPemeriksaId(Integer.valueOf(map.get("petugasId").toString()));
ref.setKelompokKerjaId(Integer.valueOf(map.get("kkId").toString()));
} else if (map.get("jenisPetugasId").equals(Master.JenisPetugasPelaksana.DOKTER_ANASTESI)) {
ref.setDokterAnestesiId(Integer.valueOf(map.get("petugasId").toString()));
ref.setAsaId(Byte.valueOf(map.get("asaId").toString()));
}
}
}
listRefSkor.add(ref);
}
List<Map<String, Object>> dataSkorAnestesi = skoringTindakanMedisDaoCustom
.findSkoringLogbookDokter(mf.format(new Date(bulan)), listRefSkor);
/**
* Skor dokter anestesi (bukan tindakan mandiri)
*/
for (ReferensiSkorAnestesiVO refSkor : listRefSkor) {
for (Map<String, Object> mapLayanan : dataLayananAnestesi) {
for (Map<String, Object> mapSkor : dataSkorAnestesi) {
if (refSkor.getPelayananId().equals(mapLayanan.get("noRec").toString())
&& refSkor.getAsaId().equals(Byte.valueOf(mapLayanan.get("asaId").toString()))
&& refSkor.getProdukId().equals(Integer.valueOf(mapLayanan.get("produkId").toString()))
&& refSkor.getProdukId().equals(Integer.valueOf(mapSkor.get("produkId").toString()))
&& Integer.valueOf(mapLayanan.get("produkId").toString())
.equals(Integer.valueOf(mapSkor.get("produkId").toString()))
&& refSkor.getDokterAnestesiId()
.equals(Integer.valueOf(mapLayanan.get("pegawaiId").toString()))
&& refSkor.getDokterPemeriksaId()
.equals(Integer.valueOf(mapSkor.get("pegawaiId").toString()))
&& refSkor.getKelompokKerjaId()
.equals(Integer.valueOf(mapSkor.get("kelompokKerjaId").toString()))
&& (((Date) mapLayanan.get("tglPelayanan")).after((Date) mapSkor.get("tglMulaiBerlaku"))
|| ((Date) mapLayanan.get("tglPelayanan"))
.equals((Date) mapSkor.get("tglMulaiBerlaku")))) {
double skor = 0.0;
if (refSkor.getAsaId() >= 3) {
skor = 0.8 * Double.valueOf(mapSkor.get("skor").toString());
} else if (refSkor.getAsaId() == 2) {
skor = 0.5 * Double.valueOf(mapSkor.get("skor").toString());
} else {
skor = 0.4 * Double.valueOf(mapSkor.get("skor").toString());
}
mapLayanan.put("skor", skor);
break;
}
}
}
}
}
List<Map<String, Object>> dataSkor = skoringTindakanMedisDao.findSkoringLogbookDokter(
mf.format(new Date(bulan)), Arrays.asList(idPegawai), Arrays.asList(Master.UnitKerja.KSM));
// SCORE
for (Map<String, Object> mapLayanan : dataLayanan) {
for (Map<String, Object> mapSkor : dataSkor) {
if (mapLayanan.get("produkId").equals(mapSkor.get("produkId"))
if (!listIdPelayananAnestesi.contains(mapLayanan.get("noRec"))
&& mapLayanan.get("produkId").equals(mapSkor.get("produkId"))
&& (((Date) mapLayanan.get("tglPelayanan")).after((Date) mapSkor.get("tglMulaiBerlaku"))
|| ((Date) mapLayanan.get("tglPelayanan"))
.equals((Date) mapSkor.get("tglMulaiBerlaku")))) {

View File

@ -0,0 +1,77 @@
package com.jasamedika.medifirst2000.vo;
import com.jasamedika.medifirst2000.helper.Caption;
/**
* @author ITI-14
* @since Nov 24, 2021
*/
public class ReferensiSkorAnestesiVO {
@Caption(value = "Kode Tindakan Dokter Anestesi")
private Integer produkId;
@Caption(value = "Kode Pelayanan Pasien")
private String pelayananId;
@Caption(value = "Kode Dokter Pemeriksa atau DPJP")
private Integer dokterPemeriksaId;
@Caption(value = "Kode Kelompok Kerja Dokter Pemeriksa")
private Integer kelompokKerjaId;
@Caption(value = "Kode Dokter Anestesi")
private Integer dokterAnestesiId;
@Caption(value = "Kode Klasifikasi ASA")
private Byte asaId;
public Integer getProdukId() {
return produkId;
}
public void setProdukId(Integer produkId) {
this.produkId = produkId;
}
public String getPelayananId() {
return pelayananId;
}
public void setPelayananId(String pelayananId) {
this.pelayananId = pelayananId;
}
public Integer getDokterPemeriksaId() {
return dokterPemeriksaId;
}
public void setDokterPemeriksaId(Integer dokterPemeriksaId) {
this.dokterPemeriksaId = dokterPemeriksaId;
}
public Integer getKelompokKerjaId() {
return kelompokKerjaId;
}
public void setKelompokKerjaId(Integer kelompokKerjaId) {
this.kelompokKerjaId = kelompokKerjaId;
}
public Integer getDokterAnestesiId() {
return dokterAnestesiId;
}
public void setDokterAnestesiId(Integer dokterAnestesiId) {
this.dokterAnestesiId = dokterAnestesiId;
}
public Byte getAsaId() {
return asaId;
}
public void setAsaId(Byte asaId) {
this.asaId = asaId;
}
}