Files
satusehat-service/internal/satusehat/usecase/questionnaireresponse/mapper.go
T

75 lines
1.8 KiB
Go

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
}