package Ġgov . cdc . prime . router . serializers Ċ Ċ import Ġca . u hn . hl 7 v 2 . Default H api Context Ċ import Ġca . u hn . hl 7 v 2 . model . v 2 5 1 . message . OR U _ R 0 1 Ċ import Ġca . u hn . hl 7 v 2 . util . T ers er Ċ import Ġgov . cdc . prime . router . Element Ċ import Ġgov . cdc . prime . router . Metadata Ċ import Ġgov . cdc . prime . router . Report Ċ import Ġgov . cdc . prime . router . Value Set Ċ import Ġjava . io . OutputStream Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . time . Zone Id Ċ import Ġjava . util . Properties Ċ Ċ class ĠH l 7 Serializer ( val Ġmetadata : ĠMetadata ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsoftware Vendor Organization Ġ= Ġ" Cent ers Ġfor ĠD isease ĠControl Ġand ĠPre vention " ĊĠĠĠ Ġprivate Ġval Ġsoftware ProductName Ġ= Ġ" PR IME ĠData ĠHub " ĊĊĠĠĠ Ġprivate Ġval Ġh api Context Ġ= ĠDefault H api Context () ĊĠĠĠ Ġprivate Ġval Ġbuild Version : ĠString ĊĠĠĠ Ġprivate Ġval Ġbuild Date : ĠString ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuild Properties Ġ= ĠProperties () ĊĠĠĠĠĠĠĠ Ġval Ġprop FileStream Ġ= Ġthis :: class . java . class Loader . getResource AsStream (" build . properties ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Could Ġnot Ġfind Ġthe Ġproperties Ġfile ") ĊĠĠĠĠĠĠĠ Ġprop FileStream . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Properties . load ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Version Ġ= Ġbuild Properties . getProperty (" build Version ", Ġ" 0 . 0 . 0 . 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Date Ġ= Ġbuild Properties . getProperty (" build Date ", Ġ" 2 0 2 0 0 1 0 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite ( report : ĠReport , ĠoutputStream : ĠOutputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDev ĠNote : ĠH API Ġdoesn 't Ġsupport Ġa Ġbatch Ġof Ġmessages , Ġso Ġthis Ġcode Ġcreates ĊĠĠĠĠĠĠĠ Ġ// Ġthese Ġsegments Ġby Ġhand ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ ĠoutputStream . write ( create Headers ( report ). toByteArray ()) ĊĠĠĠĠĠĠĠ Ġreport . item Indices . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġcreate Message ( report , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . write ( message . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠoutputStream . write ( create Foot ers ( report ). toByteArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcreate Message ( report : ĠReport , Ġrow : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠOR U _ R 0 1 () ĊĠĠĠĠĠĠĠ Ġmessage . init Quick start (" OR U ", Ġ" R 0 1 ", Ġ" D ") ĊĠĠĠĠĠĠĠ Ġbuild Message ( message , Ġreport , Ġrow ) ĊĠĠĠĠĠĠĠ Ġreturn Ġh api Context . pipe Parser . encode ( message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Message ( message : ĠOR U _ R 0 1 , Ġreport : ĠReport , Ġrow : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġa oe Sequence Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġt ers er Ġ= ĠT ers er ( message ) ĊĠĠĠĠĠĠĠ Ġset L iterals ( ter ser ) ĊĠĠĠĠĠĠĠ Ġreport . schema . elements . forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġreport . getString ( row , Ġelement . name ) Ġ?: Ġreturn @ forEach ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . hl 7 Output Fields Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . hl 7 Output Fields . forEach Ġ{ Ġhl 7 Field Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Component ( ter ser , Ġelement , Ġhl 7 Field , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element . hl 7 Field Ġ== Ġ" AO E " Ġ&& Ġelement . type Ġ== ĠElement . Type . NUMBER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunits Ġ= Ġreport . getString ( row , Ġ"${ element . name }_ units ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġreport . getString ( row , Ġ" spec imen _ collection _ date _ time ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset AO E ( ter ser , Ġelement , Ġa oe Sequence ++, Ġdate , Ġvalue , Ġunits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element . hl 7 Field Ġ== Ġ" AO E ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġreport . getString ( row , Ġ" spec imen _ collection _ date _ time ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset AO E ( ter ser , Ġelement , Ġa oe Sequence ++, Ġdate , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element . hl 7 Field Ġ== Ġ" N TE - 3 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Note ( ter ser , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element . hl 7 Field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Component ( ter ser , Ġelement , Ġelement . hl 7 Field , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Component ( ter ser : ĠT ers er , Ġelement : ĠElement , Ġhl 7 Field : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Spec Ġ= Ġform Path Spec ( hl 7 Field ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( element . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement . Type . ID _ CL IA Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ( path Spec , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ( next Component ( path Spec ), Ġ" CL IA ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement . Type . HD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhd Ġ= ĠElement . parse HD ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hd . universal Id Ġ!= Ġnull Ġ&& Ġhd . universal Id System Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 1 ", Ġhd . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 2 ", Ġhd . universal Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 3 ", Ġhd . universal Id System ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ( path Spec , Ġhd . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement . Type . EI Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġei Ġ= ĠElement . parse EI ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ei . universal Id Ġ!= Ġnull Ġ&& Ġei . universal Id System Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 1 ", Ġei . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 2 ", Ġei . namespace ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 3 ", Ġei . universal Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 4 ", Ġei . universal Id System ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ( path Spec , Ġei . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement . Type . CODE Ġ-> Ġset Code Component ( ter ser , Ġvalue , Ġpath Spec , Ġelement . value Set ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement . Type . TELE PHONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Tele phone Component ( ter ser , Ġvalue , Ġpath Spec , Ġelement ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ( path Spec , Ġ"") Ġ// ĠNot Ġat Ġall Ġsure Ġwhat Ġto Ġdo Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement . Type . POST AL _ CODE Ġ-> Ġset Postal Component ( ter ser , Ġvalue , Ġpath Spec , Ġelement ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġt ers er . set ( path Spec , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Code Component ( ter ser : ĠT ers er , Ġvalue : ĠString , Ġpath Spec : ĠString , Ġvalue SetName : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value SetName Ġ== Ġnull ) Ġerror (" Schema ĠError : ĠMissing Ġvalue Set Ġfor Ġ'$ path Spec '") ĊĠĠĠĠĠĠĠ Ġval Ġvalue Set Ġ= Ġmetadata . find Value Set ( value SetName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Schema ĠError : ĠCannot Ġfind Ġ'$ value SetName '") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( value Set . system ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue Set . Set System . HL 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue Set . Set System . LO INC , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue Set . Set System . UC UM , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue Set . Set System . S NO MED _ CT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit Ġis Ġa Ġcomponent Ġspec Ġthen Ġset Ġall Ġsub - components ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Field ( path Spec )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 1 ", Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 2 ", Ġvalue Set . to Display From Code ( value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 3 ", Ġvalue Set . system Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Set . to Version From Code ( value )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ("$ path Spec - 7 ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ( path Spec , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ers er . set ( path Spec , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Tele phone Component ( ter ser : ĠT ers er , Ġvalue : ĠString , Ġpath Spec : ĠString , Ġelement : ĠElement ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġvalue . split ( Element . phone Delimiter ) ĊĠĠĠĠĠĠĠ Ġval ĠareaCode Ġ= Ġparts [ 0 ]. substring ( 0 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlocal Ġ= Ġparts [ 0 ]. substring ( 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġcountry Ġ= Ġparts [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġparts [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġt ers er . set ( build Component ( path Spec , Ġ 2 ), Ġif Ġ( element . name Contains (" patient ")) Ġ" PR N " Ġelse Ġ" W PN ") ĊĠĠĠĠĠĠĠ Ġt ers er . set ( build Component ( path Spec , Ġ 5 ), Ġcountry ) ĊĠĠĠĠĠĠĠ Ġt ers er . set ( build Component ( path Spec , Ġ 6 ), ĠareaCode ) ĊĠĠĠĠĠĠĠ Ġt ers er . set ( build Component ( path Spec , Ġ 7 ), Ġlocal ) ĊĠĠĠĠĠĠĠ Ġif Ġ( extension . isNotEmpty ()) Ġt ers er . set ( build Component ( path Spec , Ġ 8 ), Ġextension ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Postal Component ( ter ser : ĠT ers er , Ġvalue : ĠString , Ġpath Spec : ĠString , Ġelement : ĠElement ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġzip Five Ġ= Ġelement . to Formatted ( value , ĠElement . zip Five Token ) ĊĠĠĠĠĠĠĠ Ġt ers er . set ( path Spec , Ġzip Five ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset AO E ( ĊĠĠĠĠĠĠĠ Ġt ers er : ĠT ers er , ĊĠĠĠĠĠĠĠ Ġelement : ĠElement , ĊĠĠĠĠĠĠĠ Ġa oe Rep : ĠInt , ĊĠĠĠĠĠĠĠ Ġdate : ĠString , ĊĠĠĠĠĠĠĠ Ġvalue : ĠString , ĊĠĠĠĠĠĠĠ Ġunits : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġt ers er . set ( form Path Spec (" OB X - 1 ", Ġa oe Rep ), Ġ( ao e Rep Ġ+ Ġ 1 ). toString ()) ĊĠĠĠĠĠĠĠ Ġt ers er . set ( form Path Spec (" OB X - 2 ", Ġa oe Rep ), Ġ" CWE ") ĊĊĠĠĠĠĠĠĠ Ġval Ġa oe Question Ġ= Ġelement . hl 7 AO EQ uest ion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Schema ĠError : Ġmissing Ġhl 7 AO EQ uest ion Ġfor Ġ'${ element . name }' ") ĊĠĠĠĠĠĠĠ Ġset Code Component ( ter ser , Ġa oe Question , Ġform Path Spec (" OB X - 3 ", Ġa oe Rep ), Ġ" covid - 1 9 / ao e ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( element . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement . Type . CODE Ġ-> Ġset Code Component ( ter ser , Ġvalue , Ġform Path Spec (" OB X - 5 ", Ġa oe Rep ), Ġelement . value Set ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠElement . Type . NUMBER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . name Ġ!= Ġ" patient _ age ") ĠTODO (" support Ġother Ġtypes Ġof ĠA OE Ġnumbers ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( units Ġ== Ġnull ) Ġerror (" Schema ĠError : Ġexpected Ġage Ġunits ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Component ( ter ser , Ġelement , Ġform Path Spec (" OB X - 5 ", Ġa oe Rep ), Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Code Component ( ter ser , Ġunits , Ġform Path Spec (" OB X - 6 ", Ġa oe Rep ), Ġ" patient _ age _ units ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġset Component ( ter ser , Ġelement , Ġform Path Spec (" OB X - 5 ", Ġa oe Rep ), Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġt ers er . set ( form Path Spec (" OB X - 1 1 ", Ġa oe Rep ), Ġ" F ") ĊĠĠĠĠĠĠĠ Ġt ers er . set ( form Path Spec (" OB X - 1 4 ", Ġa oe Rep ), Ġdate ) ĊĠĠĠĠĠĠĠ Ġt ers er . set ( form Path Spec (" OB X - 2 9 ", Ġa oe Rep ), Ġ" Q ST ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Note ( ter ser : ĠT ers er , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value . isBlank ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġt ers er . set ( form Path Spec (" N TE - 3 "), Ġvalue ) ĊĠĠĠĠĠĠĠ Ġt ers er . set ( form Path Spec (" N TE - 4 - 1 "), Ġ" RE ") ĊĠĠĠĠĠĠĠ Ġt ers er . set ( form Path Spec (" N TE - 4 - 2 "), Ġ" Remark ") ĊĠĠĠĠĠĠĠ Ġt ers er . set ( form Path Spec (" N TE - 4 - 3 "), Ġ" HL 7 0 3 6 4 ") ĊĠĠĠĠĠĠĠ Ġt ers er . set ( form Path Spec (" N TE - 4 - 7 "), Ġ" 2 . 5 . 1 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset L iterals ( ter ser : ĠT ers er ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠValue Ġthat ĠN IST Ġrequires Ġ( alth ough Ġ# Ġis Ġnot Ġpart Ġof Ġ 2 . 5 . 1 ) ĊĠĠĠĠĠĠĠ Ġt ers er . set (" M SH - 1 5 ", Ġ" NE ") ĊĠĠĠĠĠĠĠ Ġt ers er . set (" M SH - 1 6 ", Ġ" NE ") ĊĠĠĠĠĠĠĠ Ġt ers er . set (" M SH - 1 2 ", Ġ" 2 . 5 . 1 ") ĊĠĠĠĠĠĠĠ Ġt ers er . set (" M SH - 1 7 ", Ġ" USA ") ĊĊĠĠĠĠĠĠĠ Ġt ers er . set (" S FT - 1 ", Ġsoftware Vendor Organization ) ĊĠĠĠĠĠĠĠ Ġt ers er . set (" S FT - 2 ", Ġbuild Version ) ĊĠĠĠĠĠĠĠ Ġt ers er . set (" S FT - 3 ", Ġsoftware ProductName ) ĊĠĠĠĠĠĠĠ Ġt ers er . set (" S FT - 4 ", Ġbuild Version ) ĊĠĠĠĠĠĠĠ Ġt ers er . set (" S FT - 6 ", Ġbuild Date ) ĊĊĠĠĠĠĠĠĠ Ġt ers er . set ("/ PAT IENT _ RESULT / PAT IENT / PID - 1 ", Ġ" 1 ") ĊĊĠĠĠĠĠĠĠ Ġt ers er . set ("/ PAT IENT _ RESULT / ORDER _ OB SERV ATION / OR C - 1 ", Ġ" RE ") ĊĊĠĠĠĠĠĠĠ Ġt ers er . set ("/ PAT IENT _ RESULT / ORDER _ OB SERV ATION / OB R - 1 ", Ġ" 1 ") ĊĊĠĠĠĠĠĠĠ Ġt ers er . set ("/ PAT IENT _ RESULT / ORDER _ OB SERV ATION / SPEC IM EN / SP M - 1 ", Ġ" 1 ") ĊĊĠĠĠĠĠĠĠ Ġt ers er . set ("/ PAT IENT _ RESULT / ORDER _ OB SERV ATION / OB SERV ATION / OB X - 1 ", Ġ" 1 ") ĊĠĠĠĠĠĠĠ Ġt ers er . set ("/ PAT IENT _ RESULT / ORDER _ OB SERV ATION / OB SERV ATION / OB X - 2 ", Ġ" CWE ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Headers ( report : ĠReport ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsending App Ġ= Ġformat HD ( Element . parse HD ( report . getString ( 0 , Ġ" sending _ application ") Ġ?: Ġ"")) ĊĠĠĠĠĠĠĠ Ġval Ġreceiving App Ġ= Ġformat HD ( Element . parse HD ( report . getString ( 0 , Ġ" re ceiving _ application ") Ġ?: Ġ"")) ĊĠĠĠĠĠĠĠ Ġval Ġreceiving Facility Ġ= Ġformat HD ( Element . parse HD ( report . getString ( 0 , Ġ" re ceiving _ facility ") Ġ?: Ġ"")) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ" F HS | ^ ~ \\ & |" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ sending App |" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ re ceiving App |" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ re ceiving Facility |" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnow Timestamp () Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ r " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" B HS | ^ ~ \\ & |" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ sending App |" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ re ceiving App |" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ re ceiving Facility |" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnow Timestamp () Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ r " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Foot ers ( report : ĠReport ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" B TS | ${ report . item Count }\ r " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FT S | 1 \ r " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnow Timestamp (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= ĠOffset DateTime . now ( Zone Id . system Default ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠElement . datetime Formatter . format ( timestamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Component ( spec : ĠString , Ġcomponent : ĠInt Ġ= Ġ 1 ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Field ( spec )) Ġerror (" Not Ġa Ġcomponent Ġpath Ġspec ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ spec -$ component " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Field ( spec : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĠRegex ("[ A - Z ][ A - Z ][ A - Z ]- [ 0 - 9 ]+ $ ") ĊĠĠĠĠĠĠĠ Ġreturn Ġpattern . contains Match In ( spec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext Component ( spec : ĠString , Ġincrement : ĠInt Ġ= Ġ 1 ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Pattern Ġ= ĠRegex ("[ A - Z ][ A - Z ][ A - Z ]- [ 0 - 9 ]+ - ([ 0 - 9 ]+ )$ ") ĊĠĠĠĠĠĠĠ Ġcomponent Pattern . find ( spec )?. groups ?. get ( 1 )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Component Ġ= Ġit . value . toInt () Ġ+ Ġincrement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġspec . replace Range ( it . range , Ġnext Component . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsub Component Pattern Ġ= ĠRegex ("[ A - Z ][ A - Z ][ A - Z ]- [ 0 - 9 ]+ -[ 0 - 9 ]+ - ([ 0 - 9 ]+ )$ ") ĊĠĠĠĠĠĠĠ Ġsub Component Pattern . find ( spec )?. groups ?. get ( 1 )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Component Ġ= Ġit . value . toInt () Ġ+ Ġincrement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġspec . replace Range ( it . range , Ġnext Component . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġerror (" Did Ġmatch Ġon Ġcomponent Ġor Ġsub component ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġform Path Spec ( spec : ĠString , Ġrep : ĠInt ? Ġ= Ġnull ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsegment Ġ= Ġspec . substring ( 0 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġcomponents Ġ= Ġspec . substring ( 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġrep Spec Ġ= Ġrep ?. let Ġ{ Ġ" ($ rep )" Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( segment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" OB R " Ġ-> Ġ"/ PAT IENT _ RESULT / ORDER _ OB SERV ATION / OB R $ components " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" OR C " Ġ-> Ġ"/ PAT IENT _ RESULT / ORDER _ OB SERV ATION / OR C $ components " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SP M " Ġ-> Ġ"/ PAT IENT _ RESULT / ORDER _ OB SERV ATION / SPEC IM EN / SP M $ components " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" PID " Ġ-> Ġ"/ PAT IENT _ RESULT / PAT IENT / PID $ components " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" OB X " Ġ-> Ġ"/ PAT IENT _ RESULT / ORDER _ OB SERV ATION / OB SERV ATION $ rep Spec / OB X $ components " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" N TE " Ġ-> Ġ"/ PAT IENT _ RESULT / ORDER _ OB SERV ATION / OB SERV ATION / N TE $ components " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġspec ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat HD ( hd Fields : ĠElement . HD Fields , Ġseparator : ĠString Ġ= Ġ"^ "): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( hd Fields . universal Id Ġ!= Ġnull Ġ&& Ġhd Fields . universal Id System Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ hd Fields . name }$ separator ${ hd Fields . universal Id }$ separator ${ hd Fields . universal Id System }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhd Fields . name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat EI ( ei Fields : ĠElement . EI Fields , Ġseparator : ĠString Ġ= Ġ"^ "): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( ei Fields . namespace Ġ!= Ġnull Ġ&& Ġei Fields . universal Id Ġ!= Ġnull Ġ&& Ġei Fields . universal Id System Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ ei Fields . name }$ separator ${ ei Fields . namespace }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ separator ${ ei Fields . universal Id }$ separator ${ ei Fields . universal Id System }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġei Fields . name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }