fix template screening form a
This commit is contained in:
@@ -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>
|
||||
☑ Kasus Dengan Penyakit Kronis, Katastropik (memerlukan Pembiayaan Tinggi), Terminal
|
||||
☑ {{ . }}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
<tr>
|
||||
<td>
|
||||
▢ 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>
|
||||
☑ {{ . }}
|
||||
</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>
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user