/
mappings.py
146 lines (121 loc) · 3.54 KB
/
mappings.py
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# -*- coding: utf-8 -*-
# @Date : 2018-08-21 17:48:31
# @Author : Md Nazrul Islam <email2nazrul@gmail.com>
# @Link : http://nazrul.me/
# @Version : $Id$
# All imports here
"""Compound mapping types """
__author__ = "Md Nazrul Islam <email2nazrul@gmail.com>"
date_pattern = "-?[0-9]{4}(-(0[1-9]|1[0-2])(-(0[0-9]|[1-2][0-9]|3[0-1]))?)?"
datetime_pattern = "-?[0-9]{4}(-(0[1-9]|1[0-2])(-(0[0-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" # noqa
Bool = {"type": "boolean", "store": False}
Float = {"type": "float", "store": False}
Integer = {"type": "integer", "store": False}
Long = {"type": "long", "store": False}
Token = {"type": "keyword", "index": True, "store": False}
KeywordToken = {"type": "keyword", "index": True, "store": False}
PathToken = {"type": "text", "index": True, "store": False, "analyzer": "path_analyzer"}
Text = {"type": "text", "index": True, "store": False, "analyzer": "standard"}
SearchableText = {"type": "text", "index": True, "analyzer": "standard", "store": False}
Date = {
"type": "date",
"format": "date_time_no_millis||date_optional_time",
"store": False,
}
Timing = {"properties": {"event": Date, "code": Token}}
Reference = {
"properties": {
"reference": {
"type": "text",
"index": True,
"store": False,
"analyzer": "fhir_reference_analyzer",
}
}
}
Attachment = {
"properties": {"url": Token, "language": Token, "title": Text, "creation": Date}
}
Coding = {"properties": {"system": Token, "code": Token, "display": Token}}
CodeableConcept = {
"properties": {
"text": Text,
"coding": {"type": "nested", "properties": Coding["properties"]},
}
}
Period = {"properties": {"start": Date, "end": Date}}
Identifier = {
"properties": {
"use": Token,
"system": Token,
"value": Token,
"type": {"properties": {"text": Text}},
}
}
Quantity = {
"properties": {"value": Float, "code": Token, "system": Token, "unit": Token}
}
Money = Quantity
Range = {"properties": {"high": Quantity, "low": Quantity}}
Age = Quantity
Address = {
"properties": {
"city": Token,
"country": Token,
"postalCode": Token,
"state": Token,
"use": Token,
}
}
HumanName = {
"properties": {
"family": Token,
"text": Text,
"prefix": Token,
"given": Token,
"use": Token,
}
}
Duration = Quantity
ContactPoint = {
"properties": {
"period": Period,
"rank": Integer,
"system": Token,
"use": Token,
"value": Text,
}
}
ContactDetail = {"properties": {"name": Token, "telecom": ContactPoint}}
ContactDetail["properties"]["telecom"].update({"type": "nested"})
Annotation = {
"properties": {
"authorReference": Reference,
"authorString": Text,
"text": Text,
"time": Date,
}
}
Dosage = {
"properties": {
"asNeededBoolean": Bool,
"asNeededCodeableConcept": CodeableConcept,
"doseQuantity": Quantity,
"doseRange": Range,
"site": CodeableConcept,
"text": Text,
"timing": Timing,
}
}
RelatedArtifact = {"properties": {"type": Token, "url": Token, "resource": Reference}}
Signature = {
"properties": {
"contentType": Token,
"when": Date,
"whoReference": Reference,
"whoUri": Token,
}
}
# Common
Id = Token
Meta = {"properties": {"versionId": Token, "lastUpdated": Date, "profile": Token}}