Update IkiDanRemunerasiController

Pembuatan service daftar tindakan belum ada skor. Pembuatan service deskripsi tindakan. Pembuatan service daftar tindakan yang boleh masuk logbook skor kinerja dokter.
This commit is contained in:
Salman Manoe 2022-02-07 16:30:42 +07:00
parent d429a087fc
commit 8db5773b84
8 changed files with 333 additions and 23 deletions

View File

@ -41,4 +41,10 @@ public interface HargaNettoProdukByKelasDao extends PagingAndSortingRepository<H
public List<Map<String, Object>> checkExisting(@Param("kelasId") Integer idKelas,
@Param("produkId") Integer idProduk, @Param("mappingId") Integer idMapping);
@Query("select new Map(hnk.hargaNetto1 as tarif,kls.namaKelas as kelas) " + "from HargaNettoProdukByKelas hnk "
+ "inner join hnk.kelas kls " + "where hnk.statusEnabled is true " + "and hnk.produkId = :produkId "
+ "and hnk.kelasId in (:listKelasId) " + "order by hnk.hargaNetto1")
public List<Map<String, Object>> findTarifTindakan(@Param("produkId") Integer idProduk,
@Param("listKelasId") List<Integer> listIdKelas);
}

View File

@ -21,29 +21,26 @@ public interface MapRuanganToProdukDao extends PagingAndSortingRepository<MapRua
@Query("select model from MapRuanganToProduk model where model.ruangan.id=:ruanganId and status='MA'")
List<MapRuanganToProduk> findProdukByRuangan(@Param("ruanganId") Integer ruanganId);
@Query("select NEW Map ("
+ "c.id as produkId) "
+ "from MapRuanganToProduk a "
+ "left join a.ruangan b "
+ "left join a.produk c "
+ "where b.id=:ruanganId and c.id=:produkId")
Map<String, Object> getByRuanganProduk(
@Param("ruanganId") Integer ruanganId,
@Param("produkId") Integer produkId);
@Query("select distinct produk.detailJenisProdukId from MapRuanganToProduk model " +
"left join model.produk produk " +
"left join produk.detailJenisProduk detailJenisProduk " +
"where model.ruanganId=:ruanganId")
@Query("select NEW Map (" + "c.id as produkId) " + "from MapRuanganToProduk a " + "left join a.ruangan b "
+ "left join a.produk c " + "where b.id=:ruanganId and c.id=:produkId")
Map<String, Object> getByRuanganProduk(@Param("ruanganId") Integer ruanganId, @Param("produkId") Integer produkId);
@Query("select distinct produk.detailJenisProdukId from MapRuanganToProduk model "
+ "left join model.produk produk " + "left join produk.detailJenisProduk detailJenisProduk "
+ "where model.ruanganId=:ruanganId")
List<Integer> findJenisProdukExepetion(@Param("ruanganId") Integer ruanganId);
@Query("select distinct new Map(pr.id as id, pr.namaProduk as namaProduk) "
+ "from MapRuanganToProduk mapr "
+ "left join mapr.produk pr "
+ "where mapr.statusEnabled is true and pr.statusEnabled is true "
@Query("select distinct new Map(pr.id as id, pr.namaProduk as namaProduk) " + "from MapRuanganToProduk mapr "
+ "left join mapr.produk pr " + "where mapr.statusEnabled is true and pr.statusEnabled is true "
+ "and mapr.ruanganId = :ruanganId and pr.namaProduk like %:namaProduk%")
List<Map<String, Object>> findProdukRuanganByMapProduk(@Param("ruanganId") Integer ruanganId, @Param("namaProduk") String namaProduk);
List<Map<String, Object>> findProdukRuanganByMapProduk(@Param("ruanganId") Integer ruanganId,
@Param("namaProduk") String namaProduk);
@Query("select distinct rng.namaRuangan || ' - ' || dpt.reportDisplay " + "from MapRuanganToProduk mrp "
+ "inner join mrp.ruangan rng " + "inner join rng.departemen dpt " + "where mrp.kodeExternal = '2017' "
+ "and mrp.produkId = :produkId " + "and rng.statusEnabled is true " + "and dpt.statusEnabled is true "
+ "order by rng.namaRuangan || ' - ' || dpt.reportDisplay")
List<String> findRuanganByTindakan(@Param("produkId") Integer idProduk);
}

