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 }}
|
- ☑ Kasus Dengan Penyakit Kronis, Katastropik (memerlukan Pembiayaan Tinggi), Terminal
+ ☑ {{ . }}
|
+ {{ end }}
+ {{ else }}
- |
- ▢ 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 {