bug fix alur
This commit is contained in:
No files matched your search
@@ -7,11 +7,83 @@ import (
|
||||
"api-lis/pkg/models/simrs/pasien"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type DetailPemeriksaan struct {
|
||||
IdxOrderMikro string
|
||||
NamaPemeriksaan string
|
||||
TanggalOrderLab string
|
||||
}
|
||||
|
||||
type KelompokPemeriksaan struct {
|
||||
JenisKelompok string
|
||||
Spesimen string
|
||||
CaraPengambilan string
|
||||
ListPemeriksaan []DetailPemeriksaan
|
||||
}
|
||||
|
||||
// CheckKeterangan digunakan untuk mengecek apakah keterangan terisi dan perlu digunakan
|
||||
func CheckKeterangan(item *mikrobiologi.OrderLabMikro) string {
|
||||
namaField := strings.TrimSpace(item.NamaField)
|
||||
keterangan := strings.TrimSpace(item.Keterangan)
|
||||
|
||||
// Jika keterangan terisi
|
||||
if keterangan != "" {
|
||||
if namaField != "" {
|
||||
// Gabungkan nama_field dan keterangan dengan spasi
|
||||
return namaField + " " + keterangan
|
||||
}
|
||||
// Jika namaField kosong, gunakan keterangan saja
|
||||
return keterangan
|
||||
}
|
||||
|
||||
// Jika tidak ada keterangan, kembalikan namaField saja
|
||||
return namaField
|
||||
}
|
||||
|
||||
// GroupDataLabMikro mengelompokkan data gelondongan berdasarkan jenis_kelompok
|
||||
func GroupDataLabMikro(data []*mikrobiologi.OrderLabMikro) map[string]*KelompokPemeriksaan {
|
||||
grouped := make(map[string]*KelompokPemeriksaan)
|
||||
|
||||
for _, item := range data {
|
||||
jk := item.JenisKelompok
|
||||
if jk == "" {
|
||||
jk = "Tanpa Kelompok" // fallback
|
||||
}
|
||||
|
||||
if grouped[jk] == nil {
|
||||
grouped[jk] = &KelompokPemeriksaan{
|
||||
JenisKelompok: jk,
|
||||
Spesimen: "-", // default
|
||||
CaraPengambilan: "lain-lain", // default
|
||||
}
|
||||
}
|
||||
|
||||
// Ambil nilai yang sebenarnya sesuai pengecekan Keterangan
|
||||
nilai := CheckKeterangan(item)
|
||||
|
||||
// Masukkan ke struct sesuai sub_kelompok
|
||||
switch item.SubKelompok {
|
||||
case "Jenis Pemeriksaan":
|
||||
grouped[jk].ListPemeriksaan = append(grouped[jk].ListPemeriksaan, DetailPemeriksaan{
|
||||
IdxOrderMikro: item.IdxOrderMikro,
|
||||
NamaPemeriksaan: nilai,
|
||||
TanggalOrderLab: item.TangggalOrderLab,
|
||||
})
|
||||
case "Jenis Spesimen":
|
||||
grouped[jk].Spesimen = nilai
|
||||
case "Cara Pengambilan Sampel":
|
||||
grouped[jk].CaraPengambilan = nilai
|
||||
}
|
||||
}
|
||||
|
||||
return grouped
|
||||
}
|
||||
|
||||
// SendDataLISMikro godoc
|
||||
// @Summary Send Data LIS Mikro
|
||||
// @Description Send Data LIS Mikro
|
||||
@@ -88,20 +160,6 @@ func SendDataLISMikro(c *gin.Context) {
|
||||
})
|
||||
continue
|
||||
}
|
||||
var specimenData *mikrobiologi.OrderLabMikroSpecimen
|
||||
var errSpecimen error
|
||||
specimenData, _, errSpecimen = simrsDB.GetDataLabMikroSpecimen(dataMikroMain.NoLab)
|
||||
if errSpecimen != nil {
|
||||
log.Println("Warning: error get Specimen:", errSpecimen)
|
||||
}
|
||||
|
||||
var caraPengambilanData *mikrobiologi.OrderLabMikroJenisPemeriksaan
|
||||
var errPengambilan error
|
||||
caraPengambilanData, _, errPengambilan = simrsDB.GetDataLabMikroJenisPemeriksaan(dataMikroMain.NoLab)
|
||||
if errPengambilan != nil {
|
||||
log.Println("Warning: error get CaraPengambilan:", errPengambilan)
|
||||
}
|
||||
|
||||
if !exist {
|
||||
log.Println("Data bukan pemeriksaan")
|
||||
continue
|
||||
@@ -192,98 +250,92 @@ func SendDataLISMikro(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
log.Println("Akan masuk loop dataLabMikro...")
|
||||
for _, value := range dataLabMikro {
|
||||
|
||||
t, err := time.Parse(time.RFC3339, value.TangggalOrderLab)
|
||||
if err != nil {
|
||||
log.Printf("Error parsing date: %v", err)
|
||||
groupedData := GroupDataLabMikro(dataLabMikro)
|
||||
|
||||
for jk, group := range groupedData {
|
||||
if len(group.ListPemeriksaan) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
tglString := t.Format("2006-01-02")
|
||||
for _, value := range group.ListPemeriksaan {
|
||||
t, err := time.Parse(time.RFC3339, value.TanggalOrderLab)
|
||||
if err != nil {
|
||||
log.Printf("Error parsing date: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
var namaSpecimen string
|
||||
if specimenData != nil && specimenData.NamaField != "" {
|
||||
namaSpecimen = specimenData.NamaField
|
||||
} else {
|
||||
namaSpecimen = "-"
|
||||
}
|
||||
tglString := t.Format("2006-01-02")
|
||||
|
||||
var pengambilan string
|
||||
if caraPengambilanData != nil && caraPengambilanData.NamaField != "" {
|
||||
pengambilan = caraPengambilanData.NamaField
|
||||
} else {
|
||||
pengambilan = "lain-lain"
|
||||
}
|
||||
log.Println("Masuk loop pemeriksaan:", value)
|
||||
dataLisMikro = &mikrobiologi.RequestLISMikro{
|
||||
TanggalReg: tglReg,
|
||||
TanggalSampel: tglString,
|
||||
NomorLab: dataMikroMain.NoLab,
|
||||
NoRM: dataMikroMain.NoMR,
|
||||
Nama: dataPasien.Nama,
|
||||
Alamat: dataPasien.Alamat,
|
||||
Kota: dataPasien.Tempat,
|
||||
TanggalLahir: tglLahirString,
|
||||
NoHP: dataPasien.NoTelpon,
|
||||
Kelamin: dataPasien.JenisKelamin,
|
||||
NIK: dataPasien.NoKTP,
|
||||
NoBPJS: dataPasien.NoKartu,
|
||||
DokterPeminta: dokterPengirim,
|
||||
AsalPasien: poli.NamaPoli,
|
||||
StatusBayar: "",
|
||||
JenisPembayaran: caraBayar,
|
||||
JenisKunjungan: jenisKunjungan,
|
||||
Diagnosa: diagnosa,
|
||||
Rujukan: rujukan,
|
||||
KodeSpesimen: jk,
|
||||
NamaSpesimen: group.Spesimen,
|
||||
Pengambilan: group.CaraPengambilan,
|
||||
JenisPemeriksaan: value.NamaPemeriksaan,
|
||||
AsalPengirim: KeteranganPengirim,
|
||||
}
|
||||
|
||||
log.Println("Masuk loop, value:", value)
|
||||
dataLisMikro = &mikrobiologi.RequestLISMikro{
|
||||
TanggalReg: tglReg,
|
||||
TanggalSampel: tglString,
|
||||
NomorLab: dataMikroMain.NoLab,
|
||||
NoRM: dataMikroMain.NoMR,
|
||||
Nama: dataPasien.Nama,
|
||||
Alamat: dataPasien.Alamat,
|
||||
Kota: dataPasien.Tempat,
|
||||
TanggalLahir: tglLahirString,
|
||||
NoHP: dataPasien.NoTelpon,
|
||||
Kelamin: dataPasien.JenisKelamin,
|
||||
NIK: dataPasien.NoKTP,
|
||||
NoBPJS: dataPasien.NoKartu,
|
||||
DokterPeminta: dokterPengirim,
|
||||
AsalPasien: poli.NamaPoli,
|
||||
StatusBayar: "",
|
||||
JenisPembayaran: caraBayar,
|
||||
JenisKunjungan: jenisKunjungan,
|
||||
Diagnosa: diagnosa,
|
||||
Rujukan: rujukan,
|
||||
KodeSpesimen: value.JenisKelompok,
|
||||
NamaSpesimen: namaSpecimen,
|
||||
Pengambilan: pengambilan,
|
||||
JenisPemeriksaan: value.NamaField,
|
||||
AsalPengirim: KeteranganPengirim,
|
||||
}
|
||||
log.Println("Sebelum masuk LIS", dataLisMikro)
|
||||
|
||||
log.Println("Sebelum masuk LIS", dataLisMikro)
|
||||
resMikro, errMikro := SendLisMikro(dataLisMikro)
|
||||
if errMikro != nil {
|
||||
log.Println(errMikro)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": errMikro.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
if resMikro.Status == "203" {
|
||||
log.Println(resMikro)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": resMikro.Message,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
resMikro, errMikro := SendLisMikro(dataLisMikro)
|
||||
if errMikro != nil {
|
||||
log.Println(errMikro)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": errMikro.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
if resMikro.Status == "203" {
|
||||
log.Println(resMikro)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": resMikro.Message,
|
||||
|
||||
reqUpdate := &mikrobiologi.ReqUpdateLisMikro{
|
||||
IdxOrderMikro: value.IdxOrderMikro,
|
||||
NoLokal: resMikro.Message,
|
||||
Kode: value.NamaPemeriksaan,
|
||||
Spesimen: group.Spesimen,
|
||||
}
|
||||
errUpdate := simrsDB.UpdateLabMikro(reqUpdate)
|
||||
if errUpdate != nil {
|
||||
log.Println(errUpdate)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": errUpdate,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
responseMikro = append(responseMikro, &mikrobiologi.ResponseLISMikro{
|
||||
NoLab: dataMikroMain.NoLab,
|
||||
Status: resMikro.Status,
|
||||
Message: resMikro.Message,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
log.Println(resMikro)
|
||||
|
||||
reqUpdate := &mikrobiologi.ReqUpdateLisMikro{
|
||||
IdxOrderMikro: value.IdxOrderMikro,
|
||||
NoLokal: resMikro.Message,
|
||||
Kode: value.NamaField,
|
||||
Spesimen: namaSpecimen,
|
||||
}
|
||||
errUpdate := simrsDB.UpdateLabMikro(reqUpdate)
|
||||
if errUpdate != nil {
|
||||
log.Println(errUpdate)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": errUpdate,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
responseMikro = append(responseMikro, &mikrobiologi.ResponseLISMikro{
|
||||
NoLab: dataMikroMain.NoLab,
|
||||
Status: resMikro.Status,
|
||||
Message: resMikro.Message,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,3 +376,226 @@ func EkstrakHasil(c *gin.Context) {
|
||||
//log.Println(resEkstrakHasil)
|
||||
c.JSON(http.StatusOK, resEkstrakHasil)
|
||||
}
|
||||
|
||||
// PreviewDataLISMikro godoc
|
||||
// @Summary Preview Data LIS Mikro
|
||||
// @Description Preview Data LIS Mikro tanpa dikirim
|
||||
// @Tags LIS Mikro
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param request body mikrobiologi.RequestPasienMikrobiologi true "Pasien Mikrobiologi request"
|
||||
// @Success 200 {array} mikrobiologi.RequestLISMikro
|
||||
// @Failure 400 "Bad request"
|
||||
// @Router /mikrobiologi/previewmikro [post]
|
||||
func PreviewDataLISMikro(c *gin.Context) {
|
||||
db := database.New().GetDB("simrs")
|
||||
if db == nil {
|
||||
log.Println("DB nil")
|
||||
c.JSON(500, gin.H{"message": "DB nil"})
|
||||
return
|
||||
}
|
||||
simrsDB := simrs.NewDatabaseService(db)
|
||||
var req *mikrobiologi.RequestPasienMikrobiologi
|
||||
|
||||
err := c.Bind(&req)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": err,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("REQUEST dari frontend (preview):", req)
|
||||
|
||||
dataMikro, errData := simrsDB.GetDataMikroBiologiByNoMR(req)
|
||||
if errData != nil {
|
||||
log.Println(errData)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": errData,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
var dataPasien *pasien.MPasien
|
||||
dataPasien, err = simrsDB.GetMPasien(req)
|
||||
if err != nil {
|
||||
log.Println()
|
||||
dataPasien, err = simrsDB.GetPasienAPS(req)
|
||||
if err != nil {
|
||||
c.JSON(500, gin.H{
|
||||
"code": 500,
|
||||
"message": err,
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
tglLahir, errParse := time.Parse(time.RFC3339, dataPasien.TanggalLahir)
|
||||
if errParse != nil {
|
||||
log.Println(errParse)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": errParse,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
var responseMikro []*mikrobiologi.RequestLISMikro
|
||||
var dataLisMikro *mikrobiologi.RequestLISMikro
|
||||
|
||||
tglLahirString := tglLahir.Format("2006-01-02")
|
||||
for _, dataMikroMain := range dataMikro {
|
||||
dataLabMikro, exist, errDiagnosa := simrsDB.GetDataLabMikro(dataMikroMain.NoLab)
|
||||
if errDiagnosa != nil {
|
||||
log.Println(errDiagnosa)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": errDiagnosa,
|
||||
})
|
||||
continue
|
||||
}
|
||||
if !exist {
|
||||
log.Println("Data bukan pemeriksaan")
|
||||
continue
|
||||
}
|
||||
|
||||
poli, errDokter := simrsDB.GetNamaRuang(dataMikroMain.KodePoli)
|
||||
if errDokter != nil {
|
||||
log.Println(errDokter)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": errDokter,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
KeteranganPengirim := simrsDB.GetKetPengirim(dataMikroMain.IdxDaftar)
|
||||
|
||||
caraBayar, errCaraBayar := simrsDB.GetCaraBayar(dataMikroMain)
|
||||
if errCaraBayar != nil {
|
||||
log.Println(errCaraBayar)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": errCaraBayar,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
diagnosa, errDiagnosa := simrsDB.GetDiagnosa(dataMikroMain.IdxDaftar)
|
||||
if errDiagnosa != nil {
|
||||
log.Println(errDiagnosa)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"message": errDiagnosa,
|
||||
})
|
||||
}
|
||||
|
||||
var dokterPengirim string
|
||||
|
||||
if dataMikroMain.DrOrder != "0" && dataMikroMain.DrOrder != "" {
|
||||
dokterPengirim, errDokter = simrsDB.GetNamaDokter(dataMikroMain.DrOrder)
|
||||
if errDokter != nil {
|
||||
log.Println("Failed to get dokter from DrOrder:", errDokter)
|
||||
dokterPengirim = ""
|
||||
}
|
||||
}
|
||||
if dokterPengirim == "" && dataMikroMain.DokterPengirim != "" && dataMikroMain.DokterPengirim != "0" {
|
||||
dokterPengirim, errDokter = simrsDB.GetNamaDokter(dataMikroMain.DokterPengirim)
|
||||
if errDokter != nil {
|
||||
log.Println("Failed to get dokter from DokterPengirim:", errDokter)
|
||||
dokterPengirim = ""
|
||||
}
|
||||
}
|
||||
|
||||
if dokterPengirim == "" && dataMikroMain.DokterLab1 != "0" && dataMikroMain.DokterLab1 != "" {
|
||||
dokterPengirim, errDokter = simrsDB.GetNamaDokter(dataMikroMain.DokterLab1)
|
||||
if errDokter != nil {
|
||||
log.Println("Failed to get dokter from DokterLab1:", errDokter)
|
||||
dokterPengirim = ""
|
||||
}
|
||||
}
|
||||
|
||||
if dokterPengirim == "" && dataMikroMain.Pengirim != "" && dataMikroMain.Pengirim != "0" {
|
||||
dokterPengirim = dataMikroMain.Pengirim
|
||||
}
|
||||
|
||||
var tglReg string
|
||||
|
||||
if dataMikroMain.StatusRajal == "1" {
|
||||
tglReg, err = simrsDB.GetTglRegPendaftaran(dataMikroMain.IdxDaftar)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
c.JSON(http.StatusBadRequest, gin.H{"message": err})
|
||||
return
|
||||
}
|
||||
} else if dataMikroMain.StatusRajal == "0" {
|
||||
tglReg, err = simrsDB.GetTglMasukRS(dataMikroMain.IdxDaftar)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
c.JSON(http.StatusBadRequest, gin.H{"message": err})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
rujukan, jenisKunjungan, errRujukan := simrsDB.GetKetRujukan(dataMikroMain.NoMR)
|
||||
if errRujukan != nil {
|
||||
log.Println(errRujukan)
|
||||
c.JSON(http.StatusBadRequest, gin.H{"message": errRujukan})
|
||||
return
|
||||
}
|
||||
|
||||
groupedData := GroupDataLabMikro(dataLabMikro)
|
||||
|
||||
for jk, group := range groupedData {
|
||||
if len(group.ListPemeriksaan) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, value := range group.ListPemeriksaan {
|
||||
t, err := time.Parse(time.RFC3339, value.TanggalOrderLab)
|
||||
if err != nil {
|
||||
log.Printf("Error parsing date: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
tglString := t.Format("2006-01-02")
|
||||
|
||||
dataLisMikro = &mikrobiologi.RequestLISMikro{
|
||||
TanggalReg: tglReg,
|
||||
TanggalSampel: tglString,
|
||||
NomorLab: dataMikroMain.NoLab,
|
||||
NoRM: dataMikroMain.NoMR,
|
||||
Nama: dataPasien.Nama,
|
||||
Alamat: dataPasien.Alamat,
|
||||
Kota: dataPasien.Tempat,
|
||||
TanggalLahir: tglLahirString,
|
||||
NoHP: dataPasien.NoTelpon,
|
||||
Kelamin: dataPasien.JenisKelamin,
|
||||
NIK: dataPasien.NoKTP,
|
||||
NoBPJS: dataPasien.NoKartu,
|
||||
DokterPeminta: dokterPengirim,
|
||||
AsalPasien: poli.NamaPoli,
|
||||
StatusBayar: "",
|
||||
JenisPembayaran: caraBayar,
|
||||
JenisKunjungan: jenisKunjungan,
|
||||
Diagnosa: diagnosa,
|
||||
Rujukan: rujukan,
|
||||
KodeSpesimen: jk,
|
||||
NamaSpesimen: group.Spesimen,
|
||||
Pengambilan: group.CaraPengambilan,
|
||||
JenisPemeriksaan: value.NamaPemeriksaan,
|
||||
AsalPengirim: KeteranganPengirim,
|
||||
}
|
||||
|
||||
responseMikro = append(responseMikro, dataLisMikro)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(responseMikro) == 0 {
|
||||
log.Println("Tidak ada data lab mikro yang diproses")
|
||||
c.JSON(http.StatusCreated, gin.H{
|
||||
"message": "Tidak ada data pemeriksaan mikrobiologi ditemukan",
|
||||
"data": []interface{}{},
|
||||
})
|
||||
return
|
||||
}
|
||||
log.Println("RESPONSE (preview)", responseMikro)
|
||||
c.JSON(http.StatusOK, responseMikro)
|
||||
}
|
||||
Reference in New Issue
Block a user