Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Commits on Source (9)
......@@ -8,4 +8,4 @@ var DbHost = os.Getenv("POSTGRES_HOST")
var DbUser = os.Getenv("POSTGRES_USER")
var DBName = os.Getenv("POSTGRES_DB")
var DBPass = os.Getenv("POSTGRES_PASSWORD")
var JWTSecret = os.Getenv("JWT SECRET")
var JWTSecret = os.Getenv("JWT_SECRET")
......@@ -216,7 +216,7 @@ func UpdatePasien(c *gin.Context) {
}
func DeletePasien(c *gin.Context) {
updateBy := c.Query("update_by")
updateBy := c.Query("delete_by")
target := c.Query("target")
switch updateBy {
......
package pemeriksaan
func AddPemeriksaanDokter() {
import (
"github.com/gin-gonic/gin"
"net/http"
"seno-medika.com/model/common"
"seno-medika.com/model/station/doctorstation"
"seno-medika.com/query/pemeriksaan/dokter"
)
func AddPemeriksaanDokter(c *gin.Context) {
var (
pemeriksaan doctorstation.PemeriksaanDokter
)
if err := c.ShouldBindJSON(&pemeriksaan); err != nil {
c.JSON(http.StatusBadRequest, common.Response{
Message: err.Error(),
Status: "Bad Request",
StatusCode: http.StatusBadRequest,
Data: nil,
})
return
}
if err := dokter.AddPemeriksaanDokterDefault(pemeriksaan); err != nil {
c.JSON(http.StatusInternalServerError, common.Response{
Message: err.Error(),
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Data: nil,
})
return
}
c.JSON(http.StatusCreated, common.Response{
Message: "Successfully add pemeriksaan dokter",
Status: "ok",
StatusCode: http.StatusCreated,
Data: nil,
})
return
}
func DeletePemeriksaanDokter(c *gin.Context) {
deleteBy := c.Query("delete_by")
target := c.Query("target")
switch deleteBy {
case "id":
if err := dokter.DeletePemeriksaanDokter(target); err != nil {
c.JSON(http.StatusInternalServerError, common.Response{
Message: err.Error(),
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Data: nil,
})
return
}
c.JSON(http.StatusOK, common.Response{
Message: "Successfully delete pemeriksaan dokter",
Status: "ok",
StatusCode: http.StatusOK,
Data: nil,
})
return
}
}
func PatchPemeriksaanDokter(c *gin.Context) {
updateBy := c.Query("update_by")
updateType := c.Query("update_type")
target := c.Query("target")
switch updateBy {
case "antrian_id":
switch updateType {
case "riwayat_pemeriksaan":
var (
riwayatPemeriksaan doctorstation.RiwayatPemeriksaan
)
if err := c.ShouldBindJSON(&riwayatPemeriksaan); err != nil {
c.JSON(http.StatusBadRequest, common.Response{
Message: err.Error(),
Status: "Bad Request",
StatusCode: http.StatusBadRequest,
Data: nil,
})
return
}
if err := dokter.PatchRiwayatPemeriksaan(target, riwayatPemeriksaan); err != nil {
c.JSON(http.StatusInternalServerError, common.Response{
Message: err.Error(),
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Data: nil,
})
return
}
c.JSON(http.StatusOK, common.Response{
Message: "Successfully update riwayat pemeriksaan",
Status: "ok",
StatusCode: http.StatusOK,
Data: nil,
})
return
case "keadaan_fisik":
var (
keadaanFisik doctorstation.KeadaanFisik
)
if err := c.ShouldBindJSON(&keadaanFisik); err != nil {
c.JSON(http.StatusBadRequest, common.Response{
Message: err.Error(),
Status: "Bad Request",
StatusCode: http.StatusBadRequest,
Data: nil,
})
return
}
if err := dokter.PatchKeadaanFisik(target, keadaanFisik); err != nil {
c.JSON(http.StatusInternalServerError, common.Response{
Message: err.Error(),
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Data: nil,
})
return
}
c.JSON(http.StatusOK, common.Response{
Message: "Successfully update keadaan fisik",
Status: "ok",
StatusCode: http.StatusOK,
Data: nil,
})
return
case "diagnosa":
var (
diagnosa doctorstation.Diagnosa
)
if err := c.ShouldBindJSON(&diagnosa); err != nil {
c.JSON(http.StatusBadRequest, common.Response{
Message: err.Error(),
Status: "Bad Request",
StatusCode: http.StatusBadRequest,
Data: nil,
})
return
}
if err := dokter.PatchDiagnosa(target, diagnosa); err != nil {
c.JSON(http.StatusInternalServerError, common.Response{
Message: err.Error(),
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Data: nil,
})
return
}
c.JSON(http.StatusOK, common.Response{
Message: "Successfully update diagnosa",
Status: "ok",
StatusCode: http.StatusOK,
Data: nil,
})
return
case "anatomi":
var (
anatomi doctorstation.Anatomi
)
if err := c.ShouldBindJSON(&anatomi); err != nil {
c.JSON(http.StatusBadRequest, common.Response{
Message: err.Error(),
Status: "Bad Request",
StatusCode: http.StatusBadRequest,
Data: nil,
})
return
}
if err := dokter.PatchAnatomi(target, anatomi); err != nil {
c.JSON(http.StatusInternalServerError, common.Response{
Message: err.Error(),
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Data: nil,
})
return
}
c.JSON(http.StatusOK, common.Response{
Message: "Successfully update anatomi",
Status: "ok",
StatusCode: http.StatusOK,
Data: nil,
})
return
case "pemeriksaan_fisik":
var (
pemeriksaanFisik doctorstation.PemeriksaanFisik
)
if err := c.ShouldBindJSON(&pemeriksaanFisik); err != nil {
c.JSON(http.StatusBadRequest, common.Response{
Message: err.Error(),
Status: "Bad Request",
StatusCode: http.StatusBadRequest,
Data: nil,
})
return
}
if err := dokter.PatchPemeriksaanFisik(target, pemeriksaanFisik); err != nil {
c.JSON(http.StatusInternalServerError, common.Response{
Message: err.Error(),
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Data: nil,
})
return
}
c.JSON(http.StatusOK, common.Response{
Message: "Successfully update pemeriksaan fisik",
Status: "ok",
StatusCode: http.StatusOK,
Data: nil,
})
return
}
}
}
func GetPemeriksaanDokter(c *gin.Context) {
findBy := c.Query("find_by")
target := c.Query("target")
switch findBy {
case "id":
data, err := dokter.FindPemeriksaanDokterById(target)
if err != nil {
c.JSON(http.StatusInternalServerError, common.Response{
Message: err.Error(),
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Data: nil,
})
return
}
c.JSON(http.StatusOK, common.Response{
Message: "Successfully get pemeriksaan dokter",
Status: "ok",
StatusCode: http.StatusOK,
Data: data,
})
return
case "antrian_id":
data, err := dokter.FindPemeriksaanDokterByAntrianId(target)
if err != nil {
c.JSON(http.StatusInternalServerError, common.Response{
Message: err.Error(),
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Data: nil,
})
return
}
c.JSON(http.StatusOK, common.Response{
Message: "Successfully get pemeriksaan dokter",
Status: "ok",
StatusCode: http.StatusOK,
Data: data,
})
return
}
}
package doctorstation
type PemeriksaanDokterMerge struct {
PemeriksaanDokter PemeriksaanDokter `json:"pemeriksaan"`
PemeriksaanFisik PemeriksaanFisik `json:"pemeriksaan_fisik"`
RiwayatPemeriksaan RiwayatPemeriksaan `json:"riwayat_pemeriksaan"`
KeadaanFisik KeadaanFisik `json:"keadaan_fisik"`
Diagnosa Diagnosa `json:"diagnosa"`
Anatomi Anatomi `json:"anatomi"`
}
type ListCppt struct {
PasienId int `json:"pasien_id"`
NoErm int `json:"no_erm"`
......
package dokter
import (
"seno-medika.com/config/db"
"seno-medika.com/model/station/doctorstation"
"sync"
"time"
)
func AddPemeriksaanDokterDefault(pemeriksaan doctorstation.PemeriksaanDokter) error {
var (
pasienId string
wg sync.WaitGroup
)
errChan := make(chan error, 2)
go func() {
defer wg.Done()
if err := db.DB.QueryRow("INSERT INTO pemeriksaan_dokter (antrian_id, dokter_id, perawat_id) VALUES ($1, $2, $3) RETURNING pemeriksaan_dokter_id", pemeriksaan.AntrianId, pemeriksaan.DokterId, pemeriksaan.PerawatId).Scan(&pemeriksaan.PemeriksaanDokterId); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if err := db.DB.QueryRow("SELECT pasien_id FROM antrian WHERE antrian_id = $1", pemeriksaan.AntrianId).Scan(&pasienId); err != nil {
errChan <- err
return
}
}()
wg.Wait()
close(errChan)
for val := range errChan {
if val != nil {
return val
}
}
wg.Add(6)
errChan = make(chan error, 6)
go func() {
defer wg.Done()
if _, err := db.DB.Exec("INSERT INTO riwayat_pemeriksaan (pemeriksaan_dokter_id, pasien_id, tanggal) VALUES ($1, $2, $3)", pemeriksaan.PemeriksaanDokterId, pasienId, time.Now().Format("2006-01-02")); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if _, err := db.DB.Exec("INSERT INTO keadaan_fisik (pemeriksaan_dokter_id) VALUES ($1)", pemeriksaan.PemeriksaanDokterId); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if _, err := db.DB.Exec("INSERT INTO pemeriksaan_fisik (pemeriksaan_dokter_id) VALUES ($1)", pemeriksaan.PemeriksaanDokterId); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if _, err := db.DB.Exec("INSERT INTO diagnosa(pemeriksaan_dokter_id) VALUES ($1)", pemeriksaan.PemeriksaanDokterId); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if _, err := db.DB.Exec("INSERT INTO resep(pemeriksaan_dokter_id) VALUES ($1)", pemeriksaan.PemeriksaanDokterId); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if _, err := db.DB.Exec("INSERT INTO anatomi(pemeriksaan_dokter_id, pasien_id) VALUES ($1, $2)", pemeriksaan.PemeriksaanDokterId, pasienId); err != nil {
errChan <- err
return
}
}()
wg.Wait()
close(errChan)
for val := range errChan {
if val != nil {
return val
}
}
return nil
}
package dokter
import "seno-medika.com/config/db"
func DeletePemeriksaanDokter(id string) error {
_, err := db.DB.Exec("DELETE FROM pemeriksaan_dokter WHERE pemeriksaan_dokter_id = $1", id)
if err != nil {
return err
}
return nil
}
package dokter
import (
"seno-medika.com/config/db"
"seno-medika.com/model/station/doctorstation"
"sync"
)
func FindPemeriksaanDokterById(pemeriksaanId string) (doctorstation.PemeriksaanDokterMerge, error) {
var (
pemeriksaan doctorstation.PemeriksaanDokterMerge
wg sync.WaitGroup
)
wg.Add(6)
errChan := make(chan error, 6)
go func() {
defer wg.Done()
if err := db.DB.QueryRow("SELECT pemeriksaan_dokter_id, antrian_id, dokter_id, perawat_id FROM pemeriksaan_dokter WHERE pemeriksaan_dokter_id = $1", pemeriksaanId).Scan(&pemeriksaan.PemeriksaanDokter.PemeriksaanDokterId, &pemeriksaan.PemeriksaanDokter.AntrianId, &pemeriksaan.PemeriksaanDokter.DokterId, &pemeriksaan.PemeriksaanDokter.PerawatId); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if err := db.DB.QueryRow("SELECT riwayat_pemeriksaan_id, pasien_id, tanggal, pemeriksaan, keterangan FROM riwayat_pemeriksaan WHERE pemeriksaan_dokter_id = $1", pemeriksaanId).Scan(&pemeriksaan.RiwayatPemeriksaan.RiwayatPemeriksaanId, &pemeriksaan.RiwayatPemeriksaan.PasienId, &pemeriksaan.RiwayatPemeriksaan.Tanggal, &pemeriksaan.RiwayatPemeriksaan.Pemeriksaan, &pemeriksaan.RiwayatPemeriksaan.Keterangan); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if err := db.DB.QueryRow("SELECT pemeriksaan_fisik_id, terapi_yg_sdh_dilakukan, rencana_tindakan, tindakan_keperawatan, observasi, merokok, konsumsi_alkohol, kurang_sayur FROM pemeriksaan_fisik WHERE pemeriksaan_dokter_id = $1", pemeriksaanId).Scan(&pemeriksaan.PemeriksaanFisik.PemeriksaanFisikId, &pemeriksaan.PemeriksaanFisik.TerapiYgSdhDilakukan, &pemeriksaan.PemeriksaanFisik.RencanaTindakan, &pemeriksaan.PemeriksaanFisik.TindakanKeperawatan, &pemeriksaan.PemeriksaanFisik.Observasi, &pemeriksaan.PemeriksaanFisik.Merokok, &pemeriksaan.PemeriksaanFisik.KonsumsiAlkohol, &pemeriksaan.PemeriksaanFisik.KurangSayur); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if err := db.DB.QueryRow("SELECT keadaan_fisik_id, pemeriksaan_kulit, pemeriksaan_kuku, pemeriksaan_kepala, pemeriksaan_mata, pemeriksaan_telinga, pemeriksaan_hidung_sinus, pemeriksaan_mulut_bibir, pemeriksaan_leher, pemeriksaan_dada_punggung, pemeriksaan_kardiovaskuler, pemeriksaan_abdomen_perut, pemeriksaan_ekstremitas_atas, pemeriksaan_ekstremitas_bawah, pemeriksaan_genitalia_pria FROM keadaan_fisik WHERE pemeriksaan_dokter_id = $1", pemeriksaanId).Scan(&pemeriksaan.KeadaanFisik.KeadaanFisikId, &pemeriksaan.KeadaanFisik.PemeriksaanKulit, &pemeriksaan.KeadaanFisik.PemeriksaanKuku, &pemeriksaan.KeadaanFisik.PemeriksaanKepala, &pemeriksaan.KeadaanFisik.PemeriksaanMata, &pemeriksaan.KeadaanFisik.PemeriksaanTelinga, &pemeriksaan.KeadaanFisik.PemeriksaanHidungSinus, &pemeriksaan.KeadaanFisik.PemeriksaanMulutBibir, &pemeriksaan.KeadaanFisik.PemeriksaanLeher, &pemeriksaan.KeadaanFisik.PemeriksaanDadaPunggung, &pemeriksaan.KeadaanFisik.PemeriksaanKardiovaskuler, &pemeriksaan.KeadaanFisik.PemeriksaanAbdomenPerut, &pemeriksaan.KeadaanFisik.PemeriksaanEkstremitasAtas, &pemeriksaan.KeadaanFisik.PemeriksaanEkstremitasBawah, &pemeriksaan.KeadaanFisik.PemeriksaanGenitaliaPria); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if err := db.DB.QueryRow("SELECT diagnosa_id, diagnosa, jenis, kasus, status_diagnosis FROM diagnosa WHERE pemeriksaan_dokter_id = $1", pemeriksaanId).Scan(&pemeriksaan.Diagnosa.DiagnosaId, &pemeriksaan.Diagnosa.Diagnosa, &pemeriksaan.Diagnosa.Jenis, &pemeriksaan.Diagnosa.Kasus, &pemeriksaan.Diagnosa.StatusDiagnosis); err != nil {
errChan <- err
return
}
}()
go func() {
defer wg.Done()
if err := db.DB.QueryRow("SELECT anatomi_id, pasien_id, bagian_tubuh, keterangan FROM anatomi WHERE pemeriksaan_dokter_id = $1", pemeriksaanId).Scan(&pemeriksaan.Anatomi.AnatomiId, &pemeriksaan.Anatomi.PasienId, &pemeriksaan.Anatomi.BagianTubuh, &pemeriksaan.Anatomi.Keterangan); err != nil {
errChan <- err
return
}
}()
wg.Wait()
close(errChan)
for val := range errChan {
if val != nil {
return pemeriksaan, val
}
}
return pemeriksaan, nil
}
func FindPemeriksaanDokterByAntrianId(antrianId string) (doctorstation.PemeriksaanDokterMerge, error) {
var (
pemeriksaanId string
pemeriksaan doctorstation.PemeriksaanDokterMerge
)
if err := db.DB.QueryRow("SELECT pemeriksaan_dokter_id FROM pemeriksaan_dokter WHERE antrian_id = $1", antrianId).Scan(&pemeriksaanId); err != nil {
return pemeriksaan, err
}
return FindPemeriksaanDokterById(pemeriksaanId)
}
package dokter
import (
"seno-medika.com/config/db"
"seno-medika.com/model/station/doctorstation"
"time"
)
func PatchPemeriksaanFisik(antrianId string, pemeriksaanFisik doctorstation.PemeriksaanFisik) error {
var (
pemeriksaanDokterId int
)
if err := db.DB.QueryRow("SELECT pemeriksaan_dokter_id FROM pemeriksaan_dokter WHERE antrian_id = $1", antrianId).Scan(&pemeriksaanDokterId); err != nil {
return err
}
if _, err := db.DB.Exec("UPDATE pemeriksaan_fisik SET terapi_yg_sdh_dilakukan = $1, rencana_tindakan = $2, tindakan_keperawatan = $3, observasi = $4, merokok = $5, konsumsi_alkohol = $6, kurang_sayur = $7 WHERE pemeriksaan_dokter_id = $8",
pemeriksaanFisik.TerapiYgSdhDilakukan, pemeriksaanFisik.RencanaTindakan, pemeriksaanFisik.TindakanKeperawatan, pemeriksaanFisik.Observasi, pemeriksaanFisik.Merokok, pemeriksaanFisik.KonsumsiAlkohol, pemeriksaanFisik.KurangSayur, pemeriksaanDokterId); err != nil {
return err
}
return nil
}
func PatchRiwayatPemeriksaan(antrianId string, riwayatPemeriksaan doctorstation.RiwayatPemeriksaan) error {
var (
pemeriksaanDokterId int
)
if err := db.DB.QueryRow("SELECT pemeriksaan_dokter_id FROM pemeriksaan_dokter WHERE antrian_id = $1", antrianId).Scan(&pemeriksaanDokterId); err != nil {
return err
}
if _, err := db.DB.Exec("UPDATE riwayat_pemeriksaan SET tanggal = $1, pemeriksaan = $2, keterangan = $3 WHERE pemeriksaan_dokter_id = $4",
time.Now().Format("2006-01-02"), riwayatPemeriksaan.Pemeriksaan, riwayatPemeriksaan.Keterangan, pemeriksaanDokterId); err != nil {
return err
}
return nil
}
func PatchKeadaanFisik(antrianId string, keadaanFisik doctorstation.KeadaanFisik) error {
var (
pemeriksaanDokterId int
)
if err := db.DB.QueryRow("SELECT pemeriksaan_dokter_id FROM pemeriksaan_dokter WHERE antrian_id = $1", antrianId).Scan(&pemeriksaanDokterId); err != nil {
return err
}
if _, err := db.DB.Exec("UPDATE keadaan_fisik SET pemeriksaan_kulit = $1, pemeriksaan_kuku = $2, pemeriksaan_kepala = $3, pemeriksaan_mata = $4, pemeriksaan_telinga = $5, pemeriksaan_hidung_sinus = $6, pemeriksaan_mulut_bibir = $7, pemeriksaan_leher = $8, pemeriksaan_dada_punggung = $9, pemeriksaan_kardiovaskuler = $10, pemeriksaan_abdomen_perut = $11, pemeriksaan_ekstremitas_atas = $12, pemeriksaan_ekstremitas_bawah = $13, pemeriksaan_genitalia_pria = $14 WHERE pemeriksaan_dokter_id = $15",
keadaanFisik.PemeriksaanKulit, keadaanFisik.PemeriksaanKuku, keadaanFisik.PemeriksaanKepala, keadaanFisik.PemeriksaanMata, keadaanFisik.PemeriksaanTelinga, keadaanFisik.PemeriksaanHidungSinus, keadaanFisik.PemeriksaanMulutBibir, keadaanFisik.PemeriksaanLeher, keadaanFisik.PemeriksaanDadaPunggung, keadaanFisik.PemeriksaanKardiovaskuler, keadaanFisik.PemeriksaanAbdomenPerut, keadaanFisik.PemeriksaanEkstremitasAtas, keadaanFisik.PemeriksaanEkstremitasBawah, keadaanFisik.PemeriksaanGenitaliaPria, pemeriksaanDokterId); err != nil {
return err
}
return nil
}
func PatchDiagnosa(antrianId string, diagnosa doctorstation.Diagnosa) error {
var (
pemeriksaanDokterId int
)
if err := db.DB.QueryRow("SELECT pemeriksaan_dokter_id FROM pemeriksaan_dokter WHERE antrian_id = $1", antrianId).Scan(&pemeriksaanDokterId); err != nil {
return err
}
if _, err := db.DB.Exec("UPDATE diagnosa SET diagnosa = $1, jenis = $2, kasus = $3, status_diagnosis = $4 WHERE pemeriksaan_dokter_id = $5",
diagnosa.Diagnosa, diagnosa.Jenis, diagnosa.Kasus, diagnosa.StatusDiagnosis, pemeriksaanDokterId); err != nil {
return err
}
return nil
}
func PatchAnatomi(antrianId string, anatomi doctorstation.Anatomi) error {
var (
pemeriksaanDokterId int
)
if err := db.DB.QueryRow("SELECT pemeriksaan_dokter_id FROM pemeriksaan_dokter WHERE antrian_id = $1", antrianId).Scan(&pemeriksaanDokterId); err != nil {
return err
}
if _, err := db.DB.Exec("UPDATE anatomi SET bagian_tubuh = $1, keterangan = $2 WHERE pemeriksaan_dokter_id = $3",
anatomi.BagianTubuh, anatomi.Keterangan, pemeriksaanDokterId); err != nil {
return err
}
return nil
}
......@@ -7,8 +7,8 @@ import (
"seno-medika.com/router/login"
"seno-medika.com/router/obat"
"seno-medika.com/router/pasien"
"seno-medika.com/router/pemeriksaan"
"seno-medika.com/router/role"
"seno-medika.com/router/ttv"
)
func MainRouter(r *gin.Engine) {
......@@ -19,8 +19,9 @@ func MainRouter(r *gin.Engine) {
role.PerawatRouter(r)
role.DokterRouter(r)
role.ApotekerRouter(r)
ttv.TTVRouter(r)
pemeriksaan.TTVRouter(r)
obat.ObatRouter(r)
role.KasirRouter(r)
apotek.ApotekRouter(r)
pemeriksaan.PemeriksaanDokterRouter(r)
}
package pemeriksaan
import (
"github.com/gin-gonic/gin"
"seno-medika.com/controller/pemeriksaan"
)
func PemeriksaanDokterRouter(r *gin.Engine) {
r.POST("/pemeriksaan_dokter", pemeriksaan.AddPemeriksaanDokter)
r.GET("/pemeriksaan_dokter", pemeriksaan.GetPemeriksaanDokter)
r.DELETE("/pemeriksaan_dokter", pemeriksaan.DeletePemeriksaanDokter)
r.PATCH("/pemeriksaan_dokter", pemeriksaan.PatchPemeriksaanDokter)
}
package ttv
package pemeriksaan
import (
"github.com/gin-gonic/gin"
......