Merge branch 'migration' of https://github.com/dikstub-rssa/simrs-be into feat/sync-from-simx-160

This commit is contained in:
vanilia
2025-11-19 15:30:05 +07:00
14 changed files with 186 additions and 16 deletions
@@ -0,0 +1,2 @@
-- Modify "GeneralConsent" table
ALTER TABLE "public"."GeneralConsent" DROP CONSTRAINT "fk_GeneralConsent_Encounter", ADD CONSTRAINT "fk_Encounter_GeneralConsents" FOREIGN KEY ("Encounter_Id") REFERENCES "public"."Encounter" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION;
@@ -0,0 +1,6 @@
-- Modify "Person" table
ALTER TABLE "public"."Person" DROP CONSTRAINT "uni_Person_DrivingLicenseNumber", DROP CONSTRAINT "uni_Person_PassportNumber", ALTER COLUMN "ResidentIdentityNumber" TYPE character varying(16), ALTER COLUMN "Nationality" TYPE character varying(50);
-- Create index "idx_driver_license" to table: "Person"
CREATE UNIQUE INDEX "idx_driver_license" ON "public"."Person" ("DrivingLicenseNumber") WHERE ("DeletedAt" IS NULL);
-- Create index "idx_passport" to table: "Person"
CREATE UNIQUE INDEX "idx_passport" ON "public"."Person" ("PassportNumber") WHERE ("DeletedAt" IS NULL);
@@ -0,0 +1,2 @@
-- Modify "VclaimSepPrint" table
ALTER TABLE "public"."VclaimSepPrint" DROP CONSTRAINT "fk_VclaimSepPrint_VclaimSep", ADD CONSTRAINT "fk_VclaimSep_Prints" FOREIGN KEY ("VclaimSep_Number") REFERENCES "public"."VclaimSep" ("Number") ON UPDATE NO ACTION ON DELETE NO ACTION;
@@ -0,0 +1,15 @@
-- Create "VclaimSepControlLetter" table
CREATE TABLE "public"."VclaimSepControlLetter" (
"Id" bigserial NOT NULL,
"CreatedAt" timestamptz NULL,
"UpdatedAt" timestamptz NULL,
"DeletedAt" timestamptz NULL,
"VclaimSep_Number" character varying(19) NULL,
"Number" character varying(20) NULL,
"Value" text NULL,
"FileUrl" character varying(1024) NULL,
PRIMARY KEY ("Id"),
CONSTRAINT "uni_VclaimSepControlLetter_FileUrl" UNIQUE ("FileUrl"),
CONSTRAINT "uni_VclaimSepControlLetter_Number" UNIQUE ("Number"),
CONSTRAINT "fk_VclaimSep_ControlLetters" FOREIGN KEY ("VclaimSep_Number") REFERENCES "public"."VclaimSep" ("Number") ON UPDATE NO ACTION ON DELETE NO ACTION
);
+6 -2
View File
@@ -1,4 +1,4 @@
h1:UhULOHIbuhMYkKVWh97sQJdSpsgfHegvn8gwivFk6YQ=
h1:8gw1BB9DWz+cNATJjG1oMXA+QAF1HrIw47xjbI33aC4=
20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k=
20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0=
20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI=
@@ -120,4 +120,8 @@ h1:UhULOHIbuhMYkKVWh97sQJdSpsgfHegvn8gwivFk6YQ=
20251114062746.sql h1:FInLaEFQByESEwFJKuKnuUSTKmcDpi3ZXaxkKwz2+D8=
20251117005942.sql h1:wD3BWrUSmo1HlW16V3lkaBkJvbAZ0fNk77te7J9NhOc=
20251117075427.sql h1:TqU9VKZa3I8YNXUGQWY3WVBYN+1FvyyaKy0hB1jgAho=
20251119063438.sql h1:7BCr8Pr2doQT2BmsKYpyGa7gap4pWH711vClDw/VQ6s=
20251118074929.sql h1:p1KsWqCuR1JXA/jVO5BmOhCcaQ8clT7t0YRszAhPFbg=
20251119063438.sql h1:NVGM0X/LHD37EaPl8SNzkNiZDJ7AB1QR+LLwLh6WRdg=
20251119065730.sql h1:U5lzk1WvMB0bw3kwckou7jkEt4bwdYItwHr2Vxqe7w4=
20251119072302.sql h1:8L+NsXPFXGZDQZIOhShvuBM9aLwU3h95tXnz6jxHhlA=
20251119072450.sql h1:ksTc8ljaHFrBo1/HiHtcnT+iJ7kPS93KgetFTf3p4Qc=
@@ -0,0 +1,61 @@
package vclaimsepcontrolletter
import (
ecore "simrs-vx/internal/domain/base-entities/core"
)
type CreateDto struct {
VclaimSep_Number *string `json:"vclaimSep_number"`
}
type ReadListDto struct {
FilterDto
Includes string `json:"includes"`
Sort string `json:"sort"`
Pagination ecore.Pagination
}
type FilterDto struct {
VclaimSep_Number *string `json:"vclaimSep_number"`
}
type ReadDetailDto struct {
Id uint `json:"id"`
}
type UpdateDto struct {
Id uint `json:"id"`
CreateDto
}
type DeleteDto struct {
Id uint `json:"id"`
}
type MetaDto struct {
PageNumber int `json:"page_number"`
PageSize int `json:"page_size"`
Count int `json:"count"`
}
type ResponseDto struct {
ecore.Main
VclaimSep_Number *string `json:"vclaimSep_number"`
Counter *uint `json:"counter"`
}
func (d VclaimSepControlLetter) ToResponse() ResponseDto {
resp := ResponseDto{
VclaimSep_Number: d.VclaimSep_Number,
}
resp.Main = d.Main
return resp
}
func ToResponseList(data []VclaimSepControlLetter) []ResponseDto {
resp := make([]ResponseDto, len(data))
for i, u := range data {
resp[i] = u.ToResponse()
}
return resp
}
@@ -0,0 +1,13 @@
package vclaimsepcontrolletter
import (
ecore "simrs-vx/internal/domain/base-entities/core"
)
type VclaimSepControlLetter struct {
ecore.Main
VclaimSep_Number *string `json:"vclaimSep_number"`
Number *string `json:"number" gorm:"unique;size:20"`
Value *string `json:"value"`
FileUrl *string `json:"fileUrl" gorm:"unique;size:1024"`
}
@@ -2,12 +2,10 @@ package vclaimsepprint
import (
ecore "simrs-vx/internal/domain/base-entities/core"
evs "simrs-vx/internal/domain/bpjs-entities/vclaim-sep"
)
type VclaimSepPrint struct {
ecore.Main
VclaimSep_Number *string `json:"vclaimSep_number"`
VclaimSep *evs.VclaimSep `json:"vclaimSep,omitempty" gorm:"foreignKey:VclaimSep_Number;references:Number"`
Counter *uint `json:"counter"`
VclaimSep_Number *string `json:"vclaimSep_number"`
Counter *uint `json:"counter"`
}
@@ -2,10 +2,14 @@ package vclaimsep
import (
ecore "simrs-vx/internal/domain/base-entities/core"
evscl "simrs-vx/internal/domain/bpjs-entities/vclaim-sep-control-letter"
evsp "simrs-vx/internal/domain/bpjs-entities/vclaim-sep-print"
)
type VclaimSep struct {
ecore.Main
Encounter_Id *uint `json:"encounter_id"`
Number *string `json:"number" gorm:"unique;size:19"`
Encounter_Id *uint `json:"encounter_id"`
Number *string `json:"number" gorm:"unique;size:19"`
Prints []*evsp.VclaimSepPrint `json:"prints,omitempty" gorm:"foreignKey:VclaimSep_Number;references:Number"`
ControlLetters []*evscl.VclaimSepControlLetter `json:"controlLetters,omitempty" gorm:"foreignKey:VclaimSep_Number;references:Number"`
}
@@ -10,6 +10,7 @@ import (
eem "simrs-vx/internal/domain/main-entities/emergency"
ee "simrs-vx/internal/domain/main-entities/employee"
eed "simrs-vx/internal/domain/main-entities/encounter-document"
egc "simrs-vx/internal/domain/main-entities/general-consent"
eip "simrs-vx/internal/domain/main-entities/inpatient"
ei "simrs-vx/internal/domain/main-entities/insurance-company"
eir "simrs-vx/internal/domain/main-entities/internal-reference"
@@ -72,6 +73,7 @@ type Encounter struct {
Rehab *er.Basic `json:"rehab,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"`
RehabChildren *[]er.Basic `json:"rehabChildren,omitempty" gorm:"foreignKey:Parent_Encounter_Id;references:Id"`
EncounterDocuments *[]eed.EncounterDocument `json:"encounterDocuments,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"`
GeneralConsents *[]egc.GeneralConsent `json:"generalConsents,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"`
}
func (d Encounter) IsDone() bool {
@@ -2,13 +2,11 @@ package general_consent
import (
"simrs-vx/internal/domain/base-entities/core"
ee "simrs-vx/internal/domain/main-entities/encounter"
)
type GeneralConsent struct {
core.Main
Encounter_Id *uint `json:"encounter_id" gorm:"not null"`
Encounter *ee.Encounter `json:"encounter,omitempty" gorm:"foreignKey:Encounter_Id;references:Id"`
Value *string `json:"value"`
FileUrl *string `json:"fileUrl" gorm:"size:1024"`
Encounter_Id *uint `json:"encounter_id" gorm:"not null"`
Value *string `json:"value"`
FileUrl *string `json:"fileUrl" gorm:"size:1024"`
}
@@ -25,9 +25,9 @@ type Person struct {
BirthRegency_Code *string `json:"birthRegency_code" gorm:"size:4"`
BirthRegency *er.Regency `json:"birthRegency,omitempty" gorm:"foreignKey:BirthRegency_Code;references:Code"`
Gender_Code *erp.GenderCode `json:"gender_code" gorm:"size:10"`
ResidentIdentityNumber *string `json:"residentIdentityNumber" gorm:"uniqueIndex:idx_resident_identity,where:\"DeletedAt\" IS NULL"`
PassportNumber *string `json:"passportNumber" gorm:"unique;size:20"`
DrivingLicenseNumber *string `json:"drivingLicenseNumber" gorm:"unique;size:20"`
ResidentIdentityNumber *string `json:"residentIdentityNumber" gorm:"uniqueIndex:idx_resident_identity,where:\"DeletedAt\" IS NULL;size:16"`
PassportNumber *string `json:"passportNumber" gorm:"uniqueIndex:idx_passport,where:\"DeletedAt\" IS NULL;size:20"`
DrivingLicenseNumber *string `json:"drivingLicenseNumber" gorm:"uniqueIndex:idx_driver_license,where:\"DeletedAt\" IS NULL;size:20"`
Religion_Code *erp.ReligionCode `json:"religion_code" gorm:"size:10"`
Confidence *string `json:"confidence" gorm:"size:512"`
Education_Code *erp.EducationCode `json:"education_code" gorm:"size:10"`
@@ -103,6 +103,7 @@ import (
///BPJS
vclaimmember "simrs-vx/internal/domain/bpjs-entities/vclaim-member"
vclaimsep "simrs-vx/internal/domain/bpjs-entities/vclaim-sep"
vclaimsepcontrolletter "simrs-vx/internal/domain/bpjs-entities/vclaim-sep-control-letter"
vclaimsephist "simrs-vx/internal/domain/bpjs-entities/vclaim-sep-hist"
vclaimsepprint "simrs-vx/internal/domain/bpjs-entities/vclaim-sep-print"
)
@@ -211,5 +212,6 @@ func getMainEntities() []any {
&rehab.Rehab{},
&chemoprotocol.ChemoProtocol{},
&fileattachemnt.EncounterDocument{},
&vclaimsepcontrolletter.VclaimSepControlLetter{},
}
}
@@ -0,0 +1,63 @@
package generatefile
import (
erc "simrs-vx/internal/domain/references/common"
ere "simrs-vx/internal/domain/references/encounter"
)
type GeneralConsentPDF struct {
Relatives []string `json:"relatives"`
Responsible string `json:"responsible"`
Informant string `json:"informant"`
Witness1 string `json:"witness1"`
Witness2 string `json:"witness2"`
Date string `json:"date"`
}
type GenerateDto struct {
EntityType_Code ere.EntityTypeCode `json:"entityType_code" validate:"required"`
Ref_Id *uint `json:"ref_id" validate:"required"`
Type_Code ere.DocTypeCode `json:"type_code" validate:"required"`
FormatType erc.DocFormatTypeCode `json:"formatType"`
TemplateName TemplateDocsName `json:"-"`
Encounter_Id *uint `json:"-"`
}
type VclaimControlLetter struct {
Number string `json:"noSuratKontrol"`
Date string `json:"tglRencanaKontrol"`
Doctor_Name string `json:"namaDokter"`
DstUnit_Name string `json:"namaPoliTujuan"`
ResponsibleDoctor_Name string `json:"namaDokterPembuat"`
VclaimSep VclaimSep `json:"sep"`
}
type VclaimSep struct {
VclaimMember VclaimMember `json:"peserta"`
Diagnose string `json:"diagnosa"`
Number string `json:"noSep"`
}
type VclaimMember struct {
CardNumber string `json:"noKartu"`
Name string `json:"nama"`
BirthDate string `json:"tglLahir"`
Gender string `json:"kelamin"`
}
type GeneratePDFdto struct {
TemplatePath string
TemplateData any
PdfPath string
}
type ResponseDto struct {
FileUrl string `json:"fileUrl"`
}
type TemplateDocsName string
// TemplateDocsName is the name of the template file in the assets/docs folder
const (
TDNGC TemplateDocsName = "general-consent.html"
)