Skip to content

Correction Task Profile

Canonical../StructureDefinition/nexus-correction-task
Statusdraft · 1.26.0
BaseTask Profile (constraint)
SourceFSH · JSON

A patient's request to correct their own record, or to log a disagreement where a correction was refused, carried as an ordinary clinical task with the statutory correction vocabulary. Same worklist, same shape, narrower status set. AN ACCESS REQUEST IS NOT HELD TO THIS PROFILE. Every code in this vocabulary describes a correction or a disagreement, so a request to be given a copy of the record has no terminal state here it could truthfully reach. It shares the privacy-request worklist bin and stays on the base clinical task, which binds the wider set.

Overview

A patient asks for something in their own record to be changed. Somebody reads the request, decides, and the decision is recorded. If the answer is no, the patient may file a statement of disagreement, and that refusal is what entitles them to.

This profile is that request. It is an ordinary clinical task — same worklist, same inbox, same sorting — narrowed in two places: it is always filed under privacy-request, and its businessStatus draws on the statutory correction lifecycle rather than the general one.

The vocabulary is HL7's, not ours

businessStatus binds to the ten-code lifecycle from HL7's Patient Request for Corrections guide: queued, in-review, waiting-for-information, requester-cancelled, accepted, partial-accept, amendment-completed, denied, disagreement-logged, completed.

Nothing about that is local. A correction request means the same thing in Ontario as anywhere else, the international guide had already modelled it on Task.businessStatus, and a reader outside this estate should not need our value set to understand an outcome. Where this guide differs from HL7 is only in deriving from its own clinical task, so these land in the same worklist as everything else.

A refusal is a completed task, not a failed one

status = completed with businessStatus = denied. Not failed.

The distinction carries the whole point. failed says the system broke — the request was lost, the job errored, nobody got to it. completed + denied says a person read the request and decided against it, which is the only fact the statute cares about and the only one that starts the disagreement clock. A refusal recorded as a failure loses the decision and the decider.

The Statement of Disagreement that may follow points back here on its partOf — at the task that reached denied. That is the audit trail: who decided, when, and on what stated reason.

Why this is a profile at all

Until 1.26.0 there was no correction task profile, deliberately, and the reason recorded was that privacy work had to land in the same worklist as everything else and that worklist read the clinical task profile.

That reason does not hold. A worklist searches Task?owner=…; every task comes back whatever meta.profile says, and nothing in this estate filters a task query by profile. A second profile costs nothing in reachability.

What it buys is a vocabulary that ordinary work cannot reach. The correction lifecycle records decisions about someone's chart under a statutory clock; pre-review and awaiting-triage do not. Both used to be equally valid on any task, because the binding was extensible and invited exactly that. Since 1.26.0 the base profile binds businessStatus required to the union of the two vocabularies, and an invariant keeps the correction half off ordinary tasks. This profile closes the other direction: a task that declares it is held to the correction half alone.

A writer has to declare the profile

meta.profile does nothing unless it is written, and today nothing in this estate stamps a profile onto a Task. Until the privacy path does, an instance is held to the base profile — which still refuses a correction code on a non-privacy task, but does not hold a privacy task to the correction vocabulary. Declaring the profile is what closes that second half.

What is not constrained here

The statutory response deadline lives on restriction.period.end, as it does for any privacy-request task, and this profile does not make it mandatory. It probably should be — a deadline nobody wrote down cannot be reported on, and the inbox's overdue sorting is the only thing that surfaces an approaching one. It is left alone because requiring it would invalidate stored privacy tasks that predate the rule, and that deserves a migration rather than arriving as a side effect of closing a binding.

Which of the two a given task is — a correction or a disagreement — is not constrained either. It comes from the optional second code coding, drawn from the international correction task-type system. That coding is optional because a task written before the vocabulary existed carries none, so read its absence as weak.

An access request is not one of these

privacy-request is named for the right, not the outcome, so one worklist bin covers access, correction and disagreement: the same role handles all three and all three run on statutory clocks. This profile is narrower than the bin. It covers corrections and disagreements only.

The reason is the vocabulary. Every code in the correction lifecycle describes a record being amended or a disagreement being logged, and an access request does neither — it releases a copy. The intake states carry over (queued, in-review, waiting-for-information, requester-cancelled) and so does denied, which is what makes refusal reporting work across all privacy requests. But nothing in the set says the packet was released, or released in part. businessStatus is 1..1 here and bound to that set alone, so an access request held to this profile would have to close on a code that misstates what happened.

Do not reach for completed to close one. HL7 defines completed as the state where a disagreement has been logged and a formal rebuttal provided — not "the work is over" — so it would record a correction fact about a request that corrected nothing, and break the property that makes refusal counts portable.

So an access request stays on the base clinical task, in the same bin, binding the wider business-status set. Access requests is the page that describes it, including the part that is still missing: an access vocabulary this guide has deliberately not invented, because the states it would name have nothing yet to produce them.

Terminology bindings

Path Strength Value set
Task.businessStatus required Correction Business Status Value Set