package com.jasamedika.medifirst2000.dao; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.jasamedika.medifirst2000.entities.IndekKinerja; /** * Repository class for IndekKinerja * * @author Generator */ @Repository("RevIndekKinerjaDao") public interface RevIndekKinerjaDao extends PagingAndSortingRepository { @Query(" select new Map( pelayananPasien.tglPelayanan as tglPelayanan,jenisProduk.id as idJenisProduk," + " produk.namaProduk as namaProduk, produk.id as idProduk, kelas.namaKelas as namaKelas)" + " from PelayananPasienPetugas pelayananPasienPetugas" + " left join pelayananPasienPetugas.pelayananPasien pelayananPasien" + " left join pelayananPasien.produk produk " + " left join produk.detailJenisProduk detail" + " left join pelayananPasien.kelas kelas " + " left join detail.jenisProduk jenisProduk " + " where pelayananPasienPetugas.ObjectPegawaiId=:id and to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') " + " between :startDate and :endDate and detail.id in :listIdJenisProduk " + " order by produk.namaProduk, kelas.namaKelas, pelayananPasien.tglPelayanan asc") public List> findByIdUser(@Param("id") Integer id, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("listIdJenisProduk") List listIdJenisProduk); @Query(" select new Map( pelayananPasien.tglPelayanan as tglPelayanan,jenisProduk.id as idJenisProduk," + " produk.namaProduk as namaProduk, produk.id as idProduk, kelas.namaKelas as namaKelas)" + " from PelayananPasienPetugas pelayananPasienPetugas" + " left join pelayananPasienPetugas.pelayananPasien pelayananPasien" + " left join pelayananPasien.produk produk " + " left join produk.detailJenisProduk detail" + " left join pelayananPasien.kelas kelas " + " left join detail.jenisProduk jenisProduk " + " where pelayananPasienPetugas.ObjectPegawaiId=:id and to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') " + " between :startDate and :endDate and detail.id in :listIdJenisProduk " + " and produk.id = :idProduk " + " order by pelayananPasien.tglPelayanan, produk.namaProduk, kelas.namaKelas asc") public List> findTindakanByIdUser(@Param("id") Integer id, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("idProduk") Integer idProduk, @Param("listIdJenisProduk") List listIdJenisProduk); @Query(" select new Map( pelayananPasien.tglPelayanan as tglPelayanan,jenisProduk.id as idJenisProduk," + " produk.namaProduk as namaProduk, produk.id as idProduk, kelas.namaKelas as namaKelas)" + " from PelayananPasienPetugas pelayananPasienPetugas" + " left join pelayananPasienPetugas.pelayananPasien pelayananPasien" + " left join pelayananPasien.produk produk " + " left join produk.detailJenisProduk detail" + " left join pelayananPasien.kelas kelas " + " left join detail.jenisProduk jenisProduk " + " where pelayananPasienPetugas.ObjectPegawaiId=:id and to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') " + " between :startDate and :endDate and detail.id in :listIdJenisProduk " + " order by pelayananPasien.tglPelayanan, produk.namaProduk, kelas.namaKelas asc") public List> findTindakanByIdUser(@Param("id") Integer id, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("listIdJenisProduk") List listIdJenisProduk); @Query(" select distinct new Map(produk.id as id, produk.namaProduk as namaProduk)" + " from PelayananPasienPetugas pelayananPasienPetugas" + " left join pelayananPasienPetugas.pelayananPasien pelayananPasien" + " left join pelayananPasien.produk produk " + " left join produk.detailJenisProduk detail" + " left join pelayananPasien.kelas kelas " + " left join detail.jenisProduk jenisProduk " + " where pelayananPasienPetugas.ObjectPegawaiId=:id and pelayananPasien.tglPelayanan " + " between :start and :end and detail.id in :listIdJenisProduk " + " order by produk.namaProduk asc") public List> getAllTindakanByPeriod(@Param("id") Integer id, @Param("start") Date start, @Param("end") Date end, @Param("listIdJenisProduk") List listIdJenisProduk); String QueryList = "select new map(case when pelayananPasienPetugas.kdjenispetugaspe.id in (6,13) then pelayananPasienPetugas.kdjenispetugaspe.id else 4 end as idJenisPelaksana, " + "detail.id as detailId,detail.detailJenisProduk as detailJenisProduk" + ",produk.namaProduk as namaProduk, produk.id as idProduk , kelas.namaKelas as namaKelas, kelas.id as idKelas" + ",(select distinct harga.hargaNetto1 from HargaNettoProdukByKelas harga " + "where harga.produkId = produk.id " + "and ((harga.statusEnabled is true and harga.reportDisplay = 'tarif_2022_Nov') " + "or (harga.statusEnabled is false and harga.reportDisplay <> 'tarif_2022_Nov')) " + "and harga.kelasId = 3) as hargaKelas1" + ",pelayananPasien.hargaSatuan as harga) from PelayananPasienPetugas pelayananPasienPetugas " + " left join pelayananPasienPetugas.pelayananPasien pelayananPasien " + " left join pelayananPasien.produk produk " + " left join produk.detailJenisProduk detail" + " left join pelayananPasien.kelas kelas " + " where pelayananPasienPetugas.statusEnabled is true " + " and pelayananPasien.statusEnabled is true " + " and produk.statusEnabled is true " + " and detail.statusEnabled is true " + " and kelas.statusEnabled is true " + " and pelayananPasienPetugas.kdjenispetugaspe.id <> 2 " + " and pelayananPasienPetugas.ObjectPegawaiId =:id " // + " and to_char(pelayananPasien.tglPelayanan,'yyyy-MM') = :month // " + " and detail.id in (:listIdJenisProduk) "; String orderList = " group by case when pelayananPasienPetugas.kdjenispetugaspe.id in (6,13) then pelayananPasienPetugas.kdjenispetugaspe.id else 4 end, detail.id ,detail.detailJenisProduk ,produk.namaProduk , produk.id , kelas.namaKelas , " + " kelas.id,pelayananPasien.hargaSatuan " + " order by produk.namaProduk, kelas.namaKelas asc "; String monthPelayanan = " and to_char(pelayananPasien.tglPelayanan,'yyyy-MM') = :month "; String tanggalPelayanan = " and to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') = :tanggal "; @Query(QueryList + monthPelayanan + orderList) public List> findIdProdukByIdUser(@Param("id") Integer id, @Param("month") String month, @Param("listIdJenisProduk") List listIdJenisProduk); @Query(QueryList + tanggalPelayanan + orderList) public List> findIdProdukHarianByIdUser(@Param("id") Integer id, @Param("tanggal") String tanggal, @Param("listIdJenisProduk") List listIdJenisProduk); @Query(" select distinct new Map (jenisProduk.id as idJenisProduk, CAST(sum(pelayananPasien.jumlah) as long) as count ," + " produk.namaProduk as namaProduk, produk.id as idProduk)" + " from PelayananPasienPetugas pelayananPasienPetugas" + " left join pelayananPasienPetugas.pelayananPasien pelayananPasien" + " left join pelayananPasien.produk produk " + " left join produk.detailJenisProduk detail" + " left join pelayananPasien.kelas kelas " + " left join detail.jenisProduk jenisProduk " + " where pelayananPasienPetugas.ObjectPegawaiId=:id and to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') " + " between :startDate and :endDate and detail.id in :listIdJenisProduk group by produk.namaProduk,jenisProduk.id,produk.id ") public List> findCountTindakanByIdUser(@Param("id") Integer id, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("listIdJenisProduk") List listIdJenisProduk); @Query(" select distinct CAST(sum(pelayananPasien.jumlah) as long) as capaian " + " from PelayananPasienPetugas pelayananPasienPetugas " + " left join pelayananPasienPetugas.pelayananPasien pelayananPasien" + " left join pelayananPasien.produk produk " + " left join produk.detailJenisProduk detail" + " left join pelayananPasien.kelas kelas " + " left join detail.jenisProduk jenisProduk " + " where pelayananPasienPetugas.ObjectPegawaiId=:id and to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') " + " between :startDate and :endDate and detail.id in :listIdJenisProduk") public Long findTotalTindakan(@Param("id") Integer id, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("listIdJenisProduk") List listIdJenisProduk); String tindakanDokterQuery = "select new Map(dokter.id as idPegawai, " + "jenisPetugas.id as idJenisPelaksana, " + "detail.id as detailId, " + "detail.detailJenisProduk as detailJenisProduk, " + "produk.id as idProduk, " + "produk.namaProduk as namaProduk, " + "kp.id as kelompokPasienId, kp.kelompokPasien as kelompokPasien, " + "kelas.id as idKelas, " + "kelas.namaKelas as namaKelas, " + "(select distinct harga.hargaNetto1 from HargaNettoProdukByKelas harga " + "where harga.produkId = produk.id " + "and ((harga.statusEnabled is true and harga.reportDisplay = 'tarif_2022_Nov') " + "or (harga.statusEnabled is false and harga.reportDisplay <> 'tarif_2022_Nov')) " + "and harga.kelasId = :idKelasSatu) as hargaKelas1, " + "pelayananPasien.noRec as noRec, " + "coalesce(pelayananPasien.hargaSatuan, 0) as harga, " + "coalesce(pelayananPasien.hargaDiscount,0) as diskon, " + "pelayananPasien.jumlah as count, " + "to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') as tanggal, " + "cast(pelayananPasien.tglPelayanan as timestamp) as tanggalPelayanan, " + "pasienDaftar.kelompokPasienId as kelompokPasienId, " + "pasienDaftar.rekananId as rekananId, " + "pasienDaftar.diskonPegawai as statusDiskon, " + "antrian.pegawaiId as idDPJP, " + "kategoryPegawai.id as kategoryPegawaiId, " + "departemen.id as departemenId, " + "ruangan.id as ruanganId, " + "to_char(kalender.tanggal, 'yyyy-MM-dd') as tanggalKalender, " + "shift.jamMasuk as jamMasuk, " + "shift.jamPulang as jamPulang, " + "shift.namaShift as namaShift) " + "from PelayananPasienPetugas pelayananPasienPetugas, " + "PegawaiJadwalKerja jadwalKerja, " + "Kalender kalender, " + "ShiftKerja shift " + "left join pelayananPasienPetugas.pelayananPasien pelayananPasien " + "left join pelayananPasienPetugas.kdjenispetugaspe jenisPetugas " + "left join pelayananPasienPetugas.kdpegawai dokter " + "left join pelayananPasien.produk produk " + "left join pelayananPasien.kelas kelas " + "left join pelayananPasien.pasienDaftar antrian " + "left join dokter.kategoryPegawai kategoryPegawai " + "left join produk.detailJenisProduk detail " + "left join antrian.ruangan ruangan " + "left join antrian.pasienDaftar pasienDaftar " + "left join pasienDaftar.kelompokPasien kp " + "left join detail.jenisProduk jenisProduk " + "left join ruangan.departemen departemen " + "where dokter.id = jadwalKerja.pegawaiId " + "and kalender.id = jadwalKerja.tanggalId " + "and shift.id = jadwalKerja.shiftId " + "and to_char(kalender.tanggal, 'yyyy-MM-dd') = to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') " + "and (pelayananPasienPetugas.statusEnabled is null or pelayananPasienPetugas.statusEnabled is true) " + "and (pelayananPasien.statusEnabled is null or pelayananPasien.statusEnabled is true) " + "and (antrian.statusEnabled is null or antrian.statusEnabled is true) " + "and (pasienDaftar.statusEnabled is null or pasienDaftar.statusEnabled is true) " + "and jenisPetugas.statusEnabled is true " + "and dokter.statusEnabled is true " + "and produk.statusEnabled is true " + "and detail.statusEnabled is true " + "and kelas.statusEnabled is true " + "and kategoryPegawai.statusEnabled is true " + "and ruangan.statusEnabled is true " + "and departemen.statusEnabled is true " + "and jenisProduk.statusEnabled is true " + "and pelayananPasienPetugas.ObjectPegawaiId = :idPegawai " + "and jenisPetugas.id <> :idPetugasPelaksana " + "and to_char(pelayananPasien.tglPelayanan,'yyyy-MM') = :month "; String orderGrid = "order by produk.namaProduk, kelas.namaKelas, to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd')"; String orderCetak = "order by to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd'), produk.namaProduk, kelas.namaKelas"; @Query(tindakanDokterQuery + orderGrid) public List> getAllTindakanDokter(@Param("idKelasSatu") Integer idKelasSatu, @Param("idPegawai") Integer idPegawai, @Param("idPetugasPelaksana") int idPetugasPelaksana, @Param("month") String month); @Query(tindakanDokterQuery + orderCetak) public List> getAllTindakanDokterCetak(@Param("idKelasSatu") Integer idKelasSatu, @Param("idPegawai") Integer idPegawai, @Param("idPetugasPelaksana") int idPetugasPelaksana, @Param("month") String month); String detailPasienQuery = "select new Map(pelayananPasienPetugas.noRec as norecPetugas," + "ruangan.namaRuangan as ruangan," + "pelayananPasien.noRec as noRecPelayananPasien," + "detail.id as detailId, " + "produk.namaProduk as namaProduk," + "pasien.namaPasien as namapasien," + "pasien.noCm as noCm," + "pasien.tglLahir as tglLahir," + "pasienDaftar.noRegistrasi as noRegistrasi," + "pasienDaftar.tglRegistrasi as tglRegistrasi," + "pelayananPasien.hargaSatuan as harga," + "coalesce(pelayananPasien.hargaDiscount,0) as diskon," + "pelayananPasien.jumlah as jumlah, " + "(select distinct harga.hargaNetto1 from HargaNettoProdukByKelas harga " + "where harga.produkId = produk.id " + "and ((harga.statusEnabled is true and harga.reportDisplay = 'tarif_2022_Nov') " + "or (harga.statusEnabled is false and harga.reportDisplay <> 'tarif_2022_Nov')) " + "and harga.kelasId = :idKelasSatu) as hargaKelas1," + "pelayananPasien.tglPelayanan as tglpelayanan," + "kelas.namaKelas as namaKelas," + "pasienDaftar.tglPulang as tglPulang," + "produk.id as idProduk," + "dokter.id as idPegawai," + "to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') as tglpel," + "cast(pelayananPasien.tglPelayanan as timestamp) as tanggalPelayanan, " + "pasienDaftar.kelompokPasienId as kelompokPasienId," + "pasienDaftar.rekananId as rekananId," + "pasienDaftar.diskonPegawai as statusDiskon, " + "antrian.pegawaiId as idDPJP, " + "kategoryPegawai.id as kategoryPegawaiId, " + "kelas.id as idKelas," + "jenisPetugas.id as idJenisPetugas,jenisPetugas.jenisPetugasPe as jenisPetugas, " + "departemen.id as departemenId, " + "to_char(kalender.tanggal, 'yyyy-MM-dd') as tanggalKalender, " + "shift.jamMasuk as jamMasuk, " + "shift.jamPulang as jamPulang, " + "shift.namaShift as namaShift) " + "from PelayananPasienPetugas pelayananPasienPetugas, " + "PegawaiJadwalKerja jadwalKerja, " + "Kalender kalender, " + "ShiftKerja shift " + "left join pelayananPasienPetugas.pelayananPasien pelayananPasien " + "left join pelayananPasienPetugas.kdjenispetugaspe jenisPetugas " + "left join pelayananPasienPetugas.kdpegawai dokter " + "left join pelayananPasien.produk produk " + "left join pelayananPasien.kelas kelas " + "left join pelayananPasien.pasienDaftar antrian " + "left join dokter.kategoryPegawai kategoryPegawai " + "left join produk.detailJenisProduk detail " + "left join antrian.ruangan ruangan " + "left join antrian.pasienDaftar pasienDaftar " + "left join detail.jenisProduk jenisProduk " + "left join ruangan.departemen departemen " + "left join pasienDaftar.pasien pasien " + "where dokter.id = jadwalKerja.pegawaiId " + "and kalender.id = jadwalKerja.tanggalId " + "and shift.id = jadwalKerja.shiftId " + "and to_char(kalender.tanggal, 'yyyy-MM-dd') = to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') " + "and (pelayananPasienPetugas.statusEnabled is null or pelayananPasienPetugas.statusEnabled is true) " + "and (pelayananPasien.statusEnabled is null or pelayananPasien.statusEnabled is true) " + "and (antrian.statusEnabled is null or antrian.statusEnabled is true) " + "and (pasienDaftar.statusEnabled is null or pasienDaftar.statusEnabled is true) " + "and jenisPetugas.statusEnabled is true " + "and dokter.statusEnabled is true " + "and produk.statusEnabled is true " + "and detail.statusEnabled is true " + "and kelas.statusEnabled is true " + "and kategoryPegawai.statusEnabled is true " + "and ruangan.statusEnabled is true " + "and departemen.statusEnabled is true " + "and jenisProduk.statusEnabled is true " + "and antrian.kelasId = :idKelas " + "and pelayananPasienPetugas.ObjectPegawaiId = :idPegawai " + "and produk.id = :idProduk " + "and pasienDaftar.kelompokPasienId = :idKelompokPasien " + "and jenisPetugas.id <> :idPetugasPelaksana "; String detailPasienQueryBundled = "select new Map(pelayananPasienPetugas.noRec as norecPetugas," + "ruangan.namaRuangan as ruangan," + "pelayananPasien.noRec as noRecPelayananPasien," + "detail.id as detailId, " + "produk.namaProduk as namaProduk," + "pasien.namaPasien as namapasien," + "pasien.noCm as noCm," + "pasien.tglLahir as tglLahir," + "pasienDaftar.noRegistrasi as noRegistrasi," + "pasienDaftar.tglRegistrasi as tglRegistrasi," + "antrian.pegawaiId as idDPJP," + "pelayananPasien.hargaSatuan as harga," + "coalesce(pelayananPasien.hargaDiscount,0) as diskon," + "pelayananPasien.jumlah as jumlah, " + "(select distinct harga.hargaNetto1 from HargaNettoProdukByKelas harga " + "where harga.produkId = produk.id " + "and ((harga.statusEnabled is true and harga.reportDisplay = 'tarif_2022_Nov') " + "or (harga.statusEnabled is false and harga.reportDisplay <> 'tarif_2022_Nov')) " + "and harga.kelasId = :idKelasSatu) as hargaKelas1," + "pelayananPasien.tglPelayanan as tglpelayanan," + "kelas.namaKelas as namaKelas," + "pasienDaftar.tglPulang as tglPulang," + "produk.id as idProduk," + "dokter.id as idPegawai," + "to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') as tglpel," + "cast(pelayananPasien.tglPelayanan as timestamp) as tanggalPelayanan, " + "pasienDaftar.kelompokPasienId as kelompokPasienId, " + "pasienDaftar.rekananId as rekananId," + "kategoryPegawai.id as kategoryPegawaiId, " + "kelas.id as idKelas," + "jenisPetugas.id as idJenisPetugas,jenisPetugas.jenisPetugasPe as jenisPetugas, " + "departemen.id as departemenId, " + "to_char(kalender.tanggal, 'yyyy-MM-dd') as tanggalKalender, " + "shift.jamMasuk as jamMasuk, " + "shift.jamPulang as jamPulang, " + "shift.namaShift as namaShift) " + "from PelayananPasienPetugas pelayananPasienPetugas, " + "PegawaiJadwalKerja jadwalKerja, " + "Kalender kalender, " + "ShiftKerja shift " + "left join pelayananPasienPetugas.pelayananPasien pelayananPasien " + "left join pelayananPasienPetugas.kdjenispetugaspe jenisPetugas " + "left join pelayananPasienPetugas.kdpegawai dokter " + "left join pelayananPasien.produk produk " + "left join pelayananPasien.kelas kelas " + "left join pelayananPasien.pasienDaftar antrian " + "left join dokter.kategoryPegawai kategoryPegawai " + "left join produk.detailJenisProduk detail " + "left join antrian.ruangan ruangan " + "left join antrian.pasienDaftar pasienDaftar " + "left join detail.jenisProduk jenisProduk " + "left join ruangan.departemen departemen " + "left join pasienDaftar.pasien pasien " + "where dokter.id = jadwalKerja.pegawaiId " + "and kalender.id = jadwalKerja.tanggalId " + "and shift.id = jadwalKerja.shiftId " + "and to_char(kalender.tanggal, 'yyyy-MM-dd') = to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') " + "and (pelayananPasienPetugas.statusEnabled is null or pelayananPasienPetugas.statusEnabled is true) " + "and (pelayananPasien.statusEnabled is null or pelayananPasien.statusEnabled is true) " + "and (antrian.statusEnabled is null or antrian.statusEnabled is true) " + "and (pasienDaftar.statusEnabled is null or pasienDaftar.statusEnabled is true) " + "and jenisPetugas.statusEnabled is true " + "and dokter.statusEnabled is true " + "and produk.statusEnabled is true " + "and detail.statusEnabled is true " + "and kelas.statusEnabled is true " + "and kategoryPegawai.statusEnabled is true " + "and ruangan.statusEnabled is true " + "and departemen.statusEnabled is true " + "and jenisProduk.statusEnabled is true " + "and pelayananPasienPetugas.ObjectPegawaiId = :idPegawai " + "and jenisPetugas.id <> :idPetugasPelaksana "; String tanggal = "and to_char(pelayananPasien.tglPelayanan,'yyyy-MM-dd') = :tgl "; String bulan = "and to_char(pelayananPasien.tglPelayanan,'yyyy-MM') = :periode "; String orderTanggal = "order by pelayananPasien.tglPelayanan"; @Query(detailPasienQuery + tanggal + orderTanggal) public List> getDetailPasienTindakanDokter(@Param("idKelasSatu") Integer idKelasSatu, @Param("idKelas") Integer idKelas, @Param("idPegawai") Integer idPegawai, @Param("idProduk") Integer idProduk, @Param("idKelompokPasien") Integer idKelompokPasien, @Param("idPetugasPelaksana") int idPetugasPelaksana, @Param("tgl") String tgl); @Query(detailPasienQuery + bulan + orderTanggal) public List> getDetailPasienTindakanDokterPerPeriode(@Param("idKelasSatu") Integer idKelasSatu, @Param("idKelas") Integer idKelas, @Param("idPegawai") Integer idPegawai, @Param("idProduk") Integer idProduk, @Param("idKelompokPasien") Integer idKelompokPasien, @Param("idPetugasPelaksana") int idPetugasPelaksana, @Param("periode") String periode); @Query(detailPasienQueryBundled + tanggal + orderTanggal) public List> getDetailPasienTindakanDokter(@Param("idKelasSatu") Integer idKelasSatu, @Param("idPegawai") Integer idPegawai, @Param("idPetugasPelaksana") int idPetugasPelaksana, @Param("tgl") String tgl); @Query(detailPasienQueryBundled + bulan + orderTanggal) public List> getDetailPasienTindakanDokterPerPeriode(@Param("idKelasSatu") Integer idKelasSatu, @Param("idPegawai") Integer idPegawai, @Param("idPetugasPelaksana") int idPetugasPelaksana, @Param("periode") String periode); }