package questionnaireresponse import ( "os" "time" "service/internal/interfaces/satusehat" ) func MapRequestToFHIR(req QuestionnaireResponseRequest) satusehat.FHIRPayload { payload := satusehat.NewFHIRPayload("QuestionnaireResponse") orgID := os.Getenv("SATUSEHAT_ORG_ID") if orgID == "" { orgID = req.OrganizationID } if orgID != "" && req.QuestionnaireResponseID != "" { // Catatan: Identifier QuestionnaireResponse adalah single object, bukan array payload.Set("identifier", map[string]interface{}{ "system": "http://sys-ids.kemkes.go.id/QuestionnaireResponse/" + orgID, "value": req.QuestionnaireResponseID, }) } if req.QuestionnaireURL != "" { payload.Set("questionnaire", req.QuestionnaireURL) } if req.Status != "" { payload.Set("status", req.Status) } if req.Subject != nil { subject := map[string]interface{}{"reference": req.Subject.Reference} if req.Subject.Display != "" { subject["display"] = req.Subject.Display } payload.Set("subject", subject) } if req.Encounter != nil { encounter := map[string]interface{}{"reference": req.Encounter.Reference} if req.Encounter.Display != "" { encounter["display"] = req.Encounter.Display } payload.Set("encounter", encounter) } if req.Authored != nil && !req.Authored.IsZero() { payload.Set("authored", req.Authored.Format(time.RFC3339)) } if req.Author != nil { author := map[string]interface{}{"reference": req.Author.Reference} if req.Author.Display != "" { author["display"] = req.Author.Display } payload.Set("author", author) } if req.Source != nil { source := map[string]interface{}{"reference": req.Source.Reference} if req.Source.Display != "" { source["display"] = req.Source.Display } payload.Set("source", source) } if len(req.Items) > 0 { payload.Set("item", req.Items) } return payload }