lifen 2.4.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +1 -1
- data/README.md +16 -16
- data/lib/lifen.rb +2 -2
- data/lib/lifen/communication_request.rb +2 -2
- data/lib/lifen/practitioner.rb +97 -0
- data/lib/lifen/user.rb +0 -78
- data/lib/lifen/version.rb +1 -1
- data/spec/cassettes/practitionner/create_channel/address/old_valid_attributes.yml +71 -0
- data/spec/cassettes/practitionner/create_channel/address/valid_attributes.yml +71 -0
- data/spec/cassettes/practitionner/create_channel/telecom/valid_attributes.yml +70 -0
- data/spec/cassettes/practitionner/find_by_rpps/existing_rpps.yml +125 -0
- data/spec/cassettes/practitionner/find_by_rpps/missing_line_attribute.yml +122 -0
- data/spec/cassettes/{communication/find/invalid_uuid.yml → practitionner/find_by_rpps/wrong_rpps.yml} +8 -10
- data/spec/communication_request_spec.rb +3 -3
- data/spec/practitionner_spec.rb +76 -0
- data/spec/user_spec.rb +0 -66
- metadata +17 -15
- data/lib/lifen/communication.rb +0 -92
- data/spec/cassettes/communication/find/valid_uuid.yml +0 -96
- data/spec/cassettes/communication/send/binary_and_content_string.yml +0 -75
- data/spec/cassettes/communication/send/binary_valid_attributes.yml +0 -74
- data/spec/cassettes/communication/send/valid_attributes.yml +0 -75
- data/spec/communication_spec.rb +0 -100
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79deed444977cb5560f104a1507ad85d3f7066fa
|
4
|
+
data.tar.gz: ca4895e8cf1356a51d01661e18acfd3d4e52e8a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9a0a0d34c22b03898a17af6b078693e31d5d512073c1d7c35874d931d0c64e94743d3a8d584d8e388b8f597c03b9abfc333d3e2e5e82d831a2a33f17997b7f6
|
7
|
+
data.tar.gz: 813dc3995c10b1d70f4bf9fccb3190cd7dc2b0757ca1d401bc312552c835ff929160af47467dd2eee0b55be2079eea33ae1180f56df3706c08066c0ad9b2e62c
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
3.0.0
|
2
|
+
-----
|
3
|
+
|
4
|
+
- Major refactoring to separate the private and public use of the gem
|
5
|
+
- Added `Practitioner`
|
6
|
+
- Extracts some business and methods from `User` to `Practitioner`
|
7
|
+
- Deleted `Communication`. Use `CommunicationRequest` from now on
|
8
|
+
|
1
9
|
2.4.0
|
2
10
|
-----
|
3
11
|
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -140,9 +140,9 @@ binary.download
|
|
140
140
|
#### Communications with an Attachment
|
141
141
|
|
142
142
|
```ruby
|
143
|
-
sender = Lifen::
|
143
|
+
sender = Lifen::Practitioner.find_by_rpps("899900018483")
|
144
144
|
|
145
|
-
recipient = Lifen::
|
145
|
+
recipient = Lifen::Practitioner.find_by_rpps("899900018484")
|
146
146
|
channel = recipient.channels.first
|
147
147
|
|
148
148
|
category = Lifen::Category.new(code: "MEDICAL_REPORT") # default case, optionnal element
|
@@ -151,52 +151,52 @@ attachment = Lifen::Attachment.new(title: "Test document", path: "path/to/file")
|
|
151
151
|
|
152
152
|
patient = Lifen::Patient.new(first_name: "Jean", last_name: "Dupond", birthdate: Date.new(2000,1,1))
|
153
153
|
|
154
|
-
|
155
|
-
|
154
|
+
communication_request = Lifen::CommunicationRequest.new(sender: sender, recipient: recipient, channel: channel, attachment: attachment, patient: patient, category: category)
|
155
|
+
communication_request.send
|
156
156
|
|
157
|
-
|
158
|
-
|
157
|
+
communication_request = Lifen::CommunicationRequest.find("valid-communication_request-uuid")
|
158
|
+
communication_request.status
|
159
159
|
```
|
160
160
|
|
161
161
|
### Communications with a Binary
|
162
162
|
|
163
163
|
```ruby
|
164
|
-
sender = Lifen::
|
164
|
+
sender = Lifen::Practitioner.find_by_rpps("899900018483")
|
165
165
|
|
166
|
-
recipient = Lifen::
|
166
|
+
recipient = Lifen::Practitioner.find_by_rpps("899900018484")
|
167
167
|
channel = recipient.channels.first
|
168
168
|
|
169
169
|
binary = Lifen::Binary.new(uuid: "b7c7dae671b93e951ce6a4f530736276")
|
170
170
|
|
171
|
-
|
171
|
+
communication_request = Lifen::CommunicationRequest.new(sender: sender, recipient: recipient, channel: channel, binary: binary, patient: patient, category: category)
|
172
172
|
|
173
|
-
|
173
|
+
communication_request.send
|
174
174
|
|
175
175
|
```
|
176
176
|
|
177
177
|
#### Communication requets with multiple recipients
|
178
178
|
|
179
179
|
```ruby
|
180
|
-
sender = Lifen::
|
180
|
+
sender = Lifen::Practitioner.find_by_rpps("899900018483")
|
181
181
|
|
182
|
-
recipient = Lifen::
|
182
|
+
recipient = Lifen::Practitioner.find_by_rpps("899900018484")
|
183
183
|
medium = Lifen::Medium(uuid: recipient.channels.first.uuid)
|
184
184
|
|
185
|
-
other_recipient = Lifen::
|
185
|
+
other_recipient = Lifen::Practitioner.find_by_rpps("899900018484")
|
186
186
|
other_medium = Lifen::Medium(uuid: other_recipient.channels.first.uuid)
|
187
187
|
|
188
188
|
binary = Lifen::Binary.new(uuid: "b7c7dae671b93e951ce6a4f530736276")
|
189
189
|
|
190
|
-
|
190
|
+
communication_request_request = Lifen::CommunicationRequest.new(sender: sender, recipients: [recipient, other_recipient], medium: [medium, other_medium], binary: binary, patient: patient, category: category)
|
191
191
|
|
192
|
-
|
192
|
+
communication_request_request.send
|
193
193
|
|
194
194
|
```
|
195
195
|
|
196
196
|
#### Custom Channels management
|
197
197
|
|
198
198
|
```ruby
|
199
|
-
recipient = Lifen::
|
199
|
+
recipient = Lifen::Practitioner.new(uuid: "valid-user-uuid")
|
200
200
|
|
201
201
|
# To create a new mailing address channel
|
202
202
|
channel = recipient.create_address(type: "address", lines: ["39 rue Aboukir"], city: "Paris", postal_code: "75002", country: "France")
|
data/lib/lifen.rb
CHANGED
@@ -22,14 +22,14 @@ module Lifen
|
|
22
22
|
require 'lifen/flows'
|
23
23
|
require 'lifen/message'
|
24
24
|
|
25
|
+
require 'lifen/channel'
|
26
|
+
require 'lifen/practitioner'
|
25
27
|
require 'lifen/category'
|
26
28
|
require 'lifen/medium'
|
27
29
|
require 'lifen/attachment'
|
28
30
|
require 'lifen/binary'
|
29
|
-
require 'lifen/channel'
|
30
31
|
require 'lifen/patient'
|
31
32
|
require 'lifen/content_string'
|
32
|
-
require 'lifen/communication'
|
33
33
|
require 'lifen/communication_request'
|
34
34
|
|
35
35
|
Virtus.finalize
|
@@ -4,8 +4,8 @@ module Lifen
|
|
4
4
|
attribute :uuid, String
|
5
5
|
attribute :number_communications, Integer
|
6
6
|
|
7
|
-
attribute :sender, Lifen::
|
8
|
-
attribute :recipients, [Lifen::
|
7
|
+
attribute :sender, Lifen::Practitioner
|
8
|
+
attribute :recipients, [Lifen::Practitioner]
|
9
9
|
|
10
10
|
attribute :category, Lifen::Category, default: Lifen::Category.new
|
11
11
|
attribute :medium, [Lifen::Medium]
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Lifen
|
2
|
+
class Practitioner < Base
|
3
|
+
|
4
|
+
attribute :channels, [Lifen::Channel]
|
5
|
+
|
6
|
+
attribute :uuid, String
|
7
|
+
attribute :last_name, String
|
8
|
+
attribute :first_name, String
|
9
|
+
attribute :rpps, String
|
10
|
+
|
11
|
+
def fhir_payload
|
12
|
+
{ reference: "Practitioner/#{uuid}" }
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.find_by_rpps(rpps)
|
16
|
+
json = application_client.get("fhir/Practitioner/?identifier=#{rpps}")
|
17
|
+
|
18
|
+
raise "Practitioner not found" if Array(json["entry"]).size != 1
|
19
|
+
|
20
|
+
user_json = Array(json["entry"]).first.fetch("resource") { {} }
|
21
|
+
|
22
|
+
user_json[:uuid] = user_json["id"]
|
23
|
+
|
24
|
+
user = new(user_json)
|
25
|
+
|
26
|
+
Array(user_json["telecom"]).each do |telecom_json|
|
27
|
+
user.channels << Lifen::Channel.from_json(telecom_json, "telecom")
|
28
|
+
end
|
29
|
+
|
30
|
+
Array(user_json["address"]).each do |address_json|
|
31
|
+
user.channels << Lifen::Channel.from_json(address_json, "address")
|
32
|
+
end
|
33
|
+
|
34
|
+
user
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_address(params)
|
38
|
+
filtered_params = {"resourceType" => "Practitioner"}
|
39
|
+
|
40
|
+
address = {
|
41
|
+
"line": Array(params[:lines]),
|
42
|
+
"city": params[:city],
|
43
|
+
"postalCode": params[:postal_code],
|
44
|
+
"country": params[:country]
|
45
|
+
}
|
46
|
+
|
47
|
+
filtered_params[params[:type]] = address
|
48
|
+
|
49
|
+
json = application_client.post("fhir/Practitioner/#{uuid}/$add-address", filtered_params)
|
50
|
+
|
51
|
+
channel = Channel.new(uuid: json["issue"][0]["id"], type: params[:type], value: "#{Array(params[:lines]).join(", ")}, #{params[:postal_code]} #{params[:city]}")
|
52
|
+
|
53
|
+
self.channels << channel
|
54
|
+
|
55
|
+
channel
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.from_json(json)
|
59
|
+
reference = json["reference"]
|
60
|
+
|
61
|
+
uuid = reference.gsub("Practitioner/", "")
|
62
|
+
|
63
|
+
new(uuid: uuid)
|
64
|
+
end
|
65
|
+
|
66
|
+
def create_telecom(params)
|
67
|
+
filtered_params = {"resourceType" => "Practitioner"}
|
68
|
+
|
69
|
+
telecom = {
|
70
|
+
"system": params[:system],
|
71
|
+
"value": params[:value]
|
72
|
+
}
|
73
|
+
|
74
|
+
filtered_params[params[:type]] = telecom
|
75
|
+
|
76
|
+
json = application_client.post("fhir/Practitioner/#{uuid}/$add-telecom", filtered_params)
|
77
|
+
|
78
|
+
channel = Channel.new(uuid: json["issue"][0]["id"], type: params[:type], value: params[:value])
|
79
|
+
|
80
|
+
self.channels << channel
|
81
|
+
|
82
|
+
channel
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def application_client
|
89
|
+
@application_client ||= AppAuthenticatedClient.new
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.application_client
|
93
|
+
@application_client ||= AppAuthenticatedClient.new
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
data/lib/lifen/user.rb
CHANGED
@@ -101,10 +101,6 @@ module Lifen
|
|
101
101
|
UserAuthenticatedClient.new(token)
|
102
102
|
end
|
103
103
|
|
104
|
-
def fhir_payload
|
105
|
-
{ reference: "Practitioner/#{uuid}" }
|
106
|
-
end
|
107
|
-
|
108
104
|
# def self.where(params)
|
109
105
|
# json = application_client.get("fhir/Practitioner/", params)
|
110
106
|
|
@@ -115,80 +111,6 @@ module Lifen
|
|
115
111
|
# users
|
116
112
|
# end
|
117
113
|
|
118
|
-
def self.find_by_rpps(rpps)
|
119
|
-
json = application_client.get("fhir/Practitioner/?identifier=#{rpps}")
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
raise "User not found" if Array(json["entry"]).size != 1
|
124
|
-
|
125
|
-
user_json = Array(json["entry"]).first.fetch("resource") { {} }
|
126
|
-
|
127
|
-
user_json[:uuid] = user_json["id"]
|
128
|
-
|
129
|
-
user = new(user_json)
|
130
|
-
|
131
|
-
Array(user_json["telecom"]).each do |telecom_json|
|
132
|
-
user.channels << Lifen::Channel.from_json(telecom_json, "telecom")
|
133
|
-
end
|
134
|
-
|
135
|
-
Array(user_json["address"]).each do |address_json|
|
136
|
-
user.channels << Lifen::Channel.from_json(address_json, "address")
|
137
|
-
end
|
138
|
-
|
139
|
-
user
|
140
|
-
end
|
141
|
-
|
142
|
-
def create_address(params)
|
143
|
-
filtered_params = {"resourceType" => "Practitioner"}
|
144
|
-
|
145
|
-
address = {
|
146
|
-
"line": Array(params[:lines]),
|
147
|
-
"city": params[:city],
|
148
|
-
"postalCode": params[:postal_code],
|
149
|
-
"country": params[:country]
|
150
|
-
}
|
151
|
-
|
152
|
-
filtered_params[params[:type]] = address
|
153
|
-
|
154
|
-
json = application_client.post("fhir/Practitioner/#{uuid}/$add-address", filtered_params)
|
155
|
-
|
156
|
-
channel = Channel.new(uuid: json["issue"][0]["id"], type: params[:type], value: "#{Array(params[:lines]).join(", ")}, #{params[:postal_code]} #{params[:city]}")
|
157
|
-
|
158
|
-
self.channels << channel
|
159
|
-
|
160
|
-
channel
|
161
|
-
end
|
162
|
-
|
163
|
-
alias_method :create_channel, :create_address
|
164
|
-
|
165
|
-
def self.from_json(json)
|
166
|
-
reference = json["reference"]
|
167
|
-
|
168
|
-
uuid = reference.gsub("Practitioner/", "")
|
169
|
-
|
170
|
-
new(uuid: uuid)
|
171
|
-
end
|
172
|
-
|
173
|
-
def create_telecom(params)
|
174
|
-
filtered_params = {"resourceType" => "Practitioner"}
|
175
|
-
|
176
|
-
telecom = {
|
177
|
-
"system": params[:system],
|
178
|
-
"value": params[:value]
|
179
|
-
}
|
180
|
-
|
181
|
-
filtered_params[params[:type]] = telecom
|
182
|
-
|
183
|
-
json = application_client.post("fhir/Practitioner/#{uuid}/$add-telecom", filtered_params)
|
184
|
-
|
185
|
-
channel = Channel.new(uuid: json["issue"][0]["id"], type: params[:type], value: params[:value])
|
186
|
-
|
187
|
-
self.channels << channel
|
188
|
-
|
189
|
-
channel
|
190
|
-
|
191
|
-
end
|
192
114
|
|
193
115
|
private
|
194
116
|
|
data/lib/lifen/version.rb
CHANGED
@@ -0,0 +1,71 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://develop.lifen.fr/fhir/Practitioner/11e5c85e-9bc0-4c6e-9b29-deb9993a92c0/$add-address
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"resourceType":"Practitioner","address":{"line":["Honestica","39 rue
|
9
|
+
d''Aboukir"],"city":"Paris","postalCode":"75002","country":"France"}}'
|
10
|
+
headers:
|
11
|
+
User-Agent:
|
12
|
+
- Faraday v0.11.0
|
13
|
+
Authorization:
|
14
|
+
- Bearer valid_application_access_token
|
15
|
+
Accept:
|
16
|
+
- application/json
|
17
|
+
Content-Type:
|
18
|
+
- application/json
|
19
|
+
Accept-Encoding:
|
20
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
21
|
+
response:
|
22
|
+
status:
|
23
|
+
code: 200
|
24
|
+
message: OK
|
25
|
+
headers:
|
26
|
+
Server:
|
27
|
+
- Apache-Coyote/1.1
|
28
|
+
X-B3-Sampled:
|
29
|
+
- '1'
|
30
|
+
X-B3-Spanid:
|
31
|
+
- 1471c2eb1e86756b
|
32
|
+
X-B3-Traceid:
|
33
|
+
- 1471c2eb1e86756b
|
34
|
+
X-Content-Type-Options:
|
35
|
+
- nosniff
|
36
|
+
X-Xss-Protection:
|
37
|
+
- 1; mode=block
|
38
|
+
Cache-Control:
|
39
|
+
- no-cache, no-store, max-age=0, must-revalidate
|
40
|
+
Pragma:
|
41
|
+
- no-cache
|
42
|
+
Expires:
|
43
|
+
- '0'
|
44
|
+
X-Powered-By:
|
45
|
+
- HAPI FHIR 2.4 REST Server (FHIR Server; FHIR 3.0.1/DSTU3)
|
46
|
+
Content-Type:
|
47
|
+
- application/json+fhir;charset=UTF-8
|
48
|
+
Transfer-Encoding:
|
49
|
+
- chunked
|
50
|
+
Date:
|
51
|
+
- Fri, 19 May 2017 15:07:35 GMT
|
52
|
+
Connection:
|
53
|
+
- close
|
54
|
+
Access-Control-Allow-Credentials:
|
55
|
+
- 'true'
|
56
|
+
body:
|
57
|
+
encoding: UTF-8
|
58
|
+
string: |-
|
59
|
+
{
|
60
|
+
"resourceType": "OperationOutcome",
|
61
|
+
"issue": [
|
62
|
+
{
|
63
|
+
"id": "11e73ca4-e3d4-8c5f-b5c5-0242ac110002",
|
64
|
+
"severity": "information",
|
65
|
+
"diagnostics": "Address created."
|
66
|
+
}
|
67
|
+
]
|
68
|
+
}
|
69
|
+
http_version:
|
70
|
+
recorded_at: Fri, 19 May 2017 15:07:06 GMT
|
71
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,71 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://develop.lifen.fr/fhir/Practitioner/11e5c85e-9bc0-4c6e-9b29-deb9993a92c0/$add-address
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"resourceType":"Practitioner","address":{"line":["Honestica","39 rue
|
9
|
+
d''Aboukir"],"city":"Paris","postalCode":"75002","country":"France"}}'
|
10
|
+
headers:
|
11
|
+
User-Agent:
|
12
|
+
- Faraday v0.11.0
|
13
|
+
Authorization:
|
14
|
+
- Bearer valid_application_access_token
|
15
|
+
Accept:
|
16
|
+
- application/json
|
17
|
+
Content-Type:
|
18
|
+
- application/json
|
19
|
+
Accept-Encoding:
|
20
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
21
|
+
response:
|
22
|
+
status:
|
23
|
+
code: 200
|
24
|
+
message: OK
|
25
|
+
headers:
|
26
|
+
Server:
|
27
|
+
- Apache-Coyote/1.1
|
28
|
+
X-B3-Sampled:
|
29
|
+
- '1'
|
30
|
+
X-B3-Spanid:
|
31
|
+
- 6bdba43c90ff2827
|
32
|
+
X-B3-Traceid:
|
33
|
+
- 6bdba43c90ff2827
|
34
|
+
X-Content-Type-Options:
|
35
|
+
- nosniff
|
36
|
+
X-Xss-Protection:
|
37
|
+
- 1; mode=block
|
38
|
+
Cache-Control:
|
39
|
+
- no-cache, no-store, max-age=0, must-revalidate
|
40
|
+
Pragma:
|
41
|
+
- no-cache
|
42
|
+
Expires:
|
43
|
+
- '0'
|
44
|
+
X-Powered-By:
|
45
|
+
- HAPI FHIR 2.4 REST Server (FHIR Server; FHIR 3.0.1/DSTU3)
|
46
|
+
Content-Type:
|
47
|
+
- application/json+fhir;charset=UTF-8
|
48
|
+
Transfer-Encoding:
|
49
|
+
- chunked
|
50
|
+
Date:
|
51
|
+
- Fri, 19 May 2017 14:59:33 GMT
|
52
|
+
Connection:
|
53
|
+
- close
|
54
|
+
Access-Control-Allow-Credentials:
|
55
|
+
- 'true'
|
56
|
+
body:
|
57
|
+
encoding: UTF-8
|
58
|
+
string: |-
|
59
|
+
{
|
60
|
+
"resourceType": "OperationOutcome",
|
61
|
+
"issue": [
|
62
|
+
{
|
63
|
+
"id": "11e73ca3-c4b2-fe69-b5c5-0242ac110002",
|
64
|
+
"severity": "information",
|
65
|
+
"diagnostics": "Address created."
|
66
|
+
}
|
67
|
+
]
|
68
|
+
}
|
69
|
+
http_version:
|
70
|
+
recorded_at: Fri, 19 May 2017 14:59:03 GMT
|
71
|
+
recorded_with: VCR 3.0.3
|