MAGUTL01 ;WOIFO/SG - PARAMETERS AND VALIDATION UTILITIES ; 3/9/09 12:53pm
;;3.0;IMAGING;**93**;Dec 02, 2009;Build 163
;; Per VHA Directive 2004-038, this routine should not be modified.
;; +---------------------------------------------------------------+
;; | Property of the US Government. |
;; | No permission to copy or redistribute this software is given. |
;; | Use of unreleased versions of this software requires the user |
;; | to execute a written test agreement with the VistA Imaging |
;; | Development Office of the Department of Veterans Affairs, |
;; | telephone (301) 734-0100. |
;; | |
;; | The Food and Drug Administration classifies this software as |
;; | a medical device. As such, it may not be changed in any way. |
;; | Modifications to this software may result in an adulterated |
;; | medical device under 21CFR820, the use of which is considered |
;; | to be a violation of US Federal Statutes. |
;; +---------------------------------------------------------------+
;;
Q
;
;##### DELETES THE PARAMETER FROM THE DEFINITION TREE
;
; .MAGMSPSDEFS Reference to a local variable that stores the
; parameter definition tree generated by the
; $$LDMPDEFS^MAGUTL01.
;
; PNAME Full name of the parameter: list of names separated
; by the '/' that form the path to the parameter
; descriptor in the definition tree.
;
DELMPAR(MAGMSPSDEFS,PNAME) ;
N I,NAME,PNODE
S NAME=$P(PNAME,"/") Q:NAME=""
S PNODE="MAGMSPSDEFS"
F I=2:1 S TMP=$P(PNAME,"/",I) Q:TMP="" D
. S PNODE=$NA(@PNODE@("N",NAME)),NAME=TMP
. Q
K @PNODE@("N",NAME),@PNODE@("Q",NAME)
Q
;
;+++++ RETURNS THE LINE OF THE PARAMETER DEFINITIONS TABLE
;
; OFFSET Offset of the line from the tag
;
; Input Variables
; ===============
; MAGRTN, MAGTAG
;
; Notes
; =====
;
; This is an internal entry point. Do not call it from outside
; of this routine.
;
GETPDEF(OFFSET) ;
Q $P($T(@(MAGTAG_"+"_OFFSET_"^"_MAGRTN)),";;",2)
;
;##### LOADS DEFINITIONS OF MISCELLANEOUS PARAMETERS
;
; .MAGMSPSDEFS( Reference to a local variable where descriptors
; of the miscellaneous parameters are loaded to.
; "N",
; Name, Parameter descriptor
; ^01: (Sub)file number
; ^02: Field number
; ^03: Parameter type
; ^04: Custom flags
; "N",
; Name) Parameter descriptor (record field)
; ...
; "Q", List of required parameters (record fields)
; Name) ""
; "Q", List of required parameters
; Name) ""
;
; See the MSPTBL^MAGUTL01 for details.
;
; TAGRTN Tag^Routine pair that references the table of
; parameter definitions. See the MSPTBL^MAGUTL01
; for a sample/template.
;
; [MAGLDFLAGS] Custom flags (characters) defined by the programmer.
; If this parameter is defined and not empty, then
; only those definitions that have at least one flag
; included in the value of this parameter are loaded.
;
; Return Values
; =============
; <0 Error descriptor (see $$ERROR^MAGUERR)
; 0 Success
;
LDMPDEFS(MAGMSPSDEFS,TAGRTN,MAGLDFLAGS) ;
N MAGRTN,MAGSRCI,MAGTAG,RC
S MAGTAG=$P(TAGRTN,"^"),MAGRTN=$P(TAGRTN,"^",2)
S MAGLDFLAGS=$G(MAGLDFLAGS),MAGSRCI=3
K MAGMSPSDEFS S RC=$$LDMPDEFZ("MAGMSPSDEFS")
Q $S(RC<0:RC,1:0)
;
;+++++ RECURSIVE PARSER OF PARAMETER DEFINITIONS
;
; DSTNODE Node of the MAGMSPSDEFS where parameter definitions
; are stored to.
;
; [RECNAME] Name of the current record. It is used to detect
; the record boundaries.
;
; Input Variables
; ===============
; MAGRTN, MAGSRCI, MAGTAG
;
; Output Variables
; ================
; MAGSRCI
;
; Return Values
; =============
; <0 Error descriptor (see $$ERROR^MAGUERR)
; 0 Success
; 1 End of the table
;
; Notes
; =====
;
; This is an internal entry point. Do not call it from outside
; of this routine.
;
LDMPDEFZ(DSTNODE,RECNAME) ;
N BUF,NAME,PNODE,RC,TMP,TYPE
S RC=0
F S MAGSRCI=MAGSRCI+1,BUF=$$GETPDEF(MAGSRCI) Q:BUF="" D Q:RC
. S BUF=$TR(BUF,"| ",U),NAME=$P(BUF,U,2) Q:NAME=""
. ;=== Check custom flags
. I MAGLDFLAGS'="" Q:$TR(MAGLDFLAGS,$P(BUF,U,6))=MAGLDFLAGS
. ;=== If the name is the same as that of the current
. ;=== record, then this is the end of the record.
. I NAME=$G(RECNAME) S RC=2 Q
. S PNODE=$NA(@DSTNODE@("N",NAME))
. ;=== Determine the parameter type
. S TYPE=$P(BUF,U,5)
. I TYPE["X" D Q:RC<0 S $P(BUF,U,5)=TYPE
. . N DDTYPE,FIELD,FILE,MAGMSG
. . ;--- Get the field type from the DD
. . S FILE=$P(BUF,U,3),FIELD=$P(BUF,U,4)
. . I (FILE'>0)!(FIELD'>0) S RC=$$ERROR^MAGUERR(-23,,"X") Q
. . S DDTYPE=$$GET1^DID(FILE,FIELD,,"TYPE",,"MAGMSG")
. . I $G(DIERR) S RC=$$DBS^MAGUERR("MAGMSG") Q
. . ;--- Update the parameter type
. . S TYPE=$TR(TYPE,"DPSWX")
. . I DDTYPE="DATE/TIME" S TYPE=TYPE_"D" Q
. . I DDTYPE="POINTER" S TYPE=TYPE_"P" Q
. . I DDTYPE="SET" S TYPE=TYPE_"S" Q
. . I DDTYPE="WORD-PROCESSING" S TYPE=TYPE_"W" Q
. . Q
. ;=== Store the parameter descriptor
. S @PNODE=$P(BUF,U,3,6)
. S:TYPE["Q" @DSTNODE@("Q",NAME)=""
. ;=== Process definitions of a record
. I TYPE["R" S RC=$$LDMPDEFZ(PNODE,NAME) Q
. Q
;===
Q $S(RC>1:0,'RC:1,1:RC)
;
MSPTBL ;+++++ SAMPLE/TEMPLATE OF THE PARAMETER DEFINITONS TABLE
;;==================================================================
;;| Parameter | File |Field|Type |Flags| Comment |
;;|------------+-------+-----+-----+-----+-------------------------|
;;|DTIS |2005 | 7 | DHQ | | DATE/TIME IMAGE SAVED |
;;|DESCR | | | W | | |
;;|OBJGROUP | | | RM | | |
;;| GROUP |2005.04| .01 | PQ | | |
;;| IMGNUM |2005.04| 2 | | | |
;;|OBJGROUP | | | | | |
;;|ORIGIN |2005 | 45 | M | | |
;;==================================================================
;
; Parameter Parameter name. It must be unique on the top level
; or inside each record definition (e.g. OBJGROUP) and
; must not contain spaces.
;
; File If the file and field numbers are defined, then
; Field values of the parameter are validated according to
; the field data dictionary (using the CHK^DIE).
;
; NOTE: This simple validation will not work for those
; fields that have input transform that depend
; on other fields and/or records.
;
; Type Parameter type:
; D - Date/time, P - Pointer,
; R - Record, S - Set of codes
; W - Word processing
; X - Set the type according to the field type from
; the DD (the File and Field must be provided).
; The 'X' itself is removed from the descriptor.
; and modifiers:
; H - Date/time in HL7 format (TS)
; M - Multi-value parameter
; Q - Required parameter
;
; Flags Custom flags defined by the programmer. Use them to
; control what definitions are loaded by the
; $$LDMPDEFS^MAGUTL01 function (see the MAGLDFLAGS
; parameter of the function for more details).
;
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HMAGUTL01 8089 printed Oct 16, 2024@18:09:45 Page 2
MAGUTL01 ;WOIFO/SG - PARAMETERS AND VALIDATION UTILITIES ; 3/9/09 12:53pm
+1 ;;3.0;IMAGING;**93**;Dec 02, 2009;Build 163
+2 ;; Per VHA Directive 2004-038, this routine should not be modified.
+3 ;; +---------------------------------------------------------------+
+4 ;; | Property of the US Government. |
+5 ;; | No permission to copy or redistribute this software is given. |
+6 ;; | Use of unreleased versions of this software requires the user |
+7 ;; | to execute a written test agreement with the VistA Imaging |
+8 ;; | Development Office of the Department of Veterans Affairs, |
+9 ;; | telephone (301) 734-0100. |
+10 ;; | |
+11 ;; | The Food and Drug Administration classifies this software as |
+12 ;; | a medical device. As such, it may not be changed in any way. |
+13 ;; | Modifications to this software may result in an adulterated |
+14 ;; | medical device under 21CFR820, the use of which is considered |
+15 ;; | to be a violation of US Federal Statutes. |
+16 ;; +---------------------------------------------------------------+
+17 ;;
+18 QUIT
+19 ;
+20 ;##### DELETES THE PARAMETER FROM THE DEFINITION TREE
+21 ;
+22 ; .MAGMSPSDEFS Reference to a local variable that stores the
+23 ; parameter definition tree generated by the
+24 ; $$LDMPDEFS^MAGUTL01.
+25 ;
+26 ; PNAME Full name of the parameter: list of names separated
+27 ; by the '/' that form the path to the parameter
+28 ; descriptor in the definition tree.
+29 ;
DELMPAR(MAGMSPSDEFS,PNAME) ;
+1 NEW I,NAME,PNODE
+2 SET NAME=$PIECE(PNAME,"/")
if NAME=""
QUIT
+3 SET PNODE="MAGMSPSDEFS"
+4 FOR I=2:1
SET TMP=$PIECE(PNAME,"/",I)
if TMP=""
QUIT
Begin DoDot:1
+5 SET PNODE=$NAME(@PNODE@("N",NAME))
SET NAME=TMP
+6 QUIT
End DoDot:1
+7 KILL @PNODE@("N",NAME),@PNODE@("Q",NAME)
+8 QUIT
+9 ;
+10 ;+++++ RETURNS THE LINE OF THE PARAMETER DEFINITIONS TABLE
+11 ;
+12 ; OFFSET Offset of the line from the tag
+13 ;
+14 ; Input Variables
+15 ; ===============
+16 ; MAGRTN, MAGTAG
+17 ;
+18 ; Notes
+19 ; =====
+20 ;
+21 ; This is an internal entry point. Do not call it from outside
+22 ; of this routine.
+23 ;
GETPDEF(OFFSET) ;
+1 QUIT $PIECE($TEXT(@(MAGTAG_"+"_OFFSET_"^"_MAGRTN)),";;",2)
+2 ;
+3 ;##### LOADS DEFINITIONS OF MISCELLANEOUS PARAMETERS
+4 ;
+5 ; .MAGMSPSDEFS( Reference to a local variable where descriptors
+6 ; of the miscellaneous parameters are loaded to.
+7 ; "N",
+8 ; Name, Parameter descriptor
+9 ; ^01: (Sub)file number
+10 ; ^02: Field number
+11 ; ^03: Parameter type
+12 ; ^04: Custom flags
+13 ; "N",
+14 ; Name) Parameter descriptor (record field)
+15 ; ...
+16 ; "Q", List of required parameters (record fields)
+17 ; Name) ""
+18 ; "Q", List of required parameters
+19 ; Name) ""
+20 ;
+21 ; See the MSPTBL^MAGUTL01 for details.
+22 ;
+23 ; TAGRTN Tag^Routine pair that references the table of
+24 ; parameter definitions. See the MSPTBL^MAGUTL01
+25 ; for a sample/template.
+26 ;
+27 ; [MAGLDFLAGS] Custom flags (characters) defined by the programmer.
+28 ; If this parameter is defined and not empty, then
+29 ; only those definitions that have at least one flag
+30 ; included in the value of this parameter are loaded.
+31 ;
+32 ; Return Values
+33 ; =============
+34 ; <0 Error descriptor (see $$ERROR^MAGUERR)
+35 ; 0 Success
+36 ;
LDMPDEFS(MAGMSPSDEFS,TAGRTN,MAGLDFLAGS) ;
+1 NEW MAGRTN,MAGSRCI,MAGTAG,RC
+2 SET MAGTAG=$PIECE(TAGRTN,"^")
SET MAGRTN=$PIECE(TAGRTN,"^",2)
+3 SET MAGLDFLAGS=$GET(MAGLDFLAGS)
SET MAGSRCI=3
+4 KILL MAGMSPSDEFS
SET RC=$$LDMPDEFZ("MAGMSPSDEFS")
+5 QUIT $SELECT(RC<0:RC,1:0)
+6 ;
+7 ;+++++ RECURSIVE PARSER OF PARAMETER DEFINITIONS
+8 ;
+9 ; DSTNODE Node of the MAGMSPSDEFS where parameter definitions
+10 ; are stored to.
+11 ;
+12 ; [RECNAME] Name of the current record. It is used to detect
+13 ; the record boundaries.
+14 ;
+15 ; Input Variables
+16 ; ===============
+17 ; MAGRTN, MAGSRCI, MAGTAG
+18 ;
+19 ; Output Variables
+20 ; ================
+21 ; MAGSRCI
+22 ;
+23 ; Return Values
+24 ; =============
+25 ; <0 Error descriptor (see $$ERROR^MAGUERR)
+26 ; 0 Success
+27 ; 1 End of the table
+28 ;
+29 ; Notes
+30 ; =====
+31 ;
+32 ; This is an internal entry point. Do not call it from outside
+33 ; of this routine.
+34 ;
LDMPDEFZ(DSTNODE,RECNAME) ;
+1 NEW BUF,NAME,PNODE,RC,TMP,TYPE
+2 SET RC=0
+3 FOR
SET MAGSRCI=MAGSRCI+1
SET BUF=$$GETPDEF(MAGSRCI)
if BUF=""
QUIT
Begin DoDot:1
+4 SET BUF=$TRANSLATE(BUF,"| ",U)
SET NAME=$PIECE(BUF,U,2)
if NAME=""
QUIT
+5 ;=== Check custom flags
+6 IF MAGLDFLAGS'=""
if $TRANSLATE(MAGLDFLAGS,$PIECE(BUF,U,6))=MAGLDFLAGS
QUIT
+7 ;=== If the name is the same as that of the current
+8 ;=== record, then this is the end of the record.
+9 IF NAME=$GET(RECNAME)
SET RC=2
QUIT
+10 SET PNODE=$NAME(@DSTNODE@("N",NAME))
+11 ;=== Determine the parameter type
+12 SET TYPE=$PIECE(BUF,U,5)
+13 IF TYPE["X"
Begin DoDot:2
+14 NEW DDTYPE,FIELD,FILE,MAGMSG
+15 ;--- Get the field type from the DD
+16 SET FILE=$PIECE(BUF,U,3)
SET FIELD=$PIECE(BUF,U,4)
+17 IF (FILE'>0)!(FIELD'>0)
SET RC=$$ERROR^MAGUERR(-23,,"X")
QUIT
+18 SET DDTYPE=$$GET1^DID(FILE,FIELD,,"TYPE",,"MAGMSG")
+19 IF $GET(DIERR)
SET RC=$$DBS^MAGUERR("MAGMSG")
QUIT
+20 ;--- Update the parameter type
+21 SET TYPE=$TRANSLATE(TYPE,"DPSWX")
+22 IF DDTYPE="DATE/TIME"
SET TYPE=TYPE_"D"
QUIT
+23 IF DDTYPE="POINTER"
SET TYPE=TYPE_"P"
QUIT
+24 IF DDTYPE="SET"
SET TYPE=TYPE_"S"
QUIT
+25 IF DDTYPE="WORD-PROCESSING"
SET TYPE=TYPE_"W"
QUIT
+26 QUIT
End DoDot:2
if RC<0
QUIT
SET $PIECE(BUF,U,5)=TYPE
+27 ;=== Store the parameter descriptor
+28 SET @PNODE=$PIECE(BUF,U,3,6)
+29 if TYPE["Q"
SET @DSTNODE@("Q",NAME)=""
+30 ;=== Process definitions of a record
+31 IF TYPE["R"
SET RC=$$LDMPDEFZ(PNODE,NAME)
QUIT
+32 QUIT
End DoDot:1
if RC
QUIT
+33 ;===
+34 QUIT $SELECT(RC>1:0,'RC:1,1:RC)
+35 ;
MSPTBL ;+++++ SAMPLE/TEMPLATE OF THE PARAMETER DEFINITONS TABLE
+1 ;;==================================================================
+2 ;;| Parameter | File |Field|Type |Flags| Comment |
+3 ;;|------------+-------+-----+-----+-----+-------------------------|
+4 ;;|DTIS |2005 | 7 | DHQ | | DATE/TIME IMAGE SAVED |
+5 ;;|DESCR | | | W | | |
+6 ;;|OBJGROUP | | | RM | | |
+7 ;;| GROUP |2005.04| .01 | PQ | | |
+8 ;;| IMGNUM |2005.04| 2 | | | |
+9 ;;|OBJGROUP | | | | | |
+10 ;;|ORIGIN |2005 | 45 | M | | |
+11 ;;==================================================================
+12 ;
+13 ; Parameter Parameter name. It must be unique on the top level
+14 ; or inside each record definition (e.g. OBJGROUP) and
+15 ; must not contain spaces.
+16 ;
+17 ; File If the file and field numbers are defined, then
+18 ; Field values of the parameter are validated according to
+19 ; the field data dictionary (using the CHK^DIE).
+20 ;
+21 ; NOTE: This simple validation will not work for those
+22 ; fields that have input transform that depend
+23 ; on other fields and/or records.
+24 ;
+25 ; Type Parameter type:
+26 ; D - Date/time, P - Pointer,
+27 ; R - Record, S - Set of codes
+28 ; W - Word processing
+29 ; X - Set the type according to the field type from
+30 ; the DD (the File and Field must be provided).
+31 ; The 'X' itself is removed from the descriptor.
+32 ; and modifiers:
+33 ; H - Date/time in HL7 format (TS)
+34 ; M - Multi-value parameter
+35 ; Q - Required parameter
+36 ;
+37 ; Flags Custom flags defined by the programmer. Use them to
+38 ; control what definitions are loaded by the
+39 ; $$LDMPDEFS^MAGUTL01 function (see the MAGLDFLAGS
+40 ; parameter of the function for more details).
+41 ;
+42 QUIT