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:
parent
bd3ad9bb2d
commit
e28f120d30
@ -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,"
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -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")))) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user