Update service pelayanan pasien
Penerapan perhitungan harga jasa dan persen jasa
This commit is contained in:
parent
7d77992f6c
commit
33e6a74edc
@ -198,7 +198,7 @@ public interface PelayananPasienDao extends PagingAndSortingRepository<Pelayanan
|
||||
List<PelayananPasien> 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<Pelayanan
|
||||
+ "left join pp.kelas kls " + "left join pd.kelompokPasien kp " + "left join apd.ruangan ru "
|
||||
+ "left join pr.detailJenisProduk djp " + "where (ppp.statusEnabled is true or ppp.statusEnabled is null) "
|
||||
+ "and (pp.statusEnabled is true or pp.statusEnabled is null) "
|
||||
+ "and (pd.statusEnabled is true or pd.statusEnabled is null) " + "and djp.jenisProdukId <> 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")
|
||||
|
||||
@ -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<Map<String, Object>> 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<String, Object> 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<String, Object> 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<Map<String, Object>> result = new ArrayList<>();
|
||||
List<Map<String, Object>> dataTanggal = new ArrayList<>();
|
||||
List<Integer> listIdProduk = new ArrayList<>();
|
||||
List<Double> listHargaJual = new ArrayList<>();
|
||||
List<Integer> listIdKelompokPasien = new ArrayList<>();
|
||||
List<String> listTanggal = new ArrayList<>();
|
||||
Map<String, List<Map<String, Object>>> remunFfs = this.splitRemunFfs(idPegawai, bulan);
|
||||
List<Map<String, Object>> listData = remunFfs.get("remun");
|
||||
/*
|
||||
* Mapping persentase jasa remunerasi - Konsultasi 15% - Visite 20% -
|
||||
* Tindakan 15%
|
||||
*/
|
||||
for (Map<String, Object> 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<String, Object> mapData = new HashMap<>();
|
||||
double jumlah = 0.0;
|
||||
int dataHitungKe = 0;
|
||||
for (Map<String, Object> 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<String, Object> mapData = new HashMap<>();
|
||||
double jumlah = 0.0;
|
||||
int dataHitungKe = 0;
|
||||
for (Map<String, Object> 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<String, Object> mapResult = new HashMap<>();
|
||||
List<Map<String, Object>> detail = new ArrayList<>();
|
||||
int counter = 0;
|
||||
for (Map<String, Object> map : dataTanggal) {
|
||||
Map<String, Object> 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<String, Object> mapResult = new HashMap<>();
|
||||
List<Map<String, Object>> detail = new ArrayList<>();
|
||||
int counter = 0;
|
||||
double jumlah = 0.0;
|
||||
double jumlahHargaJasa = 0.0;
|
||||
for (Map<String, Object> map : dataTanggal) {
|
||||
Map<String, Object> 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<String> listTanggal = new ArrayList<>();
|
||||
Map<String, List<Map<String, Object>>> remunFfs = this.splitRemunFfs(idPegawai, bulan);
|
||||
List<Map<String, Object>> listData = remunFfs.get("ffs");
|
||||
/*
|
||||
* Mapping persentase jasa remunerasi - Konsultasi 60% - Visite 60% -
|
||||
* Tindakan 30%
|
||||
*/
|
||||
for (Map<String, Object> 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<String, Object> mapResult = new HashMap<>();
|
||||
List<Map<String, Object>> detail = new ArrayList<>();
|
||||
int counter = 0;
|
||||
double jumlah = 0.0;
|
||||
double jumlahHargaJasa = 0.0;
|
||||
for (Map<String, Object> map : dataTanggal) {
|
||||
Map<String, Object> 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);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user