HDISVAP3 ;BPFO/JRP - Application Programmer API(s);03/07/12  07:56
 ;;1.0;HEALTH DATA & INFORMATICS;**7**;Feb 22, 2005;Build 33
 ;
 ; THIS IS A CONTINUATION OF LABXCPT^HDISVAP1
 ;
ADD(TEXT,TAGNAME,XMLDOC,XMLNODE) ;Add text to XML document
 NEW ESCTEXT
 IF (TAGNAME="") QUIT
 ;Check for NULL data - special denotion in XML
 IF (TEXT="") DO  QUIT
 .SET @XMLDOC@(XMLNODE,0)="<"_TAGNAME_"/>"
 .SET XMLNODE=XMLNODE+1
 .QUIT
 ;Convert reserved XML characters to escape sequences
 SET ESCTEXT=$$CHARCHK^XOBVLIB(TEXT)
 ;Add text
 SET @XMLDOC@(XMLNODE,0)="<"_TAGNAME_">"_ESCTEXT_"</"_TAGNAME_">"
 SET XMLNODE=XMLNODE+1
 QUIT
 ;
ADDBEG(TAGNAME,XMLDOC,XMLNODE) ; Add beginning tag to XML document
 SET @XMLDOC@(XMLNODE,0)="<"_TAGNAME_">"
 SET XMLNODE=XMLNODE+1
 QUIT
 ;
ADDEND(TAGNAME,XMLDOC,XMLNODE) ;Add ending tag to XML document
 SET @XMLDOC@(XMLNODE,0)="</"_TAGNAME_">"
 SET XMLNODE=XMLNODE+1
 QUIT
 ;
SUMADD(TEXT,SUMTXT,SUMNODE) ;Add line of text to summary data
 SET @SUMTXT@(SUMNODE,0)=TEXT
 SET SUMNODE=SUMNODE+1
 QUIT
 ;
SUMADMIN(SUMTXT,XCPTTYPE,DATA,SUMNODE) ;Administrative summary text
 NEW TEXT
 SET TEXT=" "
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT=" Transaction Number: "_$GET(DATA(1))
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT="Exception Type Code: "_$GET(XCPTTYPE)
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT="         Time Stamp: "_$GET(DATA(2))
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT=" "
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 QUIT
 ;
SUMSNOMD(SUMTXT,DATA,SUMNODE) ;SNOMED summary text
 NEW TEXT
 SET TEXT="ID (Fac#-File#-IEN): "_$GET(DATA(1))
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT="          SNOMED CT: "_$GET(DATA(5))
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT="     SNOMED CT Term: "_$GET(DATA(6))
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT="  Mapping Exception: "_$GET(DATA(7))
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT="        Term Status: "_$GET(DATA(11))
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT=" "
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 QUIT
 ;
SUMRFLAB(SUMTXT,DATA,SUMNODE) ;Reference lab summary text
 NEW TEXT
 SET TEXT=" Location Type Code: "_$GET(DATA(1))
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT="    Location Number: "_$GET(DATA(2))
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT="      Location Name: "_$GET(DATA(3))
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 SET TEXT=" "
 DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 QUIT
 ;
SUMID(SUMTXT,SANODE) ;Add ID to list of IDs added to XML document
 NEW TEXT,ARRTYPE,ID
 SET ARRTYPE=$DATA(@SANODE)
 IF ARRTYPE=0 QUIT
 IF ARRTYPE=1 SET ID=$PIECE($GET(@SANODE),"|",1)
 IF ARRTYPE=10 SET ID=$GET(@SANODE@(1))
 SET TEXT=$GET(@SUMTXT@(0))
 SET @SUMTXT@(0)=$SELECT(TEXT="":ID,1:TEXT_", "_ID)
 QUIT
 ;
FILENAME() ;Returns fabricated file name
 NEW TMP,OUT
 SET OUT=$$FACNUM^HDISVF01()
 SET TMP=$$HTE^XLFDT($HOROLOG,"7FS")
 SET OUT=OUT_"-"_$TRANSLATE(TMP," @/:","0-")
 SET OUT=OUT_".XML"
 QUIT OUT
 ;
