diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IndekKinerjaService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IndekKinerjaService.java index a66aa80a..32802252 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IndekKinerjaService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IndekKinerjaService.java @@ -71,16 +71,24 @@ public interface IndekKinerjaService { List> getAllTindakanByDokter(String periode, Integer idPegawai); List> getAllTindakanByDokterReview(String periode, Integer idPegawai); + + List> getAllPelayananByDokterReview(String periode, Integer idPegawai); List> getAllTindakanByDokterReviewForReport(String periode, Integer idPegawai); + + List> getAllPelayananByDokterReviewForReport(String periode, Integer idPegawai); List> getAllTindakanByDokterForfeeForService(String periode, Integer idPegawai); List> getAllTindakanByDokterForfeeForServiceReview(String periode, Integer idPegawai); + + List> getAllPelayananByDokterForFeeForServiceReview(String periode, Integer idPegawai); List> getAllTindakanByDokterReport(String periode, Integer idPegawai); List> getAllTindakanByDokterReportReview(String periode, Integer idPegawai); + + List> getAllPelayananByDokterReportReview(String periode, Integer idPegawai); List> getAllTindakanDokter(String periode, Integer idPegawai); diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IndekKinerjaServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IndekKinerjaServiceImpl.java index a15bd6cc..b6a679d4 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IndekKinerjaServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IndekKinerjaServiceImpl.java @@ -3286,6 +3286,645 @@ public class IndekKinerjaServiceImpl extends BaseVoServiceImpl implements IndekK return result; } + + @Override + public List> getAllPelayananByDokterReview(String periode, Integer idPegawai) { + if (pegawaiDao.getPegawaiByKategoryPegawai(Arrays.asList(Master.KategoryPegawai.DOKTER_LUAR)) + .contains(idPegawai)) { + return new ArrayList<>(); + } + + List> result = new ArrayList<>(); + List> rawResult = new ArrayList<>(); + List> countResult = new ArrayList<>(); + + List listProdukId = new ArrayList<>(); + List listKelasId = new ArrayList<>(); + List listPelaksanaId = new ArrayList<>(); + List listDetailJenisProduk = new ArrayList<>(); + List listDetailJenisProdukException = new ArrayList<>(); + List listTanggalPelayanan = new ArrayList<>(); + + Double harga = 0.0; + Double point = 0.0; + Double pointQty = 0.0; + Double formatPointQty = 0.0; + Double formatRpKontribusi = 0.0; + Double percentage = 0.0; + + DecimalFormat df = new DecimalFormat("#.##"); + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + LocalDateTime PSBBDate = LocalDateTime.of(2020, 9, 14, 0, 0, 0); + LocalDateTime PSBBEnd = LocalDateTime.parse(GetSettingDataFixed("psbbperiod"), dtf); + + List drAnastesiList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_ANESTESI); + List drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_UMUM); + List laboranRadiologList = mapPegawaiLaboratRadiologiDao.findPegawaiLaboranRadiolog(); + + if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_ANATOMI).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI)); + } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_KLINIK).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK)); + } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_RADIOLOGI).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_RADIOLOGI)); + } else { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.MEDIS_UTAMA)); + } + + if (laboranRadiologList.contains(idPegawai)) { + listDetailJenisProdukException = new ArrayList<>( + Arrays.asList(Master.DetailJenisProduk.ADMINISTRASI_PATOLOGI_KLINIK_EXCEPTION)); + listDetailJenisProdukException.removeAll(listDetailJenisProduk); + } + + List> listData = revIndekKinerjaDao.getAllTindakanDokter(Master.Kelas.KELAS_SATU, idPegawai, + Master.JenisPetugasPelaksana.PETUGAS_PELAKSANA, periode); + + // LOGIC_RULES_REMUN + if (CommonUtil.isNotNullOrEmpty(listData)) { + for (Map map : listData) { + if (listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString()))) { + if (Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI) + .contains(Integer.parseInt(map.get("detailId").toString())) + || Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK) + .contains(Integer.parseInt(map.get("detailId").toString()))) { + rawResult.add(map); + } else if (Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.KEMENKES + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.JAMKESDA + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_INAP) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(map.get("ruanganId")) + && Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang)) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) || dateTimePelayanan.isEqual(PSBBEnd))) { + if (((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk")) + && Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } else if (!listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString())) + && map.get("departemenId").equals(Master.Departemen.IGD) && drKsmUmumList.contains(idPegawai) + && Arrays.asList(Master.Produk.DOKTER_UMUM_IGD) + .contains(Integer.parseInt(map.get("idProduk").toString()))) { + if (Master.KelompokPasien.BPJS.equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.KEMENKES + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.JAMKESDA + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_INAP) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(map.get("ruanganId")) + && Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang)) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) || dateTimePelayanan.isEqual(PSBBEnd))) { + if (((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk")) + && Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException) + && listDetailJenisProdukException.contains(Integer.parseInt(map.get("detailId").toString()))) { + if (Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI) + .contains(Integer.parseInt(map.get("detailId").toString())) + || Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK) + .contains(Integer.parseInt(map.get("detailId").toString()))) { + rawResult.add(map); + } else if (Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.KEMENKES + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.JAMKESDA + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_INAP) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(map.get("ruanganId")) + && Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang)) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) || dateTimePelayanan.isEqual(PSBBEnd))) { + if (((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk")) + && Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } + } + } + + if (CommonUtil.isNotNullOrEmpty(rawResult)) { + for (Map map : rawResult) { + if (!Arrays.asList(Master.JenisPetugasPelaksana.DOKTER_ANASTESI_OR_ASISTEN_SPESIALIS) + .contains(Integer.parseInt(map.get("idJenisPelaksana").toString()))) { + map.put("idJenisPelaksana", Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA); + } + if (!listProdukId.contains(Integer.parseInt(map.get("idProduk").toString()))) { + listProdukId.add(Integer.parseInt(map.get("idProduk").toString())); + } + if (!listKelasId.contains(Integer.parseInt(map.get("idKelas").toString()))) { + listKelasId.add(Integer.parseInt(map.get("idKelas").toString())); + } + if (!listTanggalPelayanan.contains(map.get("tanggal").toString())) { + listTanggalPelayanan.add(map.get("tanggal").toString()); + } + if (!listPelaksanaId.contains(Integer.parseInt(map.get("idJenisPelaksana").toString()))) { + listPelaksanaId.add(Integer.parseInt(map.get("idJenisPelaksana").toString())); + } + } + + Collections.sort(listKelasId, Collections.reverseOrder()); + for (Integer idProduk : listProdukId) { + for (Integer idKelas : listKelasId) { + for (Integer idPelaksana : listPelaksanaId) { + for (String tanggal : listTanggalPelayanan) { + Map mapResult1 = new HashMap<>(); + Map mapResult2 = new HashMap<>(); + double count1 = 0.0; + double count2 = 0.0; + int dataCount1 = 0; + int dataCount2 = 0; + for (Map map : rawResult) { + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas + && Integer.parseInt(map.get("idJenisPelaksana").toString()) == idPelaksana + && map.get("tanggal").toString().equals(tanggal) + && (Double.parseDouble(map.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(map.get("statusDiskon")) || Integer + .valueOf(map.get("statusDiskon").toString()).equals(0)))) { + count1 = count1 + Double.parseDouble(map.get("count").toString()); + dataCount1 = dataCount1 + 1; + if (dataCount1 == 1) { + mapResult1.putAll(map); + } + } else if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas + && Integer.parseInt(map.get("idJenisPelaksana").toString()) == idPelaksana + && map.get("tanggal").toString().equals(tanggal)) { + count2 = count2 + Double.parseDouble(map.get("count").toString()); + dataCount2 = dataCount2 + 1; + if (dataCount2 == 1) { + mapResult2.putAll(map); + } + } + } + if (CommonUtil.isNotNullOrEmpty(mapResult1.get("count"))) { + mapResult1.put("count", count1); + countResult.add(mapResult1); + } + if (CommonUtil.isNotNullOrEmpty(mapResult2.get("count"))) { + mapResult2.put("count", count2); + countResult.add(mapResult2); + } + } + } + } + } + + for (Integer idProduk : listProdukId) { + for (Integer idKelas : listKelasId) { + for (Integer idPelaksana : listPelaksanaId) { + Map mapResult1 = new HashMap<>(); + Map mapResult2 = new HashMap<>(); + List> datas1 = new ArrayList<>(); + List> datas2 = new ArrayList<>(); + Double totalKonsul1 = 0.0; + Double totalKonsul2 = 0.0; + Double totalVisit1 = 0.0; + Double totalVisit2 = 0.0; + Double totalTindakan1 = 0.0; + Double totalTindakan2 = 0.0; + Double totalProduk1 = 0.0; + Double totalProduk2 = 0.0; + int counter1 = 0; + int counter2 = 0; + boolean isDiskonJasamedis1 = false; + boolean isDiskonJasamedis2 = false; + for (Map map : countResult) { + Map countMap = new HashMap<>(); + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas + && Integer.parseInt(map.get("idJenisPelaksana").toString()) == idPelaksana + && (Double.parseDouble(map.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(map.get("statusDiskon")) || Integer + .valueOf(map.get("statusDiskon").toString()).equals(0)))) { + countMap.put("count", map.get("count")); + if (CommonUtil.isNotNullOrEmpty(map.get("hargaKelas1"))) { + countMap.put("harga", map.get("hargaKelas1")); + } else { + countMap.put("harga", map.get("harga")); + } + countMap.put("tanggal", map.get("tanggal")); + datas1.add(countMap); + if (map.get("namaProduk").toString().toLowerCase().contains("konsul")) { + totalKonsul1 = totalKonsul1 + Double.parseDouble(map.get("count").toString()); + } else if (map.get("namaProduk").toString().toLowerCase().contains("visit")) { + totalVisit1 = totalVisit1 + Double.parseDouble(map.get("count").toString()); + } else { + totalTindakan1 = totalTindakan1 + Double.parseDouble(map.get("count").toString()); + } + totalProduk1 = totalProduk1 + Double.parseDouble(map.get("count").toString()); + counter1 = counter1 + 1; + if (counter1 == 1) { + mapResult1.putAll(map); + } + } else if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas + && Integer.parseInt(map.get("idJenisPelaksana").toString()) == idPelaksana) { + countMap.put("count", map.get("count")); + if (CommonUtil.isNotNullOrEmpty(map.get("hargaKelas1"))) { + countMap.put("harga", map.get("hargaKelas1")); + } else { + countMap.put("harga", map.get("harga")); + } + countMap.put("tanggal", map.get("tanggal")); + datas2.add(countMap); + if (map.get("namaProduk").toString().toLowerCase().contains("konsul")) { + totalKonsul2 = totalKonsul2 + Double.parseDouble(map.get("count").toString()); + } else if (map.get("namaProduk").toString().toLowerCase().contains("visit")) { + totalVisit2 = totalVisit2 + Double.parseDouble(map.get("count").toString()); + } else { + totalTindakan2 = totalTindakan2 + Double.parseDouble(map.get("count").toString()); + } + totalProduk2 = totalProduk2 + Double.parseDouble(map.get("count").toString()); + counter2 = counter2 + 1; + if (counter2 == 1) { + mapResult2.putAll(map); + } + } + } + if (CommonUtil.isNotNullOrEmpty(mapResult1.get("count"))) { + harga = Double.parseDouble(mapResult1.get("harga").toString()); + + if (drAnastesiList.contains(idPegawai)) { + if (Arrays.asList(Master.Produk.PENUNJANG_BUKAN_ANASTESI) + .contains(mapResult1.get("idProduk"))) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_PENUNJANG_BUKAN_ANASTESI; + } else if ((Integer) mapResult1 + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + if (Double.parseDouble(mapResult1.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(mapResult1.get("statusDiskon")) || Integer + .valueOf(mapResult1.get("statusDiskon").toString()).equals(0))) { + isDiskonJasamedis1 = true; + } + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_ANASTESI; + } + } else { + if ((Integer) mapResult1 + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_ASISTEN_SPESIALIS; + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + if (Double.parseDouble(mapResult1.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(mapResult1.get("statusDiskon")) || Integer + .valueOf(mapResult1.get("statusDiskon").toString()).equals(0))) { + isDiskonJasamedis1 = true; + } + } + } + + percentage = percentage / 100; + point = getPoinLogbookDokter(harga, percentage, Master.LogbookDokter.TARIF_REMUNERASI, + isDiskonJasamedis1); + pointQty = point * totalProduk1.doubleValue(); + formatPointQty = Double.parseDouble(df.format(pointQty)); + + if (Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA + .equals(mapResult1.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_DOKTER, + Integer.parseInt(mapResult1.get("idProduk").toString()), + Integer.parseInt(mapResult1.get("idKelas").toString())); + formatRpKontribusi = totalProduk1 + * (nettoKomponen != null ? nettoKomponen.orElse(0.0) : 0.0); + } else if (Master.JenisPetugasPelaksana.DOKTER_ANASTESI + .equals(mapResult1.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_DOKTER_ANASTESI, + Integer.parseInt(mapResult1.get("idProduk").toString()), + Integer.parseInt(mapResult1.get("idKelas").toString())); + formatRpKontribusi = totalProduk1 + * (nettoKomponen != null ? nettoKomponen.orElse(0.0) : 0.0); + } else if (Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS + .equals(mapResult1.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_ASISTEN_SPESIALIS, + Integer.parseInt(mapResult1.get("idProduk").toString()), + Integer.parseInt(mapResult1.get("idKelas").toString())); + formatRpKontribusi = totalProduk1 + * (nettoKomponen != null ? nettoKomponen.orElse(0.0) : 0.0); + } + + mapResult1.put("totalKonsul", totalKonsul1.longValue()); + mapResult1.put("totalVisit", totalVisit1.longValue()); + mapResult1.put("totalTindakan", totalTindakan1.longValue()); + mapResult1.put("totalProduk", totalProduk1.longValue()); + mapResult1.put("datas", datas1); + mapResult1.put("poin", point); + mapResult1.put("pointQty", formatPointQty); + mapResult1.put("kontribusi", formatRpKontribusi); + + result.add(mapResult1); + } + if (CommonUtil.isNotNullOrEmpty(mapResult2.get("count"))) { + harga = Double.parseDouble(mapResult2.get("harga").toString()); + + if (drAnastesiList.contains(idPegawai)) { + if (Arrays.asList(Master.Produk.PENUNJANG_BUKAN_ANASTESI) + .contains(mapResult2.get("idProduk"))) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_PENUNJANG_BUKAN_ANASTESI; + } else if ((Integer) mapResult2 + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + if (Double.parseDouble(mapResult2.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(mapResult2.get("statusDiskon")) || Integer + .valueOf(mapResult2.get("statusDiskon").toString()).equals(0))) { + isDiskonJasamedis2 = true; + } + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_ANASTESI; + } + } else { + if ((Integer) mapResult2 + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_ASISTEN_SPESIALIS; + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + if (Double.parseDouble(mapResult2.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(mapResult2.get("statusDiskon")) || Integer + .valueOf(mapResult2.get("statusDiskon").toString()).equals(0))) { + isDiskonJasamedis2 = true; + } + } + } + + percentage = percentage / 100; + point = getPoinLogbookDokter(harga, percentage, Master.LogbookDokter.TARIF_REMUNERASI, + isDiskonJasamedis2); + pointQty = point * totalProduk2.doubleValue(); + formatPointQty = Double.parseDouble(df.format(pointQty)); + + if (Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA + .equals(mapResult2.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_DOKTER, + Integer.parseInt(mapResult2.get("idProduk").toString()), + Integer.parseInt(mapResult2.get("idKelas").toString())); + formatRpKontribusi = totalProduk2 + * (nettoKomponen != null ? nettoKomponen.orElse(0.0) : 0.0); + } else if (Master.JenisPetugasPelaksana.DOKTER_ANASTESI + .equals(mapResult2.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_DOKTER_ANASTESI, + Integer.parseInt(mapResult2.get("idProduk").toString()), + Integer.parseInt(mapResult2.get("idKelas").toString())); + formatRpKontribusi = totalProduk2 + * (nettoKomponen != null ? nettoKomponen.orElse(0.0) : 0.0); + } else if (Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS + .equals(mapResult2.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_ASISTEN_SPESIALIS, + Integer.parseInt(mapResult2.get("idProduk").toString()), + Integer.parseInt(mapResult2.get("idKelas").toString())); + formatRpKontribusi = totalProduk2 + * (nettoKomponen != null ? nettoKomponen.orElse(0.0) : 0.0); + } + + mapResult2.put("totalKonsul", totalKonsul2.longValue()); + mapResult2.put("totalVisit", totalVisit2.longValue()); + mapResult2.put("totalTindakan", totalTindakan2.longValue()); + mapResult2.put("totalProduk", totalProduk2.longValue()); + mapResult2.put("datas", datas2); + mapResult2.put("poin", point); + mapResult2.put("pointQty", formatPointQty); + mapResult2.put("kontribusi", formatRpKontribusi); + + result.add(mapResult2); + } + } + } + } + } + + return result; + } @Override public List> getAllTindakanByDokterReviewForReport(String periode, Integer idPegawai) { @@ -3755,6 +4394,467 @@ public class IndekKinerjaServiceImpl extends BaseVoServiceImpl implements IndekK return result; } + + @Override + public List> getAllPelayananByDokterReviewForReport(String periode, Integer idPegawai) { + if (pegawaiDao.getPegawaiByKategoryPegawai(Arrays.asList(Master.KategoryPegawai.DOKTER_LUAR)) + .contains(idPegawai)) { + return new ArrayList<>(); + } + + List> result = new ArrayList<>(); + List> rawResult = new ArrayList<>(); + List> countResult = new ArrayList<>(); + + List listProdukId = new ArrayList<>(); + List listKelasId = new ArrayList<>(); + List listDetailJenisProduk = new ArrayList<>(); + List listDetailJenisProdukException = new ArrayList<>(); + List listTanggalPelayanan = new ArrayList<>(); + + Double harga = 0.0; + Double point = 0.0; + Double pointQty = 0.0; + Double formatPointQty = 0.0; + Double percentage = 0.0; + + DecimalFormat df = new DecimalFormat("#.##"); + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + LocalDateTime PSBBDate = LocalDateTime.of(2020, 9, 14, 0, 0, 0); + LocalDateTime PSBBEnd = LocalDateTime.parse(GetSettingDataFixed("psbbperiod"), dtf); + + List drAnastesiList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_ANESTESI); + List drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_UMUM); + List laboranRadiologList = mapPegawaiLaboratRadiologiDao.findPegawaiLaboranRadiolog(); + + if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_ANATOMI).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI)); + } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_KLINIK).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK)); + } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_RADIOLOGI).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_RADIOLOGI)); + } else { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.MEDIS_UTAMA)); + } + + if (laboranRadiologList.contains(idPegawai)) { + listDetailJenisProdukException = new ArrayList<>( + Arrays.asList(Master.DetailJenisProduk.ADMINISTRASI_PATOLOGI_KLINIK_EXCEPTION)); + listDetailJenisProdukException.removeAll(listDetailJenisProduk); + } + + List> listData = revIndekKinerjaDao.getAllTindakanDokter(Master.Kelas.KELAS_SATU, idPegawai, + Master.JenisPetugasPelaksana.PETUGAS_PELAKSANA, periode); + + // LOGIC_RULES_REMUN + if (CommonUtil.isNotNullOrEmpty(listData)) { + for (Map map : listData) { + if (listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString()))) { + if (Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI) + .contains(Integer.parseInt(map.get("detailId").toString())) + || Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK) + .contains(Integer.parseInt(map.get("detailId").toString()))) { + rawResult.add(map); + } else if (Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.KEMENKES + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.JAMKESDA + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_INAP) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(map.get("ruanganId")) + && Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang)) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) || dateTimePelayanan.isEqual(PSBBEnd))) { + if (((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk")) + && Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } else if (!listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString())) + && map.get("departemenId").equals(Master.Departemen.IGD) && drKsmUmumList.contains(idPegawai) + && Arrays.asList(Master.Produk.DOKTER_UMUM_IGD) + .contains(Integer.parseInt(map.get("idProduk").toString()))) { + if (Master.KelompokPasien.BPJS.equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.KEMENKES + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.JAMKESDA + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_INAP) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(map.get("ruanganId")) + && Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang)) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) || dateTimePelayanan.isEqual(PSBBEnd))) { + if (((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk")) + && Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException) + && listDetailJenisProdukException.contains(Integer.parseInt(map.get("detailId").toString()))) { + if (Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI) + .contains(Integer.parseInt(map.get("detailId").toString())) + || Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK) + .contains(Integer.parseInt(map.get("detailId").toString()))) { + rawResult.add(map); + } else if (Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.KEMENKES + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.JAMKESDA + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_INAP) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(map.get("ruanganId")) + && Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang)) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) || dateTimePelayanan.isEqual(PSBBEnd))) { + if (((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk")) + && Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } + } + } + + if (CommonUtil.isNotNullOrEmpty(rawResult)) { + for (Map map : rawResult) { + if (!Arrays.asList(Master.JenisPetugasPelaksana.DOKTER_ANASTESI_OR_ASISTEN_SPESIALIS) + .contains(Integer.parseInt(map.get("idJenisPelaksana").toString()))) { + map.put("idJenisPelaksana", Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA); + } + if (!listProdukId.contains(Integer.parseInt(map.get("idProduk").toString()))) { + listProdukId.add(Integer.parseInt(map.get("idProduk").toString())); + } + if (!listKelasId.contains(Integer.parseInt(map.get("idKelas").toString()))) { + listKelasId.add(Integer.parseInt(map.get("idKelas").toString())); + } + if (!listTanggalPelayanan.contains(map.get("tanggal").toString())) { + listTanggalPelayanan.add(map.get("tanggal").toString()); + } + } + + Collections.sort(listKelasId, Collections.reverseOrder()); + for (Integer idProduk : listProdukId) { + for (Integer idKelas : listKelasId) { + for (String tanggal : listTanggalPelayanan) { + Map mapResult = new HashMap<>(); + double count = 0.0; + int dataCount = 0; + for (Map map : rawResult) { + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas + && map.get("tanggal").toString().equals(tanggal)) { + count = count + Double.parseDouble(map.get("count").toString()); + dataCount = dataCount + 1; + if (dataCount == 1) { + mapResult.putAll(map); + } + } + } + if (CommonUtil.isNotNullOrEmpty(mapResult.get("count"))) { + mapResult.put("count", count); + countResult.add(mapResult); + } + } + } + } + + for (Integer idProduk : listProdukId) { + for (Integer idKelas : listKelasId) { + Map mapResult = new HashMap<>(); + List> datas = new ArrayList<>(); + Double totalKonsul = 0.0; + Double totalVisit = 0.0; + Double totalTindakan = 0.0; + Double totalProduk = 0.0; + int counter = 0; + for (Map map : countResult) { + Map countMap = new HashMap<>(); + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas) { + countMap.put("count", map.get("count")); + if (CommonUtil.isNotNullOrEmpty(map.get("hargaKelas1"))) { + countMap.put("harga", map.get("hargaKelas1")); + } else { + countMap.put("harga", map.get("harga")); + } + countMap.put("tanggal", map.get("tanggal")); + datas.add(countMap); + if (map.get("namaProduk").toString().toLowerCase().contains("konsul")) { + totalKonsul = totalKonsul + Double.parseDouble(map.get("count").toString()); + } else if (map.get("namaProduk").toString().toLowerCase().contains("visit")) { + totalVisit = totalVisit + Double.parseDouble(map.get("count").toString()); + } else { + totalTindakan = totalTindakan + Double.parseDouble(map.get("count").toString()); + } + totalProduk = totalProduk + Double.parseDouble(map.get("count").toString()); + counter = counter + 1; + if (counter == 1) { + mapResult.putAll(map); + } + } + } + if (CommonUtil.isNotNullOrEmpty(mapResult.get("count"))) { + harga = Double.parseDouble(mapResult.get("harga").toString()); + + if (drAnastesiList.contains(idPegawai)) { + if (Arrays.asList(Master.Produk.PENUNJANG_BUKAN_ANASTESI) + .contains(mapResult.get("idProduk"))) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_PENUNJANG_BUKAN_ANASTESI; + } else if ((Integer) mapResult + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_ANASTESI; + } + } else { + if ((Integer) mapResult + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_ASISTEN_SPESIALIS; + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + } + } + + percentage = percentage / 100; + point = getPoin(harga, percentage, Master.LogbookDokter.TARIF_REMUNERASI); + pointQty = point * totalProduk.doubleValue(); + formatPointQty = Double.parseDouble(df.format(pointQty)); + + mapResult.put("totalKonsul", totalKonsul.longValue()); + mapResult.put("totalVisit", totalVisit.longValue()); + mapResult.put("totalTindakan", totalTindakan.longValue()); + mapResult.put("totalProduk", totalProduk.longValue()); + mapResult.put("datas", datas); + mapResult.put("poin", point); + mapResult.put("pointQty", formatPointQty); + + result.add(mapResult); + } + } + } + } + + return result; + } @Override public List> getAllTindakanByDokterReportReview(String periode, Integer idPegawai) { @@ -4355,6 +5455,590 @@ public class IndekKinerjaServiceImpl extends BaseVoServiceImpl implements IndekK return result; } + + @Override + public List> getAllPelayananByDokterReportReview(String periode, Integer idPegawai) { + List> result = new ArrayList<>(); + List> rawResult = new ArrayList<>(); + List> countResult = new ArrayList<>(); + + List listProdukId = new ArrayList<>(); + List listKelasId = new ArrayList<>(); + List listPelaksanaId = new ArrayList<>(); + List listDetailJenisProduk = new ArrayList<>(); + List listDetailJenisProdukException = new ArrayList<>(); + List listTanggalPelayanan = new ArrayList<>(); + + DecimalFormat df = new DecimalFormat("#.##"); + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + LocalDateTime PSBBDate = LocalDateTime.of(2020, 9, 14, 0, 0, 0); + LocalDateTime PSBBEnd = LocalDateTime.parse(GetSettingDataFixed("psbbperiod"), dtf); + + Double harga = 0.0; + Double point = 0.0; + Double pointQty = 0.0; + Double percentage = 0.0; + Double totalPoint = 0.0; + Long tindakanTotal = 0L; + + int maxday = monitoringAbsenService.iterateDate(periode + "-01"); + + List drAnastesiList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_ANESTESI); + List drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_UMUM); + List laboranRadiologList = mapPegawaiLaboratRadiologiDao.findPegawaiLaboranRadiolog(); + + if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_ANATOMI).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI)); + } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_KLINIK).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK)); + } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_RADIOLOGI).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_RADIOLOGI)); + } else { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.MEDIS_UTAMA)); + } + + if (laboranRadiologList.contains(idPegawai)) { + listDetailJenisProdukException = new ArrayList<>( + Arrays.asList(Master.DetailJenisProduk.ADMINISTRASI_PATOLOGI_KLINIK_EXCEPTION)); + listDetailJenisProdukException.removeAll(listDetailJenisProduk); + } + + List> listData = revIndekKinerjaDao.getAllTindakanDokter(Master.Kelas.KELAS_SATU, idPegawai, + Master.JenisPetugasPelaksana.PETUGAS_PELAKSANA, periode); + + if (CommonUtil.isNotNullOrEmpty(listData)) { + for (Map map : listData) { + if (listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString()))) { + if (Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI) + .contains(Integer.parseInt(map.get("detailId").toString())) + || Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK) + .contains(Integer.parseInt(map.get("detailId").toString()))) { + rawResult.add(map); + } else if (Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.KEMENKES + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.JAMKESDA + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_INAP) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(map.get("ruanganId")) + && Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang)) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) || dateTimePelayanan.isEqual(PSBBEnd))) { + if (((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && (dateTimePelayanan.isBefore(datePulang) + || dateTimePelayanan.isEqual(datePulang)))) { + rawResult.add(map); + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk")) + && Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } else if (!listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString())) + && map.get("departemenId").equals(Master.Departemen.IGD) && drKsmUmumList.contains(idPegawai) + && Arrays.asList(Master.Produk.DOKTER_UMUM_IGD) + .contains(Integer.parseInt(map.get("idProduk").toString()))) { + if (Master.KelompokPasien.BPJS.equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.KEMENKES + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.JAMKESDA + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_INAP) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(map.get("ruanganId")) + && Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang)) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) || dateTimePelayanan.isEqual(PSBBEnd))) { + if (((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk")) + && Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException) + && listDetailJenisProdukException.contains(Integer.parseInt(map.get("detailId").toString()))) { + if (Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI) + .contains(Integer.parseInt(map.get("detailId").toString())) + || Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK) + .contains(Integer.parseInt(map.get("detailId").toString()))) { + rawResult.add(map); + } else if (Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.KEMENKES + .equals(Integer.parseInt(map.get("kelompokPasienId").toString())) + || Master.KelompokPasien.JAMKESDA + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_INAP) + && !Arrays.asList(Master.Ruangan.NONRANAP).contains(map.get("ruanganId")) + && Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) || dateTimePelayanan.isAfter(datePulang) + || dateTimePelayanan.isAfter(datePulang)) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } else if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) || dateTimePelayanan.isEqual(PSBBEnd))) { + if (((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && ((dateTimePelayanan.isEqual(dateMasuk) || dateTimePelayanan.isAfter(dateMasuk)) + && dateTimePelayanan.isBefore(datePulang))) { + rawResult.add(map); + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk")) + && Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_DUA_TIGA_NONKELAS) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } + } + } + + if (CommonUtil.isNotNullOrEmpty(rawResult)) { + for (Map map : rawResult) { + if (!Arrays.asList(Master.JenisPetugasPelaksana.DOKTER_ANASTESI_OR_ASISTEN_SPESIALIS) + .contains(Integer.parseInt(map.get("idJenisPelaksana").toString()))) { + map.put("idJenisPelaksana", Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA); + } + if (!listProdukId.contains(Integer.parseInt(map.get("idProduk").toString()))) { + listProdukId.add(Integer.parseInt(map.get("idProduk").toString())); + } + if (!listKelasId.contains(Integer.parseInt(map.get("idKelas").toString()))) { + listKelasId.add(Integer.parseInt(map.get("idKelas").toString())); + } + if (!listTanggalPelayanan.contains(map.get("tanggal").toString())) { + listTanggalPelayanan.add(map.get("tanggal").toString()); + } + if (!listPelaksanaId.contains(Integer.parseInt(map.get("idJenisPelaksana").toString()))) { + listPelaksanaId.add(Integer.parseInt(map.get("idJenisPelaksana").toString())); + } + } + + Collections.sort(listKelasId, Collections.reverseOrder()); + for (Integer idProduk : listProdukId) { + for (Integer idKelas : listKelasId) { + for (Integer idPelaksana : listPelaksanaId) { + for (String tanggal : listTanggalPelayanan) { + Map mapResult1 = new HashMap<>(); + Map mapResult2 = new HashMap<>(); + double count1 = 0.0; + double count2 = 0.0; + int dataCount1 = 0; + int dataCount2 = 0; + for (Map map : rawResult) { + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas + && Integer.parseInt(map.get("idJenisPelaksana").toString()) == idPelaksana + && map.get("tanggal").toString().equals(tanggal) + && (Double.valueOf(map.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(map.get("statusDiskon")) || Integer + .valueOf(map.get("statusDiskon").toString()).equals(0)))) { + count1 = count1 + Double.parseDouble(map.get("count").toString()); + dataCount1 = dataCount1 + 1; + if (dataCount1 == 1) { + mapResult1.putAll(map); + } + } else if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas + && Integer.parseInt(map.get("idJenisPelaksana").toString()) == idPelaksana + && map.get("tanggal").toString().equals(tanggal)) { + count2 = count2 + Double.parseDouble(map.get("count").toString()); + dataCount2 = dataCount2 + 1; + if (dataCount2 == 1) { + mapResult2.putAll(map); + } + } + } + if (CommonUtil.isNotNullOrEmpty(mapResult1.get("count"))) { + mapResult1.put("count", count1); + countResult.add(mapResult1); + } + if (CommonUtil.isNotNullOrEmpty(mapResult2.get("count"))) { + mapResult2.put("count", count2); + countResult.add(mapResult2); + } + } + } + } + } + + for (Integer idProduk : listProdukId) { + for (Integer idKelas : listKelasId) { + for (Integer idPelaksana : listPelaksanaId) { + Map mapResult1 = new HashMap<>(); + Map mapResult2 = new HashMap<>(); + List> datas1 = new ArrayList<>(); + List> datas2 = new ArrayList<>(); + Double totalTindakan1 = 0.0; + Double totalTindakan2 = 0.0; + int counter1 = 0; + int counter2 = 0; + boolean isDiskonJasamedis1 = false; + boolean isDiskonJasamedis2 = false; + for (Map map : countResult) { + Map countMap = new HashMap<>(); + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas + && Integer.parseInt(map.get("idJenisPelaksana").toString()) == idPelaksana + && (Double.valueOf(map.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(map.get("statusDiskon")) || Integer + .valueOf(map.get("statusDiskon").toString()).equals(0)))) { + countMap.put("count", map.get("count")); + if (CommonUtil.isNotNullOrEmpty(map.get("hargaKelas1"))) { + countMap.put("harga", map.get("hargaKelas1")); + } else { + countMap.put("harga", map.get("harga")); + } + countMap.put("tanggal", map.get("tanggal")); + datas1.add(countMap); + totalTindakan1 = totalTindakan1 + Double.parseDouble(map.get("count").toString()); + + String tgl = map.get("tanggal").toString().substring(8, 10); + Long count = (new Double(Double.parseDouble(map.get("count").toString()))).longValue(); + mapResult1.put(tgl, count.toString()); + + counter1 = counter1 + 1; + if (counter1 == 1) { + mapResult1.putAll(map); + } + } else if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas + && Integer.parseInt(map.get("idJenisPelaksana").toString()) == idPelaksana) { + countMap.put("count", map.get("count")); + if (CommonUtil.isNotNullOrEmpty(map.get("hargaKelas1"))) { + countMap.put("harga", map.get("hargaKelas1")); + } else { + countMap.put("harga", map.get("harga")); + } + countMap.put("tanggal", map.get("tanggal")); + datas2.add(countMap); + totalTindakan2 = totalTindakan2 + Double.parseDouble(map.get("count").toString()); + + String tgl = map.get("tanggal").toString().substring(8, 10); + Long count = (new Double(Double.parseDouble(map.get("count").toString()))).longValue(); + mapResult2.put(tgl, count.toString()); + + counter2 = counter2 + 1; + if (counter2 == 1) { + mapResult2.putAll(map); + } + } + } + if (CommonUtil.isNotNullOrEmpty(mapResult1.get("count"))) { + harga = Double.parseDouble(mapResult1.get("harga").toString()); + + if (drAnastesiList.contains(idPegawai)) { + if (Arrays.asList(Master.Produk.PENUNJANG_BUKAN_ANASTESI) + .contains(mapResult1.get("idProduk"))) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_PENUNJANG_BUKAN_ANASTESI; + } else if ((Integer) mapResult1 + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + if (Double.parseDouble(mapResult1.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(mapResult1.get("statusDiskon")) || Integer + .valueOf(mapResult1.get("statusDiskon").toString()).equals(0))) { + isDiskonJasamedis1 = true; + } + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_ANASTESI; + } + } else { + if ((Integer) mapResult1 + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_ASISTEN_SPESIALIS; + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + if (Double.parseDouble(mapResult1.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(mapResult1.get("statusDiskon")) || Integer + .valueOf(mapResult1.get("statusDiskon").toString()).equals(0))) { + isDiskonJasamedis1 = true; + } + } + } + + percentage = percentage / 100; + point = getPoinLogbookDokter(harga, percentage, Master.LogbookDokter.TARIF_REMUNERASI, + isDiskonJasamedis1); + pointQty = point * totalTindakan1.doubleValue(); + + tindakanTotal += totalTindakan1.longValue(); + totalPoint += pointQty; + + mapResult1.put("totalTindakan", totalTindakan1.longValue()); + mapResult1.put("tindakanTotal", tindakanTotal); + mapResult1.put("datas", datas1); + mapResult1.put("poin", point); + mapResult1.put("poins", df.format(point)); + mapResult1.put("pointQty", pointQty); + mapResult1.put("pointQtys", df.format(pointQty)); + mapResult1.put("totalPoin", totalPoint); + mapResult1.put("totalPoint", df.format(totalPoint)); + mapResult1.put("hargas", CurrencyUtil.getPriceInINA(harga).replace("Rp.", "")); + mapResult1.put("maxDay", maxday); + + result.add(mapResult1); + } + if (CommonUtil.isNotNullOrEmpty(mapResult2.get("count"))) { + harga = Double.parseDouble(mapResult2.get("harga").toString()); + + if (drAnastesiList.contains(idPegawai)) { + if (Arrays.asList(Master.Produk.PENUNJANG_BUKAN_ANASTESI) + .contains(mapResult2.get("idProduk"))) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_PENUNJANG_BUKAN_ANASTESI; + } else if ((Integer) mapResult2 + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + if (Double.parseDouble(mapResult2.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(mapResult2.get("statusDiskon")) || Integer + .valueOf(mapResult2.get("statusDiskon").toString()).equals(0))) { + isDiskonJasamedis2 = true; + } + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_ANASTESI; + } + } else { + if ((Integer) mapResult2 + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_ASISTEN_SPESIALIS; + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + if (Double.parseDouble(mapResult2.get("diskon").toString()) > 0 + && (CommonUtil.isNullOrEmpty(mapResult2.get("statusDiskon")) || Integer + .valueOf(mapResult2.get("statusDiskon").toString()).equals(0))) { + isDiskonJasamedis2 = true; + } + } + } + + percentage = percentage / 100; + point = getPoinLogbookDokter(harga, percentage, Master.LogbookDokter.TARIF_REMUNERASI, + isDiskonJasamedis2); + pointQty = point * totalTindakan2.doubleValue(); + + tindakanTotal += totalTindakan2.longValue(); + totalPoint += pointQty; + + mapResult2.put("totalTindakan", totalTindakan2.longValue()); + mapResult2.put("tindakanTotal", tindakanTotal); + mapResult2.put("datas", datas2); + mapResult2.put("poin", point); + mapResult2.put("poins", df.format(point)); + mapResult2.put("pointQty", pointQty); + mapResult2.put("pointQtys", df.format(pointQty)); + mapResult2.put("totalPoin", totalPoint); + mapResult2.put("totalPoint", df.format(totalPoint)); + mapResult2.put("hargas", CurrencyUtil.getPriceInINA(harga).replace("Rp.", "")); + mapResult2.put("maxDay", maxday); + + result.add(mapResult2); + } + } + } + } + } + + return result; + } @Override public List> getAllTindakanByDokterForfeeForServiceReview(String periode, Integer idPegawai) { @@ -4811,6 +6495,454 @@ public class IndekKinerjaServiceImpl extends BaseVoServiceImpl implements IndekK return result; } + + @Override + public List> getAllPelayananByDokterForFeeForServiceReview(String periode, Integer idPegawai) { + List> result = new ArrayList<>(); + List> rawResult = new ArrayList<>(); + List> countResult = new ArrayList<>(); + + List listProdukId = new ArrayList<>(); + List listKelasId = new ArrayList<>(); + List listDetailJenisProduk = new ArrayList<>(); + List listDetailJenisProdukException = new ArrayList<>(); + List listTanggalPelayanan = new ArrayList<>(); + + Double harga = 0.0; + Double point = 0.0; + Double pointQty = 0.0; + Double formatPointQty = 0.0; + Double percentage = 0.0; + + DecimalFormat df = new DecimalFormat("#.##"); + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + LocalDateTime PSBBDate = LocalDateTime.of(2020, 9, 14, 0, 0, 0); + LocalDateTime PSBBEnd = LocalDateTime.parse(GetSettingDataFixed("psbbperiod"), dtf); + + List drAnastesiList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_ANESTESI); + List drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_UMUM); + List laboranRadiologList = mapPegawaiLaboratRadiologiDao.findPegawaiLaboranRadiolog(); + + if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_ANATOMI).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI)); + } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_KLINIK).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK)); + } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_RADIOLOGI).contains(idPegawai)) { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_RADIOLOGI)); + } else { + listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.MEDIS_UTAMA)); + } + + if (laboranRadiologList.contains(idPegawai)) { + listDetailJenisProdukException = new ArrayList<>( + Arrays.asList(Master.DetailJenisProduk.ADMINISTRASI_PATOLOGI_KLINIK_EXCEPTION)); + listDetailJenisProdukException.removeAll(listDetailJenisProduk); + } + + List> listData = revIndekKinerjaDao.getAllTindakanDokter(Master.Kelas.KELAS_SATU, idPegawai, + Master.JenisPetugasPelaksana.PETUGAS_PELAKSANA, periode); + + // LOGIC_RULES_FFS + if (CommonUtil.isNotNullOrEmpty(listData)) { + if (pegawaiDao.getPegawaiByKategoryPegawai(Arrays.asList(Master.KategoryPegawai.DOKTER_LUAR)) + .contains(idPegawai)) { + for (Map map : listData) { + if (listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString()))) { + rawResult.add(map); + } else if (!listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString())) + && map.get("departemenId").equals(Master.Departemen.IGD) + && drKsmUmumList.contains(idPegawai) && Arrays.asList(Master.Produk.DOKTER_UMUM_IGD) + .contains(Integer.parseInt(map.get("idProduk").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException) + && listDetailJenisProdukException + .contains(Integer.parseInt(map.get("detailId").toString()))) { + rawResult.add(map); + } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProduk) + && listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString()))) { + rawResult.add(map); + } + } + } else { + for (Map map : listData) { + if (listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString()))) { + if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (!Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) + || dateTimePelayanan.isEqual(PSBBEnd))) { + if ((dateTimePelayanan.isBefore(dateMasuk) + || dateTimePelayanan.isEqual(datePulangPSBB) + || dateTimePelayanan.isAfter(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) + || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_SATU_VIP) + .contains(Integer.parseInt(map.get("idKelas").toString())) + && !Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) + || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk"))) { + if (!Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString()))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_SATU_VIP) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } + } + } else if (!listDetailJenisProduk.contains(Integer.parseInt(map.get("detailId").toString())) + && map.get("departemenId").equals(Master.Departemen.IGD) + && drKsmUmumList.contains(idPegawai) && Arrays.asList(Master.Produk.DOKTER_UMUM_IGD) + .contains(Integer.parseInt(map.get("idProduk").toString()))) { + if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (!Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) + || dateTimePelayanan.isEqual(PSBBEnd))) { + if ((dateTimePelayanan.isBefore(dateMasuk) + || dateTimePelayanan.isEqual(datePulangPSBB) + || dateTimePelayanan.isAfter(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) + || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_SATU_VIP) + .contains(Integer.parseInt(map.get("idKelas").toString())) + && !Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) + || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk"))) { + if (!Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString()))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_SATU_VIP) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } + } + } else if (CommonUtil.isNotNullOrEmpty(listDetailJenisProdukException) + && listDetailJenisProdukException + .contains(Integer.parseInt(map.get("detailId").toString()))) { + if (CommonUtil.isNotNullOrEmpty(map.get("jamMasuk"))) { + Date tanggalPelayanan = (Date) map.get("tanggalPelayanan"); + String tglPelayanan = new SimpleDateFormat("yyyy-MM-dd").format(tanggalPelayanan); + String waktuPelayanan = new SimpleDateFormat("HH:mm:ss").format(tanggalPelayanan); + LocalDate datePelayanan = LocalDate.parse(tglPelayanan); + LocalTime timePelayanan = LocalTime.parse(waktuPelayanan); + LocalDateTime dateTimePelayanan = LocalDateTime.of(datePelayanan, timePelayanan); + + String jamMasuk = map.get("jamMasuk").toString().substring(0, 2) + ":" + + map.get("jamMasuk").toString().substring(3) + ":00"; + LocalTime timeMasuk = LocalTime.parse(jamMasuk); + LocalDateTime dateMasuk = LocalDateTime.of(datePelayanan, timeMasuk); + + String jamPulang = map.get("jamPulang").toString().substring(0, 2) + ":" + + map.get("jamPulang").toString().substring(3) + ":00"; + LocalTime timePulang = LocalTime.parse(jamPulang); + LocalDateTime datePulang = LocalDateTime.of(datePelayanan, timePulang); + + String jamPulangPSBB = ""; + LocalTime timePulangPSBB = LocalTime.now(); + LocalDateTime datePulangPSBB = LocalDateTime.now(); + if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 1 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 2 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 3 + || getDayOfWeek((Date) map.get("tanggalPelayanan")) == 4) { + jamPulangPSBB = "14:00:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else if (getDayOfWeek((Date) map.get("tanggalPelayanan")) == 5) { + jamPulangPSBB = "14:30:00"; + timePulangPSBB = LocalTime.parse(jamPulangPSBB); + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulangPSBB); + } else { + datePulangPSBB = LocalDateTime.of(datePelayanan, timePulang); + } + + if (map.get("namaShift").toString().contains("Malam")) { + datePulang = datePulang.plusDays(1); + } + + if (!Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + if (map.get("departemenId").equals(Master.Departemen.RAWAT_JALAN) + && map.get("namaShift").toString().equals("Non Shift") + && CommonUtil.isNotNullOrEmpty(jamPulangPSBB) + && (dateTimePelayanan.isEqual(PSBBDate) || dateTimePelayanan.isAfter(PSBBDate)) + && (dateTimePelayanan.isBefore(PSBBEnd) + || dateTimePelayanan.isEqual(PSBBEnd))) { + if ((dateTimePelayanan.isBefore(dateMasuk) + || dateTimePelayanan.isEqual(datePulangPSBB) + || dateTimePelayanan.isAfter(datePulangPSBB))) { + rawResult.add(map); + } + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && (dateTimePelayanan.isBefore(dateMasuk) + || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_SATU_VIP) + .contains(Integer.parseInt(map.get("idKelas").toString())) + && !Arrays.stream(Master.KONSUL_VISIT) + .anyMatch(map.get("namaProduk").toString().toLowerCase()::contains) + && (dateTimePelayanan.isBefore(dateMasuk) + || dateTimePelayanan.isEqual(datePulang) + || dateTimePelayanan.isAfter(datePulang))) { + rawResult.add(map); + } + } + } else if (CommonUtil.isNullOrEmpty(map.get("jamMasuk"))) { + if (!Master.KelompokPasien.BPJS + .equals(Integer.parseInt(map.get("kelompokPasienId").toString()))) { + if (Arrays.asList(Master.Departemen.GRUP_RAWAT_JALAN) + .contains(Integer.parseInt(map.get("departemenId").toString()))) { + rawResult.add(map); + } else if (Arrays.asList(Master.Departemen.GRUP_RAWAT_INAP) + .contains(Integer.parseInt(map.get("departemenId").toString())) + && Arrays.asList(Master.Kelas.KELAS_SATU_VIP) + .contains(Integer.parseInt(map.get("idKelas").toString()))) { + rawResult.add(map); + } + } + } + } + } + } + } + + if (CommonUtil.isNotNullOrEmpty(rawResult)) { + for (Map map : rawResult) { + if (!Arrays.asList(Master.JenisPetugasPelaksana.DOKTER_ANASTESI_OR_ASISTEN_SPESIALIS) + .contains(Integer.parseInt(map.get("idJenisPelaksana").toString()))) { + map.put("idJenisPelaksana", Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA); + } + if (!listProdukId.contains(Integer.parseInt(map.get("idProduk").toString()))) { + listProdukId.add(Integer.parseInt(map.get("idProduk").toString())); + } + if (!listKelasId.contains(Integer.parseInt(map.get("idKelas").toString()))) { + listKelasId.add(Integer.parseInt(map.get("idKelas").toString())); + } + if (!listTanggalPelayanan.contains(map.get("tanggal").toString())) { + listTanggalPelayanan.add(map.get("tanggal").toString()); + } + } + + Collections.sort(listKelasId, Collections.reverseOrder()); + for (Integer idProduk : listProdukId) { + for (Integer idKelas : listKelasId) { + for (String tanggal : listTanggalPelayanan) { + Map mapResult = new HashMap<>(); + double count = 0.0; + int dataCount = 0; + for (Map map : rawResult) { + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas + && map.get("tanggal").toString().equals(tanggal)) { + count = count + Double.parseDouble(map.get("count").toString()); + dataCount = dataCount + 1; + if (dataCount == 1) { + mapResult.putAll(map); + } + } + } + if (CommonUtil.isNotNullOrEmpty(mapResult.get("count"))) { + mapResult.put("count", count); + countResult.add(mapResult); + } + } + + } + } + + for (Integer idProduk : listProdukId) { + for (Integer idKelas : listKelasId) { + Map mapResult = new HashMap<>(); + List> datas = new ArrayList<>(); + Double totalTindakan = 0.0; + int counter = 0; + for (Map map : countResult) { + Map countMap = new HashMap<>(); + if (Integer.parseInt(map.get("idProduk").toString()) == idProduk + && Integer.parseInt(map.get("idKelas").toString()) == idKelas) { + countMap.put("count", map.get("count")); + if (CommonUtil.isNotNullOrEmpty(map.get("hargaKelas1"))) { + countMap.put("harga", map.get("hargaKelas1")); + } else { + countMap.put("harga", map.get("harga")); + } + countMap.put("tanggal", map.get("tanggal")); + datas.add(countMap); + totalTindakan = totalTindakan + Double.parseDouble(map.get("count").toString()); + counter = counter + 1; + if (counter == 1) { + mapResult.putAll(map); + } + } + } + if (CommonUtil.isNotNullOrEmpty(mapResult.get("count"))) { + harga = Double.parseDouble(mapResult.get("harga").toString()); + + if (drAnastesiList.contains(idPegawai)) { + if (Arrays.asList(Master.Produk.PENUNJANG_BUKAN_ANASTESI) + .contains(mapResult.get("idProduk"))) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_PENUNJANG_BUKAN_ANASTESI; + } else if ((Integer) mapResult + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_ANASTESI; + } + } else { + if ((Integer) mapResult + .get("idJenisPelaksana") == Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS) { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_ASISTEN_SPESIALIS; + } else { + percentage = Master.LogbookDokter.PERSENTASE_TINDAKAN_DOKTER_PEMERIKSA; + } + } + + percentage = percentage / 100; + point = getPoin(harga, percentage, Master.LogbookDokter.TARIF_REMUNERASI); + pointQty = point * totalTindakan.doubleValue(); + formatPointQty = Double.parseDouble(df.format(pointQty)); + + mapResult.put("totalTindakan", totalTindakan.longValue()); + mapResult.put("datas", datas); + mapResult.put("poin", point); + mapResult.put("pointQty", formatPointQty); + + result.add(mapResult); + } + } + } + } + + return result; + } @Override public List> findPatientDetailForEveryTindakanReview(Integer idProduk, Integer idKelas, diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java index 9e4ffc69..02e8d4a5 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java @@ -3031,18 +3031,19 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb List laboranRadiologList = mapPegawaiLaboratRadiologiDao.findPegawaiLaboranRadiolog(); List drKsmUmumList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_UMUM); - + List drLabPAList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_ANATOMI); + List drLabPKList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_KLINIK); + List drRadList = pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_RADIOLOGI); for (Integer idPegawai : listIdPegawai) { SkorDokterVO skorDokterVO = new SkorDokterVO(); - if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_ANATOMI).contains(idPegawai)) { + if (drLabPAList.contains(idPegawai)) { listDetailJenisProduk = new ArrayList<>( Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI)); - } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_PATOLOGI_KLINIK) - .contains(idPegawai)) { + } else if (drLabPKList.contains(idPegawai)) { listDetailJenisProduk = new ArrayList<>( Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK)); - } else if (pegawaiDao.getDokterByKelompokKerja(Master.SubUnitKerja.KK_RADIOLOGI).contains(idPegawai)) { + } else if (drRadList.contains(idPegawai)) { listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_RADIOLOGI)); } else { listDetailJenisProduk = new ArrayList<>(Arrays.asList(Master.DetailJenisProduk.MEDIS_UTAMA)); diff --git a/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java b/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java index a0e3d678..af1e1ca3 100644 --- a/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java +++ b/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java @@ -6628,6 +6628,86 @@ public class ReportingController extends LocaleController return m; } + + @RequestMapping("/logbookPelayananDokterDetailPasien") + public ModelAndView generateLogbookPelayananDokterDetailPasien(ModelAndView m, + @RequestParam(value = "format", required = false) String format, + @RequestParam(value = "periode", required = true) String periode, + @RequestParam(value = "idPegawai", required = true) Integer idPegawai, + @RequestParam(value = "idJabatan", required = true) Integer idJabatan, + @RequestParam(value = "idAtasan", required = true) Integer idAtasan, + @RequestParam(value = "idJabatanAtasan", required = true) Integer idJabatanAtasan, + @RequestParam(value = "ffs", required = true) Boolean ffs) { + + // List> result = new ArrayList>(); + List> resultFFS = new ArrayList>(); + List> allDetailTindakan = new ArrayList<>(); + + String[] bulanArray = DateUtil.INDONESIAN_MONTH; + String[] splitData = periode.split("-"); + String bulan = ""; + if (String.valueOf(splitData[1].charAt(0)).equals("0")) { + bulan = bulanArray[Integer.parseInt(splitData[1].replace("0", "")) - 1]; + } else { + bulan = bulanArray[Integer.parseInt(splitData[1]) - 1]; + } + + // Pegawai pegawaiLoggedIn = + // indekKinerjaService.getPegawaiByUserLogin(); + // Jabatan jabatan = jabatanDao.findOne(idJabatanAtasan); + Map mapJabatan = mapPegawaiJabatanToUnitKerjaService.findAtasanDanUnitKerja(idPegawai, + idJabatan); + Map atasan = mapPegawaiJabatanToUnitKerjaService.findAtasanDanUnitKerja(idAtasan, + idJabatanAtasan); + + Map pegawai = pegawaiDao.findPegawaiById(idPegawai); + + if (ffs) { + // FFS : sudah tidak dipakai + resultFFS = indekKinerjaService.getAllPelayananByDokterForFeeForServiceReview(periode, idPegawai); + allDetailTindakan = indekKinerjaService.findPatientDetailForEveryTindakanReview(idPegawai, periode, ffs); + } else { + resultFFS = indekKinerjaService.getAllPelayananByDokterReviewForReport(periode, idPegawai); + allDetailTindakan = indekKinerjaService.findPatientDetailForEveryTindakanReview(idPegawai, periode, ffs); + } + + Long tms = 0L; + for (Map tmps : resultFFS) { + if (CommonUtil.isNotNullOrEmpty(tmps.get("totalTindakan"))) { + tms += (Long) tmps.get("totalTindakan"); + } + if (CommonUtil.isNotNullOrEmpty(tmps.get("totalVisit"))) { + tms += (Long) tmps.get("totalVisit"); + } + if (CommonUtil.isNotNullOrEmpty(tmps.get("totalKonsul"))) { + tms += (Long) tmps.get("totalKonsul"); + } + } + + m.addObject("header", "Pegawai"); + m.addObject("dataSource", resultFFS); + m.addObject("subDataSource", allDetailTindakan); + m.addObject("periode", bulan + " " + splitData[0]); + m.addObject("nip", pegawai.get("nipPns")); + m.addObject("nama", pegawai.get("nama")); + m.addObject("total", (Long) tms); + m.addObject("format", "pdf"); + if (CommonUtil.isNotNullOrEmpty(mapJabatan)) { + m.addObject("unitKerja", mapJabatan.get("unitKerja")); + m.addObject("jabatan", mapJabatan.get("jabatan")); + m.addObject("atasan", mapJabatan.get("namaAtasan")); + m.addObject("nipAtasan", mapJabatan.get("nipAtasan")); + } + if (CommonUtil.isNotNullOrEmpty(atasan)) { + m.addObject("jabatanAtasan", atasan.get("jabatan")); + } + if (format != null && !format.isEmpty()) { + m.addObject("format", format); + } + + return m; + } @RequestMapping("/lapPermohonanCuti") public ModelAndView generateLapPermohonanCuti(ModelAndView m, @@ -7098,6 +7178,55 @@ public class ReportingController extends LocaleController return m; } + + @RequestMapping("/lapLogbookPelayananStaffMedis") + public ModelAndView generatelapLogbookPelayananStaffMedis(ModelAndView m, + @RequestParam(value = "format", required = false) String format, + @RequestParam(value = "periode", required = true) String periode, + @RequestParam(value = "idDokter", required = false) Integer idDokter, + @RequestParam(value = "idJabatan", required = false) Integer idJabatan) { + + List> datas = new ArrayList<>(); + + if (!pegawaiDao.getPegawaiByKategoryPegawai(Arrays.asList(Master.KategoryPegawai.DOKTER_LUAR)) + .contains(idDokter)) { + datas = indekKinerjaService.getAllPelayananByDokterReportReview(periode, idDokter); + } + String[] splitData = periode.split("-"); + periode = periode.substring(5, 7); + + Map pegawai = pegawaiDao.findPegawaiById(idDokter); + if (CommonUtil.isNullOrEmpty(datas)) { + datas.add(pegawai); + } + Map atasan = mapPegawaiJabatanToUnitKerjaService.findAtasanDanUnitKerja(idDokter, idJabatan); + if (CommonUtil.isNotNullOrEmpty(atasan)) { + if (CommonUtil.isNotNullOrEmpty(atasan.get("idAtasan"))) { + Map pegawaiAtasan = pegawaiDao + .findPegawaiById(Integer.parseInt(atasan.get("idAtasan").toString())); + if (CommonUtil.isNotNullOrEmpty(pegawaiAtasan)) { + m.addObject("namaAtasan", pegawaiAtasan.get("nama")); + m.addObject("nipAtasan", + pegawaiAtasan.get("nip") != null ? pegawaiAtasan.get("nip") : pegawaiAtasan.get("nipPns")); + } + } + } + if (CommonUtil.isNotNullOrEmpty(pegawai)) { + m.addObject("nama", pegawai.get("nama")); + m.addObject("nip", pegawai.get("nip") != null ? pegawai.get("nip") : pegawai.get("nipPns")); + } + if (CommonUtil.isNotNullOrEmpty(atasan)) { + m.addObject("unitKerja", atasan.get("unitKerja")); + } + if (format != null && !format.isEmpty()) { + m.addObject("format", format); + } + m.addObject("dataSource", datas); + m.addObject("periode", DateUtil.INDONESIAN_MONTH[Integer.valueOf(periode) - 1] + " " + splitData[0]); + m.addObject("format", "pdf"); + + return m; + } @RequestMapping("/tindakanPasienMeninggal") public ModelAndView generateTindakanPasienMeninggal(ModelAndView m, diff --git a/jasamedika-reporting/src/main/resources/views.properties b/jasamedika-reporting/src/main/resources/views.properties index 8a5d3224..46cbb6c3 100644 --- a/jasamedika-reporting/src/main/resources/views.properties +++ b/jasamedika-reporting/src/main/resources/views.properties @@ -489,6 +489,10 @@ reporting/test.url=/WEB-INF/templates/jrxml/lapPelayananPasienKarcisDaily.jrxml reporting/lapLogbookKinerjaStaffMedis.(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView reporting/lapLogbookKinerjaStaffMedis.url=/WEB-INF/templates/jrxml/logbookKinerjaStaffMedis.jrxml +#logbookPelayananStaffMedis +reporting/lapLogbookPelayananStaffMedis.(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView +reporting/lapLogbookPelayananStaffMedis.url=/WEB-INF/templates/jrxml/logbookKinerjaStaffMedis.jrxml + ##logbookKinerjaStaffMedisRev #reporting/lapLogbookKinerjaStaffMedisRev.(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView #reporting/lapLogbookKinerjaStaffMedisRev.url=/WEB-INF/templates/jrxml/logbookKinerjaStaffMedis.jrxml diff --git a/jasamedika-reporting/src/main/webapp/WEB-INF/jasper-views.xml b/jasamedika-reporting/src/main/webapp/WEB-INF/jasper-views.xml index f8200c8b..209820de 100644 --- a/jasamedika-reporting/src/main/webapp/WEB-INF/jasper-views.xml +++ b/jasamedika-reporting/src/main/webapp/WEB-INF/jasper-views.xml @@ -28,6 +28,14 @@ /> + + diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java index 80d45739..3fd9d859 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java @@ -4823,6 +4823,21 @@ public class SdmController extends LocaleController { } } + @RequestMapping(value = "/get-all-pelayanan-dokter/{month}/{idPegawai}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity>> getAllPelayananDokter(@PathVariable("month") String month, + @PathVariable("idPegawai") Integer idPegawai, HttpServletRequest request) { + try { + List> result = indekKinerjaService.getAllPelayananByDokterReview(month, idPegawai); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + + return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); + } catch (Exception e) { + e.printStackTrace(); + return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage); + } + } + @RequestMapping(value = "/get-all-tindakan-dokter/{month}/{idPegawai}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity>> getAllTindakan(@PathVariable("month") String month, @PathVariable("idPegawai") Integer idPegawai, HttpServletRequest request) { @@ -4855,6 +4870,22 @@ public class SdmController extends LocaleController { } } + @RequestMapping(value = "/get-all-pelayanan-dokter-ffs/{month}/{idPegawai}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity>> getAllPelayananFFS(@PathVariable("month") String month, + @PathVariable("idPegawai") Integer idPegawai, HttpServletRequest request) { + try { + List> result = indekKinerjaService.getAllPelayananByDokterForFeeForServiceReview(month, + idPegawai); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + + return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); + } catch (Exception e) { + e.printStackTrace(); + return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage); + } + } + @RequestMapping(value = "/get-pendapatan-fee-for-service/{month}/{idPegawai}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity>> getPendapatanFeeForServiceReview( @PathVariable("month") String month, @PathVariable("idPegawai") Integer idPegawai,