forked from kdar/health
/
social_history.go
57 lines (46 loc) · 1.26 KB
/
social_history.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package ccd
import (
"github.com/jteeuwen/go-pkg-xmlx"
"time"
)
var (
SocialHistoryTid = []string{"2.16.840.1.113883.10.20.1.15", "2.16.840.1.113883.10.20.22.2.17"}
SocialHistoryParser = Parser{
Type: PARSE_SECTION,
Values: SocialHistoryTid,
Priority: 0,
Func: parseSocialHistory,
}
)
type SocialHistory struct {
Code Code
Value Code
StartDate time.Time
StopDate time.Time
}
func parseSocialHistory(node *xmlx.Node, ccd *CCD) []error {
entryNodes := node.SelectNodes("*", "entry")
for _, entryNode := range entryNodes {
obvNode := Nget(entryNode, "observation")
codeNode := Nget(obvNode, "code")
valueNode := Nget(obvNode, "value")
if codeNode == nil || valueNode == nil {
continue
}
socialHistory := SocialHistory{}
socialHistory.Code.decode(codeNode)
if socialHistory.Code.DisplayName == "" {
orgText := Nget(codeNode, "originalText")
if orgText != nil {
socialHistory.Code.DisplayName = orgText.S("*", "originalText")
}
}
socialHistory.Value.decode(valueNode)
effectiveTimeNode := Nget(obvNode, "effectiveTime")
t := decodeTime(effectiveTimeNode)
socialHistory.StartDate = t.Low
socialHistory.StopDate = t.High
ccd.SocialHistory = append(ccd.SocialHistory, socialHistory)
}
return nil
}