init project

This commit is contained in:
2025-01-31 11:04:28 +07:00
parent 562c727ed6
commit 66c9f17dde
21 changed files with 725 additions and 57 deletions
+11
View File
@@ -0,0 +1,11 @@
package databaserepo
import "gorm.io/gorm"
type DatabaseService struct {
DB *gorm.DB
}
func NewDatabaseService(db *gorm.DB) *DatabaseService {
return &DatabaseService{DB: db}
}
+16
View File
@@ -0,0 +1,16 @@
package databaserepo
import (
"log"
)
func (s *DatabaseService) GetNamaDokter(kdDokter string) (string, error) {
var namaDokter string
querySelect := `SELECT namadokter FROM m_dokter where "kddokter" = ?`
errSelect := s.DB.Debug().Raw(querySelect, kdDokter).Scan(&namaDokter).Error
if errSelect != nil {
log.Println(errSelect)
return "", errSelect
}
return namaDokter, nil
}
+82
View File
@@ -0,0 +1,82 @@
package databaserepo
import (
"api-lis/pkg/models/simrs/mikrobiologi"
"errors"
"log"
"gorm.io/gorm"
)
func (s *DatabaseService) GetDataMikroBiologi(req *mikrobiologi.RequestPasienMikrobiologi) ([]*mikrobiologi.DataPasienMikrobiologi, error) {
var dataPasien []*mikrobiologi.DataPasienMikrobiologi
query := `select tom."nomr" as nomr, tomm."nonota" as nonota, tom."idxdaftar" as idxdaftar, tom."tglorder" as tglorder, tom."nolab" as nolab, tom."rajal" as statusrajal, tom."aps" as statusaps,
mp."nama" as nama, mp."noktp" as noktp, mp."noktp_baru" as noktpbaru, mp."tempat" as tmptlahir, mp."tgllahir" as tgllahir, mp."jeniskelamin" as jeniskelamin, mp."alamat" as alamat,
mpa."nama" as namaaps, mpa."noktp" as noktpaps, mpa."tempat" as tmptlahiraps, mpa."tgllahir" as tgllahiraps, mpa."jeniskelamin" as jeniskelaminaps, mpa."alamat" as alamataps,
mr."nama" as namaruang, mr."kelas" as kelasruang,
trj."kodetarif" as kodetarifrajal,
trp."kodetarif" as kodetarifranap
from t_orderlabmikro tom
left join m_pasien mp on mp."nomr" = tom."nomr"
left join m_pasien_aps mpa on mpa."nomr" = tom."nomr"
left join m_ruang mr on mr."no" = tom."kdpoli"
left join t_orderlabmikro_main tomm on tomm."nolab" = tom."nolab"
left join t_billrajal trj on trj."nonota" = CAST(tomm."nonota" AS int8)
left join t_billranap trp on trp."nonota" = CAST(tomm."nonota" AS int8)
where tom."nomr" = ?
and tom."idxdaftar" = ?
group by (tom."nomr",tomm."nonota",tom."idxdaftar",tom."tglorder",tom."nolab",tom."rajal",tom."aps",mp."nama",mp."noktp",mp."noktp_baru",mp."tempat",mp."tgllahir",mp."jeniskelamin",mp."alamat",mpa."nama",mpa."noktp",
mpa."tempat",mpa."tgllahir",mpa."jeniskelamin",mpa."alamat",mr."nama",mr."kelas",trj."kodetarif",trp."kodetarif")
`
errQuery := s.DB.Debug().Raw(query, req.NOMR, req.IDXDaftar).Scan(&dataPasien).Error
if errQuery != nil {
if errors.Is(errQuery, gorm.ErrRecordNotFound) {
errMsg := errors.New("Data Tidak Ditemukan")
log.Println(errMsg)
return nil, errMsg
}
log.Println(errQuery)
return nil, errQuery
}
return dataPasien, nil
}
func (s *DatabaseService) GetDataMikroBiologiByNoMR(req *mikrobiologi.RequestPasienMikrobiologi) ([]*mikrobiologi.OrderLabMikroMain, error) {
var data []*mikrobiologi.OrderLabMikroMain
query := `select * from "t_orderlabmikro_main" where "nomr" = ? and "idxdaftar" = ? and "nolab" = ?`
errSelect := s.DB.Debug().Raw(query, req.NOMR, req.IDXDaftar, req.NoLab).Scan(&data).Error
if errSelect != nil {
if errors.Is(errSelect, gorm.ErrRecordNotFound) {
errMsg := errors.New("Data Tidak Ditemukan")
log.Println(errMsg)
return nil, errMsg
}
log.Println(errSelect)
return nil, errSelect
}
return data, nil
}
func (s *DatabaseService) GetDataLabMikro(noLab string) ([]*mikrobiologi.OrderLabMikro, bool, error) {
var dataMikro []*mikrobiologi.OrderLabMikro
querySelect := `select olm."idxordermikro", olm."jenis_pemeriksaan"
from t_orderlabmikro olm
left join "m_form_lab" fl on olm."idxform" = fl."form_id"
where olm."nolab" = ? and fl."sub_kelompok" = 'Jenis Pemeriksaan'`
errSelect := s.DB.Debug().Raw(querySelect, noLab).Scan(&dataMikro).Error
if errSelect != nil {
log.Println(errSelect)
return nil, false, errSelect
}
return dataMikro, true, nil
}
func (s *DatabaseService) UpdateLabMikro(req *mikrobiologi.ReqUpdateLisMikro) error {
queryUpdate := `update "t_orderlabmikro" set "no_lokal" = ? where "idxordermikro" = ?`
errUpdate := s.DB.Debug().Exec(queryUpdate, req.NoLokal, req.IdxOrderMikro).Error
if errUpdate != nil {
log.Println(errUpdate)
return errUpdate
}
return nil
}
+18
View File
@@ -0,0 +1,18 @@
package databaserepo
import (
"api-lis/pkg/models/simrs/mikrobiologi"
"api-lis/pkg/models/simrs/pasien"
"log"
)
func (s *DatabaseService) GetMPasien(req *mikrobiologi.RequestPasienMikrobiologi) (*pasien.MPasien, error) {
var dataPasien *pasien.MPasien
querySelect := `select * from m_pasien where "nomr" = ?`
errSelect := s.DB.Debug().Raw(querySelect, req.NOMR).First(&dataPasien).Error
if errSelect != nil {
log.Println(errSelect)
return nil, errSelect
}
return dataPasien, nil
}
+19
View File
@@ -0,0 +1,19 @@
package databaserepo
import (
"api-lis/pkg/models/simrs/mikrobiologi"
"log"
)
func (s *DatabaseService) GetCaraBayar(req *mikrobiologi.OrderLabMikroMain) (string, error) {
var CaraBayar string
query := `select mcb."nama" from t_pendaftaran tp
left join m_carabayar mcb on tp."kdcarabayar" = mcb.kode
where tp."idxdaftar" = ?`
errSelect := s.DB.Debug().Raw(query, req.IdxDaftar).First(&CaraBayar).Error
if errSelect != nil {
log.Println(errSelect)
return "", errSelect
}
return CaraBayar, nil
}
+17
View File
@@ -0,0 +1,17 @@
package databaserepo
import (
"api-lis/pkg/models/simrs/ruang"
"log"
)
func (s *DatabaseService) GetNamaRuang(kdPoli string) (*ruang.MRuang, error) {
var poli *ruang.MRuang
query := `select "nama", "subsistem" from m_ruang where "no" = ?`
errSelect := s.DB.Debug().Raw(query, kdPoli).Scan(&poli).Error
if errSelect != nil {
log.Println(errSelect)
return nil, errSelect
}
return poli, nil
}
+156
View File
@@ -0,0 +1,156 @@
package mikrobiologi
import (
"api-lis/internal/database"
connDatabase "api-lis/pkg/database/simrs"
"api-lis/pkg/models/simrs/mikrobiologi"
"log"
"net/http"
"time"
"github.com/gin-gonic/gin"
)
func SendDataLISMikro(c *gin.Context) {
db := database.New().GetDB()
simrsDB := connDatabase.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", 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
}
namaDokter, errDokter := simrsDB.GetNamaDokter(dataMikroMain.DokterPengirim)
if errDokter != nil {
log.Println(errDokter)
c.JSON(http.StatusBadRequest, gin.H{
"message": errDokter,
})
return
}
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
}
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: namaDokter,
AsalPasien: poli.NamaPoli,
Layanan: value.NamaPemeriksaan,
StatusBayar: "",
NoTransaksi: dataMikroMain.NoLab,
Asuransi: caraBayar,
Klinis: "",
KodeSpesimen: dataMikroMain.StatusSpesimen,
NamaSpesimen: dataMikroMain.Spesimen,
Pengambilan: "",
}
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,
}
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)
}
+83
View File
@@ -0,0 +1,83 @@
package mikrobiologi
import (
"api-lis/pkg/models/simrs/mikrobiologi"
"bytes"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"os"
)
func SendLisMikro(request *mikrobiologi.RequestLISMikro) (*mikrobiologi.Response, error) {
baseUrl := os.Getenv("LIS_MIKROBIOLOGI_URL")
endpoint := os.Getenv("LIS_REGISTERPASIEN")
url := baseUrl + endpoint
log.Println("URL", url)
reqMarshall, err := json.Marshal(request)
if err != nil {
log.Printf("Error json marshal: %v", err)
return nil, err
}
headers := map[string]string{
"Accept": "application/json",
"Content-Type": "application/json",
}
log.Println("REQUEST: ", string(reqMarshall))
req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall))
if err != nil {
log.Printf("Error creating request: %v", err)
return nil, err
}
for key, value := range headers {
req.Header.Set(key, value)
}
client := http.Client{}
response, err := client.Do(req)
if err != nil {
log.Printf("Error making external API request: %v", err)
return nil, err
}
log.Println(response)
res, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
}
if response.StatusCode != 201 {
var responseError *mikrobiologi.ResponseError
err = json.Unmarshal(res, &responseError)
if err != nil {
log.Printf("Error unmarshalling response: %v", err)
return nil, err
}
log.Println("MASUK SINI?")
log.Println(responseError.Error)
return nil, fmt.Errorf(responseError.Error)
}
var responses *mikrobiologi.Response
log.Println("RESPONSE: ", string(res))
err = json.Unmarshal(res, &responses)
if err != nil {
log.Printf("Error unmarshalling response: %v", err)
return nil, err
}
return responses, nil
}
func ResponseBatalMikro(request *mikrobiologi.RequestBatalMikro) {
}
@@ -0,0 +1,157 @@
package mikrobiologi
type RequestPasienMikrobiologi struct {
NOMR string `json:"nomr"`
IDXDaftar string `json:"idxdaftar"`
NoLab string `json:"nolab"`
}
type DataPasienMikrobiologi struct {
NOMR string `gorm:"column:nomr" json:"nomr"`
NoNota string `gorm:"column:nonota" json:"nonota"`
IDXDaftar int `gorm:"column:idxdaftar" json:"idxdaftar"`
TanggalOrder string `gorm:"column:tglorder" json:"tglorder"`
NoLab string `gorm:"column:nolab" json:"nolab"`
StatusRajal int `gorm:"column:statusrajal" json:"statusrajal"`
StatusAPS int `gorm:"column:statusaps" json:"statusaps"`
Nama string `gorm:"column:nama" json:"nama"`
NoKTP string `gorm:"column:noktp" json:"noktp"`
NoKTPBaru string `gorm:"column:noktpbaru" json:"noktpbaru"`
TempatLahir string `gorm:"column:tmptlahir" json:"tmptlahir"`
TanggalLahir string `gorm:"column:tgllahir" json:"tgllahir"`
JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
Alamat string `gorm:"column:alamat" json:"alamat"`
NamaAPS string `gorm:"column:namaaps" json:"namaaps"`
NoKTPAPS string `gorm:"column:noktpaps" json:"noktpaps"`
TempatLahirAPS string `gorm:"column:tmptlahiraps" json:"tmptlahiraps"`
TanggalLahirAPS string `gorm:"column:tgllahiraps" json:"tgllahiraps"`
JenisKelaminAPS string `gorm:"column:jeniskelaminaps" json:"jeniskelaminaps"`
AlamatAPS string `gorm:"column:alamataps" json:"alamataps"`
NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
KelasRuang string `gorm:"column:kelasruang" json:"kelasruang"`
KodeTarifRajal string `gorm:"column:kodetarifrajal" json:"kodetarifrajal"`
KodeTarifRanap string `gorm:"column:kodetarifranap" json:"kodetarifranap"`
}
type ResponseDataPasienRanap struct {
NOMR string `gorm:"column:nomr" json:"nomr"`
NoNota string `gorm:"column:nonota" json:"nonota"`
IDXDaftar int `gorm:"column:idxdaftar" json:"idxdaftar"`
TanggalOrder string `gorm:"column:tglorder" json:"tglorder"`
NoLab string `gorm:"column:nolab" json:"nolab"`
StatusRajal int `gorm:"column:statusrajal" json:"statusrajal"`
Nama string `gorm:"column:nama" json:"nama"`
NoKTP string `gorm:"column:noktp" json:"noktp"`
TempatLahir string `gorm:"column:tmptlahir" json:"tmptlahir"`
TanggalLahir string `gorm:"column:tgllahir" json:"tgllahir"`
JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
Alamat string `gorm:"column:alamat" json:"alamat"`
NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
KelasRuang string `gorm:"column:kelasruang" json:"kelasruang"`
KodeTarifRanap string `gorm:"column:kodetarifranap" json:"kodetarifranap"`
}
type ResponseDataPasienRajal struct {
NOMR string `gorm:"column:nomr" json:"nomr"`
NoNota string `gorm:"column:nonota" json:"nonota"`
IDXDaftar int `gorm:"column:idxdaftar" json:"idxdaftar"`
TanggalOrder string `gorm:"column:tglorder" json:"tglorder"`
NoLab string `gorm:"column:nolab" json:"nolab"`
StatusRajal int `gorm:"column:statusrajal" json:"statusrajal"`
Nama string `gorm:"column:nama" json:"nama"`
NoKTP string `gorm:"column:noktp" json:"noktp"`
TempatLahir string `gorm:"column:tmptlahir" json:"tmptlahir"`
TanggalLahir string `gorm:"column:tgllahir" json:"tgllahir"`
JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
Alamat string `gorm:"column:alamat" json:"alamat"`
NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
KelasRuang string `gorm:"column:kelasruang" json:"kelasruang"`
KodeTarifRajal string `gorm:"column:kodetarifrajal" json:"kodetarifrajal"`
}
type ResponseDataPasienRajalAPS struct {
NOMR string `gorm:"column:nomr" json:"nomr"`
NoNota string `gorm:"column:nonota" json:"nonota"`
IdxDaftar int `gorm:"column:idxdaftar" json:"idxdaftar"`
TanggalOrder string `gorm:"column:tglorder" json:"tglorder"`
NoLab string `gorm:"column:nolab" json:"nolab"`
StatusRajal int `gorm:"column:statusrajal" json:"statusrajal"`
StatusAPS int `gorm:"column:statusaps" json:"statusaps"`
NamaAPS string `gorm:"column:namaaps" json:"namaaps"`
NoKTPAPS string `gorm:"column:noktpaps" json:"noktpaps"`
TempatLahirAPS string `gorm:"column:tmptlahiraps" json:"tmptlahiraps"`
TanggalLahirAPS string `gorm:"column:tgllahiraps" json:"tgllahiraps"`
JenisKelaminAPS string `gorm:"column:jeniskelaminaps" json:"jeniskelaminaps"`
AlamatAPS string `gorm:"column:alamataps" json:"alamataps"`
NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
KelasRuang string `gorm:"column:kelasruang" json:"kelasruang"`
KodeTarifRajal string `gorm:"column:kodetarifrajal" json:"kodetarifrajal"`
}
type RequestLISMikro struct {
NoRM string `json:"norm"`
Nama string `json:"nama"`
Alamat string `json:"alamat"`
Kota string `json:"kota"`
TanggalLahir string `json:"tgllahir"`
NoHP string `json:"nohap"`
Kelamin string `json:"kelamin"`
NIK string `json:"nik"`
NoBPJS string `json:"nobpjs"`
DokterPeminta string `json:"drpeminta"`
AsalPasien string `json:"asalpasien"`
Layanan string `json:"layanan"`
StatusBayar string `json:"statusbayar"`
NoTransaksi string `json:"notransaksi"`
Asuransi string `json:"asuransi"`
Klinis string `json:"klinis"`
KodeSpesimen string `json:"kode"`
NamaSpesimen string `json:"spesimen"`
Pengambilan string `json:"pengambilan"`
}
type OrderLabMikroMain struct {
IdxMikroMain string `gorm:"column:idxmikromain" json:"idxmikromain"`
NoLab string `gorm:"column:nolab" json:"nolab"`
IdxDaftar string `gorm:"column:idxdaftar" json:"idxdaftar"`
NoMR string `gorm:"column:nomr" json:"nomr"`
WaktuPengambilan string `gorm:"column:waktu_pengambilan" json:"waktu_pengambilan"`
TglOrder string `gorm:"column:tglorder" json:"tglorder"`
StatusSpesimen string `gorm:"column:status_specimen" json:"status_specimen"`
Spesimen string `gorm:"column:specimen" json:"specimen"`
DokterPengirim string `gorm:"column:drpengirim" json:"drpengirim"`
KodePoli string `gorm:"column:kdpoli" json:"kdpoli"`
NoNota string `gorm:"column:nonota" json:"nonota"`
StatusRajal string `gorm:"column:st_rajal" json:"st_rajal"`
StatusAPS string `gorm:"column:st_aps" json:"st_aps"`
}
type OrderLabMikro struct {
IdxOrderMikro string `gorm:"column:idxordermikro" json:"idxordermikro"`
NamaPemeriksaan string `gorm:"column:nama_pemeriksaan" json:"nama_pemeriksaan"`
}
type Response struct {
Status string `json:"status"`
Message string `json:"message"`
}
type ResponseError struct {
Error string `json:"error"`
}
type ResponseLISMikro struct {
NoLab string `json:"nolab"`
Status string `json:"status"`
Message string `json:"message"`
}
type ReqUpdateLisMikro struct {
IdxOrderMikro string `gorm:"column:idxordermikro" json:"idxordermikro"`
NoLokal string `gorm:"column:no_lokal" json:"no_lokal"`
}
type RequestBatalMikro struct {
NoLokal string `json:"no_lokal"`
Alasan string `json:"alasan"`
}
+14
View File
@@ -0,0 +1,14 @@
package pasien
type MPasien struct {
ID int `gorm:"column:id" json:"id"`
NoMR string `gorm:"column:no_mr" json:"no_mr"`
Nama string `gorm:"column:nama" json:"nama"`
Tempat string `gorm:"column:tempat" json:"tempat"`
TanggalLahir string `gorm:"column:tgllahir" json:"tgllahir"`
JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
Alamat string `gorm:"column:alamat" json:"alamat"`
NoKTP string `gorm:"column:noktp" json:"noktp"`
NoTelpon string `gorm:"column:notelp" json:"notelp"`
NoKartu string `gorm:"column:no_kartu" json:"no_kartu"`
}
+6
View File
@@ -0,0 +1,6 @@
package ruang
type MRuang struct {
NamaPoli string `gorm:"column:nama" json:"nama"`
Subsistem string `gorm:"column:subsistem" json:"subsistem"`
}