Files
api-lis/pkg/handlers/mikrobiologi/mikrobiologi.go
2025-09-03 07:02:54 +07:00

218 lines
5.8 KiB
Go

package mikrobiologi
import (
"api-lis/internal/database"
"api-lis/pkg/database/simrs"
"api-lis/pkg/models/simrs/mikrobiologi"
"log"
"net/http"
"time"
"github.com/gin-gonic/gin"
)
// SendDataLISMikro godoc
// @Summary Send Data LIS Mikro
// @Description Send Data LIS Mikro
// @Tags LIS Mikro
// @Accept json
// @Produce json
// @Param request body mikrobiologi.RequestPasienMikrobiologi true "Pasien Mikrobiologi request"
// @Success 202 {object} mikrobiologi.ResponseLISMikro
// @Failure 400 "Bad request"
// @Router /mikrobiologi/sendmikro [post]
func SendDataLISMikro(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:", req)
dataMikro, errData := simrsDB.GetDataMikroBiologiByNoMR(req)
if errData != nil {
log.Println(errData)
c.JSON(http.StatusBadRequest, gin.H{
"message": errData,
})
return
}
dataPasien, errPasien := simrsDB.GetMPasien(req)
if errPasien != nil {
log.Println(errPasien)
c.JSON(http.StatusBadRequest, gin.H{
"message": errPasien,
})
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.ResponseLISMikro
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,
})
return
}
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
}
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)
//log.Println("DokterOrder kode-nama:", dataMikroMain.DrOrder, " - ", dokterPengirim)
if errDokter != nil {
log.Println(errDokter)
c.JSON(http.StatusBadRequest, gin.H{
"message": errDokter,
})
return
}
//return
} else if dataMikroMain.DokterPengirim != "" && dataMikroMain.DokterPengirim != "0" {
dokterPengirim, errDokter = simrsDB.GetNamaDokter(dataMikroMain.DokterPengirim)
//log.Println("DokterPengirim kode-nama:", dataMikroMain.DokterPengirim, " - ", dokterPengirim)
if errDokter != nil {
log.Println(errDokter)
c.JSON(http.StatusBadRequest, gin.H{
"message": errDokter,
})
return
}
//return
} else if dataMikroMain.DokterLab1 != "0" && dataMikroMain.DokterLab1 != "" {
dokterPengirim, errDokter = simrsDB.GetNamaDokter(dataMikroMain.DokterLab1)
//log.Println("DokterLab kode-nama:", dataMikroMain.DokterLab1, " - ", dokterPengirim)
if errDokter != nil {
log.Println(errDokter)
c.JSON(http.StatusBadRequest, gin.H{
"message": errDokter,
})
return
}
//return
} else if dataMikroMain.Pengirim != "" && dataMikroMain.Pengirim != "0" {
dokterPengirim = dataMikroMain.Pengirim
//log.Println("Pengirim kode-nama:", dataMikroMain.Pengirim, " - ", dokterPengirim)
} else {
dokterPengirim = ""
//log.Println("dokterPengirim : null")
}
for _, value := range dataLabMikro {
dataLisMikro = &mikrobiologi.RequestLISMikro{
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,
Layanan: value.NamaPemeriksaan,
StatusBayar: "",
NoTransaksi: dataMikroMain.NoLab,
Asuransi: caraBayar,
Klinis: diagnosa,
KodeSpesimen: value.NamaField,
NamaSpesimen: value.JenisKelompok,
Pengambilan: "",
}
//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
}
//log.Println(resMikro)
reqUpdate := &mikrobiologi.ReqUpdateLisMikro{
IdxOrderMikro: value.IdxOrderMikro,
NoLokal: resMikro.Message,
Kode: value.NamaField,
Spesimen: value.JenisKelompok,
}
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,
})
}
}
//log.Println("RESPONSE", responseMikro)
c.JSON(http.StatusOK, responseMikro)
}