75 lines
1.8 KiB
Go
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
|
|
}
|