Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ISIJLS2C

ISIJLS2C.m

Go to the documentation of this file.
  1. ISIJLS2C ; ISI/JHC - ISIRAD exam list functions ; 10/17/2022
  1. ;;1.1;ESL ISI IMAGING;**99,105,107,110**;Dec 21, 2022;Build 41
  1. ;; This routine is the property of ViTel Net, and should not be modified.
  1. ;; This software is a medical device and is subject to FDA regulation.
  1. ;; Modifications to this software may only be made under the terms of
  1. ;; 21CFR820 regulation. 21CFR Subpart A 820.1: "The failure to comply
  1. ;; with any applicable provision in this part renders a device
  1. ;; adulterated under section 501(h) of the act. Such a device,
  1. ;; as well as any person responsible for the failure to comply,
  1. ;; is subject to regulatory action."
  1. ;
  1. Q
  1. ;
  1. ERR N ERR S ERR=$$EC^%ZOSV S ^TMP($J,"RET",0)="0^4~"_ERR
  1. S MAGGRY=$NA(^TMP($J,"RET"))
  1. D @^%ZOSF("ERRTN")
  1. Q:$Q 1 Q
  1. ;
  1. QRSPECS(SCAN,ERRMSG,DATA) ; * * * CALLed from isijls2 * * *
  1. ; this is used for the list Compile, and for the Query validate rpc
  1. ; SCAN -- True if this call is for the Query Compile; false for Validate Query specs
  1. ; ERRMSG -- return reason for error if detected
  1. ; DATA -- input for Validate only, contains specs values defined by user in Client
  1. ; for the Compile only (SCAN=1), initializes all "special" vars=0,
  1. ; then traverses input array & sets values per input in DATA
  1. ; remaining input vals are configured for List Sys search logic in QRMD...
  1. N ERROR,IMD,IMD2,ISPEC,OPERATOR,QRMD,QRMDCHK,VALUE,SESSION
  1. S SESSION=MAGJOB("SESSION")
  1. ; new these vars only if NOT running the scan (validate only)
  1. ; else the variables are set here for use in the compile code
  1. I 'SCAN N QAGE,QDATFR,QDATTO,QIMGTYP,QPTNAME,QRIST,QSEX,QSTATUS,QNIMG,QASSN
  1. I 'SCAN N AGE1,AGE2,PTNAME,RISTCHK,SEX,STATTEST,NIMG1,NIMG2,NIMGSPEC,ASSNCHK
  1. I 'SCAN N QIMGLOC
  1. ;
  1. S (QAGE,QDATFR,QDATTO,QIMGTYP,QPTNAME,QRIST,QSEX,QSTATUS,QNIMG,QASSN)=0
  1. S QIMGLOC=0
  1. S ISPEC="",ERRMSG=""
  1. I SCAN F S ISPEC=$O(^XTMP("MAGJ2","ISIQUERY",DUZ,SESSION,"SPECS",ISPEC)) Q:ISPEC="" S X=^(ISPEC) D QRSPECS2(X)
  1. I 'SCAN D
  1. . F S ISPEC=$O(DATA(ISPEC)) Q:ISPEC="" S X=DATA(ISPEC) D QRSPECS2(X)
  1. ; Some query fields require further validation &/or data prep
  1. I +QDATFR,+QDATTO,(QDATFR<QDATTO)
  1. E S ERRMSG="Invalid FROM/TO date range"_$S(ERRMSG="":". ",1:"; ")_ERRMSG
  1. I QAGE D ; age from/to values
  1. . S:AGE1="" AGE1=0 S:AGE2="" AGE2=130
  1. . I ('AGE1&'AGE2)!(AGE1=0&(AGE2=130)) S QAGE=0 Q ; age not matter;
  1. . I '(AGE1!AGE2) S ERRMSG=ERRMSG_$S(ERRMSG="":"",1:"; ")_"Invalid AGE specification",QAGE=0
  1. . S:(AGE2'[".") AGE2=AGE2+0.99
  1. I QNIMG D ; # Images range values
  1. . I (NIMG1=""!(NIMG1?1.N))&(NIMG2=""!(NIMG2?1.N))
  1. . E S ERRMSG=ERRMSG_$S(ERRMSG="":"",1:"; ")_"Invalid # Images specification",QNIMG=0 Q
  1. . I NIMG1,NIMG2 D Q:'QNIMG
  1. . . I NIMG1>NIMG2 S ERRMSG=ERRMSG_$S(ERRMSG="":"",1:"; ")_"# Images values in wrong sequence.",QNIMG=0
  1. . N T1,T2,EXP S (T1,T2)=""
  1. . S:NIMG1]"" T1="(MD(9)'<"_NIMG1_")" S:NIMG2]"" T2="(MD(9)'>"_NIMG2_")" ; 9 = field IEN for # Images
  1. . I T1="",(T2="") S QNIMG=0 Q ; # images not matter;
  1. . I T1]"" S EXP=T1_$S(T2]"":"&"_T2_"",1:"")
  1. . E S EXP=T2
  1. . D QRMDSET(NIMGSPEC,9,EXP,"STUFF")
  1. ; data prep finished--if inside the Validation step, & query spec is clean, continue
  1. I 'SCAN,(ERRMSG="") D
  1. . ; init scan for session
  1. . F I="RSL","SPECS","SPECFLDS","SPECQRMD" K ^XTMP("MAGJ2","ISIQUERY",DUZ,SESSION,I)
  1. . ; save query details for use in the compile step
  1. . M ^XTMP("MAGJ2","ISIQUERY",DUZ,SESSION,"SPECS")=DATA
  1. . I $D(QRMD) M ^XTMP("MAGJ2","ISIQUERY",DUZ,SESSION,"SPECQRMD")=QRMD
  1. . S I="" F S I=$O(DATA(I)) Q:I="" S X=+DATA(I)\1,^XTMP("MAGJ2","ISIQUERY",DUZ,SESSION,"SPECFLDS",X)=""
  1. Q
  1. ;
  1. QRSPECS2(X) ; X = Field_IEN ^ Value ^ Operator
  1. ; process input either indirect Tag call, or "generic" qrmdset call
  1. S IMD=$P(X,U),VALUE=$P(X,U,2),OPERATOR=$P(X,U,3),IMD2="",ERROR=""
  1. I IMD["." S IMD2=$P(IMD,".",2),IMD=$P(IMD,".")
  1. I $T(@("QRS"_IMD))]"" D @("QRS"_IMD) I 1
  1. E D ; <*> update valid imd list here when adding new fields
  1. . I $F("^3^5^6^7^8^9^15^17^24^201^207^208^",U_IMD_U) D QRMDSET(ISPEC,IMD,VALUE,OPERATOR) Q
  1. . E S ERROR="Invalid Query ID ["_IMD_"]--call support"
  1. I ERROR]"" S ERRMSG=ERRMSG_$S(ERRMSG="":"",1:"; ")_ERROR
  1. Q
  1. QRMDSET(ISPEC,IMD,VALUE,OPERATOR) ; Create "If" logic statements for input fields
  1. ; Operator "STUFF"--pass in just the argument
  1. ; otherwise, pass in components to build the full statement
  1. N ISPECPRV
  1. I VALUE="" Q
  1. S VALUE=$$STRIP^ISIJLS2(VALUE)
  1. I OPERATOR="STUFF"
  1. E S OPERATOR=$S(OPERATOR="E":"=",OPERATOR="G":">",OPERATOR="L":"<",OPERATOR="C":"[",1:"=")
  1. I $D(QRMDCHK(IMD)) S ISPECPRV=QRMDCHK(IMD) D ; Multiple values for this field, set up "OR" logic
  1. . I OPERATOR="STUFF" S QRMD(ISPECPRV)=QRMD(ISPECPRV)_"!"_VALUE
  1. . E S QRMD(ISPECPRV)=QRMD(ISPECPRV)_"!(MD("_IMD_")"_OPERATOR_""""_VALUE_""")"
  1. E D
  1. . I OPERATOR="STUFF" S QRMD(ISPEC)=IMD_U_" I "_VALUE,QRMDCHK(IMD)=ISPEC
  1. . E S QRMD(ISPEC)=IMD_U_" I (MD("_IMD_")"_OPERATOR_""""_VALUE_""")",QRMDCHK(IMD)=ISPEC
  1. Q
  1. ;
  1. QRSNN ; process input selection fields for data validation or scan
  1. ; --> variables NOT newed inside the codelets are global to qrspecs ep;
  1. ; --> codelets for 3, 7, 8, 17, 24, 201, 207 & 208 set the "special"
  1. ; variables used in the query scanning subroutines (qrscan...)
  1. QRS3 ; Pt Name
  1. I $L(VALUE) D
  1. . S VALUE=$$NAMEFMT^ISIJLS2(VALUE)
  1. . I VALUE?.E1C.E S ERROR="Invalid Name specification--control characters not allowed." Q
  1. I ERROR="",$L(VALUE) S PTNAME(0)=$G(PTNAME(0))+1,PTNAME(PTNAME(0))=VALUE,QPTNAME=1
  1. Q
  1. QRS5 ; Priority
  1. I '$L(VALUE) S ERROR="Invalid Priority specification"
  1. E I VALUE'="" D QRMDSET(ISPEC,IMD,VALUE,"C")
  1. Q
  1. QRS7 ; From/To Dates
  1. N VAR,VALUINT S VAR=$S(IMD2=1:"QDATFR",IMD2=2:"QDATTO",1:"")
  1. S VALUINT=VALUE
  1. I VALUINT]"" S X=VALUINT D ^%DT S VALUINT=$S(Y=-1:"",1:Y)
  1. I VALUINT?7N D
  1. . I IMD2=1 S VALUINT=VALUINT-1 ; From-date
  1. . S VALUINT=VALUINT_".2401"
  1. S @VAR=VALUINT
  1. Q
  1. QRS8 ; exam status * --> structure allows multiple values
  1. S QSTATUS=VALUE
  1. I $L(QSTATUS) S STATTEST(QSTATUS)="",QSTATUS=1
  1. E S QSTATUS=0
  1. Q
  1. QRS9 ; # Images (range)
  1. S NIMG1=$G(NIMG1),NIMG2=$G(NIMG2),NIMGSPEC=$G(NIMGSPEC) ; inits to nil if not yet processed the #Imgs
  1. N VAR S VAR=$S(IMD2=1:"NIMG1",IMD2=2:"NIMG2",1:"")
  1. I VAR]"",(VALUE?1.5N) S @VAR=VALUE,QNIMG=1 S:NIMGSPEC="" NIMGSPEC=ISPEC ; ispec needed beyond primary loop
  1. E S ERROR="Invalid # Images specification ",QNIMG=0
  1. Q
  1. QRS11 ; imaging loc * --> structure allows multiple values
  1. S QIMGLOC=VALUE
  1. I +QIMGLOC,(QIMGLOC'="") S QIMGLOC(VALUE)="",QIMGLOC=1
  1. E S QIMGLOC=0
  1. Q
  1. QRS15 ; Modality
  1. N I,VALUESTR
  1. I '$L(VALUE) Q
  1. E S VALUESTR=VALUE D
  1. . F I=1:1:$L(VALUESTR,",") S VALUE=$P(VALUESTR,",",I) I VALUE]"" D QRMDSET(ISPEC,IMD,VALUE,"C")
  1. Q
  1. QRS17 ; imaging type * --> structure allows multiple values
  1. S QIMGTYP=VALUE
  1. I +QIMGTYP,(QIMGTYP'="") S QIMGTYP(VALUE)="",QIMGTYP=1
  1. E S QIMGTYP=0
  1. Q
  1. QRS24 ; interp rist
  1. S QRIST=VALUE
  1. I $L(QRIST) S RISTCHK=QRIST,QRIST=1
  1. E S QRIST=0
  1. Q
  1. QRS201 ; assigned to
  1. S QASSN=VALUE
  1. I $L(QASSN) S ASSNCHK=QASSN,QASSN=1
  1. E S QASSN=0
  1. Q
  1. QRS207 ; Pt age (range)
  1. S AGE1=$G(AGE1),AGE2=$G(AGE2) ; inits to nil if not yet processed the age
  1. N VAR S VAR=$S(IMD2=1:"AGE1",IMD2=2:"AGE2",1:"")
  1. I VAR]"",(VALUE?1.3N0.1(1"."1.2N)) S @VAR=VALUE,QAGE=1
  1. E S ERROR="Invalid AGE specification ("_$S(IMD2=1:"From age)",1:"To age)"),QAGE=0
  1. Q
  1. QRS208 ; Pt sex
  1. S QSEX=VALUE
  1. I $L(QSEX) S SEX=QSEX,QSEX=1
  1. E S QSEX=0
  1. Q
  1. ;