diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java index 1dd24d0a..4f5cad14 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java @@ -198,7 +198,7 @@ public interface PelayananPasienDao extends PagingAndSortingRepository findAll(@Param("noRegistrasi") String noRegistrasi); @Query("select new Map(pr.id as idProduk,pr.namaProduk as namaProduk,pr.detailJenisProdukId as idDetailJenisProduk," - + "kp.id as idKelompokPasien,kp.kelompokPasien as kelompokPasien," + + "djp.jenisProdukId as idJenisProduk," + "kp.id as idKelompokPasien,kp.kelompokPasien as kelompokPasien," + "kls.id as idKelas,kls.namaKelas as namaKelas," + "ppp.noRec as idPelayananPasienPetugas,ppp.ObjectPegawaiId as idPegawai," + "pp.noRec as idPelayananPasien,pp.hargaJual as hargaJual,pp.jumlah as jumlah," @@ -209,8 +209,8 @@ public interface PelayananPasienDao extends PagingAndSortingRepository 97 " - + "and ppp.ObjectPegawaiId = :pegawaiId " + "and pp.tglPelayanan between :tglAwal and :tglAkhir " + + "and (pd.statusEnabled is true or pd.statusEnabled is null) " + "and ppp.ObjectPegawaiId = :pegawaiId " + + "and pp.tglPelayanan between :tglAwal and :tglAkhir " + "order by case when kp.id = 2 then 1 when kp.id = 4 then 2 when kp.id = 8 then 3 when kp.id = 9 then 4 " + "when kp.id = 1 then 5 when kp.id = 5 then 6 when kp.id = 6 then 7 when kp.id = 3 then 8 when kp.id = 7 then 9 else 10 end asc, " + "pp.tglPelayanan") diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java index 0d137401..0f986c19 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java @@ -18,7 +18,6 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Queue; import java.util.stream.Collectors; @@ -432,7 +431,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Mendapatkan nominal target remunerasi */ TargetRemunDokterDetail target = targetRemunDokterDetailDao.findByPegawaiIdAndTmt(idPegawai, tglAwal, tglAkhir); - Double targetRemun = 0.00; + Double targetRemun = 33_000_000.00; if (CommonUtil.isNotNullOrEmpty(target) && CommonUtil.isNotNullOrEmpty(target.getRupiah())) { targetRemun = target.getRupiah(); } @@ -441,6 +440,24 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel */ List> listData = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai, tglAwal, tglAkhir); + /* + * Filter data mentah pengecualian barang farmasi + */ + listData = listData.stream().filter(d -> !Master.JenisProduk.OBAT_ALKES.equals(d.get("idJenisProduk"))) + .collect(Collectors.toList()); + /* + * Mapping persentase jasa remunerasi - Konsultasi 15% - Visite 20% - + * Tindakan 15% + */ + for (Map d : listData) { + if (d.get("namaProduk").toString().toLowerCase().contains("konsul")) { + d.put("hargaJasa", 0.15 * Double.parseDouble(d.get("hargaJual").toString())); + } else if (d.get("namaProduk").toString().toLowerCase().contains("visit")) { + d.put("hargaJasa", 0.2 * Double.parseDouble(d.get("hargaJual").toString())); + } else { + d.put("hargaJasa", 0.15 * Double.parseDouble(d.get("hargaJual").toString())); + } + } /* * Alokasi data diurutkan dulu untuk jam kerja. Asumsi jam kerja dokter * nonshift @@ -518,10 +535,10 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel for (Map next = queuePelayanan.poll(); next != null; next = queuePelayanan.poll()) if (Arrays.asList(Master.KelompokPasien.KELOMPOK_BPJS).contains(next.get("idKelompokPasien"))) { listPelayananRemun.add(next); - capaianRemun += Double.valueOf(next.get("hargaJual").toString()); + capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); } else if (capaianRemun <= targetRemun) { listPelayananRemun.add(next); - capaianRemun += Double.valueOf(next.get("hargaJual").toString()); + capaianRemun += Double.valueOf(next.get("hargaJasa").toString()); } else { listPelayananFfs.add(next); } @@ -549,61 +566,121 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel List> result = new ArrayList<>(); List> dataTanggal = new ArrayList<>(); List listIdProduk = new ArrayList<>(); + List listHargaJual = new ArrayList<>(); List listIdKelompokPasien = new ArrayList<>(); List listTanggal = new ArrayList<>(); Map>> remunFfs = this.splitRemunFfs(idPegawai, bulan); List> listData = remunFfs.get("remun"); + /* + * Mapping persentase jasa remunerasi - Konsultasi 15% - Visite 20% - + * Tindakan 15% + */ + for (Map d : listData) { + if (d.get("namaProduk").toString().toLowerCase().contains("konsul")) { + d.put("persenJasa", "15%"); + d.put("hargaJasa", 0.15 * Double.parseDouble(d.get("hargaJual").toString())); + } else if (d.get("namaProduk").toString().toLowerCase().contains("visit")) { + d.put("persenJasa", "20%"); + d.put("hargaJasa", 0.2 * Double.parseDouble(d.get("hargaJual").toString())); + } else { + d.put("persenJasa", "15%"); + d.put("hargaJasa", 0.15 * Double.parseDouble(d.get("hargaJual").toString())); + } + } + /* + * Populate data filter + */ listData.forEach(d -> { if (!listIdProduk.contains(Integer.valueOf(d.get("idProduk").toString()))) listIdProduk.add(Integer.valueOf(d.get("idProduk").toString())); + if (!listHargaJual.contains(Double.valueOf(d.get("hargaJual").toString()))) + listHargaJual.add(Double.valueOf(d.get("hargaJual").toString())); if (!listIdKelompokPasien.contains(Integer.valueOf(d.get("idKelompokPasien").toString()))) listIdKelompokPasien.add(Integer.valueOf(d.get("idKelompokPasien").toString())); if (!listTanggal.contains(d.get("tanggal").toString())) listTanggal.add(d.get("tanggal").toString()); }); + /* + * Pengelompokkan tanggal pelayanan + */ for (Integer idProduk : listIdProduk) { - for (Integer idKelompokPasien : listIdKelompokPasien) { - for (String tanggal : listTanggal) { - Map mapData = new HashMap<>(); - double jumlah = 0.0; - int dataHitungKe = 0; - for (Map map : listData) { - if (Integer.parseInt(map.get("idProduk").toString()) == idProduk - && Integer.parseInt(map.get("idKelompokPasien").toString()) == idKelompokPasien - && map.get("tanggal").toString().equals(tanggal)) { - jumlah += Double.parseDouble(map.get("jumlah").toString()); - dataHitungKe++; - if (dataHitungKe == 1) - mapData.putAll(map); + for (Double hargaJual : listHargaJual) { + for (Integer idKelompokPasien : listIdKelompokPasien) { + for (String tanggal : listTanggal) { + Map mapData = new HashMap<>(); + double jumlah = 0.0; + int dataHitungKe = 0; + for (Map map : listData) { + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Double.parseDouble(map.get("hargaJual").toString()) == hargaJual + && Integer.parseInt(map.get("idKelompokPasien").toString()) == idKelompokPasien + && map.get("tanggal").toString().equals(tanggal)) { + jumlah += Double.parseDouble(map.get("jumlah").toString()); + dataHitungKe++; + if (dataHitungKe == 1) + mapData.putAll(map); + } + } + if (CommonUtil.isNotNullOrEmpty(mapData.get("jumlah"))) { + mapData.put("jumlah", jumlah); + dataTanggal.add(mapData); } - } - if (CommonUtil.isNotNullOrEmpty(mapData.get("jumlah"))) { - mapData.put("jumlah", jumlah); - dataTanggal.add(mapData); } } } } + /* + * Pengelompokkan produk layanan + */ for (Integer idProduk : listIdProduk) { - for (Integer idKelompokPasien : listIdKelompokPasien) { - Map mapResult = new HashMap<>(); - List> detail = new ArrayList<>(); - int counter = 0; - for (Map map : dataTanggal) { - Map mapCount = new HashMap<>(); - if (Integer.parseInt(map.get("idProduk").toString()) == idProduk - && Integer.parseInt(map.get("idKelompokPasien").toString()) == idKelompokPasien) { - mapCount.put("jumlah", map.get("jumlah")); - mapCount.put("tanggal", map.get("tanggal")); - detail.add(mapCount); - counter++; - if (counter == 1) - mapResult.putAll(map); + for (Double hargaJual : listHargaJual) { + for (Integer idKelompokPasien : listIdKelompokPasien) { + Map mapResult = new HashMap<>(); + List> detail = new ArrayList<>(); + int counter = 0; + double jumlah = 0.0; + double jumlahHargaJasa = 0.0; + for (Map map : dataTanggal) { + Map mapCount = new HashMap<>(); + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Double.parseDouble(map.get("hargaJual").toString()) == hargaJual + && Integer.parseInt(map.get("idKelompokPasien").toString()) == idKelompokPasien) { + mapCount.put("jumlah", map.get("jumlah")); + mapCount.put("tanggal", map.get("tanggal")); + detail.add(mapCount); + counter++; + jumlah += Double.parseDouble(map.get("jumlah").toString()); + if (counter == 1) + mapResult.putAll(map); + } + } + if (CommonUtil.isNotNullOrEmpty(mapResult.get("jumlah"))) { + /* + * Tambahkan data total + */ + jumlahHargaJasa = jumlah * Double.parseDouble(mapResult.get("hargaJasa").toString()); + mapResult.put("jumlah", jumlah); + mapResult.put("jumlahHargaJasa", jumlahHargaJasa); + /* + * Tambahkan data detail + */ + mapResult.put("detail", detail); + /* + * Hapus informasi tidak perlu + */ + mapResult.remove("idDPJP"); + mapResult.remove("tglPelayanan"); + mapResult.remove("tanggal"); + mapResult.remove("idKelas"); + mapResult.remove("namaKelas"); + mapResult.remove("idPelayananPasienPetugas"); + mapResult.remove("idPelayananPasien"); + mapResult.remove("idDepartemen"); + mapResult.remove("idPasienDaftar"); + mapResult.remove("idPegawai"); + mapResult.remove("idAntrianPasienDiperiksa"); + result.add(mapResult); } - } - if (CommonUtil.isNotNullOrEmpty(mapResult.get("jumlah"))) { - mapResult.put("detail", detail); - result.add(mapResult); } } } @@ -619,6 +696,25 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel List listTanggal = new ArrayList<>(); Map>> remunFfs = this.splitRemunFfs(idPegawai, bulan); List> listData = remunFfs.get("ffs"); + /* + * Mapping persentase jasa remunerasi - Konsultasi 60% - Visite 60% - + * Tindakan 30% + */ + for (Map d : listData) { + if (d.get("namaProduk").toString().toLowerCase().contains("konsul")) { + d.put("persenJasa", "60%"); + d.put("hargaJasa", 0.6 * Double.parseDouble(d.get("hargaJual").toString())); + } else if (d.get("namaProduk").toString().toLowerCase().contains("visit")) { + d.put("persenJasa", "60%"); + d.put("hargaJasa", 0.6 * Double.parseDouble(d.get("hargaJual").toString())); + } else { + d.put("persenJasa", "30%"); + d.put("hargaJasa", 0.3 * Double.parseDouble(d.get("hargaJual").toString())); + } + } + /* + * Populate data filter + */ listData.forEach(d -> { if (!listIdProduk.contains(Integer.valueOf(d.get("idProduk").toString()))) listIdProduk.add(Integer.valueOf(d.get("idProduk").toString())); @@ -627,6 +723,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel if (!listTanggal.contains(d.get("tanggal").toString())) listTanggal.add(d.get("tanggal").toString()); }); + /* + * Pengelompokkan tanggal pelayanan + */ for (Integer idProduk : listIdProduk) { for (Integer idKelompokPasien : listIdKelompokPasien) { for (String tanggal : listTanggal) { @@ -650,11 +749,16 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } } } + /* + * Pengelompokkan produk layanan + */ for (Integer idProduk : listIdProduk) { for (Integer idKelompokPasien : listIdKelompokPasien) { Map mapResult = new HashMap<>(); List> detail = new ArrayList<>(); int counter = 0; + double jumlah = 0.0; + double jumlahHargaJasa = 0.0; for (Map map : dataTanggal) { Map mapCount = new HashMap<>(); if (Integer.parseInt(map.get("idProduk").toString()) == idProduk @@ -663,12 +767,36 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel mapCount.put("tanggal", map.get("tanggal")); detail.add(mapCount); counter++; + jumlah += Double.parseDouble(map.get("jumlah").toString()); if (counter == 1) mapResult.putAll(map); } } if (CommonUtil.isNotNullOrEmpty(mapResult.get("jumlah"))) { + /* + * Tambahkan data total + */ + jumlahHargaJasa = jumlah * Double.parseDouble(mapResult.get("hargaJasa").toString()); + mapResult.put("jumlah", jumlah); + mapResult.put("jumlahHargaJasa", jumlahHargaJasa); + /* + * Tambahkan data detail + */ mapResult.put("detail", detail); + /* + * Hapus informasi tidak perlu + */ + mapResult.remove("idDPJP"); + mapResult.remove("tglPelayanan"); + mapResult.remove("tanggal"); + mapResult.remove("idKelas"); + mapResult.remove("namaKelas"); + mapResult.remove("idPelayananPasienPetugas"); + mapResult.remove("idPelayananPasien"); + mapResult.remove("idDepartemen"); + mapResult.remove("idPasienDaftar"); + mapResult.remove("idPegawai"); + mapResult.remove("idAntrianPasienDiperiksa"); result.add(mapResult); } }