Creating ActivityDefinitions
Creating ActivityDefinitions
This guide will explain how to create an ActivityDefinition based on the dsf-activity-definition profile for a process plugin.
It is divided into steps for each of the main components of ActivityDefinitions:
- Read Access Tag
- Extension: process authorization
- BPE Managed Elements
- Regular Elements
Regular elements are all elements not part of the first 3 main components.
This guide assumes the reader knows how to translate ElementDefinitions to actual elements in a FHIR resource. If not, the guide on creating Task resources includes explanations for this.
1. Read Access Tag
Start out with an empty ActivityDefinition:
<ActivityDefinition xmlns="http://hl7.org/fhir">
</ActivityDefinition>The first element in DSF FHIR resources is always the Read Access Tag. It describes who is allowed to read this resource through the DSF FHIR server's REST API. More complex configurations of the Read Access Tag are explained in this guide. For this example, everyone will be allowed to read the resource:
<ActivityDefinition xmlns="http://hl7.org/fhir">
<meta>
<tag>
<system value="http://dsf.dev/fhir/CodeSystem/read-access-tag" />
<code value="ALL" />
</tag>
</meta>
</ActivityDefinition>2. Extension: Process Authorization
This part of the ActivityDefinition will tell the DSF who is allowed to request and receive messages (Task resources) for BPMN process. If the plugin contains more than one BPMN process, there will have to be one ActivityDefinition for each BPMN process. It is important to note that authorization rules need to be included for ALL messages received in the BPMN process. This includes the messages starting the BPMN process initially. The extension containing all possible rules is found here. Next up is adding the extension element with the correct URL. The value for the URL is found in the Extension.url element:
<ActivityDefinition xmlns="http://hl7.org/fhir">
...
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization">
</extension>
</ActivityDefinition>Elements not relevant to the current component are hidden with ... to increase readability.
The differential statement starts by defining the slicing for the Extension.extension element:
<StructureDefinition xmlns="http://hl7.org/fhir">
...
<differential>
<element id="Extension">
<path value="Extension" />
<min value="1" />
</element>
<element id="Extension.extension">
<path value="Extension.extension" />
<slicing>
<discriminator>
<type value="value" />
<path value="url" />
</discriminator>
<rules value="open" />
</slicing>
</element>
...
</differential>
</StructureDefinition>The above states that whenever this extension is used in a profile, the profile needs to include this extension at least once (<min value="1" />). The slicing on Extension.extension defines that elements of this slicing are identified by the value of their URL (<discriminator>), which is always the case for extensions, and that other extensions can be added to the slicing (<rules value="open" />). Since there is a slicing on Extension.extension, this is a nested extension.
After these initial element definitions come the elements relevant for the process plugin. The first one is the message-name slice:
<StructureDefinition xmlns="http://hl7.org/fhir">
...
<differential>
...
<element id="Extension.extension:message-name">
<path value="Extension.extension" />
<sliceName value="message-name" />
<min value="1" />
<max value="1" />
</element>
<element id="Extension.extension:message-name.url">
<path value="Extension.extension.url" />
<fixedUri value="message-name" />
</element>
<element id="Extension.extension:message-name.value[x]">
<path value="Extension.extension.value[x]" />
<min value="1" />
<type>
<code value="string" />
</type>
</element>
...
</differential>
</StructureDefinition>This section defines that there has to be exactly one extension element from the message-name slice in the ActivityDefinition. The extension element will have a URL value of message-name. This URL value identifies the element to belong to the message-name slice on Extension.extension, in accordance with the discriminator. Lastly, the extension element includes a valueString element. FHIR does not allow using value[x] as actual element. The value in value[x] is always strictly bound to some kind of type. FHIR uses the value[x].type.code value to determine this type and replaces [x] with an uppercase version of element.type.code. This results in the following extension element:
<extension url="message-name">
<valueString value="myMessage"/>
</extension>myMessage will have to be replaced with the name of the BPMN message event in a BPMN process that is expecting this message.
This is how the ActivityDefinition should look like so far
<ActivityDefinition xmlns="http://hl7.org/fhir">
<meta>
<tag>
<system value="http://dsf.dev/fhir/CodeSystem/read-access-tag" />
<code value="ALL" />
</tag>
</meta>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization">
<extension url="message-name">
<valueString value="myMessage"/>
</extension>
</extension>
</ActivityDefinition>The next slice is called task-profile:
<StructureDefinition xmlns="http://hl7.org/fhir">
...
<differential>
...
<element id="Extension.extension:task-profile">
<path value="Extension.extension" />
<sliceName value="task-profile" />
<min value="1" />
<max value="1" />
</element>
<element id="Extension.extension:task-profile.url">
<path value="Extension.extension.url" />
<fixedUri value="task-profile" />
</element>
<element id="Extension.extension:task-profile.value[x]">
<path value="Extension.extension.value[x]" />
<min value="1" />
<type>
<code value="canonical" />
</type>
</element>
...
</differential>
</StructureDefinition>This section has almost the same structure as message-name. The only difference is the value for value[x].type.code. This means that instead of valueString, it requires using a valueCanonical element for task-profile.value[x]. Canonical values referring to Task profiles in ActivityDefinitions have to conform to the rules outlined by the documentation on URLs. From the definition above, the following extension element is created and added to the ActivityDefinition:
<extension url="task-profile">
<valueCanonical value="http://dsf.dev/fhir/StructureDefinition/my-task|#{version}"/>
</extension>This is how the ActivityDefinition should look like so far
<ActivityDefinition xmlns="http://hl7.org/fhir">
<meta>
<tag>
<system value="http://dsf.dev/fhir/CodeSystem/read-access-tag" />
<code value="ALL" />
</tag>
</meta>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization">
<extension url="message-name">
<valueString value="myMessage"/>
</extension>
<extension url="task-profile">
<valueCanonical value="http://dsf.dev/fhir/StructureDefinition/my-task|#{version}"/>
</extension>
</extension>
</ActivityDefinition>The next slice is requester:
<StructureDefinition xmlns="http://hl7.org/fhir">
...
<differential>
...
<element id="Extension.extension:requester">
<path value="Extension.extension" />
<sliceName value="requester" />
<min value="1" />
</element>
<element id="Extension.extension:requester.url">
<path value="Extension.extension.url" />
<fixedUri value="requester" />
</element>
<element id="Extension.extension:requester.value[x]">
<path value="Extension.extension.value[x]" />
<min value="1" />
<type>
<code value="Coding" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-local-all|1.0.0" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-local-all-practitioner|1.0.0" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-local-organization|1.0.0" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-local-organization-practitioner|1.0.0" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-local-parent-organization-role|1.0.0" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-local-parent-organization-role-practitioner|1.0.0" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-remote-all|1.0.0" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-remote-organization|1.0.0" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-remote-parent-organization-role|1.0.0" />
</type>
<binding>
<strength value="required" />
<valueSet value="http://dsf.dev/fhir/ValueSet/process-authorization-requester|1.0.0" />
</binding>
</element>
...
</differential>
</StructureDefinition>Instead of a string or canonical type for value[x] there now is a Coding type. See the FHIR documentation on Codings for more in-depth information. Codings are elements which contain, among other things, a code and the system the code belongs to. In the same way value[x] transformed into valueString or valueCanonical before, value[x] will be transformed into valueCoding. To use Codings in valueCoding elements, they are usually bound to the element through a ValueSet. This is the responsibility of the binding element. There is also a list of value[x].type.profile elements referencing other StructureDefinitions. Instead of defining the elements in the same file, they were defined in different files for better readability. The use case decides which one to pick.
Here is what they mean:
local-all: All local requests will be allowed. Local requests are identified by matching the requester's certificate to a thumbprint which was internally marked by the DSF FHIR server as belonging to a local organization.local-organization: All local requests made from an organization with a specificorganization-identifierwill be allowed.local-parent-organization-role: All local requests made from an organization having a specific role inside a specific parent organization will be allowed.remoteversions of the above rules work the same but the requester's certificate is instead required to match a thumbprint marked as a remote organization.practitionersuffixes all work the same. They include the same rules as their prefixes but now additionally require the requester to match a certainpractitioner-role. A list of them
can be found here. This allows
for more granularity when defining authorization rules within an organization and can be integrated into local user management via OpenID Connect.
There are no practitioner versions of remote authorization rules. From the perspective of the receiving DSF instance, remote requests are always issued by an organization. They do not hold any information about the local user management of the requesting organization. Examples of all Codings from above can be found here.
It is also good to keep in mind that any number of requester elements may be added to an ActivityDefinition. Start out by adding a requester element like previous extensions:
<extension url="requester">
<valueCoding>
</valueCoding>
</extension>The remaining element definitions are found in one of the profiles. This example will use the dsf-coding-process-authorization-local-organization-practitioner profile. Since all elements listed in the Coding definition are optional, only the differential elements from the profile are relevant:
<differential>
<element id="Coding.extension">
<path value="Coding.extension" />
<slicing>
<discriminator>
<type value="value" />
<path value="url" />
</discriminator>
<rules value="open" />
</slicing>
</element>
<element id="Coding.extension:organization-practitioner">
<path value="Coding.extension" />
<sliceName value="organization-practitioner" />
<min value="1" />
<max value="1" />
<type>
<code value="Extension" />
<profile value="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner|1.0.0" />
</type>
</element>
<element id="Coding.system">
<path value="Coding.system" />
<min value="1" />
<fixedUri value="http://dsf.dev/fhir/CodeSystem/process-authorization" />
</element>
<element id="Coding.code">
<path value="Coding.code" />
<min value="1" />
<fixedCode value="LOCAL_ORGANIZATION_PRACTITIONER" />
</element>
</differential>It defines an extension called organization-practitioner which is identified through its url attribute. Again, the extension is only referenced, its location is in a different file. Below is its differential element in order to see how the extension needs to be populated:
<differential>
<element id="Extension">
<path value="Extension" />
<min value="1" />
<max value="1" />
</element>
<element id="Extension.extension">
<path value="Extension.extension" />
<slicing>
<discriminator>
<type value="value" />
<path value="url" />
</discriminator>
<rules value="open" />
</slicing>
</element>
<element id="Extension.extension:organization">
<path value="Extension.extension" />
<sliceName value="organization" />
<min value="1" />
<max value="1" />
</element>
<element id="Extension.extension:organization.url">
<path value="Extension.extension.url" />
<fixedUri value="organization" />
</element>
<element id="Extension.extension:organization.value[x]">
<path value="Extension.extension.value[x]" />
<min value="1" />
<type>
<code value="Identifier" />
</type>
</element>
<element id="Extension.extension:organization.value[x].system">
<path value="Extension.extension.value[x].system" />
<min value="1" />
<fixedUri value="http://dsf.dev/sid/organization-identifier" />
</element>
<element id="Extension.extension:organization.value[x].value">
<path value="Extension.extension.value[x].value" />
<min value="1" />
</element>
<element id="Extension.extension:practitionerRole">
<path value="Extension.extension" />
<sliceName value="practitionerRole" />
<min value="1" />
<max value="1" />
</element>
<element id="Extension.extension:practitionerRole.url">
<path value="Extension.extension.url" />
<fixedUri value="practitioner-role" />
</element>
<element id="Extension.extension:practitionerRole.value[x]">
<path value="Extension.extension.value[x]" />
<min value="1" />
<type>
<code value="Coding" />
</type>
</element>
<element id="Extension.extension:practitionerRole.value[x].system">
<path value="Extension.extension.value[x].system" />
<min value="1" />
</element>
<element id="Extension.extension:practitionerRole.value[x].code">
<path value="Extension.extension.value[x].code" />
<min value="1" />
</element>
<element id="Extension.url">
<path value="Extension.url" />
<fixedUri value="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner" />
</element>
<element id="Extension.value[x]">
<path value="Extension.value[x]" />
<max value="0" />
</element>
</differential>This extension does not reference any other files. This means this is the "deepest" level. The process can now proceed by translating this definition into actual extension elements, inserting it into the selected Coding, translating the remaining element definitions from the Coding resource, and incorporating all components into the ActivityDefinition.
Start with the Extension.url element, since the Extension element is the parent element for all slices on the Extension.extension elements:
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner">
</extension>Next, add the organization slice:
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner">
<extension url="organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
</extension>Finally, add the practitionerRole slice:
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner">
<extension url="organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
<extension url="practitioner-role">
<valueCoding>
<system value="http://dsf.dev/fhir/CodeSystem/practitioner-role"/>
<code value="DSF_ADMIN"/>
</valueCoding>
</extension>
</extension>There is no binding element specified for practitionerRole.value[x]. This is intentional. The example used a code from the dsf-practitioner-role CodeSystem. This CodeSystem includes a standard set of codes which are often sufficient for DSF use cases. Other/new CodeSystems if may be added if these codes do not apply for a given use case. The code set here can be used in the DSF role config to allow certain users with this practitioner-role to send requests.
Now add the extension as the Coding.extension:organization-practitioner element:
<extension url="requester">
<valueCoding>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner">
<extension url="organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
<extension url="practitioner-role">
<valueCoding>
<system value="http://dsf.dev/fhir/CodeSystem/practitioner-role"/>
<code value="DSF_ADMIN"/>
</valueCoding>
</extension>
</extension>
</valueCoding>
</extension>Look at the differential from the Coding again. The next elements to be added are Coding.system and Coding.code:
<extension url="requester">
<valueCoding>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner">
<extension url="organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
<extension url="practitioner-role">
<valueCoding>
<system value="http://dsf.dev/fhir/CodeSystem/practitioner-role"/>
<code value="DSF_ADMIN"/>
</valueCoding>
</extension>
</extension>
<system value="http://dsf.dev/fhir/CodeSystem/process-authorization"/>
<code value="LOCAL_ORGANIZATION_PRACTITIONER"/>
</valueCoding>
</extension>The requester extension is now finished and can be added it to the ActivityDefinition under the dsf-extension-process-authorization.
This is how the ActivityDefinition should look like so far
<ActivityDefinition xmlns="http://hl7.org/fhir">
<meta>
<tag>
<system value="http://dsf.dev/fhir/CodeSystem/read-access-tag" />
<code value="ALL" />
</tag>
</meta>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization">
<extension url="message-name">
<valueString value="myMessage"/>
</extension>
<extension url="task-profile">
<valueCanonical value="http://dsf.dev/fhir/StructureDefinition/my-task|#{version}"/>
</extension>
<extension url="requester">
<valueCoding>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner">
<extension url="organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
<extension url="practitioner-role">
<valueCoding>
<system value="http://dsf.dev/fhir/CodeSystem/practitioner-role"/>
<code value="DSF_ADMIN"/>
</valueCoding>
</extension>
</extension>
<system value="http://dsf.dev/fhir/CodeSystem/process-authorization"/>
<code value="LOCAL_ORGANIZATION_PRACTITIONER"/>
</valueCoding>
</extension>
</extension>
</ActivityDefinition>Back to looking at the dsf-extension-process-authorization again. The last slice for this extension is recipient:
<StructureDefinition xmlns="http://hl7.org/fhir">
...
<differential>
...
<element id="Extension.extension:recipient">
<path value="Extension.extension" />
<sliceName value="recipient" />
<min value="1" />
</element>
<element id="Extension.extension:recipient.url">
<path value="Extension.extension.url" />
<fixedUri value="recipient" />
</element>
<element id="Extension.extension:recipient.value[x]">
<path value="Extension.extension.value[x]" />
<min value="1" />
<type>
<code value="Coding" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-local-all|1.0.0" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-local-organization|1.0.0" />
<profile value="http://dsf.dev/fhir/StructureDefinition/coding-process-authorization-local-parent-organization-role|1.0.0" />
</type>
<binding>
<strength value="required" />
<valueSet value="http://dsf.dev/fhir/ValueSet/process-authorization-recipient|1.0.0" />
</binding>
</element>
...
</differential>
</StructureDefinition>The recipient will decide which DSF instance is allowed to process that message. That is the reason why there are no Codings for remote or practitioner here. For requester, it was decided to only allow users with a certain role from a local organization to send this message. The message should now also only be processable by that same local organization. The right Coding for this job is the coding-process-authorization-local-organization. The configuration of a local requester and local receiver is often used for the message that starts up the first BPMN process of the plugin. The process of adding the recipient slice is the exact same as it is for requester. It's possible to follow the same steps for the requester slice again but using a different Coding.
This is how the ActivityDefinition should look like
<ActivityDefinition xmlns="http://hl7.org/fhir">
<meta>
<tag>
<system value="http://dsf.dev/fhir/CodeSystem/read-access-tag" />
<code value="ALL" />
</tag>
</meta>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization">
<extension url="message-name">
<valueString value="myMessage"/>
</extension>
<extension url="task-profile">
<valueCanonical value="http://dsf.dev/fhir/StructureDefinition/my-task|#{version}"/>
</extension>
<extension url="requester">
<valueCoding>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner">
<extension url="organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
<extension url="practitioner-role">
<valueCoding>
<system value="http://dsf.dev/fhir/CodeSystem/practitioner-role"/>
<code value="DSF_ADMIN"/>
</valueCoding>
</extension>
</extension>
<system value="http://dsf.dev/fhir/CodeSystem/process-authorization"/>
<code value="LOCAL_ORGANIZATION_PRACTITIONER"/>
</valueCoding>
</extension>
<extension url="recipient">
<valueCoding>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
<system value="http://dsf.dev/fhir/CodeSystem/process-authorization"/>
<code value="LOCAL_ORGANIZATION"/>
</valueCoding>
</extension>
</extension>
</ActivityDefinition>The last element defined in the process authorization extension is Extension.url. This was already added at the very beginning of the working through the extension, so there is nothing more to add.
3. BPE Managed Elements
Some elements of ActivityDefinitions are managed by the DSF BPE and replaced with certain values at appropriate times.
The following elements are managed by the DSF BPE:
ActivityDefinition.versionshould use the placeholder#{version}ActivityDefinition.dateis not required, but if it is included, it should use the placeholder#{date}ActivityDefinition.statusmust have a value ofunknown
The ActivityDefinition should now look like this
<ActivityDefinition xmlns="http://hl7.org/fhir">
<meta>
<tag>
<system value="http://dsf.dev/fhir/CodeSystem/read-access-tag" />
<code value="ALL" />
</tag>
</meta>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization">
<extension url="message-name">
<valueString value="myMessage"/>
</extension>
<extension url="task-profile">
<valueCanonical value="http://dsf.dev/fhir/StructureDefinition/my-task|#{version}"/>
</extension>
<extension url="requester">
<valueCoding>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner">
<extension url="organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
<extension url="practitioner-role">
<valueCoding>
<system value="http://dsf.dev/fhir/CodeSystem/practitioner-role"/>
<code value="DSF_ADMIN"/>
</valueCoding>
</extension>
</extension>
<system value="http://dsf.dev/fhir/CodeSystem/process-authorization"/>
<code value="LOCAL_ORGANIZATION_PRACTITIONER"/>
</valueCoding>
</extension>
<extension url="recipient">
<valueCoding>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
<system value="http://dsf.dev/fhir/CodeSystem/process-authorization"/>
<code value="LOCAL_ORGANIZATION"/>
</valueCoding>
</extension>
</extension>
<!-- version managed by bpe -->
<version value="#{version}"/>
<!-- date managed by bpe -->
<date value="#{date}"/>
<!-- status managed by bpe -->
<status value="unknown"/>
</ActivityDefinition>4. Regular Elements
The only required elements in this set are ActivityDefinition.url and ActivityDefinition.kind. ActivityDefinition.url expects a certain format. This is explained in detail in the documentation on URLs. ActivityDefinition.kind must have the value Task.
All other elements can technically be omitted. Still, the following elements are recommended to be populated:
AcitivityDefinition.nameAcitivityDefinition.titleAcitivityDefinition.subtitleAcitivityDefinition.experimentalAcitivityDefinition.publisherAcitivityDefinition.contactAcitivityDefinition.description
The finished ActivityDefinition should now look something like this
<ActivityDefinition xmlns="http://hl7.org/fhir">
<meta>
<tag>
<system value="http://dsf.dev/fhir/CodeSystem/read-access-tag" />
<code value="ALL" />
</tag>
</meta>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization">
<extension url="message-name">
<valueString value="myMessage"/>
</extension>
<extension url="task-profile">
<valueCanonical value="http://dsf.dev/fhir/StructureDefinition/my-task|#{version}"/>
</extension>
<extension url="requester">
<valueCoding>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization-practitioner">
<extension url="organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
<extension url="practitioner-role">
<valueCoding>
<system value="http://dsf.dev/fhir/CodeSystem/practitioner-role"/>
<code value="DSF_ADMIN"/>
</valueCoding>
</extension>
</extension>
<system value="http://dsf.dev/fhir/CodeSystem/process-authorization"/>
<code value="LOCAL_ORGANIZATION_PRACTITIONER"/>
</valueCoding>
</extension>
<extension url="recipient">
<valueCoding>
<extension url="http://dsf.dev/fhir/StructureDefinition/extension-process-authorization-organization">
<valueIdentifier>
<system value="http://dsf.dev/sid/organization-identifier"/>
<value value="My_Organization"/>
</valueIdentifier>
</extension>
<system value="http://dsf.dev/fhir/CodeSystem/process-authorization"/>
<code value="LOCAL_ORGANIZATION"/>
</valueCoding>
</extension>
</extension>
<!-- version managed by bpe -->
<version value="#{version}"/>
<!-- date managed by bpe -->
<date value="#{date}"/>
<!-- status managed by bpe -->
<status value="unknown"/>
<url value="http://dsf.dev/bpe/Process/myProcess"/>
<kind value="Task"/>
<name value="My Process"/>
<title value="My Title For My Process"/>
<subtitle value="Information Processing Process"/>
<experimental value="false"/>
<publisher value="DSF"/>
<contact>
<name value="DSF"/>
<telecom>
<system value="email"/>
<value value="noreply@dsf.dev"/>
</telecom>
</contact>
<description value="My Process processes information"/>
</ActivityDefinition>Related Topics
ActivityDefinition, Creating CodeSystems for DSF Processes, Creating ValueSets for DSF Processes, Task