From 32461141ab6465ec6015bb996f4fe9c850147274 Mon Sep 17 00:00:00 2001 From: vanilia Date: Mon, 1 Dec 2025 16:26:45 +0700 Subject: [PATCH 1/7] add t_diagnosadanterapi and reference --- .../domain/references/clinical/clinical.go | 31 +++++++++++ .../t-diagnosadanterapi/entity.go | 51 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 internal/domain/simgos-entities/t-diagnosadanterapi/entity.go diff --git a/internal/domain/references/clinical/clinical.go b/internal/domain/references/clinical/clinical.go index 30a4fe8a..25619eab 100644 --- a/internal/domain/references/clinical/clinical.go +++ b/internal/domain/references/clinical/clinical.go @@ -311,3 +311,34 @@ type HeadToToe struct { Neuron string `json:"neuron,omitempty"` BodyOthers string `json:"body-others,omitempty"` } + +type SoapiSrc struct { + Id string `json:"id,omitempty"` + Code string `json:"code,omitempty"` + Name string `json:"name,omitempty"` + IndName string `json:"indName,omitempty"` +} + +type EarlyMedicValue struct { + Vaccinated bool `json:"vaccinated,omitempty"` + CaseStatus string `json:"case-status,omitempty"` + EncounterStatus string `json:"encounter-status,omitempty"` + PrimaryComplain string `json:"pri-complain,omitempty"` + CurrentDiseaseHistory string `json:"cur-disea-hist,omitempty"` + SpO2 int `json:"spo2,omitempty"` + SystolicBloodPressure int `json:"syst-bp,omitempty"` + DiastolicBloodPressure int `json:"diast-bp,omitempty"` + RespiratoryRate int `json:"resp-rate,omitempty"` + Pulse int `json:"pulse,omitempty"` + Weight int `json:"weight,omitempty"` + BloodType string `json:"blood-type,omitempty"` + Temperature int `json:"temp,omitempty"` + Height int `json:"height,omitempty"` + PhysicalExamination string `json:"physical-exam,omitempty"` + DiagnoseSrc []SoapiSrc `json:"diagnoseSrc,omitempty"` + ProcedureSrc []SoapiSrc `json:"procedureSrc,omitempty"` + EarlyMedicDiagnose string `json:"early-med-diag,omitempty"` + EarlyMedicPlan string `json:"early-med-plan,omitempty"` + Therapy string `json:"therapy,omitempty"` + ExpectedOutcome []SoapiSrc `json:"expected-outcome,omitempty"` +} diff --git a/internal/domain/simgos-entities/t-diagnosadanterapi/entity.go b/internal/domain/simgos-entities/t-diagnosadanterapi/entity.go new file mode 100644 index 00000000..76be4c0f --- /dev/null +++ b/internal/domain/simgos-entities/t-diagnosadanterapi/entity.go @@ -0,0 +1,51 @@ +package t_diagnosadanterapi + +import "time" + +type DiagnosaDanTerapi struct { + Idxterapi int64 `gorm:"column:idxterapi;primaryKey"` + Idxdaftar int64 `gorm:"column:idxdaftar"` + Nomr string `gorm:"column:nomr"` + Tanggal time.Time `gorm:"column:tanggal"` + TekananDarah string `gorm:"column:tekanan_darah"` + GolonganDarah string `gorm:"column:golongan_darah"` + TinggiBadan float64 `gorm:"column:tinggi_badan"` + BeratBadan float64 `gorm:"column:berat_badan"` + Diagnosa string `gorm:"column:diagnosa"` + Komplikasi string `gorm:"column:komplikasi"` + Terapi string `gorm:"column:terapi"` + Anamnesa string `gorm:"column:anamnesa"` + Kdpoly int `gorm:"column:kdpoly"` + Kddokter int `gorm:"column:kddokter"` + Kdtujuanrujuk int `gorm:"column:kdtujuanrujuk"` + Nip string `gorm:"column:nip"` + IcdCode string `gorm:"column:icd_code"` + KunjunganBl int16 `gorm:"column:kunjungan_bl"` + KasusBl int16 `gorm:"column:kasus_bl"` + Icdcm string `gorm:"column:icdcm"` + Icd9 string `gorm:"column:icd_9"` + Klb int16 `gorm:"column:klb"` + Bedah int16 `gorm:"column:bedah"` + Jenis int16 `gorm:"column:jenis"` + Perawat string `gorm:"column:perawat"` + Status string `gorm:"column:status"` + PemeriksaanFisik string `gorm:"column:pemeriksaan_fisik"` + RiwayatPasien string `gorm:"column:riwayat_pasien"` + TindakanMedis string `gorm:"column:tindakan_medis"` + Rajal int16 `gorm:"column:rajal"` + UserBatal string `gorm:"column:user_batal"` + TglBatal *time.Time `gorm:"column:tgl_batal"` + SudahVaksin string `gorm:"column:sudah_vaksin"` + CreatedAt time.Time `gorm:"column:created_at"` + DenyutJantung string `gorm:"column:denyut_jantung"` + Pernapasan string `gorm:"column:pernapasan"` + Suhu string `gorm:"column:suhu"` + Sp02 string `gorm:"column:sp02"` + TujuanPerawatan string `gorm:"column:tujuan_perawatan"` + TargetCapaian string `gorm:"column:target_capaian"` +} + +// TableName overrides the table name used by GORM +func (DiagnosaDanTerapi) TableName() string { + return "t_diagnosadanterapi" +} From c98385792a243db01388e98074b818ad701dab5d Mon Sep 17 00:00:00 2001 From: vanilia Date: Mon, 1 Dec 2025 16:35:20 +0700 Subject: [PATCH 2/7] add sync entities for soapi --- .../migrations/20251201093443.sql | 36 +++++++++++++++++++ .../migrations/atlas.sum | 5 +-- internal/domain/sync-entities/soapi/entity.go | 29 +++++++++++++++ .../migration/simgossync-entities.go | 4 +++ 4 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 cmd/simgos-sync-migration/migrations/20251201093443.sql create mode 100644 internal/domain/sync-entities/soapi/entity.go diff --git a/cmd/simgos-sync-migration/migrations/20251201093443.sql b/cmd/simgos-sync-migration/migrations/20251201093443.sql new file mode 100644 index 00000000..1ecce17e --- /dev/null +++ b/cmd/simgos-sync-migration/migrations/20251201093443.sql @@ -0,0 +1,36 @@ +-- Create "SoapiLink" table +CREATE TABLE "public"."SoapiLink" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Simx_Id" bigint NULL, + "Simgos_Id" bigint NULL, + PRIMARY KEY ("Id"), + CONSTRAINT "uni_SoapiLink_Simgos_Id" UNIQUE ("Simgos_Id"), + CONSTRAINT "uni_SoapiLink_Simx_Id" UNIQUE ("Simx_Id") +); +-- Create "SoapiSimgosLog" table +CREATE TABLE "public"."SoapiSimgosLog" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Value" text NULL, + "Date" timestamptz NULL, + "Status" text NULL, + "ErrMessage" text NULL, + PRIMARY KEY ("Id") +); +-- Create "SoapiSimxLog" table +CREATE TABLE "public"."SoapiSimxLog" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Value" text NULL, + "Date" timestamptz NULL, + "Status" text NULL, + "ErrMessage" text NULL, + PRIMARY KEY ("Id") +); diff --git a/cmd/simgos-sync-migration/migrations/atlas.sum b/cmd/simgos-sync-migration/migrations/atlas.sum index 497ac414..e82a5610 100644 --- a/cmd/simgos-sync-migration/migrations/atlas.sum +++ b/cmd/simgos-sync-migration/migrations/atlas.sum @@ -1,7 +1,8 @@ -h1:UdPzQZ17yyNN9HVuyrFFHj5KjLj4m6/e7s9frkdpQVU= +h1:6YZBXq/r79I5tuYyY1+CBzhZsSeukHSs8MyHCC5QuV4= 20251113035508.sql h1:rjDlu6yDdy5xv6nrCOr7NialrLSLT23pzduYNq29Hf0= 20251114071129.sql h1:Z0GQ5bJo3C+tplaWzxT8n3J9HLkEaVsRVp5nn7bmYow= 20251117041601.sql h1:l/RPG5mObqCSBjO4mzG+wTq2ieSycvlfOSz4czpUdWY= 20251118082246.sql h1:xLUwA+EvKWIg3X/TJvu7rqbtBzONiINfag5NJpMV29E= 20251118082915.sql h1:hP6FmUVFuADIN2cDg2Z1l7Wx7PQRb+IYQDvKD7J8VAM= -20251126115527.sql h1:+2bp2nWTTqaPpKKfy5ZYSr6b1nEUXFG3tIw4r3OEnAQ= +20251126115527.sql h1:Bvg+Y7k+h5s+/UaezUyJb7J7uzEJS7U5Z/RoCixcUtI= +20251201093443.sql h1:m18tksKG3OzbkxXkhfKUUqbkxnJ0VBPi3Cw34Tbywyc= diff --git a/internal/domain/sync-entities/soapi/entity.go b/internal/domain/sync-entities/soapi/entity.go new file mode 100644 index 00000000..0a1315c7 --- /dev/null +++ b/internal/domain/sync-entities/soapi/entity.go @@ -0,0 +1,29 @@ +package Soapi + +import ( + ecore "simrs-vx/internal/domain/base-entities/core" + erc "simrs-vx/internal/domain/references/common" + "time" +) + +type SoapiLink struct { + ecore.Main + Simx_Id uint `json:"simx_id" gorm:"unique"` + Simgos_Id uint `json:"simgos_id" gorm:"unique"` +} + +type SoapiSimxLog struct { + ecore.Main + Value *string `json:"value"` + Date *time.Time `json:"date"` + Status erc.ProcessStatusCode `json:"status"` + ErrMessage *string `json:"errMessage"` +} + +type SoapiSimgosLog struct { + ecore.Main + Value *string `json:"value"` + Date *time.Time `json:"date"` + Status erc.ProcessStatusCode `json:"status"` + ErrMessage *string `json:"errMessage"` +} diff --git a/internal/interface/migration/simgossync-entities.go b/internal/interface/migration/simgossync-entities.go index 7b37a842..2c479521 100644 --- a/internal/interface/migration/simgossync-entities.go +++ b/internal/interface/migration/simgossync-entities.go @@ -7,6 +7,7 @@ import ( installation "simrs-vx/internal/domain/sync-entities/installation" internalreference "simrs-vx/internal/domain/sync-entities/internal-reference" patient "simrs-vx/internal/domain/sync-entities/patient" + soapi "simrs-vx/internal/domain/sync-entities/soapi" specialist "simrs-vx/internal/domain/sync-entities/specialist" subspecialist "simrs-vx/internal/domain/sync-entities/subspecialist" unit "simrs-vx/internal/domain/sync-entities/unit" @@ -38,5 +39,8 @@ func getSyncEntities() []any { &internalreference.InternalReferenceLink{}, &internalreference.InternalReferenceSimxLog{}, &internalreference.InternalReferenceSimgosLog{}, + &soapi.SoapiLink{}, + &soapi.SoapiSimxLog{}, + &soapi.SoapiSimgosLog{}, } } From df3ed7919e53c491851ea926f46ac9cdb85cf194 Mon Sep 17 00:00:00 2001 From: vanilia Date: Mon, 1 Dec 2025 17:03:24 +0700 Subject: [PATCH 3/7] adjust diagnosaandterapi entity --- .../t-diagnosadanterapi/entity.go | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/internal/domain/simgos-entities/t-diagnosadanterapi/entity.go b/internal/domain/simgos-entities/t-diagnosadanterapi/entity.go index 76be4c0f..3c3c3e59 100644 --- a/internal/domain/simgos-entities/t-diagnosadanterapi/entity.go +++ b/internal/domain/simgos-entities/t-diagnosadanterapi/entity.go @@ -3,8 +3,8 @@ package t_diagnosadanterapi import "time" type DiagnosaDanTerapi struct { - Idxterapi int64 `gorm:"column:idxterapi;primaryKey"` - Idxdaftar int64 `gorm:"column:idxdaftar"` + Idxterapi uint `gorm:"column:idxterapi;primaryKey"` + Idxdaftar uint `gorm:"column:idxdaftar"` Nomr string `gorm:"column:nomr"` Tanggal time.Time `gorm:"column:tanggal"` TekananDarah string `gorm:"column:tekanan_darah"` @@ -15,24 +15,24 @@ type DiagnosaDanTerapi struct { Komplikasi string `gorm:"column:komplikasi"` Terapi string `gorm:"column:terapi"` Anamnesa string `gorm:"column:anamnesa"` - Kdpoly int `gorm:"column:kdpoly"` - Kddokter int `gorm:"column:kddokter"` - Kdtujuanrujuk int `gorm:"column:kdtujuanrujuk"` + Kdpoly uint `gorm:"column:kdpoly"` + Kddokter uint `gorm:"column:kddokter"` + Kdtujuanrujuk uint `gorm:"column:kdtujuanrujuk"` Nip string `gorm:"column:nip"` IcdCode string `gorm:"column:icd_code"` - KunjunganBl int16 `gorm:"column:kunjungan_bl"` - KasusBl int16 `gorm:"column:kasus_bl"` + KunjunganBl uint `gorm:"column:kunjungan_bl"` + KasusBl uint `gorm:"column:kasus_bl"` Icdcm string `gorm:"column:icdcm"` Icd9 string `gorm:"column:icd_9"` - Klb int16 `gorm:"column:klb"` - Bedah int16 `gorm:"column:bedah"` - Jenis int16 `gorm:"column:jenis"` + Klb uint `gorm:"column:klb"` + Bedah uint `gorm:"column:bedah"` + Jenis uint `gorm:"column:jenis"` Perawat string `gorm:"column:perawat"` Status string `gorm:"column:status"` PemeriksaanFisik string `gorm:"column:pemeriksaan_fisik"` RiwayatPasien string `gorm:"column:riwayat_pasien"` TindakanMedis string `gorm:"column:tindakan_medis"` - Rajal int16 `gorm:"column:rajal"` + Rajal uint `gorm:"column:rajal"` UserBatal string `gorm:"column:user_batal"` TglBatal *time.Time `gorm:"column:tgl_batal"` SudahVaksin string `gorm:"column:sudah_vaksin"` From cc16b6f1cb5fe564aa71557a4d045dbd1aaa50dc Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Wed, 3 Dec 2025 10:19:36 +0700 Subject: [PATCH 4/7] add doctype screening --- internal/domain/references/encounter/encounter.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/domain/references/encounter/encounter.go b/internal/domain/references/encounter/encounter.go index 231baa9b..ad6abe05 100644 --- a/internal/domain/references/encounter/encounter.go +++ b/internal/domain/references/encounter/encounter.go @@ -123,6 +123,7 @@ const ( DTCGC DocTypeCode = "general-consent" DTCVSCL DocTypeCode = "vclaim-control-letter" // vclaim control letter DTCResume DocTypeCode = "resume" // Resume + DTCScreening DocTypeCode = "screening" // Screening ETCPerson EntityTypeCode = "person" ETCEncounter EntityTypeCode = "encounter" From da2bea83080eb67eea0c394c92674df71d3dbc71 Mon Sep 17 00:00:00 2001 From: vanilia Date: Wed, 3 Dec 2025 10:25:11 +0700 Subject: [PATCH 5/7] add t-rekammedik --- .../simgos-entities/t-rekammedik/entity.go | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 internal/domain/simgos-entities/t-rekammedik/entity.go diff --git a/internal/domain/simgos-entities/t-rekammedik/entity.go b/internal/domain/simgos-entities/t-rekammedik/entity.go new file mode 100644 index 00000000..5df0ec83 --- /dev/null +++ b/internal/domain/simgos-entities/t-rekammedik/entity.go @@ -0,0 +1,22 @@ +package t_rekammedik + +import "time" + +type TRekammedik struct { + TglKirim *time.Time `json:"tgl_kirim" gorm:"column:tgl_kirim"` + TglTerima *time.Time `json:"tgl_terima" gorm:"column:tgl_terima"` + Idxdaftar int `json:"idxdaftar" gorm:"column:idxdaftar"` + Kdpoly int `json:"kdpoly" gorm:"column:kdpoly"` + Pengirim string `json:"pengirim" gorm:"column:pengirim"` + Penerima string `json:"penerima" gorm:"column:penerima"` + Statusrm int `json:"statusrm" gorm:"column:statusrm"` + PenerimaPoly string `json:"penerima_poly" gorm:"column:penerima_poly"` + JamKirimRm string `json:"jam_kirim_rm" gorm:"column:jam_kirim_rm"` + JamTerimaRm string `json:"jam_terima_rm" gorm:"column:jam_terima_rm"` + PjBerkasRm string `json:"pj_berkas_rm" gorm:"column:pj_berkas_rm"` + StatusFisikBerkas string `json:"status_fisik_berkas" gorm:"column:status_fisik_berkas"` +} + +func (TRekammedik) TableName() string { + return "t_rekammedik" +} From a44ba9ab1cd133c8fa1c250c68f5ad2a4272208e Mon Sep 17 00:00:00 2001 From: vanilia Date: Wed, 3 Dec 2025 14:20:28 +0700 Subject: [PATCH 6/7] add partial index for patient number --- cmd/main-migration/migrations/atlas.sum | 4 ++-- internal/domain/main-entities/patient/entity.go | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cmd/main-migration/migrations/atlas.sum b/cmd/main-migration/migrations/atlas.sum index c949eadc..341a35d3 100644 --- a/cmd/main-migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:MO6ze6e6ClW/WxUyiZxT6Lmhz8BDgXmmYeLDSN4xEJw= +h1:DgMML95zGYI7JMvZaIb/gySCvncMu62CANOIXNX0A6w= 20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= 20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= 20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= @@ -143,4 +143,4 @@ h1:MO6ze6e6ClW/WxUyiZxT6Lmhz8BDgXmmYeLDSN4xEJw= 20251202130629.sql h1:9mvalqfhqGCdkcJepJDzHprU2xb0i5sYys1Htf62ioo= 20251202160848.sql h1:Kd2/TziKSMezrt4XgbjQcYvY/Lo9rX0qw7/Lz0/oyKk= 20251202180207.sql h1:IHmSMIO3ia+YV5GULixbdlV1joaUAWtnjQHPd8+HKiM= -20251202231005.sql h1:iVzsqbqmfncDXPPXoRqCQdcvgvLBv57TbzdbzQAmSVc= +20251202231005.sql h1:lua0KKoeBptSfs/6ehZE6Azo6YUlNkOJwGFyb1HQWkY= diff --git a/internal/domain/main-entities/patient/entity.go b/internal/domain/main-entities/patient/entity.go index 83afa6ce..9ad63ce8 100644 --- a/internal/domain/main-entities/patient/entity.go +++ b/internal/domain/main-entities/patient/entity.go @@ -15,7 +15,14 @@ type Patient struct { RegisteredAt *time.Time `json:"registeredAt"` RegisteredBy_User_Name *string `json:"registeredBy_user_name" gorm:"size:100"` Status_Code erc.ActiveStatusCode `json:"status_code" gorm:"not null;size:10"` - Number *string `json:"number" gorm:"unique;size:15"` - Parent_Number *string `json:"parent_number"` - Parent *Patient `json:"parent,omitempty" gorm:"foreignKey:Parent_Number;references:Number"` + + // Normal UNIQUE index — required for the foreign key reference + Number *string `json:"number" gorm:"size:15;unique"` + + // Partial unique index — keeps Number unique only for non–soft-deleted records. + // Allows duplicate Number values when previous records are soft-deleted. + _ struct{} `gorm:"uniqueIndex:idx_number_active,where:\"DeletedAt\" IS NULL"` + + Parent_Number *string `json:"parent_number"` + Parent *Patient `json:"parent,omitempty" gorm:"foreignKey:Parent_Number;references:Number"` } From 09068877878c7712bae83357badccf807d3554c1 Mon Sep 17 00:00:00 2001 From: vanilia Date: Wed, 3 Dec 2025 15:24:28 +0700 Subject: [PATCH 7/7] rollback patient --- internal/domain/main-entities/patient/entity.go | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/internal/domain/main-entities/patient/entity.go b/internal/domain/main-entities/patient/entity.go index 9ad63ce8..fc6d8833 100644 --- a/internal/domain/main-entities/patient/entity.go +++ b/internal/domain/main-entities/patient/entity.go @@ -15,14 +15,7 @@ type Patient struct { RegisteredAt *time.Time `json:"registeredAt"` RegisteredBy_User_Name *string `json:"registeredBy_user_name" gorm:"size:100"` Status_Code erc.ActiveStatusCode `json:"status_code" gorm:"not null;size:10"` - - // Normal UNIQUE index — required for the foreign key reference - Number *string `json:"number" gorm:"size:15;unique"` - - // Partial unique index — keeps Number unique only for non–soft-deleted records. - // Allows duplicate Number values when previous records are soft-deleted. - _ struct{} `gorm:"uniqueIndex:idx_number_active,where:\"DeletedAt\" IS NULL"` - - Parent_Number *string `json:"parent_number"` - Parent *Patient `json:"parent,omitempty" gorm:"foreignKey:Parent_Number;references:Number"` + Number *string `json:"number" gorm:"size:15;unique"` + Parent_Number *string `json:"parent_number"` + Parent *Patient `json:"parent,omitempty" gorm:"foreignKey:Parent_Number;references:Number"` }