View File

@ -3,6 +3,7 @@ package com.jasamedika.medifirst2000.dao;
import java.util.List;
import java.util.Map;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
@ -38,4 +39,10 @@ public interface PelayananPasienPetugasDao extends PagingAndSortingRepository<Pe
List<Map<String, Object>> findReferensiSkorPelayananAnestesi(@Param("listPelayananId") List<String> listPelayananId,
@Param("listKsmId") List<Integer> listKsmId);
@Query("select new Map(pgw.id as id,pgw.namaLengkap as namaLengkap) " + "from PelayananPasienPetugas ppp "
+ "inner join ppp.pelayananPasien plp " + "inner join ppp.kdpegawai pgw "
+ "where ppp.ObjectJenisPetugasPeId = 4 " + "and plp.statusEnabled is true "
+ "and plp.produkId = :produkId " + "order by plp.tglPelayanan desc")
List<Map<String, Object>> findDokterPemeriksaByTindakan(@Param("produkId") Integer idProduk, Pageable pageable);
}

View File

@ -179,6 +179,55 @@ public interface ProdukDao extends PagingAndSortingRepository<Produk, Integer> {
List<Map<String, Object>> findProdukByDetailJenisProdukAndNamaProduk(
@Param("idDetailJenisProduk") Integer idDetailJenisProduk, Pageable pageable);
String strTindakanBelumAdaSkor = "select distinct new Map(prd.id as id,prd.namaProduk as namaProduk) "
+ "from HargaNettoProdukByKelas hnk, MapRuanganToProduk mrp " + "inner join hnk.produk prd "
+ "where hnk.produkId = mrp.produkId " + "and mrp.produkId = prd.id " + "and hnk.statusEnabled is true "
+ "and prd.statusEnabled is true " + "and hnk.kodeExternal = '2017' " + "and mrp.kodeExternal = '2017' "
+ "and prd.detailJenisProdukId in (:listDetailJenisProdukId)";
String whrDaftarTindakan = " and prd.id not in (:listProdukId)";
String whrNamaTindakan = " and lower(prd.namaProduk) like %:namaProduk%";
String srtTindakan = " order by prd.namaProduk";
/**
* @param listIdDetailJenisProduk
* Kategori tindakan yang boleh masuk logbook skor kinerja dokter
* @param listIdProduk
* Daftar tindakan yang sudah dilakukan skor remunerasi
* @return Daftar tindakan belum ada skor remunerasi
*/
@Query(strTindakanBelumAdaSkor + whrDaftarTindakan + srtTindakan)
List<Map<String, Object>> findTindakanBelumAdaSkor(
@Param("listDetailJenisProdukId") List<Integer> listIdDetailJenisProduk,
@Param("listProdukId") List<Integer> listIdProduk);
/**
* @param listIdDetailJenisProduk
* Kategori tindakan yang boleh masuk logbook skor kinerja dokter
* @param pageable
* Pengaturan limit dan offset
* @return Daftar tindakan logbook skor kinerja dokter
*/
@Query(strTindakanBelumAdaSkor + srtTindakan)
List<Map<String, Object>> findTindakanLogbookSkor(
@Param("listDetailJenisProdukId") List<Integer> listIdDetailJenisProduk, Pageable pageable);
/**
* @param listIdDetailJenisProduk
* Kategori tindakan yang boleh masuk logbook skor kinerja dokter
* @param namaProduk
* Nama tindakan
* @param pageable
* Pengaturan limit dan offset
* @return Daftar tindakan logbook skor kinerja dokter
*/
@Query(strTindakanBelumAdaSkor + whrNamaTindakan + srtTindakan)
List<Map<String, Object>> findTindakanLogbookSkor(
@Param("listDetailJenisProdukId") List<Integer> listIdDetailJenisProduk,
@Param("namaProduk") String namaProduk, Pageable pageable);
@Query("select new Map (p.namaExternal as jenisProduk,p.id as id ) from DetailJenisProduk p where p.jenisProdukId in "
+ "(select jenisPro.id from JenisProduk jenisPro where jenisPro.kelompokProduk.id in "
+ "(select t from KelompokProduk t where t.id in (20,24))))")
@ -251,7 +300,7 @@ public interface ProdukDao extends PagingAndSortingRepository<Produk, Integer> {
Map<String, Object> findProdukAndSatuanStandar(@Param("produkId") Integer produkId);
@Query("select NEW map(p.kdProduk as kdProduk,p.namaProduk as namaProduk,p.id as id) from Produk p where p.id=:produkId")
Map<String, Object> findProdukBmhpById(@Param("produkId") Integer produkId);
Map<String, Object> findProdukById(@Param("produkId") Integer produkId);
@Query("select NEW map(produkAsal.namaProduk as namaProduk,produkAsal.id as idProduk,pfp.qtyProdukAsal as qtyProdukAsal) from ProdukFormulaProduksi pfp left join pfp.produkAsal produkAsal left join pfp.produkHasil produkHasil where produkHasil.id=:produkId")
List<Map<String, Object>> findBahanMentah(@Param("produkId") Integer produkId);

View File

@ -169,4 +169,10 @@ public interface SkoringTindakanMedisDao extends PagingAndSortingRepository<Skor
List<Map<String, Object>> findSkoringLogbookDokter(@Param("bulan") String bulan,
@Param("listPegawaiId") List<Integer> listIdPegawai, @Param("listKsmId") List<Integer> listIdKsm);
/**
* @return Daftar id produk sudah dilakukan skor remunerasi
*/
@Query("select distinct stm.produkId from SkoringTindakanMedis stm where stm.statusEnabled is true order by stm.produkId")
List<Integer> findProdukScored();
}

View File

@ -21,4 +21,22 @@ public interface SkoringTindakanMedisService
Map<String, Object> findAkses(Integer idPegawai) throws JpaSystemException;
/**
* @return Daftar tindakan belum ada skor
*/
public List<Map<String, Object>> findTindakanBelumAdaSkor();
/**
* @param idProduk
* ID tindakan medis
* @return Deskripsi Tindakan medis : tarif, ruangan pemeriksaan, dan dokter
* pemeriksa terakhir
*/
public Map<String, String> findDeskripsiSkoringTindakanMedis(Integer idProduk);
/**
* @return Daftar tindakan logbook skor dokter
*/
List<Map<String, Object>> findTindakanLogbookSkor(String namaProduk);
}

