fix template screening form a

This commit is contained in:
dpurbosakti
2025-12-02 16:12:13 +07:00
parent ef2189794f
commit 821c99833e
4 changed files with 214 additions and 40 deletions
+73 -37
View File
@@ -32,34 +32,43 @@
</head>
<body style="font-family: Arial, sans-serif; line-height: 1.4">
<table style="margin-top: 1rem;">
<!-- Tanggal Terbit (top-right) -->
<div style="
text-align: right;
margin-right: 2rem;
font-size: 0.95rem;
margin-top: 0.5rem;
">
Tanggal Terbit : {{ .IssuedDate }}
</div>
<!-- Patient Info Box -->
<table
style="
margin-top: 1rem;
margin-left: auto;
margin-right: 2rem; /* space from right like example */
border: 1px solid #000;
padding: 0.5rem 1rem;
border-collapse: separate;
border-spacing: 0.3rem 0.2rem;
width: auto;
"
>
<tr>
<td style="width: 9rem;">
Tanggal Terbit
</td>
<td class="data-colon">: </td>
<td>{{ .Repalcable }}</td>
<td style="width: 9rem;">No. RM</td>
<td class="data-colon">:</td>
<td>{{ .MedicalRecord }}</td>
</tr>
<tr>
<td>
No. RM
</td>
<td class="data-colon">: </td>
<td>{{ .Repalcable }}</td>
<td>Nama</td>
<td class="data-colon">:</td>
<td><b>{{ .Name }}</b></td>
</tr>
<tr>
<td>
Nama
</td>
<td class="data-colon">: </td>
<td>{{ .Repalcable }}</td>
</tr>
<tr>
<td>
Tanggal Lahir
</td>
<td class="data-colon">: </td>
<td>{{ .Repalcable }}</td>
<td>Tanggal Lahir</td>
<td class="data-colon">:</td>
<td>{{ .BirthDate }}</td>
</tr>
</table>
@@ -69,58 +78,85 @@
font-weight: bold;
font-size: 1rem;
margin: 0;
">
">
FORM A
</h1>
<section>
<h4 class="section-title">Kajian Awal Medis:</i></h4>
<table style="margin-top: 0.3rem;">
{{ if gt (len .EarlyMedic) 0 }}
{{ range .EarlyMedic }}
<tr>
<td>
&#9745; Kasus Dengan Penyakit Kronis, Katastropik (memerlukan Pembiayaan Tinggi), Terminal
&#9745; {{ . }}
</td>
</tr>
{{ end }}
{{ else }}
<tr>
<td>
&#9634; Status Fungsional Rendah, Kebutuhan Bantuan ADL(Activity Daily Living) Yang Tinggi
</td>
<td></td>
</tr>
</table>
{{ end }}
</table>
</section>
<section>
<h4 class="section-title">ASSESMEN:</h4>
<table style="margin-top: 0.3rem;">
<tr>
<td>
{{ .Assessment }}
</td>
</tr>
</table>
</section>
<section>
<h4 class="section-title">IDENTIFIKASI MASALAH:</h4>
<table style="margin-top: 0.3rem;">
</table>
{{ if gt (len .ProblemIdentification) 0 }}
{{ range .ProblemIdentification }}
<tr>
<td>
&#9745; {{ . }}
</td>
</tr>
{{ end }}
{{ else }}
<tr>
<td></td>
</tr>
{{ end }}
</table>
</section>
<section>
<h4 class="section-title">PERENCANAAN:</h4>
<table style="margin-top: 0.3rem;">
<tr>
<td>
{{ .Planning }}
</td>
</tr>
</table>
</section>
<table style="margin-top: 3rem;">
<tr>
<td></td>
<td style="text-align: center;width: 15rem;">
2025-10-08 16:06:22
<td style="text-align: center; width: 15rem;">
{{ .Date }}<br>
</td>
</tr>
<tr><td style="height: 7rem;"></td></tr>
<tr>
<td></td>
<td style="text-align: center;height: 10rem;width: 15rem;">
GATOT SUBROTO,AMd.Kep
<td style="text-align: center; width: 15rem;">
({{ .Employee_Name }})
</td>
</tr>
</table>
+86 -3
View File
@@ -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
}
@@ -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
}
@@ -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 {