The PPN (Performing Person Time Stamp) data type was introduced in HL7 v2.5 as a variant of XCN for fields that need to capture not only who performed an action but when they performed it. Structurally PPN mirrors XCN component-for-component, with one distinguishing addition: PPN.15 Date/Time Action Performed. It is used in fields where a downstream system must reason about timing — OBX-16 Responsible Observer (when the observer recorded the result), OBR-34 Technician (when the technician executed the test) — rather than simply identifying the practitioner.
Purpose
PPN exists because the question "who performed this?" almost always travels with "when did they perform it?" — and a pure XCN field cannot carry the timestamp. Before v2.5, profiles either invented separate sibling fields for the timestamp or overloaded XCN.19 Effective Date (which means something different — the validity of the identifier, not the action). PPN solves this by reserving PPN.15 as the action timestamp and renumbering the rest of the XCN tail accordingly. The identifier triple (PPN.1, PPN.9, PPN.13) and name parts (PPN.2 through PPN.6, PPN.22) behave exactly as in XCN.
Components
Source: HAPI HL7v2 v2.8.1 javadoc (PPN). Length is not published in v2.8.1 javadocs (—).
| Comp | Name | Sub-type | Length | Req | Description |
|---|---|---|---|---|---|
| PPN.1 | ID Number | st | — | C | The performing person's identifier (NPI, internal staff ID, license number). |
| PPN.2 | Family Name | fn | — | O | Structured surname (FN sub-type). |
| PPN.3 | Given Name | st | — | O | First given name. |
| PPN.4 | Second And Further Given Names Or Initials Thereof | st | — | O | Middle name(s) or initial. |
| PPN.5 | Suffix (e.g. JR or III) | st | — | O | Generational suffix. |
| PPN.6 | Prefix (e.g. DR) | st | — | O | Honorific prefix. |
| PPN.7 | Degree (e.g. MD) | is | — | B | Withdrawn in v2.5; superseded by PPN.22 Professional Suffix. |
| PPN.8 | Source Table | cwe | — | O | HL70297 source-table code for PPN.1. |
| PPN.9 | Assigning Authority | hd | — | O | Namespace + OID that issued PPN.1. |
| PPN.10 | Name Type Code | id | — | O | HL70200 code (L=legal, D=display, etc.). |
| PPN.11 | Identifier Check Digit | st | — | O | Check digit for PPN.1. |
| PPN.12 | Check Digit Scheme | id | — | O | HL70061 algorithm code. |
| PPN.13 | Identifier Type Code | id | — | O | HL70203 code (NPI, DEA, MD, etc.). |
| PPN.14 | Assigning Facility | hd | — | O | Facility that assigned PPN.1, when distinct from PPN.9. |
| PPN.15 | Date/Time Action Performed | dtm | — | O | Distinguishing field. When this person performed the action that the carrying field describes. |
| PPN.16 | Name Representation Code | id | — | O | HL70465 character-set/alphabet code. |
| PPN.17 | Name Context | cwe | — | O | Coded context in which the name is used. |
| PPN.18 | Name Validity Range | st | — | B | Withdrawn (was DR). Use PPN.20/PPN.21 instead. |
| PPN.19 | Name Assembly Order | id | — | O | HL70444 code (G=given-first, F=family-first). |
| PPN.20 | Effective Date | dtm | — | O | When this name/ID became valid. |
| PPN.21 | Expiration Date | dtm | — | O | When this name/ID stops being valid. |
| PPN.22 | Professional Suffix | st | — | O | "MD", "RN", "PA-C". Replaces withdrawn PPN.7. |
| PPN.23 | Assigning Jurisdiction | cwe | — | O | Jurisdiction that issued the identifier. |
| PPN.24 | Assigning Agency or Department | cwe | — | O | Issuing agency within the jurisdiction. |
| PPN.25 | Security Check | st | — | O | Cryptographic check value over the identifier. |
Most-used components
- PPN.1 ID Number — the performing person's directory key.
- PPN.2 Family Name (FN) — structured surname.
- PPN.3 Given Name — first name.
- PPN.9 Assigning Authority — namespace + OID for PPN.1.
- PPN.13 Identifier Type Code — categorizes PPN.1 (NPI vs internal vs license).
- PPN.15 Date/Time Action Performed — the field that justifies choosing PPN over XCN. Without it, switch back to XCN.
Where it's used
- OBX-16 Responsible Observer — in v2.7+ profiles that retyped from XCN to PPN, this carries the observer plus the timestamp the observation was made.
- OBR-34 Technician — when the technician executed the diagnostic test (often distinct from OBR-7 Observation Date/Time, which is the specimen collection time).
- OBR-35 Transcriptionist — when applicable in lab/imaging profiles that adopted PPN.
- Any vendor-extended field where "who acted, and when" is the carried fact (donor-management, blood-bank, transfusion segments in some realm profiles).
PPN repeats wherever multiple performers acted on the same observation or order; receivers must handle multiple PPN occurrences separated by ~.
Version differences
- v2.5 — PPN introduced as a sibling to XCN, with the new PPN.15 Date/Time Action Performed slot. PPN.7 Degree withdrawn at introduction; PPN.22 Professional Suffix added to replace it.
- v2.6 — minor refinement of PPN.17 Name Context.
- v2.7 — PPN.8 widened from IS to CWE. PPN.18 Name Validity Range withdrawn (use PPN.20/PPN.21). PPN.23 Assigning Jurisdiction, PPN.24 Assigning Agency or Department, PPN.25 Security Check added. Fields previously typed XCN (notably OBX-16) were retyped to PPN in v2.7+ message profiles.
- v2.8 / v2.8.1 — no structural changes; HAPI v2.8.1 javadoc shows the same 25 components.
Common mistakes
- Treating PPN as identical to XCN and dropping PPN.15. The whole point of PPN is the action timestamp; omitting PPN.15 wastes the type.
- Putting the observation date/time (OBR-7, OBX-14) into PPN.15. PPN.15 is when the performer acted, not when the specimen was collected. These differ when results are interpreted hours after collection.
- Confusing PPN.15 (action performed) with PPN.20 (identifier effective date). PPN.20 is identity metadata; PPN.15 is an event timestamp.
- Sending a PPN with degree in PPN.7. PPN.7 has been withdrawn since v2.5 — put credentials in PPN.22 Professional Suffix.
- Substituting XCN for PPN in v2.7+ profiles that mandate PPN. Receivers expect a 15th component of DTM type and may either reject or lose data when XCN arrives.
Examples
Minimal value
99812^SMITH^JANE
Populated value
99812^SMITH^JANE^^^DR^MD^L^MERCY&2.16.840.1.113883.19.5&ISO^L^^^^^20260610091500-0500
The first 14 components mirror XCN; PPN.15 (20260610091500-0500) is the timestamp the person performed the action.
Annotated breakdown
99812 PPN.1 ID Number
^SMITH PPN.2 Family Name (FN)
^JANE PPN.3 Given Name
^ PPN.4 Second Given
^ PPN.5 Suffix
^DR PPN.6 Prefix
^MD PPN.7 Degree (WITHDRAWN — leave empty in v2.7+)
^L PPN.8 Source Table (CWE)
^MERCY&2.16.840.1.113883.19.5&ISO PPN.9 Assigning Authority (HD)
^L PPN.10 Name Type Code
^ PPN.11 Identifier Check Digit
^ PPN.12 Check Digit Scheme
^ PPN.13 Identifier Type Code
^ PPN.14 Assigning Facility (HD)
^20260610091500-0500 PPN.15 Date/Time Action Performed (DTM) ← distinguishing
In-context excerpt — OBX-16 Responsible Observer with PPN
OBX|1|NM|718-7^Hemoglobin^LN||13.4|g/dL|12.0-16.0|N|||F|||20260610090000-0500|||99812^SMITH^JANE^^^DR^^L^MERCY&2.16.840.1.113883.19.5&ISO^L^^^NPI^^20260610091500-0500
OBX-14 says the specimen was observed at 09:00; PPN.15 in OBX-16 says Dr. Smith reviewed and signed off at 09:15.
In-context excerpt — OBR-34 Technician carrying when the tech ran the assay
OBR|1|ORD-7742|ACC-9921|24331-1^Lipid panel^LN||20260610080000|||||||||99834^OKONKWO^ADAEZE^^^^^L^MERCY&2.16.840.1.113883.19.5&ISO^L^^^NPI^^20260610083200-0500
Common pitfall snippet
99812^SMITH^JANE^^^DR^^L^MERCY&2.16.840.1.113883.19.5&ISO^L^^^NPI^^
A PPN with PPN.15 empty. The wire format is legal but semantically wasteful — the field is typed PPN precisely to carry the action timestamp. If timing genuinely isn't known, the source profile should specify XCN, not PPN with an empty PPN.15.
FHIR mapping
There is no per-datatype ConceptMap published in the v2-to-FHIR IG for PPN. In practice, mappers reuse the XCN-to-Practitioner mapping for components 1–14 and 16–25, and route PPN.15 to a period.start (or full period when the action is instantaneous, populating both start and end) on whatever participant element the parent field maps to — typically Observation.performer with an extension carrying the timestamp, or DiagnosticReport.resultsInterpreter.
| PPN | FHIR (Practitioner + performer context) |
|---|---|
| PPN.1 | Practitioner.identifier.value |
| PPN.2 | Practitioner.name.family |
| PPN.3 | Practitioner.name.given (first) |
| PPN.4 | Practitioner.name.given (additional) |
| PPN.9 | Practitioner.identifier.assigner |
| PPN.13 | Practitioner.identifier.type |
| PPN.15 | parent resource performer.period.start or effectiveDateTime extension |
| PPN.22 | Practitioner.qualification.code |
Engine considerations
- PPN.15 vs OBX-14/OBR-7: engines must keep PPN.15 distinct from the observation/specimen timestamps on the parent segment. Collapsing them loses the action time.
- HD sub-components in PPN.9 and PPN.14: like XCN, both fields use
&for HD's three sub-components; re-tokenizing with^corrupts the OID. - FN inside PPN.2: PPN.2 is FN-typed; compound surnames split into FN.1–FN.5 just as in XCN.2.
- Withdrawn components: PPN.7 (since v2.5) and PPN.18 (since v2.7) remain wire-present. v2.7+ producers leave them empty.
- Repetition: PPN repeats in OBX-16 when multiple observers signed off; preserve repetition order.
How Vorro parses and produces PPN
On inbound, Vorro materializes PPN as a Practitioner reference plus a captured action timestamp. PPN.1 + PPN.9 + PPN.13 form the identifier triple; PPN.15 is lifted onto the parent resource's performer.period (or, when the parent has no period slot, attached as a data-absent-reason-safe extension). PPN.2 is parsed as FN to preserve compound surnames.
On outbound, when the destination profile specifies PPN, Vorro requires the upstream resource to carry an action timestamp — if absent, we emit XCN instead and log a downgrade notice rather than send a PPN with an empty PPN.15. Professional suffix is always emitted in PPN.22, never PPN.7, for v2.5+ destinations.
Related pages
- XCN data type — Extended Composite ID Number and Name for Persons
- XPN data type — Extended Person Name
- OBX segment — Observation Result