SENDMSG(MSGTXT,SUBJ) ;Build/send message
 ; Input: MSGTXT - Array containing message text
 ;                 (FULL GLOBAL REFERENCE)
 ;        SUBJ - Message subject (optional)
 ;Output: Message number of generated message (aka XMZ)
 ;        0 is returned if the message could not be generated
 ; Notes: If this is a non-production system the message is sent
 ;        to the current user
 ;
 NEW HDISVTO,HDISVFLG,HDISVXMZ,XTYPE
 ;Default message subject
 SET SUBJ=$GET(SUBJ)
 IF (SUBJ="") DO
 .NEW FACPTR,FACNUM
 .;Get pointer to current location
 .SET:('$$GETFAC^HDISVF07(,.FACPTR)) FACPTR=$$FACPTR^HDISVF01()
 .;Get facility number of current location
 .SET FACNUM=$PIECE($$NS^XUAF4(FACPTR),"^",2)
 .IF (FACNUM="") SET FACNUM=$$FACNUM^HDISVF01()
 .;Build message subject
 .SET SUBJ="LAB EXCEPTION DATA FROM "_FACNUM
 .QUIT
 ;Deliver to mail group on FORUM
 SET HDISVTO("G.HDIS LAB EXCEPTIONS@DOMAIN.EXT")=""
 ;If this is a non-production system send message to current user
 SET:('$$GETTYPE^HDISVF07(,.XTYPE)) XTYPE=$$PROD^XUPROD()
 IF ('XTYPE) DO
 .KILL HDISVTO
 .SET HDISVTO(DUZ)=""
 .QUIT
 ;Unrestricted addressing
 SET HDISVFLG("ADDR FLAGS")="R"
 ;Message is info only
 SET HDISVFLG("FLAGS")="I"
 ;Message sender
 SET HDISVFLG("FROM")="Data Standardization Toolset"
 ;Send message (UUEncoded array is the message text)
 DO SENDMSG^XMXAPI(DUZ,SUBJ,MSGTXT,.HDISVTO,.HDISVFLG,.HDISVXMZ)
 IF $GET(XMERR) DO
 .;Error sending message - log error text
 .DO ERR2XTMP^HDISVU01("HDI-XM","Message sending",$NAME(^TMP("XMERR",$JOB)))
 .KILL XMERR,^TMP("XMERR",$JOB)
 .;Reset generated message number
 .SET HDISVXMZ=0
 .QUIT
 ;Done - return message number
 QUIT HDISVXMZ
 ;
GETTAGS(TAGS) ;Build array of element names
 NEW X,LINE
 KILL @TAGS
 FOR X=1:1 DO  QUIT:('X)
 .SET LINE=$PIECE($TEXT(TAGS+X),";;",2)
 .IF (LINE="") SET X=0 QUIT
 .SET @TAGS@(+$PIECE(LINE,"^",1))=$PIECE(LINE,"^",2)
 .QUIT
 QUIT
 ;
TAGS ;
 ;;1^Lab_Exceptions
 ;;2^Lab_Exception_Data
 ;;3^Administrative_Data
 ;;3.01^Exception_Station_Number
 ;;3.02^Exception_Station_Domain_IP
 ;;3.03^Exception_Station_System_Type
 ;;3.04^Exception_Type_Code
 ;;3.05^Exception_Transaction_Number
 ;;3.06^Exception_Time_Stamp
 ;;3.07^Lab_Package_Exception_Text
 ;;4^Lab_File_SNOMED_Data
 ;;4.01^FacilityNumber_FileNumber_IEN
 ;;4.02^Entry_Name
 ;;4.03^SNOMED_I
 ;;4.04^VUID
 ;;4.05^SNOMED_CT
 ;;4.06^SNOMED_CT_Term
 ;;4.07^Mapping_Exception
 ;;4.08^Related_Specimen
 ;;4.09^Related_Specimen_ID
 ;;4.10^Extract_Version
 ;;4.11^Term_Status
 ;;4.12^STS_Exception
 ;;4.13^STS_Exception_Reason
 ;;5^Mapping_Data_Being_Loaded
 ;;5.01^Mapping_Data_FacilityNumber_FileNumber_IEN
 ;;5.02^Mapping_Data_Entry_Name
 ;;5.03^Mapping_Data_SNOMED_I
 ;;5.04^Mapping_Data_STS_Further_Action
 ;;5.05^Mapping_Data_STS_SCT_ID
 ;;5.06^Mapping_Data_STS_Type_Of_Match
 ;;6^Reference_Lab_Data
 ;;6.01^Reference_Lab_Type_Code
 ;;6.02^Reference_Lab_Station_Number
 ;;6.03^Reference_Lab_Name
 ;;6.04^Reference_Lab_OBX-3
 ;;6.05^Reference_Lab_OBX-5
 ;;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HHDISVAP3   6011     printed  Sep 23, 2025@19:32:45                                                                                                                                                                                                    Page 2
HDISVAP3  ;BPFO/JRP - Application Programmer API(s);03/07/12  07:56
 +1       ;;1.0;HEALTH DATA & INFORMATICS;**7**;Feb 22, 2005;Build 33
 +2       ;
 +3       ; THIS IS A CONTINUATION OF LABXCPT^HDISVAP1
 +4       ;
ADD(TEXT,TAGNAME,XMLDOC,XMLNODE) ;Add text to XML document
 +1        NEW ESCTEXT
 +2        IF (TAGNAME="")
               QUIT 
 +3       ;Check for NULL data - special denotion in XML
 +4        IF (TEXT="")
               Begin DoDot:1
 +5                SET @XMLDOC@(XMLNODE,0)="<"_TAGNAME_"/>"
 +6                SET XMLNODE=XMLNODE+1
 +7                QUIT 
               End DoDot:1
               QUIT 
 +8       ;Convert reserved XML characters to escape sequences
 +9        SET ESCTEXT=$$CHARCHK^XOBVLIB(TEXT)
 +10      ;Add text
 +11       SET @XMLDOC@(XMLNODE,0)="<"_TAGNAME_">"_ESCTEXT_"</"_TAGNAME_">"
 +12       SET XMLNODE=XMLNODE+1
 +13       QUIT 
 +14      ;
ADDBEG(TAGNAME,XMLDOC,XMLNODE) ; Add beginning tag to XML document
 +1        SET @XMLDOC@(XMLNODE,0)="<"_TAGNAME_">"
 +2        SET XMLNODE=XMLNODE+1
 +3        QUIT 
 +4       ;
ADDEND(TAGNAME,XMLDOC,XMLNODE) ;Add ending tag to XML document
 +1        SET @XMLDOC@(XMLNODE,0)="</"_TAGNAME_">"
 +2        SET XMLNODE=XMLNODE+1
 +3        QUIT 
 +4       ;
SUMADD(TEXT,SUMTXT,SUMNODE) ;Add line of text to summary data
 +1        SET @SUMTXT@(SUMNODE,0)=TEXT
 +2        SET SUMNODE=SUMNODE+1
 +3        QUIT 
 +4       ;
SUMADMIN(SUMTXT,XCPTTYPE,DATA,SUMNODE) ;Administrative summary text
 +1        NEW TEXT
 +2        SET TEXT=" "
 +3        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +4        SET TEXT=" Transaction Number: "_$GET(DATA(1))
 +5        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +6        SET TEXT="Exception Type Code: "_$GET(XCPTTYPE)
 +7        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +8        SET TEXT="         Time Stamp: "_$GET(DATA(2))
 +9        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +10       SET TEXT=" "
 +11       DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +12       QUIT 
 +13      ;
SUMSNOMD(SUMTXT,DATA,SUMNODE) ;SNOMED summary text
 +1        NEW TEXT
 +2        SET TEXT="ID (Fac#-File#-IEN): "_$GET(DATA(1))
 +3        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +4        SET TEXT="          SNOMED CT: "_$GET(DATA(5))
 +5        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +6        SET TEXT="     SNOMED CT Term: "_$GET(DATA(6))
 +7        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +8        SET TEXT="  Mapping Exception: "_$GET(DATA(7))
 +9        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +10       SET TEXT="        Term Status: "_$GET(DATA(11))
 +11       DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +12       SET TEXT=" "
 +13       DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +14       QUIT 
 +15      ;
SUMRFLAB(SUMTXT,DATA,SUMNODE) ;Reference lab summary text
 +1        NEW TEXT
 +2        SET TEXT=" Location Type Code: "_$GET(DATA(1))
 +3        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +4        SET TEXT="    Location Number: "_$GET(DATA(2))
 +5        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +6        SET TEXT="      Location Name: "_$GET(DATA(3))
 +7        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +8        SET TEXT=" "
 +9        DO SUMADD(TEXT,SUMTXT,.SUMNODE)
 +10       QUIT 
 +11      ;
SUMID(SUMTXT,SANODE) ;Add ID to list of IDs added to XML document
 +1        NEW TEXT,ARRTYPE,ID
 +2        SET ARRTYPE=$DATA(@SANODE)
 +3        IF ARRTYPE=0
               QUIT 
 +4        IF ARRTYPE=1
               SET ID=$PIECE($GET(@SANODE),"|",1)
 +5        IF ARRTYPE=10
               SET ID=$GET(@SANODE@(1))
 +6        SET TEXT=$GET(@SUMTXT@(0))
 +7        SET @SUMTXT@(0)=$SELECT(TEXT="":ID,1:TEXT_", "_ID)
 +8        QUIT 
 +9       ;
FILENAME() ;Returns fabricated file name
 +1        NEW TMP,OUT
 +2        SET OUT=$$FACNUM^HDISVF01()
 +3        SET TMP=$$HTE^XLFDT($HOROLOG,"7FS")
 +4        SET OUT=OUT_"-"_$TRANSLATE(TMP," @/:","0-")
 +5        SET OUT=OUT_".XML"
 +6        QUIT OUT
 +7       ;
SENDMSG(MSGTXT,SUBJ) ;Build/send message
 +1       ; Input: MSGTXT - Array containing message text
 +2       ;                 (FULL GLOBAL REFERENCE)
 +3       ;        SUBJ - Message subject (optional)
 +4       ;Output: Message number of generated message (aka XMZ)
 +5       ;        0 is returned if the message could not be generated
 +6       ; Notes: If this is a non-production system the message is sent
 +7       ;        to the current user
 +8       ;
 +9        NEW HDISVTO,HDISVFLG,HDISVXMZ,XTYPE
 +10      ;Default message subject
 +11       SET SUBJ=$GET(SUBJ)
 +12       IF (SUBJ="")
               Begin DoDot:1
 +13               NEW FACPTR,FACNUM
 +14      ;Get pointer to current location
 +15               if ('$$GETFAC^HDISVF07(,.FACPTR))
                       SET FACPTR=$$FACPTR^HDISVF01()
 +16      ;Get facility number of current location
 +17               SET FACNUM=$PIECE($$NS^XUAF4(FACPTR),"^",2)
 +18               IF (FACNUM="")
                       SET FACNUM=$$FACNUM^HDISVF01()
 +19      ;Build message subject
 +20               SET SUBJ="LAB EXCEPTION DATA FROM "_FACNUM
 +21               QUIT 
               End DoDot:1
 +22      ;Deliver to mail group on FORUM
 +23       SET HDISVTO("G.HDIS LAB EXCEPTIONS@DOMAIN.EXT")=""
 +24      ;If this is a non-production system send message to current user
 +25       if ('$$GETTYPE^HDISVF07(,.XTYPE))
               SET XTYPE=$$PROD^XUPROD()
 +26       IF ('XTYPE)
               Begin DoDot:1
 +27               KILL HDISVTO
 +28               SET HDISVTO(DUZ)=""
 +29               QUIT 
               End DoDot:1
 +30      ;Unrestricted addressing
 +31       SET HDISVFLG("ADDR FLAGS")="R"
 +32      ;Message is info only
 +33       SET HDISVFLG("FLAGS")="I"
 +34      ;Message sender
 +35       SET HDISVFLG("FROM")="Data Standardization Toolset"
 +36      ;Send message (UUEncoded array is the message text)
 +37       DO SENDMSG^XMXAPI(DUZ,SUBJ,MSGTXT,.HDISVTO,.HDISVFLG,.HDISVXMZ)
 +38       IF $GET(XMERR)
               Begin DoDot:1
 +39      ;Error sending message - log error text
 +40               DO ERR2XTMP^HDISVU01("HDI-XM","Message sending",$NAME(^TMP("XMERR",$JOB)))
 +41               KILL XMERR,^TMP("XMERR",$JOB)
 +42      ;Reset generated message number
 +43               SET HDISVXMZ=0
 +44               QUIT 
               End DoDot:1
 +45      ;Done - return message number
 +46       QUIT HDISVXMZ
 +47      ;
GETTAGS(TAGS) ;Build array of element names
 +1        NEW X,LINE
 +2        KILL @TAGS
 +3        FOR X=1:1
               Begin DoDot:1
 +4                SET LINE=$PIECE($TEXT(TAGS+X),";;",2)
 +5                IF (LINE="")
                       SET X=0
                       QUIT 
 +6                SET @TAGS@(+$PIECE(LINE,"^",1))=$PIECE(LINE,"^",2)
 +7                QUIT 
               End DoDot:1
               if ('X)
                   QUIT 
 +8        QUIT 
 +9       ;
TAGS      ;
 +1       ;;1^Lab_Exceptions
 +2       ;;2^Lab_Exception_Data
 +3       ;;3^Administrative_Data
 +4       ;;3.01^Exception_Station_Number
 +5       ;;3.02^Exception_Station_Domain_IP
 +6       ;;3.03^Exception_Station_System_Type
 +7       ;;3.04^Exception_Type_Code
 +8       ;;3.05^Exception_Transaction_Number
 +9       ;;3.06^Exception_Time_Stamp
 +10      ;;3.07^Lab_Package_Exception_Text
 +11      ;;4^Lab_File_SNOMED_Data
 +12      ;;4.01^FacilityNumber_FileNumber_IEN
 +13      ;;4.02^Entry_Name
 +14      ;;4.03^SNOMED_I
 +15      ;;4.04^VUID
 +16      ;;4.05^SNOMED_CT
 +17      ;;4.06^SNOMED_CT_Term
 +18      ;;4.07^Mapping_Exception
 +19      ;;4.08^Related_Specimen
 +20      ;;4.09^Related_Specimen_ID
 +21      ;;4.10^Extract_Version
 +22      ;;4.11^Term_Status
 +23      ;;4.12^STS_Exception
 +24      ;;4.13^STS_Exception_Reason
 +25      ;;5^Mapping_Data_Being_Loaded
 +26      ;;5.01^Mapping_Data_FacilityNumber_FileNumber_IEN
 +27      ;;5.02^Mapping_Data_Entry_Name
 +28      ;;5.03^Mapping_Data_SNOMED_I
 +29      ;;5.04^Mapping_Data_STS_Further_Action
 +30      ;;5.05^Mapping_Data_STS_SCT_ID
 +31      ;;5.06^Mapping_Data_STS_Type_Of_Match
 +32      ;;6^Reference_Lab_Data
 +33      ;;6.01^Reference_Lab_Type_Code
 +34      ;;6.02^Reference_Lab_Station_Number
 +35      ;;6.03^Reference_Lab_Name
 +36      ;;6.04^Reference_Lab_OBX-3
 +37      ;;6.05^Reference_Lab_OBX-5
 +38      ;;