View File

@ -1,22 +1,34 @@
package com.jasamedika.medifirst2000.service.impl;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
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.HargaNettoProdukByKelasDao;
import com.jasamedika.medifirst2000.dao.LoggingUserDao;
import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao;
import com.jasamedika.medifirst2000.dao.MapRuanganToProdukDao;
import com.jasamedika.medifirst2000.dao.PelayananPasienPetugasDao;
import com.jasamedika.medifirst2000.dao.ProdukDao;
import com.jasamedika.medifirst2000.dao.SettingDataFixedDao;
import com.jasamedika.medifirst2000.dao.SkoringTindakanMedisDao;
@ -63,6 +75,20 @@ public class SkoringTindakanMedisServiceImpl extends BaseVoServiceImpl implement
@Autowired
private SubUnitKerjaDao subUnitKerjaDao;
@Autowired
private HargaNettoProdukByKelasDao hargaNettoProdukByKelasDao;
@Autowired
private MapRuanganToProdukDao mapRuanganToProdukDao;
@Autowired
private PelayananPasienPetugasDao pelayananPasienPetugasDao;
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
public void addLoggingUser(Integer idLoginUser, String idReferensi, String keterangan) {
LoggingUser loggingUser = new LoggingUser();
LoginUser loginUser = new LoginUser();
@ -405,4 +431,149 @@ public class SkoringTindakanMedisServiceImpl extends BaseVoServiceImpl implement
return result;
}
@Override
public List<Map<String, Object>> findTindakanBelumAdaSkor() {
List<Integer> tempList = new ArrayList<>();
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.ADMINISTRASI_PATOLOGI_KLINIK_EXCEPTION));
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.MEDIS_UTAMA));
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI));
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK));
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_RADIOLOGI));
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.LABORATORIUM));
List<Integer> listIdDetailJenisProdukLogbookSkor = tempList.stream().sorted().distinct()
.collect(Collectors.toList());
List<Integer> listIdProdukScored = skoringTindakanMedisDao.findProdukScored();
List<Map<String, Object>> result = produkDao.findTindakanBelumAdaSkor(listIdDetailJenisProdukLogbookSkor,
listIdProdukScored);
return result;
}
@Override
public Map<String, String> findDeskripsiSkoringTindakanMedis(Integer idProduk) {
Map<String, String> result = new HashMap<>();
{
String deskripsiDiri = "";
Map<String, Object> produk = produkDao.findProdukById(idProduk);
if (CommonUtil.isNotNullOrEmpty(produk)) {
deskripsiDiri += produk.get("id").toString() + " - " + produk.get("namaProduk").toString();
}
if (CommonUtil.isNotNullOrEmpty(deskripsiDiri)) {
result.put("produk", deskripsiDiri);
} else {
result.put("produk", "-");
}
}
{
String deskripsiTarif = "";
List<Double> listBesarTarif = new ArrayList<>();
NumberFormat rupiah = NumberFormat.getCurrencyInstance(new Locale("in", "ID"));
List<Map<String, Object>> daftarTarif = hargaNettoProdukByKelasDao.findTarifTindakan(idProduk,
Arrays.asList(Master.Kelas.REF_KELAS_KAMAR));
for (Map<String, Object> tarif : daftarTarif) {
if (!listBesarTarif.contains(tarif.get("tarif"))) {
listBesarTarif.add(Double.parseDouble(tarif.get("tarif").toString()));
}
}
if (listBesarTarif.size() == 1) {
deskripsiTarif += rupiah.format(listBesarTarif.get(0));
} else {
for (Map<String, Object> tarif : daftarTarif) {
if (deskripsiTarif == "") {
deskripsiTarif += rupiah.format(Double.parseDouble(tarif.get("tarif").toString())) + " ("
+ tarif.get("kelas").toString() + ")";
} else {
deskripsiTarif += ", " + rupiah.format(Double.parseDouble(tarif.get("tarif").toString())) + " ("
+ tarif.get("kelas").toString() + ")";
}
}
}
if (CommonUtil.isNotNullOrEmpty(deskripsiTarif)) {
result.put("tarif", deskripsiTarif);
} else {
result.put("tarif", "-");
}
}
{
String deskripsiRuanganPemeriksaan = "";
List<String> daftarRuangan = mapRuanganToProdukDao.findRuanganByTindakan(idProduk);
for (String ruangan : daftarRuangan) {
if (deskripsiRuanganPemeriksaan == "") {
deskripsiRuanganPemeriksaan += ruangan;
} else {
deskripsiRuanganPemeriksaan += ", " + ruangan;
}
}
if (CommonUtil.isNotNullOrEmpty(deskripsiRuanganPemeriksaan)) {
result.put("ruanganPemeriksaan", deskripsiRuanganPemeriksaan);
} else {
result.put("ruanganPemeriksaan", "-");
}
}
{
String deskripsiDokterPemeriksaTerakhir = "";
Pageable pageable = new PageRequest(0, 3);
List<Map<String, Object>> tempList = pelayananPasienPetugasDao.findDokterPemeriksaByTindakan(idProduk,
pageable);
List<Map<String, Object>> daftarDokter = tempList.stream()
.filter(distinctByKey(p -> Integer.parseInt(p.get("id").toString()))).collect(Collectors.toList());
for (Map<String, Object> dokter : daftarDokter) {
if (deskripsiDokterPemeriksaTerakhir == "") {
deskripsiDokterPemeriksaTerakhir += dokter.get("namaLengkap").toString();
} else {
deskripsiDokterPemeriksaTerakhir += ", " + dokter.get("namaLengkap").toString();
}
}
if (CommonUtil.isNotNullOrEmpty(deskripsiDokterPemeriksaTerakhir)) {
result.put("dokterPemeriksaTerakhir", deskripsiDokterPemeriksaTerakhir);
} else {
result.put("dokterPemeriksaTerakhir", "-");
}
}
return result;
}
@Override
public List<Map<String, Object>> findTindakanLogbookSkor(String namaProduk) {
List<Map<String, Object>> result = new ArrayList<>();
List<Integer> tempList = new ArrayList<>();
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.ADMINISTRASI_PATOLOGI_KLINIK_EXCEPTION));
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.MEDIS_UTAMA));
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI));
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK));
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_RADIOLOGI));
tempList.addAll(Arrays.asList(Master.DetailJenisProduk.LABORATORIUM));
List<Integer> listIdDetailJenisProdukLogbookSkor = tempList.stream().sorted().distinct()
.collect(Collectors.toList());
Pageable pageable = new PageRequest(0, 50);
if (CommonUtil.isNotNullOrEmpty(namaProduk)) {
result = produkDao.findTindakanLogbookSkor(listIdDetailJenisProdukLogbookSkor, namaProduk.toLowerCase(),
pageable);
} else {
result = produkDao.findTindakanLogbookSkor(listIdDetailJenisProdukLogbookSkor, pageable);
}
return result;
}
}

