Skip to content

Commit

Permalink
refactor: create fhir document reference
Browse files Browse the repository at this point in the history
Signed-off-by: Kathurima Kimathi <kathurimakimathi415@gmail.com>
  • Loading branch information
KathurimaKimathi committed Apr 9, 2024
1 parent 98aa104 commit af80723
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 26 deletions.
4 changes: 2 additions & 2 deletions pkg/clinical/domain/document_reference.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ type FHIRDocumentReferenceContext struct {
Period *FHIRPeriod `json:"period,omitempty"`
FacilityType *FHIRCodeableConcept `json:"facilityType,omitempty"`
PracticeSetting *FHIRCodeableConcept `json:"practiceSetting,omitempty"`
SourcePatientInfo *Reference `json:"sourcePatientInfo,omitempty"`
Related []Reference `json:"related,omitempty"`
SourcePatientInfo *FHIRReference `json:"sourcePatientInfo,omitempty"`
Related []*FHIRReference `json:"related,omitempty"`
}

// FHIRDocumentReferenceInput is the input type for FHIRDocumentReference
Expand Down
61 changes: 37 additions & 24 deletions pkg/clinical/usecases/clinical/referral_report.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@ type TemplateData struct {
Footer Footer
}

// DocumentReferencePayload models data used to create caller specific reference document payload
type DocumentReferencePayload struct {
Subject *domain.FHIRReferenceInput
Attachment *domain.FHIRAttachment
Related *domain.FHIRReference
TerminologySystem string
}

// GenerateReferralReportPDF generates a PDF report for a given referral.
//
// The serviceRequestID is unique to each ServiceRequest resource, which,
Expand Down Expand Up @@ -202,7 +210,26 @@ func (c *UseCasesClinicalImpl) GenerateReferralReportPDF(ctx context.Context, se
return nil, err
}

_, err = c.CreateDocumentReference(ctx, serviceRequest, result)
title := fmt.Sprintf("%s's Referral report", serviceRequest.Resource.Subject.Display)
serviceRequestReference := fmt.Sprintf("ServiceRequest/%s", *serviceRequest.Resource.ID)

payload := &DocumentReferencePayload{
Subject: &domain.FHIRReferenceInput{
ID: serviceRequest.Resource.Subject.ID,
Reference: serviceRequest.Resource.Subject.Reference,
},
Attachment: &domain.FHIRAttachment{
ContentType: (*scalarutils.Code)(&result.ContentType),
URL: (*scalarutils.URL)(&result.SignedURL),
Title: &title,
},
Related: &domain.FHIRReference{
Reference: &serviceRequestReference,
},
TerminologySystem: common.ReferralNoteLOINCTerminologySystem,
}

_, err = c.CreateDocumentReference(ctx, payload)
if err != nil {
utils.ReportErrorToSentry(err)
return nil, err
Expand All @@ -212,8 +239,8 @@ func (c *UseCasesClinicalImpl) GenerateReferralReportPDF(ctx context.Context, se
}

// CreateDocumentReference is a helper method to abstract the creation of a document reference
func (c *UseCasesClinicalImpl) CreateDocumentReference(ctx context.Context, serviceRequest *domain.FHIRServiceRequestRelayPayload, result *dto.Media) (bool, error) {
concept, err := c.GetConcept(ctx, dto.TerminologySourceLOINC, common.ReferralNoteLOINCTerminologySystem)
func (c *UseCasesClinicalImpl) CreateDocumentReference(ctx context.Context, payload *DocumentReferencePayload) (bool, error) {
concept, err := c.GetConcept(ctx, dto.TerminologySourceLOINC, payload.TerminologySystem)
if err != nil {
utils.ReportErrorToSentry(err)
return true, err
Expand All @@ -222,14 +249,10 @@ func (c *UseCasesClinicalImpl) CreateDocumentReference(ctx context.Context, serv
finalDocStatus := domain.CompositionStatusEnumFinal
status := domain.DocumentReferenceStatusEnumCurrent
instant := scalarutils.Instant(time.Now().Format(time.RFC3339))
title := fmt.Sprintf("%s's Referral report", serviceRequest.Resource.Subject.Display)
serviceRequestReference := fmt.Sprintf("ServiceRequest/%s", *serviceRequest.Resource.ID)

documentReference := &domain.FHIRDocumentReferenceInput{
Meta: &domain.FHIRMetaInput{},
Identifier: []domain.FHIRIdentifierInput{},
Status: status,
DocStatus: &finalDocStatus,
Status: status,
DocStatus: &finalDocStatus,
Type: &domain.FHIRCodeableConceptInput{
Coding: []*domain.FHIRCodingInput{
{
Expand All @@ -240,26 +263,16 @@ func (c *UseCasesClinicalImpl) CreateDocumentReference(ctx context.Context, serv
},
Text: concept.DisplayName,
},
Subject: &domain.FHIRReferenceInput{
ID: serviceRequest.Resource.Subject.ID,
Reference: serviceRequest.Resource.Subject.Reference,
},
Date: &instant,
Subject: payload.Subject,
Date: &instant,
Content: []domain.FHIRDocumentReferenceContent{
{
Attachment: domain.FHIRAttachment{
ContentType: (*scalarutils.Code)(&result.ContentType),
URL: (*scalarutils.URL)(&result.SignedURL),
Title: &title,
},
Attachment: *payload.Attachment,
},
},
Context: &domain.FHIRDocumentReferenceContext{
Related: []domain.Reference{
{
Reference: serviceRequestReference,
Type: "ServiceRequest",
},
Related: []*domain.FHIRReference{
payload.Related,
},
},
}
Expand Down

0 comments on commit af80723

Please sign in to comment.