You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/_pages/api-documentation/attestation-attribution.md
+61-78Lines changed: 61 additions & 78 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,8 @@ in-page-nav: true
10
10
11
11
## Data Sources
12
12
13
-
DPC provides you with a set of sample practitioners to complete attestation and attribution in the sandbox.
13
+
<!-- RATIONALE: Make it explicit that users must upload sample JSON (sandbox does not preload data), to reduce confusion. -->
14
+
DPC provides sample Practitioner, Patient, and Group JSON resources you can upload to complete attestation and attribution in the sandbox.
14
15
15
16
Attestation/Attribution is when DPC establishes that you have a valid patient-practitioner relationship with Medicare and Medicaid beneficiaries.
16
17
@@ -25,17 +26,26 @@ You need to keep attributions up-to-date by submitting an attestation with each
25
26
26
27
## Load sample data
27
28
28
-
The DPC team has created a collection of sample Practitioner, Patient, and Group Resources to use with the sandbox. These resources can be found in our public GitHub repository as JSON files.
29
+
<!-- RATIONALE: Link directly to the sample bundles available in this site so users can find them without hunting elsewhere. -->
30
+
The DPC team provides sample Practitioner and Patient resources you can upload to the sandbox:
We include four generic Practitioner Resources to add to your organization.
33
38
34
-
### Uploading Patients
39
+
### Uploading patients
35
40
36
41
The Beneficiary FHIR Data Server (BFD) maintains a list of 101 patients, along with their Medicare Beneficiary Identifiers (MBI), that match synthetic sandbox data. More details and the corresponding data files can be found on the Blue Button 2.0 API's documentation under <ahref="https://bluebutton.cms.gov/developers/#sample-beneficiaries"target="_blank"rel=noopener>Sample Beneficiaries</a>.
37
42
38
-
You also provide your own sample FHIR resources. These will need to fulfill the required FHIR profiles. All Patient Resources need an MBI that matches a record in BFD.
43
+
You can also provide your own sample FHIR resources. These will need to fulfill the required FHIR profiles. All Patient Resources need an MBI that matches a record in BFD.
44
+
45
+
<!-- RATIONALE: The doc referenced “find organization id” but didn’t explain how; add a small, concrete section tied to the Organization examples. -->
46
+
### Find organization ID {#find-organization-id-2}
47
+
48
+
Use the Organization endpoint to retrieve your Organization resource and its `Organization.id`.
39
49
40
50
#### Request
41
51
@@ -44,12 +54,12 @@ GET /api/v1/Organization
44
54
{% endraw %}{% endcapture %}
45
55
{% include copy_snippet.html code=curlSnippet language="shell" %}
46
56
47
-
#### cURL command
57
+
#### Headers
48
58
59
+
<!-- RATIONALE: Keep examples copy/pasteable by separating header listing from the cURL command; also avoid implying GET needs Content-Type/Prefer headers. -->
49
60
{% capture curlSnippet %}{% raw %}
50
61
Authorization: Bearer {access_token}
51
62
Accept: application/fhir+json
52
-
Prefer: respond-async
53
63
{% endraw %}{% endcapture %}
54
64
{% include copy_snippet.html code=curlSnippet language="shell" %}
{% include copy_snippet.html code=curlSnippet language="shell" %}
@@ -117,12 +126,12 @@ GET /api/v1/Organization/{id}
117
126
{% endraw %}{% endcapture %}
118
127
{% include copy_snippet.html code=curlSnippet language="shell" %}
119
128
120
-
#### cURL command
129
+
#### Headers
121
130
131
+
<!-- RATIONALE: Keep examples copy/pasteable by separating header listing from the cURL command; also avoid implying GET needs Content-Type/Prefer headers. -->
122
132
{% capture curlSnippet %}{% raw %}
123
133
Authorization: Bearer {access_token}
124
134
Accept: application/fhir+json
125
-
Prefer: respond-async
126
135
{% endraw %}{% endcapture %}
127
136
{% include copy_snippet.html code=curlSnippet language="shell" %}
To register a practitioner at your organization, you must send a FHIR-formatted <ahref="https://dpc.cms.gov/ig/StructureDefinition-dpc-profile-practitioner.html"target="_blank"rel=noopener>Practitioner</a> Resource in the body of your request. Don't use encoding (raw) when uploading via a POST request to the /Practitioner endpoint.
187
+
<!-- RATIONALE: “encoding (raw)” is ambiguous; clarify as “send raw JSON body” so users know what to do in tools like Postman/cURL. -->
188
+
To register a practitioner at your organization, you must send a FHIR-formatted <ahref="https://dpc.cms.gov/ig/StructureDefinition-dpc-profile-practitioner.html"target="_blank"rel=noopener>Practitioner</a> Resource in the body of your request. Send the raw JSON body (do not form-encode it) when uploading via a POST request to the /Practitioner endpoint.
180
189
181
190
The Practitioner Resource may include additional attributes detailed in the FHIR Implementation Guide within <ahref="https://dpc.cms.gov/ig/StructureDefinition-dpc-profile-practitioner.html"target="_blank"rel=noopener>DPC Practitioner Profile</a>.
182
191
@@ -185,7 +194,8 @@ The Practitioner Resource may include additional attributes detailed in the FHIR
185
194
- First and last name
186
195
- Type 1 National Provider Identifier (NPI)
187
196
188
-
Note: If an existing practitioner is found with the same NPI, the `/practitioner` endpoint will return that same practitioner.
197
+
<!-- RATIONALE: Normalize endpoint casing to match the rest of the examples and avoid 404s in case of case-sensitive tooling/docs. -->
198
+
Note: If an existing practitioner is found with the same NPI, the `/Practitioner` endpoint will return that same practitioner.
189
199
190
200
#### Request
191
201
@@ -213,7 +223,8 @@ The Practitioner endpoint supports a $submit operation. This operation lets you
213
223
Each individual Practitioner Resource in your bundle must satisfy the requirements on how to add a [Practitioner Resource](#add-a-practitioner). Otherwise a 422-Unprocessable Entity error will be returned.
{% include copy_snippet.html code=jsonSnippet language="json" %}
319
330
320
-
## Make Practitioner/Provenance
321
-
322
-
CMS requires practitioners to attest that they have a treatment-related purpose for adding a patient to their group each time they make a group addition. This is accomplished by submitting an attestation with every request. Attestations are posted as a <ahref="https://www.hl7.org/fhir/provenance.html"target="_blank"rel=noopener>Provenance</a> Resource via the X-Provenance header, as outlined in the <ahref="https://www.hl7.org/fhir/implementationguide.html"target="_blank"rel=noopener>FHIR specification</a>.
323
-
324
-
The attestation is then included in the X-Provenance header as part of any operations which add patients to the Group Resource.
{% include copy_snippet.html code=jsonSnippet language="json" %}
331
+
<!-- RATIONALE: Remove duplicated/renamed “Make Practitioner/Provenance” section and point readers to the canonical Attestation section to avoid drift. -->
332
+
Attestation is required when adding patients to a Group. See the [Attestation](#attestation) section below for requirements and an example `X-Provenance` header.
366
333
367
334
## Patients
368
335
@@ -372,9 +339,10 @@ Since there is not any preloaded data in DPC's sandbox, the Beneficiary FHIR Dat
372
339
373
340
### Add a patient
374
341
375
-
To register a patient at your organization, you must create a <ahref="https://dpc.cms.gov/ig/StructureDefinition-dpc-profile-patient.html"target="_blank"rel=noopener>Patient</a> Resource as a JSON file in FHIR format. The JSON file must be in the body of your request with no encoding (raw) when uploading via a POST request to the /Patient endpoint.
342
+
<!-- RATIONALE: Clarify “raw/encoding” wording and fix mislabeled profile link text (Patient section should refer to Patient profile). -->
343
+
To register a patient at your organization, you must create a <ahref="https://dpc.cms.gov/ig/StructureDefinition-dpc-profile-patient.html"target="_blank"rel=noopener>Patient</a> Resource as a JSON file in FHIR format. Send the raw JSON body (do not form-encode it) when uploading via a POST request to the /Patient endpoint.
376
344
377
-
To create the Patient Resource, the JSON file may include additional attributes detailed in the FHIR Implementation Guide within the <ahref="https://dpc.cms.gov/ig/StructureDefinition-dpc-profile-patient.html"target="_blank"rel=noopener>DPC Practitioner Profile</a>.
345
+
To create the Patient Resource, the JSON file may include additional attributes detailed in the FHIR Implementation Guide within the <ahref="https://dpc.cms.gov/ig/StructureDefinition-dpc-profile-patient.html"target="_blank"rel=noopener>DPC Patient Profile</a>.
378
346
379
347
#### Minimum requirements
380
348
@@ -385,7 +353,8 @@ To create the Patient Resource, the JSON file may include additional attributes
385
353
386
354
When sharing data, DPC uses the Patient.gender property to represent the sex of the patient as maintained on record at CMS. When registering a patient to your organization, DPC will require you to submit the Patient.gender property following the corresponding value set. The input provided may be used by DPC to match and validate the patient against CMS records.
387
355
388
-
Note: If an existing patient is found with the same MBI, the /patient endpoint will return that same patient.
356
+
<!-- RATIONALE: Normalize endpoint casing for consistency with the rest of the page and examples. -->
357
+
Note: If an existing patient is found with the same MBI, the /Patient endpoint will return that same patient.
The Patient endpoint also supports a GET /Patient operation. This operations lets you supply the Patient MBI and receive the Patient Resource. You may use this to identify a Patient's DPC ID based off on an MBI.
507
+
The Patient endpoint also supports a GET /Patient operation. This operation lets you supply the Patient MBI and receive the Patient Resource. You may use this to identify a Patient's DPC ID based on an MBI.
539
508
540
509
#### Request
541
510
@@ -546,11 +515,11 @@ GET /api/v1/Patient?identifier={patient_mbi}
546
515
547
516
#### cURL command
548
517
518
+
<!-- RATIONALE: The prior cURL example omitted the query parameter; keep request + cURL consistent so copy/paste works. -->
{% include copy_snippet.html code=curlSnippet language="shell" %}
@@ -610,7 +579,7 @@ Details on Provenance Resources are given in the <a href="https://www.hl7.org/fh
610
579
Timestamp. Time when attestation was made
611
580
Reason. Reason for the attestation (currently only: <ahref="http://hl7.org/fhir/v3/ActReason#TREAT">http://hl7.org/fhir/v3/ActReason#TREAT</a> is supported)
612
581
Organization ID. The agent making the attestation referenced by their Organization Resource ID
613
-
_Your Organization ID can be found in the DPC Portal by following <ahref="#find-organization-id"> these instructions</a>._
582
+
_Your Organization ID can be found in the DPC Portal by following <ahref="#find-organization-id-2"> these instructions</a>._
614
583
Practitioner ID. The practitioner attached to the attestation referenced by their Practitioner ID. _Your Practitioner ID can be found by referencing the `{id}` variable in the resource object of your practitioner._
615
584
616
585
The attestation is then included in the X-Provenance header as part of any operations which add patients to the Group Resource.
@@ -656,27 +625,32 @@ The attestation is then included in the X-Provenance header as part of any opera
656
625
{% endraw %}{% endcapture %}
657
626
{% include copy_snippet.html code=jsonSnippet language="json" %}
658
627
628
+
<!-- RATIONALE: Users often paste multi-line JSON into headers and get hard-to-debug errors; call out the “single-line JSON string” requirement. -->
629
+
To send this Provenance in the `X-Provenance` header, serialize it as JSON on a single line (no newlines). Your tooling may require escaping quotes when setting header values.
630
+
659
631
### Update a group
660
632
661
633
Patient/practitioner relationships automatically expire after 90 days and must be re-attested by the practitioner. This is accomplished by re-attributing the patient to the practitioner's group.
662
634
663
635
### Identifying expired patients
664
636
665
-
Patient attributions expire and must be renewed after 90 days. You can identify these patients through a GET request to the /Group endpoint. This will return a JSON file with all the patients attributed to the group. Evaluate this JSON for patients with attribution dates greater than 90 days.
637
+
<!-- RATIONALE: Previous guidance referenced “attribution dates” without showing where to find them; point to Group.member.period.end and ensure the example includes it. -->
638
+
Patient attributions expire and must be renewed after 90 days. You can identify these patients by retrieving the Group and checking each member's `period.end`.
666
639
667
640
#### Request
668
641
669
642
{% capture curlSnippet %}{% raw %}
670
-
GET api/v1/Group?characteristic-value=attributed-to${group_id}
643
+
GET /api/v1/Group/{group_id}
671
644
{% endraw %}{% endcapture %}
672
645
{% include copy_snippet.html code=curlSnippet language="shell" %}
@@ -906,6 +886,9 @@ The response will return a <a href="https://www.hl7.org/fhir/STU3/bundle.html" t
906
886
907
887
You can use the `Group.id` value of the returned resources to initiate an export job. Find your Group ID by referencing the `{id}` variable in your group's resource object.
908
888
889
+
<!-- RATIONALE: `${var}` looked like shell interpolation; use `%24` to represent the composite delimiter unambiguously and explain what it means. -->
890
+
In the request below, `%24` is the URL-encoded form of `$`, which separates values for FHIR composite search parameters.
891
+
909
892
#### Example
910
893
911
894
{% capture jsonSnippet %}{% raw %}
@@ -921,17 +904,17 @@ You can use the `Group.id` value of the returned resources to initiate an export
921
904
#### Request
922
905
923
906
{% capture curlSnippet %}{% raw %}
924
-
GET /api/v1/Group?characteristic-value=attributed-to${practitioner_npi}
907
+
GET /api/v1/Group?characteristic-value=attributed-to%24{practitioner_npi}
925
908
{% endraw %}{% endcapture %}
926
909
{% include copy_snippet.html code=curlSnippet language="shell" %}
0 commit comments