|
|
|
@@ -20,7 +20,9 @@ import (
|
|
|
|
|
ue "simrs-vx/internal/use-case/main-use-case/encounter"
|
|
|
|
|
ugc "simrs-vx/internal/use-case/main-use-case/general-consent"
|
|
|
|
|
ur "simrs-vx/internal/use-case/main-use-case/resume"
|
|
|
|
|
us "simrs-vx/internal/use-case/main-use-case/screening"
|
|
|
|
|
|
|
|
|
|
ercl "simrs-vx/internal/domain/references/clinical"
|
|
|
|
|
erc "simrs-vx/internal/domain/references/common"
|
|
|
|
|
docscfg "simrs-vx/internal/infra/docs-cfg"
|
|
|
|
|
|
|
|
|
@@ -341,41 +343,130 @@ 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) {
|
|
|
|
|
func generateScreeningTemplateData(screenings []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)
|
|
|
|
|
encounter, err := ue.ReadDetailData(ee.ReadDetailDto{Id: *screenings[0].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,
|
|
|
|
|
switch screenings[0].Type {
|
|
|
|
|
case ercl.SFTCA:
|
|
|
|
|
// map template data
|
|
|
|
|
sData := es.FormA{}
|
|
|
|
|
if screenings[0].Value != nil {
|
|
|
|
|
err := json.Unmarshal([]byte(*screenings[0].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 = screenings[0].Employee.Person.FullName()
|
|
|
|
|
templateData.EarlyMedic = sData.Screening.SelectedScreeningLabels()
|
|
|
|
|
templateData.Assessment = sData.AssessmentDetail
|
|
|
|
|
templateData.ProblemIdentification = sData.ProblemIdentification.SelectedProblemLabels()
|
|
|
|
|
templateData.Planning = sData.PlanningDetail
|
|
|
|
|
templateData.Date = screenings[0].CreatedAt.Format("2006-01-02 15:04:05")
|
|
|
|
|
|
|
|
|
|
return &templateData, nil
|
|
|
|
|
case ercl.SFTCB:
|
|
|
|
|
// map template data
|
|
|
|
|
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")
|
|
|
|
|
for k, v := range screenings {
|
|
|
|
|
templateData.FormB = append(templateData.FormB, ScreeningFormBPDF{
|
|
|
|
|
Number: k + 1,
|
|
|
|
|
Date: v.CreatedAt.Format("2006-01-02 15:04:05"),
|
|
|
|
|
Employee_Name: v.Employee.Person.FullName(),
|
|
|
|
|
Value: *v.Value,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &templateData, nil
|
|
|
|
|
}
|
|
|
|
|
return nil, errors.New("invalid screening type")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func generateScreening(input GenerateDto, event pl.Event, tx *gorm.DB) (*ResponseDto, error) {
|
|
|
|
|
// get value from resume by ref_id
|
|
|
|
|
includes := "Employee.Person"
|
|
|
|
|
s, err := us.ReadDetailData(es.ReadDetailDto{Id: uint(*pc.StringToUint64(*input.Ref_Id)), Includes: includes}, &event)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var screenings []es.Screening
|
|
|
|
|
var templateData *ScreeningPDF
|
|
|
|
|
if s.IsFormA() {
|
|
|
|
|
if s.FileUrl != nil {
|
|
|
|
|
if err := removeFile(string(input.EntityType_Code), *s.FileUrl); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
screenings = append(screenings, *s)
|
|
|
|
|
input.FormatType = erc.DFTCPDF
|
|
|
|
|
input.TemplateName = TDNSA
|
|
|
|
|
input.Encounter_Id = s.Encounter_Id
|
|
|
|
|
templateData, err = generateScreeningTemplateData(screenings, event, tx)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
return nil, errors.New("there is no data to be used")
|
|
|
|
|
includes := "Employee.Person"
|
|
|
|
|
sort := "CreatedAt:ASC"
|
|
|
|
|
ss, _, err := us.ReadListData(es.ReadListDto{FilterDto: es.FilterDto{Encounter_Id: s.Encounter_Id, Type: ercl.SFTCB}, Includes: includes, Sort: sort}, &event, tx)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
screenings = append(screenings, ss...)
|
|
|
|
|
input.FormatType = erc.DFTCPDF
|
|
|
|
|
input.TemplateName = TDNSB
|
|
|
|
|
input.Encounter_Id = s.Encounter_Id
|
|
|
|
|
templateData, err = generateScreeningTemplateData(screenings, event, tx)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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")
|
|
|
|
|
// generate file
|
|
|
|
|
urlPub, err := generateFile(input, templateData)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &templateData, nil
|
|
|
|
|
if len(screenings) > 1 {
|
|
|
|
|
for i := range screenings {
|
|
|
|
|
screenings[i].FileUrl = &urlPub
|
|
|
|
|
}
|
|
|
|
|
if err := tx.Save(&screenings).Error; err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
s.FileUrl = &urlPub
|
|
|
|
|
if err := tx.Save(&s).Error; err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
response := ResponseDto{
|
|
|
|
|
FileUrl: urlPub,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &response, nil
|
|
|
|
|
}
|