View File

@ -2184,4 +2184,60 @@ public class IkiDanRemunerasiController extends LocaleController<IkiDanRemuneras
}
}
@RequestMapping(value = "/get-tindakan-belum-ada-skor", method = RequestMethod.GET)
public ResponseEntity<List<Map<String, Object>>> getTindakanBelumAdaSkor(HttpServletRequest request) {
try {
List<Map<String, Object>> result = skoringTindakanMedisService.findTindakanBelumAdaSkor();
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,
getMessage(MessageResource.LABEL_SUCCESS, request));
return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage);
} catch (ServiceVOException sve) {
LOGGER.error("Got exception {} when get tindakan belum ada skor", sve.getMessage());
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, sve.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage);
} catch (JpaSystemException jse) {
LOGGER.error("Got exception {} when get tindakan belum ada skor", jse.getMessage());
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, jse.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage);
}
}
@RequestMapping(value = "/get-deskripsi-tindakan-skor-medis", method = RequestMethod.GET)
public ResponseEntity<Map<String, String>> getDeskripsiTindakanSkorMedis(HttpServletRequest request,
@RequestParam(value = "produkId", required = true) Integer idProduk) {
try {
Map<String, String> result = skoringTindakanMedisService.findDeskripsiSkoringTindakanMedis(idProduk);
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,
getMessage(MessageResource.LABEL_SUCCESS, request));
return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage);
} catch (ServiceVOException sve) {
LOGGER.error("Got exception {} when get deskripsi tindakan skor medis", sve.getMessage());
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, sve.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage);
} catch (JpaSystemException jse) {
LOGGER.error("Got exception {} when get deskripsi tindakan skor medis", jse.getMessage());
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, jse.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage);
}
}
@RequestMapping(value = "/get-daftar-tindakan-logbook-skor", method = RequestMethod.GET)
public ResponseEntity<List<Map<String, Object>>> getDaftarTindakanLogbookSkor(HttpServletRequest request,
@RequestParam(value = "namaProduk", required = false) String namaProduk) {
try {
List<Map<String, Object>> result = skoringTindakanMedisService.findTindakanLogbookSkor(namaProduk);
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,
getMessage(MessageResource.LABEL_SUCCESS, request));
return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage);
} catch (ServiceVOException sve) {
LOGGER.error("Got exception {} when get tindakan logbook skor", sve.getMessage());
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, sve.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage);
} catch (JpaSystemException jse) {
LOGGER.error("Got exception {} when get tindakan logbook skor", jse.getMessage());
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, jse.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage);
}
}
}