diff --git a/assets/docs/screening-form-a.html b/assets/docs/screening-form-a.html index 768eb183..a838c111 100644 --- a/assets/docs/screening-form-a.html +++ b/assets/docs/screening-form-a.html @@ -32,34 +32,43 @@ - + +
+ Tanggal Terbit : {{ .IssuedDate }} +
+ + +
- - - + + + - - - + + + - - - - - - - - + + +
- Tanggal Terbit - : {{ .Repalcable }}No. RM:{{ .MedicalRecord }}
- No. RM - : {{ .Repalcable }}Nama:{{ .Name }}
- Nama - : {{ .Repalcable }}
- Tanggal Lahir - : {{ .Repalcable }}Tanggal Lahir:{{ .BirthDate }}
@@ -69,58 +78,85 @@ font-weight: bold; font-size: 1rem; margin: 0; - "> + "> FORM A

Kajian Awal Medis:

+ + {{ if gt (len .EarlyMedic) 0 }} + {{ range .EarlyMedic }} + {{ end }} + {{ else }} - + -
- ☑ Kasus Dengan Penyakit Kronis, Katastropik (memerlukan Pembiayaan Tinggi), Terminal + ☑ {{ . }}
- ▢ Status Fungsional Rendah, Kebutuhan Bantuan ADL(Activity Daily Living) Yang Tinggi -
+ {{ end }} + +

ASSESMEN:

- + + +
+ {{ .Assessment }} +

IDENTIFIKASI MASALAH:

- -
+ {{ if gt (len .ProblemIdentification) 0 }} + {{ range .ProblemIdentification }} + + + ☑ {{ . }} + + + {{ end }} + {{ else }} + + + + {{ end }} + +

PERENCANAAN:

