This commit is contained in:
vanilia
2025-11-25 19:47:47 +07:00
parent 782d272d91
commit 04312afcee
20 changed files with 165 additions and 120 deletions
+11 -11
View File
@@ -65,15 +65,15 @@ type CreateDto struct {
}
type TRujukan struct {
NoSep string `json:"noSep"`
NoSep string `json:"noSep"` // Surat Eligibilitas Peserta
TglRujukan string `json:"tglRujukan"`
PpkDirujuk string `json:"ppkDirujuk"`
JnsPelayanan string `json:"jnsPelayanan"`
PpkDirujuk string `json:"ppkDirujuk"` // PPK (Provider Pelayanan Kesehatan) -> kode RS tujuan
JnsPelayanan string `json:"jnsPelayanan"` // Jenis pelayanan yang dimintakan; 1 = RawatInap; 2 = RawatJalan
Catatan string `json:"catatan"`
DiagRujukan string `json:"diagRujukan"`
TipeRujukan string `json:"tipeRujukan"`
PoliRujukan string `json:"poliRujukan"`
User string `json:"user"`
DiagRujukan string `json:"diagRujukan"` // Kode Diagnosa
TipeRujukan string `json:"tipeRujukan"` // 0 = Rujukan Penuh; 1 = Rujukan Partial (hanya untuk tindakan tertentu); 2 = Balik (dikembalikan ke faskes asal)
PoliRujukan string `json:"poliRujukan"` // Kode Poli Tujuan
User string `json:"user"` // user yang membuat rujukan
}
type ReadListDto struct {
@@ -105,24 +105,24 @@ type FilterDto struct {
}
type ReadDetailDto struct {
Id uint16 `json:"id"`
Id uint `json:"id"`
Includes string `json:"includes"`
}
type UpdateDto struct {
Id uint16 `json:"id"`
Id uint `json:"id"`
CreateDto
}
type UpdateStatusDto struct {
Id uint16 `json:"id"`
Id uint `json:"id"`
StatusCode erc.DataStatusCode `json:"status_code"`
pa.AuthInfo
}
type DeleteDto struct {
Id uint16 `json:"id"`
Id uint `json:"id"`
pa.AuthInfo
}
@@ -95,10 +95,10 @@ const (
RTCPrivate RefTypeCode = "private" // Swasta
RTCBpjs RefTypeCode = "bpjs" // BPJS
APMCJkn AllPaymentMethodCode = "jkn" // JKN
APMCJkmm AllPaymentMethodCode = "jkmm" // JKMM
APMCSpm AllPaymentMethodCode = "spm" // SPM
APMCPks AllPaymentMethodCode = "pks" // PKS
APMCJkn AllPaymentMethodCode = "jkn" // JKN -> Jaminan Kesehatan Nasional -> BPJS Kesehatan
APMCJkmm AllPaymentMethodCode = "jkmm" // JKMM -> Jaminan Kesehatan Masyarakat Miskin -> Dibiayai oleh APBD daerah
APMCSpm AllPaymentMethodCode = "spm" // SPM -> Surat Pernyataan Miskin
APMCPks AllPaymentMethodCode = "pks" // PKS -> Perjanjian Kerjasama -> Pembayaran melalui instansi atau perusahaan yang memiliki kontrak dengan rumah sakit
APMCUmum AllPaymentMethodCode = "umum"
SRTCInternal SEPRefTypeCode = "internal" // Rujukan Internal
@@ -1,4 +1,4 @@
package division
package m_polihfis
type MPolihfis struct {
Id uint `json:"id" gorm:"primaryKey;autoIncrement;column:id"`
@@ -1,7 +1,7 @@
package m_poly
type MPoly struct {
Kode uint `json:"kode" gorm:"primaryKey;autoIncrement;column:kode"`
Kode uint `json:"kode" gorm:"primaryKey;column:kode"`
Nama string `json:"nama" gorm:"column:nama"`
Jenispoly uint `json:"jenispoly" gorm:"column:jenispoly"`
}
@@ -82,7 +82,6 @@ type TPendaftaran struct {
DokterNameHfis *string `json:"dokter_name_hfis" gorm:"column:dokter_name_hfis"`
DokterIdHfis *string `json:"dokter_id_hfis" gorm:"column:dokter_id_hfis"`
StatusBridging *string `json:"status_bridging" gorm:"column:status_bridging"`
NoSpri *string `json:"no_spri" gorm:"column:no_spri"`
}
func (TPendaftaran) TableName() string {
@@ -64,7 +64,7 @@ func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) {
}
dto := e.ReadDetailDto{}
sf.UrlQueryParam(&dto, *r.URL)
dto.Id = uint16(id)
dto.Id = uint(id)
res, err := u.ReadDetail(dto)
rw.DataResponse(w, res, err)
}
@@ -84,7 +84,7 @@ func (obj myBase) Update(w http.ResponseWriter, r *http.Request) {
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
return
}
dto.Id = uint16(id)
dto.Id = uint(id)
dto.AuthInfo = *authInfo
res, err := u.Update(dto)
@@ -103,7 +103,7 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
}
dto := e.DeleteDto{}
dto.Id = uint16(id)
dto.Id = uint(id)
dto.AuthInfo = *authInfo
res, err := u.Delete(dto)
@@ -175,7 +175,7 @@ func (obj myBase) Process(w http.ResponseWriter, r *http.Request) {
}
dto := e.UpdateStatusDto{
Id: uint16(id),
Id: uint(id),
StatusCode: erc.DSCProcess,
}
@@ -195,7 +195,7 @@ func (obj myBase) Cancel(w http.ResponseWriter, r *http.Request) {
}
dto := e.UpdateStatusDto{
Id: uint16(id),
Id: uint(id),
StatusCode: erc.DSCCancel,
}
@@ -211,7 +211,7 @@ func (obj myBase) Reject(w http.ResponseWriter, r *http.Request) {
}
dto := e.UpdateStatusDto{
Id: uint16(id),
Id: uint(id),
StatusCode: erc.DSCRejected,
}
@@ -226,7 +226,7 @@ func (obj myBase) Skip(w http.ResponseWriter, r *http.Request) {
}
dto := e.UpdateStatusDto{
Id: uint16(id),
Id: uint(id),
StatusCode: erc.DSCSkipped,
}
@@ -51,7 +51,7 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
}
dto := e.DeleteDto{}
dto.Id = uint16(id)
dto.Id = uint(id)
res, err := u.Delete(dto)
rw.DataResponse(w, res, err)
@@ -22,6 +22,6 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Doctor) {
data.IHS_Number = inputSrc.IHS_Number
data.SIP_Number = inputSrc.SIP_Number
data.Unit_Code = inputSrc.Unit_Code
data.Specialist_Code = inputSrc.Code
data.Subspecialist_Code = inputSrc.Code
data.Specialist_Code = inputSrc.Specialist_Code
data.Subspecialist_Code = inputSrc.Subspecialist_Code
}
@@ -37,7 +37,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
}
// validate encounter_id
_, err := ue.ReadDetail(ee.ReadDetailDto{Id: uint16(*input.Encounter_Id)})
_, err := ue.ReadDetail(ee.ReadDetailDto{Id: *input.Encounter_Id})
if err != nil {
return err
}
@@ -118,7 +118,6 @@ func Create(input e.CreateDto) (*d.Data, error) {
// insert vclaimReference
if vr := input.VclaimReference; vr != nil {
t, _ := time.Parse("2006-01-02", vr.TglRujukan)
_, err = uv.CreateData(ev.CreateDto{
Encounter_Id: &data.Id,
Date: &t,
@@ -136,8 +135,10 @@ func Create(input e.CreateDto) (*d.Data, error) {
}
dataEncounter, err := ReadDetailData(e.ReadDetailDto{
Id: uint16(data.Id),
Includes: "Adm_Employee.User,Patient.Person.Relatives,Patient.Person.VclaimMember,VclaimReference"},
Id: data.Id,
Includes: "Adm_Employee.User,Patient.Person.Relatives," +
"Patient.Person.VclaimMember,VclaimReference," +
"Patient.Person.Contacts,Patient.Person.Addresses"},
&event, tx)
if err != nil {
return err
@@ -311,7 +312,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
}
dataEncounter, err := ReadDetailData(e.ReadDetailDto{
Id: uint16(data.Id),
Id: data.Id,
Includes: "Adm_Employee.User,Patient.Person.Relatives,Patient.Person.VclaimMember"},
&event, tx)
if err != nil {
@@ -429,7 +430,7 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
}
func CheckOut(input e.DischargeDto) (*d.Data, error) {
rdDto := e.ReadDetailDto{Id: uint16(input.Id), Includes: "Ambulatory,Rehab"}
rdDto := e.ReadDetailDto{Id: input.Id, Includes: "Ambulatory,Rehab"}
var data *e.Encounter
var err error
@@ -516,7 +517,7 @@ func CheckOut(input e.DischargeDto) (*d.Data, error) {
}
dataEncounter, err := ReadDetailData(e.ReadDetailDto{
Id: uint16(data.Id),
Id: data.Id,
Includes: "DeathCause"},
&event, tx)
if err != nil {
@@ -658,7 +659,7 @@ func UpdateStatusCode(input e.UpdateStatusDto) (*d.Data, error) {
}
func CheckIn(input e.CheckinDto) (*d.Data, error) {
rdDto := e.ReadDetailDto{Id: uint16(input.Id), Includes: "Rehab,Ambulatory"}
rdDto := e.ReadDetailDto{Id: input.Id, Includes: "Rehab,Ambulatory"}
var data *e.Encounter
var err error
@@ -743,7 +744,7 @@ func CheckIn(input e.CheckinDto) (*d.Data, error) {
}
dataEncounter, err := ReadDetailData(e.ReadDetailDto{
Id: uint16(data.Id),
Id: data.Id,
Includes: "Adm_Employee.User"},
&event, tx)
if err != nil {
@@ -776,7 +777,7 @@ func CheckIn(input e.CheckinDto) (*d.Data, error) {
}
func RequestSwitchUnit(input e.SwitchUnitDto) (*d.Data, error) {
rdDto := e.ReadDetailDto{Id: uint16(input.Id), Includes: "Responsible_Doctor"}
rdDto := e.ReadDetailDto{Id: input.Id, Includes: "Responsible_Doctor"}
var data *e.Encounter
var err error
@@ -865,7 +866,7 @@ func RequestSwitchUnit(input e.SwitchUnitDto) (*d.Data, error) {
}
func ApproveSwitchUnit(input e.ApproveUnitDto) (*d.Data, error) {
rdDto := e.ReadDetailDto{Id: uint16(input.Id), Includes: "Responsible_Doctor"}
rdDto := e.ReadDetailDto{Id: input.Id, Includes: "Responsible_Doctor"}
var data *e.Encounter
var err error
@@ -68,6 +68,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Encounter) {
var inputSrc *e.CreateDto
if inputT, ok := any(input).(*e.CreateDto); ok {
inputSrc = inputT
data.Status_Code = erc.DSCNew
} else {
inputTemp := any(input).(*e.UpdateDto)
inputSrc = &inputTemp.CreateDto
@@ -90,7 +91,6 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Encounter) {
data.Responsible_Doctor_Code = inputSrc.Responsible_Doctor_Code
data.RefSource_Name = inputSrc.RefSource_Name
data.Appointment_Id = inputSrc.Appointment_Id
data.Status_Code = erc.DSCProcess
data.RefType_Code = &inputSrc.RefTypeCode
data.NewStatus = inputSrc.NewStatus
}
@@ -556,6 +556,7 @@ func getSoapiByResponsibleDoctor(enc e.Encounter, event *pl.Event) (data []es.So
Code: "no responsible-doctor found",
Detail: "Encounter does not have responsible-doctor",
}
return nil, pl.SetLogError(event, enc)
}
err = dg.I.
@@ -359,7 +359,7 @@ func Verify(input e.VerifyDto) (*d.Data, error) {
func validateForeignKey(input e.CreateDto) error {
// validate encounter
if input.Encounter_Id != nil {
if _, err := ue.ReadDetail(ee.ReadDetailDto{Id: uint16(*input.Encounter_Id)}); err != nil {
if _, err := ue.ReadDetail(ee.ReadDetailDto{Id: *input.Encounter_Id}); err != nil {
return err
}
}
+15 -1
View File
@@ -1,6 +1,7 @@
package unit
import (
"errors"
e "simrs-vx/internal/domain/main-entities/unit"
erc "simrs-vx/internal/domain/references/common"
esync "simrs-vx/internal/domain/sync-entities/log"
@@ -27,9 +28,22 @@ func Create(input e.CreateDto) (*d.Data, error) {
// Start log
pl.SetLogInfo(&event, input, "started", "create")
// validate unit_code
_, err := strconv.Atoi(input.Code)
if err != nil {
event.Status = "failed"
event.ErrInfo = pl.ErrorInfo{
Code: "invalid_code_format",
Detail: "unit_code must be a valid integer",
Raw: errors.New("invalid unit_code format"),
}
return nil, pl.SetLogError(&event, input)
}
mwRunner := newMiddlewareRunner(&event)
err := dg.I.Transaction(func(tx *gorm.DB) error {
err = dg.I.Transaction(func(tx *gorm.DB) error {
if resData, err := CreateData(input, &event, tx); err != nil {
return err
} else {
@@ -12,8 +12,6 @@ import (
etp "simrs-vx/internal/domain/simgos-entities/t-pendaftaran"
esync "simrs-vx/internal/domain/sync-entities/encounter"
elog "simrs-vx/internal/domain/sync-entities/log"
up "simrs-vx/internal/use-case/simgos-sync-use-case/new/patient"
)
const source = "encounter"
@@ -46,14 +44,8 @@ func Create(input e.Encounter) (*d.Data, error) {
return err
}
// STEP: 3 Get MPasien
dataPatient, err := up.ReadDetailSimgosByNomrData(sgData.Nomr, &event, tx.Simgos)
if err != nil {
return err
}
// STEP 4: Update MPasien
err = updatePatient(*dataPatient, &event, tx.Simgos)
// STEP 3: Update MPasien
err = updatePatientCaraBayar(*sgData, &event, tx.Simgos)
if err != nil {
return err
}
@@ -123,13 +115,13 @@ func Update(input e.Encounter) (*d.Data, error) {
pl.SetLogInfo(&event, input, "started", "update")
// STEP 1: Get Link
syncLink, err := ReadDetailLinkData(uint16(input.Id), &event)
syncLink, err := ReadDetailLinkData(input.Id, &event)
if err != nil {
return nil, err
}
// STEP 2: Get Simgos
simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event)
simgos, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
@@ -137,7 +129,7 @@ func Update(input e.Encounter) (*d.Data, error) {
tx := db.NewTx()
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
// Step 2: Update Simgos
if err = UpdateTPendaftaranData(input, *simgos, "update", &event, tx); err != nil {
if err = UpdateTPendaftaranData(input, simgos, "update", &event, tx); err != nil {
return err
}
@@ -173,7 +165,7 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
}
// STEP 2: Get Simgos
sgData, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event)
sgData, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
@@ -226,13 +218,13 @@ func CheckIn(input e.Encounter) (*d.Data, error) {
pl.SetLogInfo(&event, input, "started", "check-in")
// STEP 1: Get Link
syncLink, err := ReadDetailLinkData(uint16(input.Id), &event)
syncLink, err := ReadDetailLinkData(input.Id, &event)
if err != nil {
return nil, err
}
// STEP 2: Get Simgos
simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event)
simgos, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
@@ -240,7 +232,7 @@ func CheckIn(input e.Encounter) (*d.Data, error) {
tx := db.NewTx()
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
// Step 2: Update Simgos
if err = UpdateTPendaftaranData(input, *simgos, "check-in", &event, tx); err != nil {
if err = UpdateTPendaftaranData(input, simgos, "check-in", &event, tx); err != nil {
return err
}
@@ -268,13 +260,13 @@ func CheckOut(input e.Encounter) (*d.Data, error) {
pl.SetLogInfo(&event, input, "started", "check-out")
// STEP 1: Get Link
syncLink, err := ReadDetailLinkData(uint16(input.Id), &event)
syncLink, err := ReadDetailLinkData(input.Id, &event)
if err != nil {
return nil, err
}
// STEP 2: Get Simgos
simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event)
simgos, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
@@ -282,7 +274,7 @@ func CheckOut(input e.Encounter) (*d.Data, error) {
tx := db.NewTx()
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
// Step 2: Update Simgos
if err = UpdateTPendaftaranData(input, *simgos, "check-out", &event, tx); err != nil {
if err = UpdateTPendaftaranData(input, simgos, "check-out", &event, tx); err != nil {
return err
}
@@ -310,13 +302,13 @@ func Cancel(input e.Encounter) (*d.Data, error) {
pl.SetLogInfo(&event, input, "started", "cancel")
// STEP 1: Get Link
syncLink, err := ReadDetailLinkData(uint16(input.Id), &event)
syncLink, err := ReadDetailLinkData(input.Id, &event)
if err != nil {
return nil, err
}
// STEP 2: Get Simgos
simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event)
simgos, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
@@ -324,7 +316,7 @@ func Cancel(input e.Encounter) (*d.Data, error) {
tx := db.NewTx()
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
// Step 2: Update Simgos
if err = UpdateTPendaftaranData(input, *simgos, "update-status", &event, tx); err != nil {
if err = UpdateTPendaftaranData(input, simgos, "update-status", &event, tx); err != nil {
return err
}
@@ -352,13 +344,13 @@ func RequestSwitchUnit(input e.Encounter) (*d.Data, error) {
pl.SetLogInfo(&event, input, "started", "request-switch-unit")
// STEP 1: Get Link
syncLink, err := ReadDetailLinkData(uint16(input.Id), &event)
syncLink, err := ReadDetailLinkData(input.Id, &event)
if err != nil {
return nil, err
}
// STEP 2: Get Simgos
tpendaftaran, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event)
tpendaftaran, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
@@ -366,12 +358,12 @@ func RequestSwitchUnit(input e.Encounter) (*d.Data, error) {
tx := db.NewTx()
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
// Step 2: Update TPendaftaran
if err = UpdateTPendaftaranData(input, *tpendaftaran, "update-status", &event, tx); err != nil {
if err = UpdateTPendaftaranData(input, tpendaftaran, "update-status", &event, tx); err != nil {
return err
}
// Step 3: Insert TPemeriksaanHist
if _, err := CreateBulkTPemeriksaanHistData(input, *tpendaftaran, &event, tx); err != nil {
if _, err := CreateBulkTPemeriksaanHistData(input, tpendaftaran, &event, tx); err != nil {
return err
}
@@ -399,13 +391,13 @@ func ApproveSwitchUnit(input e.Encounter) (*d.Data, error) {
pl.SetLogInfo(&event, input, "started", "request-switch-unit")
// STEP 1: Get Link
syncLink, err := ReadDetailLinkData(uint16(input.Id), &event)
syncLink, err := ReadDetailLinkData(input.Id, &event)
if err != nil {
return nil, err
}
// STEP 2: Get Simgos
tpendaftaran, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event)
tpendaftaran, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
@@ -413,12 +405,12 @@ func ApproveSwitchUnit(input e.Encounter) (*d.Data, error) {
tx := db.NewTx()
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
// Step 2: Update TPendaftaran
if err = UpdateTPendaftaranData(input, *tpendaftaran, "update-status", &event, tx); err != nil {
if err = UpdateTPendaftaranData(input, tpendaftaran, "update-status", &event, tx); err != nil {
return err
}
// Step 3: Insert TPemeriksaanHist
if _, err := CreateBulkTPemeriksaanHistData(input, *tpendaftaran, &event, tx); err != nil {
if _, err := CreateBulkTPemeriksaanHistData(input, tpendaftaran, &event, tx); err != nil {
return err
}
@@ -6,7 +6,7 @@ package encounter
import (
"encoding/json"
epr "simrs-vx/internal/domain/main-entities/person-relative"
epa "simrs-vx/internal/domain/main-entities/person-address"
erc "simrs-vx/internal/domain/references/common"
ere "simrs-vx/internal/domain/references/encounter"
erp "simrs-vx/internal/domain/references/person"
@@ -14,6 +14,8 @@ import (
"strconv"
e "simrs-vx/internal/domain/main-entities/encounter"
epc "simrs-vx/internal/domain/main-entities/person-contact"
epr "simrs-vx/internal/domain/main-entities/person-relative"
ep "simrs-vx/internal/domain/simgos-entities/m-pasien"
etph "simrs-vx/internal/domain/simgos-entities/t-pemeriksaan-hist"
etp "simrs-vx/internal/domain/simgos-entities/t-pendaftaran"
@@ -47,20 +49,29 @@ func setDataCreateTPendaftaran(input *e.Encounter) (data etp.TPendaftaran, err e
}
data.NoKunjung = uint(noKunjung)
setDataTPendaftaran(input, data)
if p := input.Patient.Person; p != nil {
mapRelative(p.Relatives, &data)
if data.PenanggungjawabNama == "" {
data.PenanggungjawabHubungan = "DIRI SENDIRI"
data.PenanggungjawabNama = p.Name
mapContact(p.Contacts, &data)
mapAddress(p.Addresses, &data)
}
if bpjs := p.VclaimMember; bpjs != nil {
data.Nokartu = *bpjs.CardNumber
}
}
setDataTPendaftaran(input, &data)
return
}
func setDataTPendaftaran(input *e.Encounter, data etp.TPendaftaran) {
func setDataTPendaftaran(input *e.Encounter, data *etp.TPendaftaran) {
data.Tglreg = input.RegisteredAt
// set kddokter
if d := input.Appointment_Doctor_Code; d != nil {
kddokter, _ := strconv.Atoi(*input.Appointment_Doctor_Code)
data.Kddokter = uint(kddokter)
}
// set kdpoly
if p := input.Unit_Code; p != nil {
kdpoly, _ := strconv.Atoi(*input.Unit_Code)
@@ -82,22 +93,18 @@ func setDataTPendaftaran(input *e.Encounter, data etp.TPendaftaran) {
}
}
if ref := input.VclaimReference; ref != nil {
data.Ketrujuk = *ref.SrcCode
data.Norujukan = *ref.Number
data.Tglrujukan = ref.Date
// set data if payment_method bpjs
if input.RefSource_Name != nil {
data.Ketrujuk = *input.RefSource_Name
data.Strujukan = 1
} else {
data.Ketrujuk = "TR"
data.Strujukan = 0
}
if p := input.Patient.Person; p != nil {
mapRelative(p.Relatives, data)
if bpjs := p.VclaimMember; bpjs != nil {
data.Nokartu = *bpjs.CardNumber
}
if ref := input.VclaimReference; ref != nil {
data.Norujukan = *ref.Number
data.Tglrujukan = ref.Date
}
data.Jamreg = input.RegisteredAt
@@ -107,7 +114,7 @@ func setDataTPendaftaran(input *e.Encounter, data etp.TPendaftaran) {
return
}
func setDataCheckIn(input e.Encounter, data etp.TPendaftaran) {
func setDataCheckIn(input e.Encounter, data *etp.TPendaftaran) {
// set kddokter
kddokter, _ := strconv.Atoi(*input.Responsible_Doctor_Code)
data.Kddokter = uint(kddokter)
@@ -125,7 +132,7 @@ func setDataCheckIn(input e.Encounter, data etp.TPendaftaran) {
return
}
func setDataRequestSwitchUnit(input e.Encounter, data etp.TPendaftaran) (hist []etph.TPemeriksaanHist) {
func setDataRequestSwitchUnit(input e.Encounter, data *etp.TPendaftaran) (hist []etph.TPemeriksaanHist) {
if enc := input.InternalReferences; enc != nil {
for i, ref := range *enc {
hist = append(hist, etph.TPemeriksaanHist{
@@ -151,7 +158,7 @@ func setDataRequestSwitchUnit(input e.Encounter, data etp.TPendaftaran) (hist []
return
}
func setDataCheckOut(input e.Encounter, data etp.TPendaftaran) {
func setDataCheckOut(input e.Encounter, data *etp.TPendaftaran) {
data.Keluarpoly = input.Discharge_Date
// set status
@@ -169,13 +176,13 @@ func setDataCheckOut(input e.Encounter, data etp.TPendaftaran) {
return
}
func setDataUpdateStatus(input e.Encounter, data etp.TPendaftaran) {
func setDataUpdateStatus(input e.Encounter, data *etp.TPendaftaran) {
if input.Status_Code == erc.DSCCancel {
data.Status = 11
}
}
func setKdrujuk(input *ere.RefTypeCode, data etp.TPendaftaran) {
func setKdrujuk(input *ere.RefTypeCode, data *etp.TPendaftaran) {
switch *input {
case ere.RTCGov:
data.Kdrujuk = 1
@@ -188,7 +195,7 @@ func setKdrujuk(input *ere.RefTypeCode, data etp.TPendaftaran) {
}
}
func setKdcarabayar(input ere.AllPaymentMethodCode, data etp.TPendaftaran) {
func setKdcarabayar(input ere.AllPaymentMethodCode, data *etp.TPendaftaran) {
switch input {
case ere.APMCPks:
data.Kdcarabayar = 12
@@ -203,7 +210,7 @@ func setKdcarabayar(input ere.AllPaymentMethodCode, data etp.TPendaftaran) {
}
}
func setStatus(code *ere.DischargeMethodCode, data etp.TPendaftaran) {
func setStatus(code *ere.DischargeMethodCode, data *etp.TPendaftaran) {
switch *code {
case ere.DMCHome:
data.Status = 1
@@ -250,7 +257,7 @@ func setStatus(code *ere.DischargeMethodCode, data etp.TPendaftaran) {
}
}
func mapRelative(relative *[]epr.PersonRelative, data etp.TPendaftaran) {
func mapRelative(relative *[]epr.PersonRelative, data *etp.TPendaftaran) {
if relative == nil || len(*relative) == 0 {
return
}
@@ -322,10 +329,11 @@ func generateNoKunjung() (int, error) {
// Lock rows for this prefix → prevents race condition
if err := dg.IS["simrs"].
Table("t_pendaftaran").
Select("COALESCE(MAX(no_kunjung),0)").
Select("no_kunjung").
Where("tglreg = CURRENT_DATE").
Order("no_kunjung DESC").
Clauses(clause.Locking{Strength: "UPDATE"}).
Limit(1).
Scan(&lastNumber).Error; err != nil {
return 0, err
}
@@ -339,7 +347,7 @@ func stringtouint(v string) *uint {
return &point
}
func updatePatient(patient ep.MPasien, event *pl.Event, dbx ...*gorm.DB) error {
func updatePatientCaraBayar(input etp.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) error {
pl.SetLogInfo(event, nil, "started", "DBUpdate")
var tx *gorm.DB
@@ -350,9 +358,9 @@ func updatePatient(patient ep.MPasien, event *pl.Event, dbx ...*gorm.DB) error {
}
if err := tx.Model(&ep.MPasien{}).
Where("\"nomr\" = ?", patient.Nomr).
Where("\"nomr\" = ?", input.Nomr).
Updates(map[string]interface{}{
"kdcarabayar": patient.Kdcarabayar,
"kdcarabayar": input.Kdcarabayar,
}).Error; err != nil {
event.Status = "failed"
event.ErrInfo = pl.ErrorInfo{
@@ -360,9 +368,30 @@ func updatePatient(patient ep.MPasien, event *pl.Event, dbx ...*gorm.DB) error {
Detail: "Failed to update patient",
Raw: err,
}
return pl.SetLogError(event, patient)
return pl.SetLogError(event, input)
}
pl.SetLogInfo(event, patient, "complete")
pl.SetLogInfo(event, input, "complete")
return nil
}
func mapContact(contact *[]epc.PersonContact, data *etp.TPendaftaran) {
if contact == nil || len(*contact) == 0 {
return
}
for _, c := range *contact {
if c.Type_Code == erp.CTPhone || c.Type_Code == erp.CTMPhone {
data.PenanggungjawabPhone = c.Value
break
}
}
}
func mapAddress(addresses *[]epa.PersonAddress, data *etp.TPendaftaran) {
if addresses == nil || len(*addresses) == 0 {
return
}
a := (*addresses)[0]
data.PenanggungjawabAlamat = a.Address
}
@@ -41,7 +41,7 @@ func CreateTPendaftaranData(input e.Encounter, event *pl.Event, dbx ...*gorm.DB)
return &data, nil
}
func ReadTPendaftaranDetailData(simgosId uint16, event *pl.Event) (*etp.TPendaftaran, error) {
func ReadTPendaftaranDetailData(simgosId uint, event *pl.Event) (*etp.TPendaftaran, error) {
pl.SetLogInfo(event, simgosId, "started", "DBReadDetail")
data := etp.TPendaftaran{}
@@ -59,7 +59,7 @@ func ReadTPendaftaranDetailData(simgosId uint16, event *pl.Event) (*etp.TPendaft
return &data, nil
}
func UpdateTPendaftaranData(input e.Encounter, data etp.TPendaftaran, method string, event *pl.Event, dbx ...*gorm.DB) error {
func UpdateTPendaftaranData(input e.Encounter, data *etp.TPendaftaran, method string, event *pl.Event, dbx ...*gorm.DB) error {
pl.SetLogInfo(event, input, "started", "DBUpdate")
switch method {
@@ -138,7 +138,7 @@ func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*e
return &data, nil
}
func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.EncounterLink, error) {
func ReadDetailLinkData(simxId uint, event *pl.Event) (*esync.EncounterLink, error) {
pl.SetLogInfo(event, simxId, "started", "DBReadDetail")
data := esync.EncounterLink{}
@@ -199,7 +199,7 @@ func CreateLogData(input esynclog.SimxLogDto, event *pl.Event, dbx ...*gorm.DB)
return nil
}
func CreateBulkTPemeriksaanHistData(input e.Encounter, data etp.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) (hist []etph.TPemeriksaanHist, err error) {
func CreateBulkTPemeriksaanHistData(input e.Encounter, data *etp.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) (hist []etph.TPemeriksaanHist, err error) {
pl.SetLogInfo(event, nil, "started", "DBCreate")
hist = setDataRequestSwitchUnit(input, data)
@@ -37,12 +37,15 @@ func setDataSimgos(input *e.Patient) (data esimgos.MPasien) {
mapContact(input.Person.Contacts, &data)
}
data.PenanggungjawabHubungan = "DIRI SENDIRI"
data.PenanggungjawabNama = input.Person.Name
data.PenanggungjawabPhone = data.Notelp
data.PenanggungjawabAlamat = data.Alamat
if input.Person != nil || input.Person.Relatives != nil {
mapRelative(input.Person.Relatives, &data)
if input.Person != nil {
data.PenanggungjawabHubungan = "DIRI SENDIRI"
data.PenanggungjawabNama = input.Person.Name
data.PenanggungjawabPhone = data.Notelp
data.PenanggungjawabAlamat = data.Alamat
if input.Person.Relatives != nil {
mapRelative(input.Person.Relatives, &data)
}
}
data.Nip = input.RegisteredBy_User_Name
@@ -14,7 +14,7 @@ import (
esync "simrs-vx/internal/domain/sync-entities/specialist"
)
func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MPolihfis) {
func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T, data *esimgos.MPolihfis) {
var inputSrc *e.CreateDto
if inputT, ok := any(input).(*e.CreateDto); ok {
inputSrc = inputT
@@ -20,7 +20,8 @@ var now = time.Now()
func CreateSimgosData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*esimgos.MPolihfis, error) {
pl.SetLogInfo(event, nil, "started", "DBCreate")
data := setDataSimgos(&input)
data := esimgos.MPolihfis{}
setDataSimgos(&input, &data)
var tx *gorm.DB
if len(dbx) > 0 {
@@ -29,7 +30,7 @@ func CreateSimgosData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*esi
tx = dg.IS["simrs"]
}
if err := tx.Create(&data).Error; err != nil {
if err := tx.Debug().Create(&data).Error; err != nil {
return nil, plh.HandleCreateError(input, event, err)
}
@@ -58,7 +59,9 @@ func ReadDetailSimgosData(simgosId uint16, event *pl.Event) (*esimgos.MPolihfis,
func UpdateSimgosData(input e.UpdateDto, dataSimgos *esync.SpecialistLink, event *pl.Event, dbx ...*gorm.DB) error {
pl.SetLogInfo(event, input, "started", "DBUpdate")
data := setDataSimgos(&input)
data := esimgos.MPolihfis{}
setDataSimgos(&input, &data)
data.Id = dataSimgos.Simgos_Id
var tx *gorm.DB
@@ -7,6 +7,7 @@ package unit
import (
"encoding/json"
erc "simrs-vx/internal/domain/references/common"
"strconv"
e "simrs-vx/internal/domain/main-entities/unit"
@@ -27,6 +28,8 @@ func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MPoly)
data.Nama = inputSrc.Name
data.Jenispoly = 0
kodePoly, _ := strconv.Atoi(inputSrc.Code)
data.Kode = uint(kodePoly)
return
}