- + + +
+ {{ .Planning }} +
- + -
- 2025-10-08 16:06:22 + + {{ .Date }}
- GATOT SUBROTO,AMd.Kep + + ({{ .Employee_Name }})
diff --git a/internal/domain/main-entities/screening/dto.go b/internal/domain/main-entities/screening/dto.go index cdcc96dc..b001af39 100644 --- a/internal/domain/main-entities/screening/dto.go +++ b/internal/domain/main-entities/screening/dto.go @@ -85,7 +85,7 @@ func ToResponseList(data []Screening) []ResponseDto { return resp } -type FormA struct { +type ScreeningEntry struct { AgeAtRisk bool `json:"ageAtRisk"` // Usia Dengan Risiko LowCognitiveFunction bool `json:"lowCognitiveFunction"` // Pasien Dengan Fungsi Kognitif Rendah HighRiskPatient bool `json:"highRiskPatient"` // Pasien Dengan Risiko Tinggi @@ -114,9 +114,92 @@ type ProblemIdentification struct { DischargeCriteriaNotMetOrDelayed bool `json:"dischargeCriteriaNotMetOrDelayed"` // Pemulangan/ Rujukan Belum Memenuhi Kriteria/ Ditunda } -type AssessmentForm struct { - Screening Screening `json:"screening"` +type FormA struct { + Screening ScreeningEntry `json:"screening"` AssessmentDetail string `json:"assessmentDetail"` // Masukkan detail assesmen ProblemIdentification ProblemIdentification `json:"problemIdentification"` PlanningDetail string `json:"planningDetail"` // Masukkan detail perencanaan } + +func (s ScreeningEntry) SelectedScreeningLabels() []string { + result := []string{} + + if s.AgeAtRisk { + result = append(result, "Usia Dengan Risiko") + } + if s.LowCognitiveFunction { + result = append(result, "Pasien Dengan Fungsi Kognitif Rendah") + } + if s.HighRiskPatient { + result = append(result, "Pasien Dengan Risiko Tinggi") + } + if s.HighComplaintPotential { + result = append(result, "Potensi Komplain Tinggi (Medik dan Non Medik)") + } + if s.ChronicOrCatastrophicOrTerminal { + result = append(result, "Kasus Dengan Penyakit Kronis, Katastropik, Terminal") + } + if s.LowFunctionalStatus { + result = append(result, "Status Fungsional Rendah, Kebutuhan Bantuan ADL Tinggi") + } + if s.HistoryOfMedicalDeviceUse { + result = append(result, "Pasien Dengan Riwayat Penggunaan Peralatan Medis Masa Lalu") + } + if s.MentalOrSocialIssues { + result = append(result, "Riwayat Gangguan Mental, Bunuh Diri, Krisis Keluarga, Isu Sosial") + } + if s.FrequentERVisitsOrReadmission { + result = append(result, "Sering Masuk IGD, Readmisi RS") + } + if s.HighCareCostEstimate { + result = append(result, "Perkiraan Asuhan Dengan Biaya Tinggi") + } + if s.ComplexFinancingSystem { + result = append(result, "Kemungkinan Sistem Pembiayaan Yang Kompleks") + } + if s.AboveAverageLengthOfStay { + result = append(result, "Kasus Yang Melebihi Rata-Rata Lama Dirawat") + } + if s.ImportantOrHighRiskDischargePlanning { + result = append(result, "Rencana Pemulangan Penting / Kontinuitas Pelayanan") + } + if s.Stagnation { + result = append(result, "Stagnasi") + } + + return result +} + +func (p ProblemIdentification) SelectedProblemLabels() []string { + result := []string{} + + if p.CareNotFollowingGuidelines { + result = append(result, "Tingkat Asuhan Tidak Sesuai Panduan/ Norma") + } + if p.OverUtilization { + result = append(result, "Over Utilization Pelayanan") + } + if p.UnderUtilization { + result = append(result, "Under Utilization Pelayanan") + } + if p.PatientNonCompliance { + result = append(result, "Ketidakpatuhan Pasien") + } + if p.InadequateEducation { + result = append(result, "Edukasi Kurang Memadai") + } + if p.LackOfFamilySupport { + result = append(result, "Kurang Dukungan Keluarga") + } + if p.DecreasedDetermination { + result = append(result, "Penurunan Determinasi Ketika Komplikasi Meningkat") + } + if p.FinancialDifficultyDuringComplications { + result = append(result, "Kendala Keuangan Ketika Komplikasi Meningkat") + } + if p.DischargeCriteriaNotMetOrDelayed { + result = append(result, "Pemulangan/ Rujukan Belum Memenuhi Kriteria/ Ditunda") + } + + return result +} diff --git a/internal/use-case/main-use-case/generate-file/helper.go b/internal/use-case/main-use-case/generate-file/helper.go index 6edd34d8..76e4f5ee 100644 --- a/internal/use-case/main-use-case/generate-file/helper.go +++ b/internal/use-case/main-use-case/generate-file/helper.go @@ -13,6 +13,7 @@ import ( ee "simrs-vx/internal/domain/main-entities/encounter" egc "simrs-vx/internal/domain/main-entities/general-consent" er "simrs-vx/internal/domain/main-entities/resume" + es "simrs-vx/internal/domain/main-entities/screening" uvs "simrs-vx/internal/use-case/bpjs-use-case/vclaim-sep" uvscl "simrs-vx/internal/use-case/bpjs-use-case/vclaim-sep-control-letter" @@ -339,3 +340,42 @@ func generateResumeTemplateData(resume er.Resume, event pl.Event, tx *gorm.DB) ( return &templateData, nil } + +func generateScreeningFormATemplateData(screening es.Screening, event pl.Event, tx *gorm.DB) (*ScreeningPDF, error) { + // get encounter + includes := "Patient,Patient.Person" + encounter, err := ue.ReadDetailData(ee.ReadDetailDto{Id: *screening.Encounter_Id, Includes: includes}, &event) + if err != nil { + return nil, err + } + + // map template data + sData := es.FormA{} + if screening.Value != nil { + err := json.Unmarshal([]byte(*screening.Value), &sData) + if err != nil { + event.ErrInfo = pl.ErrorInfo{ + Code: "data-unmarshal-fail", + Detail: err.Error(), + Raw: err, + } + return nil, err + } + } else { + return nil, errors.New("there is no data to be used") + } + + templateData := ScreeningPDF{} + templateData.IssuedDate = pu.GetTimeNow().Format("2006-01-02 15:04:05") + templateData.MedicalRecord = *encounter.Patient.Number + templateData.Name = encounter.Patient.Person.FullName() + templateData.BirthDate = encounter.Patient.Person.BirthDate.Format("2006-01-02 15:04:05") + templateData.Employee_Name = screening.Employee.Person.FullName() + templateData.EarlyMedic = sData.Screening.SelectedScreeningLabels() + templateData.Assessment = sData.AssessmentDetail + templateData.ProblemIdentification = sData.ProblemIdentification.SelectedProblemLabels() + templateData.Planning = sData.PlanningDetail + templateData.Date = screening.CreatedAt.Format("2006-01-02 15:04:05") + + return &templateData, nil +} diff --git a/internal/use-case/main-use-case/generate-file/tycovar.go b/internal/use-case/main-use-case/generate-file/tycovar.go index a242f476..d5a7220e 100644 --- a/internal/use-case/main-use-case/generate-file/tycovar.go +++ b/internal/use-case/main-use-case/generate-file/tycovar.go @@ -72,6 +72,19 @@ type ResumePDF struct { Date string } +type ScreeningPDF struct { + IssuedDate string + Date string + MedicalRecord string + Name string + BirthDate string + Employee_Name string + EarlyMedic []string + Assessment string + ProblemIdentification []string + Planning string +} + type GenerateDto struct { EntityType_Code ere.EntityTypeCode `json:"entityType_code" validate:"required"` Ref_Id *string `json:"ref_id" validate:"required"` @@ -124,6 +137,8 @@ const ( TDNGC TemplateDocsName = "general-consent.html" TDNCL TemplateDocsName = "control-letter.html" TDNR TemplateDocsName = "resume.html" + TDNSA TemplateDocsName = "screening-form-a.html" + TDNSB TemplateDocsName = "screening-form-b.html" ) func (v VclaimControlLetter) generateTemplateData() ControlLetterPDF {