ORFIMM ;SLC/AGP - GENERIC EDIT IMMUNIZATION ;May 18, 2023@16:44:45
 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**405,597,588**;Dec 17, 1997;Build 29
 ;
 ; Reference to READENT^PXAPIIM in ICR #6387
 ; Reference to READVALS^PXAPIIM in ICR #6387
 ; Reference to IMMSITE^PXVRPC2 in ICR #7283
 ; Reference to IMMSRC^PXVRPC2 in ICR #7283
 ; Reference to IMAN^PXVRPC1 in ICR #7282
 ; Reference to GETICR^PXVRPC5 in ICR #7285
 ; Reference to IMMGRP^PXAPIIM in ICR #6387
 ; Reference to IMMRPC^PXVRPC4 in ICR #7284
 ; Reference to ^AUTTIMM( in ICR #1990
 ;
 Q
 ;
LAYOUT(TYPE,RESULT) ;
 N CNT
 S CNT=0
 ;                          1     2        3     4   5     6       7        8       9          10      11       12                    13
 ;                         NAME^CAPTION^CONTROL^COL^ROW^COLSPAN^NEEDSORT^REQUIRED^ABOVELINE^ENABLED^SET DEFAULT^Default Internal value^Default External Value"
 I TYPE=0 D  Q
 .S CNT=CNT+1,RESULT(CNT)="LOT NUMBER^Lot Number^ptCBO^0^0^1^1^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="EXPIRATION DATE^Expiration Date^ptLabel^1^0^1^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="MANUFACTURER^Manufacturer^ptLabel^2^0^1^0^0^0^1^"
 .S CNT=CNT+1,RESULT(CNT)="VISIT DATE TIME^Administration Date^ptDateTime^0^1^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="ENCOUNTER PROVIDER^Administered by^ptCBOLongList^1^1^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="ORDERED BY POLICY^Administering by Policy^ptCheckBox^2^1^1^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="ORDERING PROVIDER^Ordered by^ptCBOLongList^3^1^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="ADMIN ROUTE^Route^ptCBO^0^2^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="ADMIN SITE^Anatomic Location^ptCBO^1^2^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="SERIES^Series^ptCBO^2^2^1^1^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="DOSE^Dosage in mL^ptEdit^3^2^1^1^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="VIS OFFERED^Vaccine Information Statement^ptCheckListBox^0^3^2^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="CODES CPT^Procedure Codes^ptCBO^2^3^1^0^1^0^"
 .S CNT=CNT+1,RESULT(CNT)="CODES DX^Diagnosis Codes^ptCBO^3^3^1^0^0^1^"
 .S CNT=CNT+1,RESULT(CNT)="COMMENTS^Comment^ptEdit^0^4^4^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="OVERRIDE REASON^Override Reason^ptEdit^0^5^4^0^1^0^"
 I TYPE=1 D  Q
 .S CNT=CNT+1,RESULT(CNT)="INFO SOURCE^Information Source^ptCBO^0^0^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="VISIT DATE TIME^Administration Date^ptDateBox^1^0^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="LOCATION^Outside Location^ptCBOFreeText^2^0^1^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="SERIES^Series^ptCBO^3^0^1^1^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="LOT NUMBER^Lot Number^ptEdit^0^1^1^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="EXPIRATION DATE^Expiration Date^ptDate^1^1^1^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="MANUFACTURER^Manufacturer^ptCBO^2^1^1^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="ADMIN ROUTE^Route^ptCBO^0^2^1^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="ADMIN SITE^Anatomic Location^ptCBO^1^2^1^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="DOSE^Dosage in ml^ptEdit^2^2^1^0^0^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="COMMENTS^Comment^ptEdit^0^3^4^0^0^0^1^1^"
 I TYPE=2 D  Q
 .S CNT=CNT+1,RESULT(CNT)="CONTRAINDICATED^Contraindication/Precaution Reason^ptCBO^0^0^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="STOP^Cancel Series and stop forecasting^ptCBO^1^0^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="WARN UNTIL DATE^Choose reschedule date^ptDate^2^0^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="COMMENTS^Comment^ptEdit^0^1^3^0^0^0^1^1^"
 I TYPE=3 D  Q
 .S CNT=CNT+1,RESULT(CNT)="REFUSAL^Reason for Refusal^ptCBO^0^0^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="STOP^Cancel Series and stop forecasting^ptCBO^1^0^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="WARN UNTIL DATE^Choose reschedule date^ptDate^2^0^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="GRPLIST^Immunizations in group^ptListBox^0^1^1^0^0^0^1^"
 .S CNT=CNT+1,RESULT(CNT)="CVXONLY^Limit Refusal to ^ptCBO^0^1^2^0^1^0^"
 .S CNT=CNT+1,RESULT(CNT)="COMMENTS^Comment^ptEdit^0^2^3^0^0^0^1^1^"
 I TYPE=4 D  Q
 .S CNT=CNT+1,RESULT(CNT)="DISPLAY^Details^ptMemo^0^0^1^0^1^0^0^1^"
 I TYPE=5 D  Q
 .S CNT=CNT+1,RESULT(CNT)="PLACEMENT IEN^Last Placement^ptLabel^0^0^2^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="READING^Measurements^ptCBO^0^1^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="RESULTS^Interpretation^ptCBO^1^1^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="VISIT DATE TIME^Read Date^ptDateTime^0^2^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="ENCOUNTER PROVIDER^Read By^ptCBOLongList^1^2^1^0^1^0^1^1^"
 .S CNT=CNT+1,RESULT(CNT)="COMMENTS^Comment^ptEdit^0^3^2^0^0^0^1^1^"
 Q
 ;
BLDLAYOT(RESULTS,INPUTS,TYPE) ;
 N CNT,DATA,DATA1,DATA2,EXT,INT,NAME,NODE,LAYOUT,PARM,PARR,PIECE,PRMPTS,TEMP,X
 S DATA=$G(INPUTS(1)),DATA1=$G(INPUTS(2)),DATA2=$G(INPUTS(3))
 D LAYOUT(TYPE,.LAYOUT)
 D BLDPRMPT^ORFEDT(.PRMPTS)
 D BLDPARR^ORFEDT(.PARR)
 S X=0,CNT=0 F  S X=$O(LAYOUT(X)) Q:X'>0  D
 .S NODE=$G(LAYOUT(X))
 .S NAME=$P(NODE,U)
 .S INT="",EXT=""
 .S PARM=$G(PARR(NAME)) I PARM="" Q
 .S PIECE=+PRMPTS(PARM) I PIECE=0 Q
 .S TEMP=$P(DATA,U,PIECE)
 .I PARM="pnumImmRoute" S EXT=$P(TEMP,";"),INT=$P(TEMP,";",3)
 .I PARM="pnumImmSite" S EXT=$P(TEMP,";"),INT=$P(TEMP,";",3)
 .I PARM="pnumImmLot" S EXT=$P(TEMP,";"),INT=$P(TEMP,";",2)
 .I PARM="pnumImmManufacturer" S EXT=TEMP
 .I PARM="pnumExpirationDate" S INT=TEMP I +INT>0 S EXT=$$FMTE^XLFDT(INT)
 .I PARM="pnumImmDosage" S EXT=$P(TEMP,";"),INT=EXT
 .I PARM="pnumImmOrderByIEN" S INT=TEMP I INT>0 S EXT=$$GET1^DIQ(200,INT_",",.01)
 .I PARM="pnumAdminByPolicy" S INT=TEMP
 .I PARM="pnumImmSeries" S INT=TEMP
 .I PARM="pnumProvider" S INT=TEMP I INT>0 S EXT=$$GET1^DIQ(200,INT_",",.01)
 .I PARM="pnumComment" S TEMP=$P(DATA1,U,3) S EXT=TEMP,INT=TEMP
 .I PARM="pnumImmOverride" S TEMP=$P(DATA2,U,3) S EXT=TEMP,INT=TEMP
 .I PARM="pnumDataSource" S EXT=$P(TEMP,";"),INT=$P(TEMP,";",2)
 .I PARM="pnumIMMVIS" S INT=$$VIS(TEMP)
 .I PARM="pnumImmContra" S INT=+$P(DATA,U,2),EXT=$P(DATA,U,4)
 .I PARM="pnumWarnDate" D
 . . S INT=TEMP
 . . S CNT=CNT+1
 . . S RESULTS(CNT)="STOP"_U_$S(INT>1:0_U_"No",1:1_U_"Yes")
 .I PARM="pnumImmRefused" S INT=+$P(DATA,U,2),EXT=$P(DATA,U,4)
 .I PARM="pnumAdminDate" S INT=TEMP,EXT=TEMP
 .I PARM="pnumRefusedGroup" S INT=TEMP  ;S INT='$P(DATA,U,9)
 .I INT="@" S INT=""
 .I EXT="@" S EXT=""
 .S CNT=CNT+1,RESULTS(CNT)=NAME_U_INT_U_EXT
 Q
 ;
GET(RESULT,DATAARR,DEFAULTS) ;
 N ADMINBY,CNT,DATETIME,ENCTYPE,ERRMSG,FROMCVR,HASDEF,ID,IDX,LAYOUT,LOC,LOCLIST,NAME
 N NEEDOVER,NODE,ORDERBY,PAT,PARR,PRMPTS,SERMAX,SERREQ,TEMP,TYPE,VIMMDOC,VSTSTR
 S HASDEF=$S($D(DEFAULTS):1,1:0)
 S ID=DATAARR("ID"),NAME=DATAARR("NAME"),TYPE=DATAARR("DOCUMENTTYPE"),DATETIME=DATAARR("DATETIME"),NEEDOVER=DATAARR("NEEDSOVERRIDE")
 S VSTSTR=DATAARR("VISITSTR"),LOC=$P(VSTSTR,";")
 S VIMMDOC=$S($D(DATAARR("VIMMTYPE")):$G(DATAARR("VIMMTYPE")),1:"")
 S FROMCVR=+$G(DATAARR("FROMCOVER"))
 S PAT=$G(DATAARR("PATIENTID"))
 S ENCTYPE=$G(DATAARR("ENCOUNTERTYPE"))
 S ADMINBY=$G(DATAARR("USERIEN"))_U_$G(DATAARR("USERNAME"))
 S ORDERBY=$G(DATAARR("ENCOUNTERPROVIDERIEN"))_U_$G(DATAARR("ENCOUNTERPROVIDERNAME"))
 S CNT=0,SERREQ=0,SERMAX=0
 S ERRMSG=""
 I TYPE=0,FROMCVR=1 S ERRMSG=$$REMONLY(ID,TYPE)
 I ERRMSG'="" S RESULT(0)=-1_U_ERRMSG
 D BLDPRMPT^ORFEDT(.PRMPTS)
 D BLDPARR^ORFEDT(.PARR)
 D GETPOSS(ID,NAME,TYPE,DATETIME,ENCTYPE,LOC,VIMMDOC,PAT,.CNT,.RESULT,.DEFAULTS,.SERMAX,.SERREQ,.LOCLIST)
 I '$D(DEFAULTS("ENCOUNTER PROVIDER")) S DEFAULTS("ENCOUNTER PROVIDER")=ADMINBY
 I '$D(DEFAULTS("ORDERING PROVIDER")) S DEFAULTS("ORDERING PROVIDER")=ORDERBY
 D LAYOUT(TYPE,.LAYOUT)
 I TYPE=0 D
 .I $G(DEFAULTS("OVERRIDE REASON"))="",NEEDOVER S DEFAULTS("OVERRIDE REASON")=""
 .S CNT=CNT+1,RESULT(CNT)="LAYOUT^4^6"
 I TYPE=1 S CNT=CNT+1,RESULT(CNT)="LAYOUT^4^4"
 I TYPE=2 S CNT=CNT+1,RESULT(CNT)="LAYOUT^3^2"
 I TYPE=3 S CNT=CNT+1,RESULT(CNT)="LAYOUT^3^3"
 I TYPE=4 S CNT=CNT+1,RESULT(CNT)="LAYOUT^1^1"
 I TYPE=5 S CNT=CNT+1,RESULT(CNT)="LAYOUT^2^4"
 S IDX=0 F  S IDX=$O(LAYOUT(IDX)) Q:IDX'>0  D
 .S NODE=LAYOUT(IDX)
 .I $P(NODE,U)="SERIES",TYPE=0 D
 ..I SERREQ=1 S $P(NODE,U,8)=1
 ..I SERMAX>0 S $P(NODE,U,9)=1
 .I $P(NODE,U)="CVXONLY" S $P(NODE,U,2)=$P(NODE,U,2)_NAME
 .I $P(NODE,U)="ADMIN SITE",$D(LOCLIST)>1 S $P(NODE,U,9)=1
 .I $P(NODE,U)="ORDERING PROVIDER",+$$GETDEF("ORDERED BY POLICY",TYPE,.DEFAULTS) S $P(NODE,U,11)=0
 .I $P(NODE,U)="DOSE",HASDEF=1,$G(DEFAULTS("DOSE UNIT"))'="",$P(DEFAULTS("DOSE UNIT"),U)'="mL",DEFAULTS("COMMENTS")["Dosage:" D
 ..S $P(NODE,U,10)=0
 .S TEMP=$$GETDEF($P(NODE,U),TYPE,.DEFAULTS)
 .S CNT=CNT+1,RESULT(CNT)=NODE_TEMP
 .I $P(NODE,U)="DOSE",$P($G(DEFAULTS("DOSE UNIT")),U)'="" S $P(RESULT(CNT),U,2)="Dosage in "_$P(DEFAULTS("DOSE UNIT"),U)
 Q
 ;
GETDEF(NAME,TYPE,DEFAULT) ;
 N CNT,EXT,INT,RESULT,TEMP
 S RESULT=""
 I '$D(DEFAULT(NAME)) D  Q RESULT
 .I NAME'["CODES" S RESULT=U
 .I NAME="OVERRIDE REASON" S RESULT=0_U_1_U Q
 .I RESULT'="" Q
 .S RESULT=1_U_1_U_U
 I NAME="VIS OFFERED" D  Q RESULT
 .I $D(DEFAULT(NAME))=1 S RESULT=DEFAULT(NAME) Q
 .S INT="",EXT=""
 .S CNT=0 F  S CNT=$O(DEFAULT(NAME,CNT)) Q:CNT'>0  D
 ..S TEMP=$G(DEFAULT(NAME,CNT)) I TEMP="" Q
 ..S INT=$S(INT'="":";"_$P(TEMP,U),1:$P(TEMP,U))
 ..S EXT=$S(EXT'="":";"_$P(TEMP,U),1:$P(TEMP,U))
 . S RESULT=INT_U_EXT
 I NAME="OVERRIDE REASON" D  Q RESULT
 .S TEMP=DEFAULT("OVERRIDE REASON")
 .I NEEDOVER=1 S RESULT=1_U_1_U_TEMP
 I NAME="GRPLIST" D  Q RESULT
 .I DEFAULT("GRPLIST")="NONE" S RESULT=0_U Q
 .S RESULT=1_U
 I NAME="CVXONLY" D  Q RESULT
 .S RESULT=$S(DEFAULT("GRPLIST")="NONE":0,1:1)_U_1_U
 .S RESULT=RESULT_$G(DEFAULT("CVXONLY"))
 ;.I +$$GETDEF("ORDERED BY POLICY",TYPE,.DEFAULTS) S RESULT=U Q
 ;.S RESULT=ENCOPIEN_U_ENCOPNAM Q
 S RESULT=$G(DEFAULT(NAME))
 I RESULT="" S RESULT=U
 Q RESULT
 ;
GETPOSS(ID,NAME,TYPE,DATETIME,ENCTYPE,LOC,VIMMDOC,PAT,CNT,RESULT,DEFAULTS,SERMAX,SERREQ,LOCLIST) ;
 N NOTEARR,TEMP,X
 I TYPE=0 D  Q
 .;S CODECNT=0
 .D GETDETLS^ORFIMM2(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE,LOC,.SERREQ,.SERMAX)
 .D GETROUTE^ORFIMM1(.RESULT,.CNT,.DEFAULTS,.LOCLIST)
 .D GETSITE(.RESULT,.CNT,.DEFAULTS,.LOCLIST)
 .D GETSERS(.RESULT,.CNT,.DEFAULTS,SERREQ,SERMAX)
 I TYPE=1 D  Q
 .D GETINFO(.RESULT,.CNT,.DEFAULTS)
 .D GETSITE(.RESULT,.CNT,.DEFAULTS)
 .D GETROUTE^ORFIMM1(.RESULT,.CNT,.DEFAULTS)
 .D GETSERS(.RESULT,.CNT,.DEFAULTS,SERREQ,SERMAX)
 .D GETMANF(.RESULT,.CNT,.DEFAULTS)
 .D GETLOC(.RESULT,.CNT,.DEFAULTS)
 .D GETDLOC(.RESULT,.CNT,.DEFAULTS)
 I TYPE=2 D  Q
 .D GETCONT(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE,$G(LOC))
 .D GETSTOP^ORFIMM1(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE)
 I TYPE=3 D  Q
 .D GETREFUS(.RESULT,.CNT,.DEFAULTS,LOC)
 .D GETSTOP^ORFIMM1(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE)
 .D GETGROUP(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE)
 .D GETCVX(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE)
 I TYPE=4 D  Q
 .S TEMP=$S(VIMMDOC["Admin":0,VIMMDOC["Hist":1,VIMMDOC["Contr":2,VIMMDOC["Ref":3,1:-1)
 .D GETTEXT^ORFIMM1(.NOTEARR,.DEFAULTS,ID,NAME,TEMP,DATETIME,LOC,1)
 .S X=0 F  S X=$O(NOTEARR(X)) Q:X'>0  D
 ..S CNT=CNT+1,RESULT(CNT)="DATA WORD PROCESSING"_U_"DISPLAY"_U_NOTEARR(X)
 I TYPE=5 D
 .D GETREAD(.RESULT,.CNT,.DEFAULTS,PAT)
 .I "AID"[ENCTYPE S DEFAULTS("VISIT DATE TIME")=U_DATETIME
 .I "AID"'[ENCTYPE S DEFAULTS("VISIT DATE TIME")=U_$$NOW^XLFDT()
 Q
 ;
GETREAD(RESULT,CNT,DEFAULTS,PAT) ;
 N ORARR,X,TEMP
 D READENT^PXAPIIM(.ORARR,PAT)
 I ORARR(1)="" Q
 S DEFAULTS("PLACEMENT IEN")=$P(ORARR(1),U)_U_$P(ORARR(1),U,2)_" placed on: "_$TR($$FMTE^XLFDT($P(ORARR(1),U,3),"2ZM"),"@"," ")
 K ORARR D READVALS^PXAPIIM(.ORARR)
 F X=$P(ORARR("RANGE"),":"):1:$P(ORARR("RANGE"),":",2) S CNT=CNT+1,RESULT(CNT)="DATA^READING"_U_X_U_X
 S TEMP="" F  S TEMP=$O(ORARR("CODES",TEMP)) Q:TEMP=""  D
 .S CNT=CNT+1,RESULT(CNT)="DATA^RESULTS^"_$P(TEMP,":")_U_$P(TEMP,":",2)
 Q
 ;
GETSITE(RESULT,CNT,DEFAULT,LOCLIST) ;
 N DATALST,ID,X
 D IMMSITE^PXVRPC2(.DATALST,"S:A")
 ;S CNT=CNT+1,RESULT(CNT)="DATA"_U_"ADMIN SITE"_U_"NUMBER"_U_4
 S X=0 F  S X=$O(DATALST(X)) Q:X'>0  D
 .I DATALST(X)'[U Q
 .S CNT=CNT+1,RESULT(CNT)="DATA"_U_"ADMIN SITE"_U_DATALST(X)
 .I $D(LOCLIST)>1 D
 ..S ID=0 F  S ID=$O(LOCLIST(ID)) Q:ID'>0  D
 ...I ID'=+DATALST(X) Q
 ...S CNT=CNT+1,RESULT(CNT)="LINE"_U_"ADMIN SITE"_U_DATALST(X)
 Q
 ;
GETSERS(RESULT,CNT,DEFAULT,SERREQ,SERMAX) ;
 N DATALST,X
 D GETSET^ORWPCE2(.DATALST,9000010.11,.04,1)
 ;S CNT=CNT+1,RESULT(CNT)="DATA"_U_"SERIES"_U_"NUMBER"_U_2
 S X="" F  S X=$O(DATALST(X)) Q:X=""  D
 .I $P(DATALST(X),U)="@",SERREQ=1 Q
 .I SERMAX>0,+DATALST(X)>0,+DATALST(X)'>SERMAX S CNT=CNT+1,RESULT(CNT)="LINE"_U_"SERIES"_U_DATALST(X)
 .S CNT=CNT+1,RESULT(CNT)="DATA"_U_"SERIES"_U_DATALST(X)
 Q
 ;
GETINFO(RESULT,CNT,DEFAULTS) ;
 N DATALIST,ORNAME,ORNODE,X
 D IMMSRC^PXVRPC2(.DATALIST,"S:AH")
 S X=0 F  S X=$O(DATALIST(X)) Q:X'>0  D
 .S ORNODE=$G(DATALIST(X))
 .S ORNAME=$P(ORNODE,U,2)
 .I ORNAME["-" S ORNAME=$$TRIM^XLFSTR($P(ORNAME,"-",2))
 .S $P(ORNODE,U,2)=ORNAME
 .S CNT=CNT+1,RESULT(CNT)="DATA"_U_"INFO SOURCE"_U_ORNODE
 Q
 ;
GETLOC(RESULT,CNT,DEFAULTS) ;
 N DATALIST,X
 D HISTLOC^ORQQPX(.DATALIST)
 S X=0 F  S X=$O(^TMP("OR",$J,"LOC",X)) Q:X'>0  D
 .S CNT=CNT+1,RESULT(CNT)="DATA"_U_"LOCATION"_U_^TMP("OR",$J,"LOC",X)
 Q
 ;
GETDLOC(RESULT,CNT,DEFAULTS) ;
 N DATALIST,X
 D GETDEFOL^ORQQPX(.DATALIST)
 S X=0 F  S X=$O(DATALIST(X)) Q:X'>0  D
 .S CNT=CNT+1,RESULT(CNT)="DATA DEFAULT"_U_"LOCATION"_U_DATALIST(X)
 Q
 ;
GETMANF(RESULT,CNT,DEFAULTS) ;
 N DATALIST,X
 D IMAN^PXVRPC1(.DATALIST,"S:B","",1)
 ;S CNT=CNT+1,RESULT(CNT)="DATA"_U_"INFO SOURCE"_U_"NUMBER"_U_4
 S X=0 F  S X=$O(^TMP("PXVLST",$J,X)) Q:X'>0  D
 .I +$P(^TMP("PXVLST",$J,X),U)=-1 Q
 .S CNT=CNT+1,RESULT(CNT)="DATA"_U_"MANUFACTURER"_U_^TMP("PXVLST",$J,X)
 Q
 ;
GETREFUS(RESULT,CNT,DEFAULTS,LOC) ;
 N DATALIST,X
 D GETICR^PXVRPC5(.DATALIST,920.5,"S:A","",LOC)
 S X=0 F  S X=$O(DATALIST(X)) Q:X'>0  D
 .S $P(DATALIST(X),U)=+$P(DATALIST(X),U)
 .S CNT=CNT+1,RESULT(CNT)="DATA"_U_"REFUSAL"_U_DATALIST(X)
 Q
 ;
GETGROUP(RESULT,CNT,DEFAULTS,ID,DATETIME,ENCTYPE) ;
 N GRP,IEN,OCNT,ORGRPS
 S OCNT=CNT
 D IMMGRP^PXAPIIM(.ORGRPS,ID)
 S GRP="" F  S GRP=$O(ORGRPS("VG",GRP)) Q:GRP=""  D
 .S IEN=0 F  S IEN=$O(ORGRPS("VG",GRP,IEN)) Q:IEN'>0  D
 ..S CNT=CNT+1,RESULT(CNT)="DATA"_U_"GRPLIST"_U_IEN_U_ORGRPS("VG",GRP,IEN)
 ..;S CNT=CNT+1,RESULT(CNT)="DATA WORD PROCESSING"_U_"GRPLIST"_U_ORGRPS("VG",GRP,IEN)
 I OCNT=CNT S DEFAULTS("GRPLIST")="NONE" Q
 S DEFAULTS("GRPLIST")="POPULATED"
 Q
 ;
GETCVX(RESULT,CNT,DEFAULTS,ID,DATETIME,ENCTYPE) ;
 S CNT=CNT+1,RESULT(CNT)="DATA"_U_"CVXONLY"_U_0_U_"No   (Refusal of all immunizations in this group)"
 S CNT=CNT+1,RESULT(CNT)="DATA"_U_"CVXONLY"_U_1_U_"Yes  (Refusal of only this specific formulation of vaccine)"
 I $G(DEFAULTS("CVXONLY"))="" S DEFAULTS("CVXONLY")=0_U_"No   (Refusal of all immunizations in this group)"
 Q
 ;
GETCONT(RESULT,CNT,DEFAULTS,ID,DATETIME,ENCTYPE,LOC) ;
 N DATALST,NODE,X
 D IMMRPC^PXVRPC4(.DATALST,ID,DATETIME,"L:"_$G(LOC))
 S X=0 F  S X=$O(^TMP("PXVIMMRPC",$J,X)) Q:X'>0  D
 .S NODE=^TMP("PXVIMMRPC",$J,X)
 .I $P(NODE,U)'="CONTRA" Q
 .S $P(NODE,U,3)=$S($P(NODE,U,7)="P":$P(NODE,U,3)_" (PRECAUTION)",$P(NODE,U,7)="C":$P(NODE,U,3)_" (CONTRAINDICATED)",1:$P(NODE,U,3))
 .S $P(NODE,U,2)=+$P(NODE,U,2)
 .S CNT=CNT+1,RESULT(CNT)="DATA"_U_"CONTRAINDICATED"_U_$P(NODE,U,2,$L(NODE,U))
 Q
 ;
REMONLY(ID,TYPE) ;
 N NAME,IDX,ORERR,ORVALUE,RESULT
 S RESULT=""
 D GETLST^XPAR(.ORVALUE,"ALL","OR IMM REMINDER DIALOG","I",.ORERR)
 S IDX=0 F  S IDX=$O(ORVALUE(IDX)) Q:IDX'>0!(RESULT'="")  D
 . I ORVALUE(IDX)=ID D
 ..S NAME=$P($G(^AUTTIMM(ID,0)),U) S RESULT=NAME_" administration can only be documented through a Reminder Dialog"
 Q RESULT
 ;
VIS(VALUE) ;
 N IMMVIS,IMMVISDT,IMMVISENTRY,PXSEQ,PXX,RESULT,X
 S PXSEQ=0,RESULT=""
 F PXX=1:1:$L(VALUE,";") D
 . S IMMVISENTRY=$$TRIM^XLFSTR($P(VALUE,";",PXX))
 . S IMMVIS=$P(IMMVISENTRY,"/",1)
 . I 'IMMVIS Q
 . S RESULT=$S(RESULT="":IMMVIS,1:RESULT_";"_IMMVIS)
 Q RESULT
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HORFIMM   15939     printed  Sep 23, 2025@20:07:07                                                                                                                                                                                                     Page 2
ORFIMM    ;SLC/AGP - GENERIC EDIT IMMUNIZATION ;May 18, 2023@16:44:45
 +1       ;;3.0;ORDER ENTRY/RESULTS REPORTING;**405,597,588**;Dec 17, 1997;Build 29
 +2       ;
 +3       ; Reference to READENT^PXAPIIM in ICR #6387
 +4       ; Reference to READVALS^PXAPIIM in ICR #6387
 +5       ; Reference to IMMSITE^PXVRPC2 in ICR #7283
 +6       ; Reference to IMMSRC^PXVRPC2 in ICR #7283
 +7       ; Reference to IMAN^PXVRPC1 in ICR #7282
 +8       ; Reference to GETICR^PXVRPC5 in ICR #7285
 +9       ; Reference to IMMGRP^PXAPIIM in ICR #6387
 +10      ; Reference to IMMRPC^PXVRPC4 in ICR #7284
 +11      ; Reference to ^AUTTIMM( in ICR #1990
 +12      ;
 +13       QUIT 
 +14      ;
LAYOUT(TYPE,RESULT) ;
 +1        NEW CNT
 +2        SET CNT=0
 +3       ;                          1     2        3     4   5     6       7        8       9          10      11       12                    13
 +4       ;                         NAME^CAPTION^CONTROL^COL^ROW^COLSPAN^NEEDSORT^REQUIRED^ABOVELINE^ENABLED^SET DEFAULT^Default Internal value^Default External Value"
 +5        IF TYPE=0
               Begin DoDot:1
 +6                SET CNT=CNT+1
                   SET RESULT(CNT)="LOT NUMBER^Lot Number^ptCBO^0^0^1^1^1^0^1^1^"
 +7                SET CNT=CNT+1
                   SET RESULT(CNT)="EXPIRATION DATE^Expiration Date^ptLabel^1^0^1^0^0^0^1^1^"
 +8                SET CNT=CNT+1
                   SET RESULT(CNT)="MANUFACTURER^Manufacturer^ptLabel^2^0^1^0^0^0^1^"
 +9                SET CNT=CNT+1
                   SET RESULT(CNT)="VISIT DATE TIME^Administration Date^ptDateTime^0^1^1^0^1^0^1^1^"
 +10               SET CNT=CNT+1
                   SET RESULT(CNT)="ENCOUNTER PROVIDER^Administered by^ptCBOLongList^1^1^1^0^1^0^1^1^"
 +11               SET CNT=CNT+1
                   SET RESULT(CNT)="ORDERED BY POLICY^Administering by Policy^ptCheckBox^2^1^1^0^0^0^1^1^"
 +12               SET CNT=CNT+1
                   SET RESULT(CNT)="ORDERING PROVIDER^Ordered by^ptCBOLongList^3^1^1^0^1^0^1^1^"
 +13               SET CNT=CNT+1
                   SET RESULT(CNT)="ADMIN ROUTE^Route^ptCBO^0^2^1^0^1^0^1^1^"
 +14               SET CNT=CNT+1
                   SET RESULT(CNT)="ADMIN SITE^Anatomic Location^ptCBO^1^2^1^0^1^0^1^1^"
 +15               SET CNT=CNT+1
                   SET RESULT(CNT)="SERIES^Series^ptCBO^2^2^1^1^0^0^1^1^"
 +16               SET CNT=CNT+1
                   SET RESULT(CNT)="DOSE^Dosage in mL^ptEdit^3^2^1^1^1^0^1^1^"
 +17               SET CNT=CNT+1
                   SET RESULT(CNT)="VIS OFFERED^Vaccine Information Statement^ptCheckListBox^0^3^2^0^0^0^1^1^"
 +18               SET CNT=CNT+1
                   SET RESULT(CNT)="CODES CPT^Procedure Codes^ptCBO^2^3^1^0^1^0^"
 +19               SET CNT=CNT+1
                   SET RESULT(CNT)="CODES DX^Diagnosis Codes^ptCBO^3^3^1^0^0^1^"
 +20               SET CNT=CNT+1
                   SET RESULT(CNT)="COMMENTS^Comment^ptEdit^0^4^4^0^0^0^1^1^"
 +21               SET CNT=CNT+1
                   SET RESULT(CNT)="OVERRIDE REASON^Override Reason^ptEdit^0^5^4^0^1^0^"
               End DoDot:1
               QUIT 
 +22       IF TYPE=1
               Begin DoDot:1
 +23               SET CNT=CNT+1
                   SET RESULT(CNT)="INFO SOURCE^Information Source^ptCBO^0^0^1^0^1^0^1^1^"
 +24               SET CNT=CNT+1
                   SET RESULT(CNT)="VISIT DATE TIME^Administration Date^ptDateBox^1^0^1^0^1^0^1^1^"
 +25               SET CNT=CNT+1
                   SET RESULT(CNT)="LOCATION^Outside Location^ptCBOFreeText^2^0^1^0^0^0^1^1^"
 +26               SET CNT=CNT+1
                   SET RESULT(CNT)="SERIES^Series^ptCBO^3^0^1^1^0^0^1^1^"
 +27               SET CNT=CNT+1
                   SET RESULT(CNT)="LOT NUMBER^Lot Number^ptEdit^0^1^1^0^0^0^1^1^"
 +28               SET CNT=CNT+1
                   SET RESULT(CNT)="EXPIRATION DATE^Expiration Date^ptDate^1^1^1^0^0^0^1^1^"
 +29               SET CNT=CNT+1
                   SET RESULT(CNT)="MANUFACTURER^Manufacturer^ptCBO^2^1^1^0^0^0^1^1^"
 +30               SET CNT=CNT+1
                   SET RESULT(CNT)="ADMIN ROUTE^Route^ptCBO^0^2^1^0^0^0^1^1^"
 +31               SET CNT=CNT+1
                   SET RESULT(CNT)="ADMIN SITE^Anatomic Location^ptCBO^1^2^1^0^0^0^1^1^"
 +32               SET CNT=CNT+1
                   SET RESULT(CNT)="DOSE^Dosage in ml^ptEdit^2^2^1^0^0^0^1^1^"
 +33               SET CNT=CNT+1
                   SET RESULT(CNT)="COMMENTS^Comment^ptEdit^0^3^4^0^0^0^1^1^"
               End DoDot:1
               QUIT 
 +34       IF TYPE=2
               Begin DoDot:1
 +35               SET CNT=CNT+1
                   SET RESULT(CNT)="CONTRAINDICATED^Contraindication/Precaution Reason^ptCBO^0^0^1^0^1^0^1^1^"
 +36               SET CNT=CNT+1
                   SET RESULT(CNT)="STOP^Cancel Series and stop forecasting^ptCBO^1^0^1^0^1^0^1^1^"
 +37               SET CNT=CNT+1
                   SET RESULT(CNT)="WARN UNTIL DATE^Choose reschedule date^ptDate^2^0^1^0^1^0^1^1^"
 +38               SET CNT=CNT+1
                   SET RESULT(CNT)="COMMENTS^Comment^ptEdit^0^1^3^0^0^0^1^1^"
               End DoDot:1
               QUIT 
 +39       IF TYPE=3
               Begin DoDot:1
 +40               SET CNT=CNT+1
                   SET RESULT(CNT)="REFUSAL^Reason for Refusal^ptCBO^0^0^1^0^1^0^1^1^"
 +41               SET CNT=CNT+1
                   SET RESULT(CNT)="STOP^Cancel Series and stop forecasting^ptCBO^1^0^1^0^1^0^1^1^"
 +42               SET CNT=CNT+1
                   SET RESULT(CNT)="WARN UNTIL DATE^Choose reschedule date^ptDate^2^0^1^0^1^0^1^1^"
 +43               SET CNT=CNT+1
                   SET RESULT(CNT)="GRPLIST^Immunizations in group^ptListBox^0^1^1^0^0^0^1^"
 +44               SET CNT=CNT+1
                   SET RESULT(CNT)="CVXONLY^Limit Refusal to ^ptCBO^0^1^2^0^1^0^"
 +45               SET CNT=CNT+1
                   SET RESULT(CNT)="COMMENTS^Comment^ptEdit^0^2^3^0^0^0^1^1^"
               End DoDot:1
               QUIT 
 +46       IF TYPE=4
               Begin DoDot:1
 +47               SET CNT=CNT+1
                   SET RESULT(CNT)="DISPLAY^Details^ptMemo^0^0^1^0^1^0^0^1^"
               End DoDot:1
               QUIT 
 +48       IF TYPE=5
               Begin DoDot:1
 +49               SET CNT=CNT+1
                   SET RESULT(CNT)="PLACEMENT IEN^Last Placement^ptLabel^0^0^2^0^1^0^1^1^"
 +50               SET CNT=CNT+1
                   SET RESULT(CNT)="READING^Measurements^ptCBO^0^1^1^0^1^0^1^1^"
 +51               SET CNT=CNT+1
                   SET RESULT(CNT)="RESULTS^Interpretation^ptCBO^1^1^1^0^1^0^1^1^"
 +52               SET CNT=CNT+1
                   SET RESULT(CNT)="VISIT DATE TIME^Read Date^ptDateTime^0^2^1^0^1^0^1^1^"
 +53               SET CNT=CNT+1
                   SET RESULT(CNT)="ENCOUNTER PROVIDER^Read By^ptCBOLongList^1^2^1^0^1^0^1^1^"
 +54               SET CNT=CNT+1
                   SET RESULT(CNT)="COMMENTS^Comment^ptEdit^0^3^2^0^0^0^1^1^"
               End DoDot:1
               QUIT 
 +55       QUIT 
 +56      ;
BLDLAYOT(RESULTS,INPUTS,TYPE) ;
 +1        NEW CNT,DATA,DATA1,DATA2,EXT,INT,NAME,NODE,LAYOUT,PARM,PARR,PIECE,PRMPTS,TEMP,X
 +2        SET DATA=$GET(INPUTS(1))
           SET DATA1=$GET(INPUTS(2))
           SET DATA2=$GET(INPUTS(3))
 +3        DO LAYOUT(TYPE,.LAYOUT)
 +4        DO BLDPRMPT^ORFEDT(.PRMPTS)
 +5        DO BLDPARR^ORFEDT(.PARR)
 +6        SET X=0
           SET CNT=0
           FOR 
               SET X=$ORDER(LAYOUT(X))
               if X'>0
                   QUIT 
               Begin DoDot:1
 +7                SET NODE=$GET(LAYOUT(X))
 +8                SET NAME=$PIECE(NODE,U)
 +9                SET INT=""
                   SET EXT=""
 +10               SET PARM=$GET(PARR(NAME))
                   IF PARM=""
                       QUIT 
 +11               SET PIECE=+PRMPTS(PARM)
                   IF PIECE=0
                       QUIT 
 +12               SET TEMP=$PIECE(DATA,U,PIECE)
 +13               IF PARM="pnumImmRoute"
                       SET EXT=$PIECE(TEMP,";")
                       SET INT=$PIECE(TEMP,";",3)
 +14               IF PARM="pnumImmSite"
                       SET EXT=$PIECE(TEMP,";")
                       SET INT=$PIECE(TEMP,";",3)
 +15               IF PARM="pnumImmLot"
                       SET EXT=$PIECE(TEMP,";")
                       SET INT=$PIECE(TEMP,";",2)
 +16               IF PARM="pnumImmManufacturer"
                       SET EXT=TEMP
 +17               IF PARM="pnumExpirationDate"
                       SET INT=TEMP
                       IF +INT>0
                           SET EXT=$$FMTE^XLFDT(INT)
 +18               IF PARM="pnumImmDosage"
                       SET EXT=$PIECE(TEMP,";")
                       SET INT=EXT
 +19               IF PARM="pnumImmOrderByIEN"
                       SET INT=TEMP
                       IF INT>0
                           SET EXT=$$GET1^DIQ(200,INT_",",.01)
 +20               IF PARM="pnumAdminByPolicy"
                       SET INT=TEMP
 +21               IF PARM="pnumImmSeries"
                       SET INT=TEMP
 +22               IF PARM="pnumProvider"
                       SET INT=TEMP
                       IF INT>0
                           SET EXT=$$GET1^DIQ(200,INT_",",.01)
 +23               IF PARM="pnumComment"
                       SET TEMP=$PIECE(DATA1,U,3)
                       SET EXT=TEMP
                       SET INT=TEMP
 +24               IF PARM="pnumImmOverride"
                       SET TEMP=$PIECE(DATA2,U,3)
                       SET EXT=TEMP
                       SET INT=TEMP
 +25               IF PARM="pnumDataSource"
                       SET EXT=$PIECE(TEMP,";")
                       SET INT=$PIECE(TEMP,";",2)
 +26               IF PARM="pnumIMMVIS"
                       SET INT=$$VIS(TEMP)
 +27               IF PARM="pnumImmContra"
                       SET INT=+$PIECE(DATA,U,2)
                       SET EXT=$PIECE(DATA,U,4)
 +28               IF PARM="pnumWarnDate"
                       Begin DoDot:2
 +29                       SET INT=TEMP
 +30                       SET CNT=CNT+1
 +31                       SET RESULTS(CNT)="STOP"_U_$SELECT(INT>1:0_U_"No",1:1_U_"Yes")
                       End DoDot:2
 +32               IF PARM="pnumImmRefused"
                       SET INT=+$PIECE(DATA,U,2)
                       SET EXT=$PIECE(DATA,U,4)
 +33               IF PARM="pnumAdminDate"
                       SET INT=TEMP
                       SET EXT=TEMP
 +34      ;S INT='$P(DATA,U,9)
                   IF PARM="pnumRefusedGroup"
                       SET INT=TEMP
 +35               IF INT="@"
                       SET INT=""
 +36               IF EXT="@"
                       SET EXT=""
 +37               SET CNT=CNT+1
                   SET RESULTS(CNT)=NAME_U_INT_U_EXT
               End DoDot:1
 +38       QUIT 
 +39      ;
GET(RESULT,DATAARR,DEFAULTS) ;
 +1        NEW ADMINBY,CNT,DATETIME,ENCTYPE,ERRMSG,FROMCVR,HASDEF,ID,IDX,LAYOUT,LOC,LOCLIST,NAME
 +2        NEW NEEDOVER,NODE,ORDERBY,PAT,PARR,PRMPTS,SERMAX,SERREQ,TEMP,TYPE,VIMMDOC,VSTSTR
 +3        SET HASDEF=$SELECT($DATA(DEFAULTS):1,1:0)
 +4        SET ID=DATAARR("ID")
           SET NAME=DATAARR("NAME")
           SET TYPE=DATAARR("DOCUMENTTYPE")
           SET DATETIME=DATAARR("DATETIME")
           SET NEEDOVER=DATAARR("NEEDSOVERRIDE")
 +5        SET VSTSTR=DATAARR("VISITSTR")
           SET LOC=$PIECE(VSTSTR,";")
 +6        SET VIMMDOC=$SELECT($DATA(DATAARR("VIMMTYPE")):$GET(DATAARR("VIMMTYPE")),1:"")
 +7        SET FROMCVR=+$GET(DATAARR("FROMCOVER"))
 +8        SET PAT=$GET(DATAARR("PATIENTID"))
 +9        SET ENCTYPE=$GET(DATAARR("ENCOUNTERTYPE"))
 +10       SET ADMINBY=$GET(DATAARR("USERIEN"))_U_$GET(DATAARR("USERNAME"))
 +11       SET ORDERBY=$GET(DATAARR("ENCOUNTERPROVIDERIEN"))_U_$GET(DATAARR("ENCOUNTERPROVIDERNAME"))
 +12       SET CNT=0
           SET SERREQ=0
           SET SERMAX=0
 +13       SET ERRMSG=""
 +14       IF TYPE=0
               IF FROMCVR=1
                   SET ERRMSG=$$REMONLY(ID,TYPE)
 +15       IF ERRMSG'=""
               SET RESULT(0)=-1_U_ERRMSG
 +16       DO BLDPRMPT^ORFEDT(.PRMPTS)
 +17       DO BLDPARR^ORFEDT(.PARR)
 +18       DO GETPOSS(ID,NAME,TYPE,DATETIME,ENCTYPE,LOC,VIMMDOC,PAT,.CNT,.RESULT,.DEFAULTS,.SERMAX,.SERREQ,.LOCLIST)
 +19       IF '$DATA(DEFAULTS("ENCOUNTER PROVIDER"))
               SET DEFAULTS("ENCOUNTER PROVIDER")=ADMINBY
 +20       IF '$DATA(DEFAULTS("ORDERING PROVIDER"))
               SET DEFAULTS("ORDERING PROVIDER")=ORDERBY
 +21       DO LAYOUT(TYPE,.LAYOUT)
 +22       IF TYPE=0
               Begin DoDot:1
 +23               IF $GET(DEFAULTS("OVERRIDE REASON"))=""
                       IF NEEDOVER
                           SET DEFAULTS("OVERRIDE REASON")=""
 +24               SET CNT=CNT+1
                   SET RESULT(CNT)="LAYOUT^4^6"
               End DoDot:1
 +25       IF TYPE=1
               SET CNT=CNT+1
               SET RESULT(CNT)="LAYOUT^4^4"
 +26       IF TYPE=2
               SET CNT=CNT+1
               SET RESULT(CNT)="LAYOUT^3^2"
 +27       IF TYPE=3
               SET CNT=CNT+1
               SET RESULT(CNT)="LAYOUT^3^3"
 +28       IF TYPE=4
               SET CNT=CNT+1
               SET RESULT(CNT)="LAYOUT^1^1"
 +29       IF TYPE=5
               SET CNT=CNT+1
               SET RESULT(CNT)="LAYOUT^2^4"
 +30       SET IDX=0
           FOR 
               SET IDX=$ORDER(LAYOUT(IDX))
               if IDX'>0
                   QUIT 
               Begin DoDot:1
 +31               SET NODE=LAYOUT(IDX)
 +32               IF $PIECE(NODE,U)="SERIES"
                       IF TYPE=0
                           Begin DoDot:2
 +33                           IF SERREQ=1
                                   SET $PIECE(NODE,U,8)=1
 +34                           IF SERMAX>0
                                   SET $PIECE(NODE,U,9)=1
                           End DoDot:2
 +35               IF $PIECE(NODE,U)="CVXONLY"
                       SET $PIECE(NODE,U,2)=$PIECE(NODE,U,2)_NAME
 +36               IF $PIECE(NODE,U)="ADMIN SITE"
                       IF $DATA(LOCLIST)>1
                           SET $PIECE(NODE,U,9)=1
 +37               IF $PIECE(NODE,U)="ORDERING PROVIDER"
                       IF +$$GETDEF("ORDERED BY POLICY",TYPE,.DEFAULTS)
                           SET $PIECE(NODE,U,11)=0
 +38               IF $PIECE(NODE,U)="DOSE"
                       IF HASDEF=1
                           IF $GET(DEFAULTS("DOSE UNIT"))'=""
                               IF $PIECE(DEFAULTS("DOSE UNIT"),U)'="mL"
                                   IF DEFAULTS("COMMENTS")["Dosage:"
                                       Begin DoDot:2
 +39                                       SET $PIECE(NODE,U,10)=0
                                       End DoDot:2
 +40               SET TEMP=$$GETDEF($PIECE(NODE,U),TYPE,.DEFAULTS)
 +41               SET CNT=CNT+1
                   SET RESULT(CNT)=NODE_TEMP
 +42               IF $PIECE(NODE,U)="DOSE"
                       IF $PIECE($GET(DEFAULTS("DOSE UNIT")),U)'=""
                           SET $PIECE(RESULT(CNT),U,2)="Dosage in "_$PIECE(DEFAULTS("DOSE UNIT"),U)
               End DoDot:1
 +43       QUIT 
 +44      ;
GETDEF(NAME,TYPE,DEFAULT) ;
 +1        NEW CNT,EXT,INT,RESULT,TEMP
 +2        SET RESULT=""
 +3        IF '$DATA(DEFAULT(NAME))
               Begin DoDot:1
 +4                IF NAME'["CODES"
                       SET RESULT=U
 +5                IF NAME="OVERRIDE REASON"
                       SET RESULT=0_U_1_U
                       QUIT 
 +6                IF RESULT'=""
                       QUIT 
 +7                SET RESULT=1_U_1_U_U
               End DoDot:1
               QUIT RESULT
 +8        IF NAME="VIS OFFERED"
               Begin DoDot:1
 +9                IF $DATA(DEFAULT(NAME))=1
                       SET RESULT=DEFAULT(NAME)
                       QUIT 
 +10               SET INT=""
                   SET EXT=""
 +11               SET CNT=0
                   FOR 
                       SET CNT=$ORDER(DEFAULT(NAME,CNT))
                       if CNT'>0
                           QUIT 
                       Begin DoDot:2
 +12                       SET TEMP=$GET(DEFAULT(NAME,CNT))
                           IF TEMP=""
                               QUIT 
 +13                       SET INT=$SELECT(INT'="":";"_$PIECE(TEMP,U),1:$PIECE(TEMP,U))
 +14                       SET EXT=$SELECT(EXT'="":";"_$PIECE(TEMP,U),1:$PIECE(TEMP,U))
                       End DoDot:2
 +15               SET RESULT=INT_U_EXT
               End DoDot:1
               QUIT RESULT
 +16       IF NAME="OVERRIDE REASON"
               Begin DoDot:1
 +17               SET TEMP=DEFAULT("OVERRIDE REASON")
 +18               IF NEEDOVER=1
                       SET RESULT=1_U_1_U_TEMP
               End DoDot:1
               QUIT RESULT
 +19       IF NAME="GRPLIST"
               Begin DoDot:1
 +20               IF DEFAULT("GRPLIST")="NONE"
                       SET RESULT=0_U
                       QUIT 
 +21               SET RESULT=1_U
               End DoDot:1
               QUIT RESULT
 +22       IF NAME="CVXONLY"
               Begin DoDot:1
 +23               SET RESULT=$SELECT(DEFAULT("GRPLIST")="NONE":0,1:1)_U_1_U
 +24               SET RESULT=RESULT_$GET(DEFAULT("CVXONLY"))
               End DoDot:1
               QUIT RESULT
 +25      ;.I +$$GETDEF("ORDERED BY POLICY",TYPE,.DEFAULTS) S RESULT=U Q
 +26      ;.S RESULT=ENCOPIEN_U_ENCOPNAM Q
 +27       SET RESULT=$GET(DEFAULT(NAME))
 +28       IF RESULT=""
               SET RESULT=U
 +29       QUIT RESULT
 +30      ;
GETPOSS(ID,NAME,TYPE,DATETIME,ENCTYPE,LOC,VIMMDOC,PAT,CNT,RESULT,DEFAULTS,SERMAX,SERREQ,LOCLIST) ;
 +1        NEW NOTEARR,TEMP,X
 +2        IF TYPE=0
               Begin DoDot:1
 +3       ;S CODECNT=0
 +4                DO GETDETLS^ORFIMM2(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE,LOC,.SERREQ,.SERMAX)
 +5                DO GETROUTE^ORFIMM1(.RESULT,.CNT,.DEFAULTS,.LOCLIST)
 +6                DO GETSITE(.RESULT,.CNT,.DEFAULTS,.LOCLIST)
 +7                DO GETSERS(.RESULT,.CNT,.DEFAULTS,SERREQ,SERMAX)
               End DoDot:1
               QUIT 
 +8        IF TYPE=1
               Begin DoDot:1
 +9                DO GETINFO(.RESULT,.CNT,.DEFAULTS)
 +10               DO GETSITE(.RESULT,.CNT,.DEFAULTS)
 +11               DO GETROUTE^ORFIMM1(.RESULT,.CNT,.DEFAULTS)
 +12               DO GETSERS(.RESULT,.CNT,.DEFAULTS,SERREQ,SERMAX)
 +13               DO GETMANF(.RESULT,.CNT,.DEFAULTS)
 +14               DO GETLOC(.RESULT,.CNT,.DEFAULTS)
 +15               DO GETDLOC(.RESULT,.CNT,.DEFAULTS)
               End DoDot:1
               QUIT 
 +16       IF TYPE=2
               Begin DoDot:1
 +17               DO GETCONT(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE,$GET(LOC))
 +18               DO GETSTOP^ORFIMM1(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE)
               End DoDot:1
               QUIT 
 +19       IF TYPE=3
               Begin DoDot:1
 +20               DO GETREFUS(.RESULT,.CNT,.DEFAULTS,LOC)
 +21               DO GETSTOP^ORFIMM1(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE)
 +22               DO GETGROUP(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE)
 +23               DO GETCVX(.RESULT,.CNT,.DEFAULTS,ID,DATETIME,ENCTYPE)
               End DoDot:1
               QUIT 
 +24       IF TYPE=4
               Begin DoDot:1
 +25               SET TEMP=$SELECT(VIMMDOC["Admin":0,VIMMDOC["Hist":1,VIMMDOC["Contr":2,VIMMDOC["Ref":3,1:-1)
 +26               DO GETTEXT^ORFIMM1(.NOTEARR,.DEFAULTS,ID,NAME,TEMP,DATETIME,LOC,1)
 +27               SET X=0
                   FOR 
                       SET X=$ORDER(NOTEARR(X))
                       if X'>0
                           QUIT 
                       Begin DoDot:2
 +28                       SET CNT=CNT+1
                           SET RESULT(CNT)="DATA WORD PROCESSING"_U_"DISPLAY"_U_NOTEARR(X)
                       End DoDot:2
               End DoDot:1
               QUIT 
 +29       IF TYPE=5
               Begin DoDot:1
 +30               DO GETREAD(.RESULT,.CNT,.DEFAULTS,PAT)
 +31               IF "AID"[ENCTYPE
                       SET DEFAULTS("VISIT DATE TIME")=U_DATETIME
 +32               IF "AID"'[ENCTYPE
                       SET DEFAULTS("VISIT DATE TIME")=U_$$NOW^XLFDT()
               End DoDot:1
 +33       QUIT 
 +34      ;
GETREAD(RESULT,CNT,DEFAULTS,PAT) ;
 +1        NEW ORARR,X,TEMP
 +2        DO READENT^PXAPIIM(.ORARR,PAT)
 +3        IF ORARR(1)=""
               QUIT 
 +4        SET DEFAULTS("PLACEMENT IEN")=$PIECE(ORARR(1),U)_U_$PIECE(ORARR(1),U,2)_" placed on: "_$TRANSLATE($$FMTE^XLFDT($PIECE(ORARR(1),U,3),"2ZM"),"@"," ")
 +5        KILL ORARR
           DO READVALS^PXAPIIM(.ORARR)
 +6        FOR X=$PIECE(ORARR("RANGE"),":"):1:$PIECE(ORARR("RANGE"),":",2)
               SET CNT=CNT+1
               SET RESULT(CNT)="DATA^READING"_U_X_U_X
 +7        SET TEMP=""
           FOR 
               SET TEMP=$ORDER(ORARR("CODES",TEMP))
               if TEMP=""
                   QUIT 
               Begin DoDot:1
 +8                SET CNT=CNT+1
                   SET RESULT(CNT)="DATA^RESULTS^"_$PIECE(TEMP,":")_U_$PIECE(TEMP,":",2)
               End DoDot:1
 +9        QUIT 
 +10      ;
GETSITE(RESULT,CNT,DEFAULT,LOCLIST) ;
 +1        NEW DATALST,ID,X
 +2        DO IMMSITE^PXVRPC2(.DATALST,"S:A")
 +3       ;S CNT=CNT+1,RESULT(CNT)="DATA"_U_"ADMIN SITE"_U_"NUMBER"_U_4
 +4        SET X=0
           FOR 
               SET X=$ORDER(DATALST(X))
               if X'>0
                   QUIT 
               Begin DoDot:1
 +5                IF DATALST(X)'[U
                       QUIT 
 +6                SET CNT=CNT+1
                   SET RESULT(CNT)="DATA"_U_"ADMIN SITE"_U_DATALST(X)
 +7                IF $DATA(LOCLIST)>1
                       Begin DoDot:2
 +8                        SET ID=0
                           FOR 
                               SET ID=$ORDER(LOCLIST(ID))
                               if ID'>0
                                   QUIT 
                               Begin DoDot:3
 +9                                IF ID'=+DATALST(X)
                                       QUIT 
 +10                               SET CNT=CNT+1
                                   SET RESULT(CNT)="LINE"_U_"ADMIN SITE"_U_DATALST(X)
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +11       QUIT 
 +12      ;
GETSERS(RESULT,CNT,DEFAULT,SERREQ,SERMAX) ;
 +1        NEW DATALST,X
 +2        DO GETSET^ORWPCE2(.DATALST,9000010.11,.04,1)
 +3       ;S CNT=CNT+1,RESULT(CNT)="DATA"_U_"SERIES"_U_"NUMBER"_U_2
 +4        SET X=""
           FOR 
               SET X=$ORDER(DATALST(X))
               if X=""
                   QUIT 
               Begin DoDot:1
 +5                IF $PIECE(DATALST(X),U)="@"
                       IF SERREQ=1
                           QUIT 
 +6                IF SERMAX>0
                       IF +DATALST(X)>0
                           IF +DATALST(X)'>SERMAX
                               SET CNT=CNT+1
                               SET RESULT(CNT)="LINE"_U_"SERIES"_U_DATALST(X)
 +7                SET CNT=CNT+1
                   SET RESULT(CNT)="DATA"_U_"SERIES"_U_DATALST(X)
               End DoDot:1
 +8        QUIT 
 +9       ;
GETINFO(RESULT,CNT,DEFAULTS) ;
 +1        NEW DATALIST,ORNAME,ORNODE,X
 +2        DO IMMSRC^PXVRPC2(.DATALIST,"S:AH")
 +3        SET X=0
           FOR 
               SET X=$ORDER(DATALIST(X))
               if X'>0
                   QUIT 
               Begin DoDot:1
 +4                SET ORNODE=$GET(DATALIST(X))
 +5                SET ORNAME=$PIECE(ORNODE,U,2)
 +6                IF ORNAME["-"
                       SET ORNAME=$$TRIM^XLFSTR($PIECE(ORNAME,"-",2))
 +7                SET $PIECE(ORNODE,U,2)=ORNAME
 +8                SET CNT=CNT+1
                   SET RESULT(CNT)="DATA"_U_"INFO SOURCE"_U_ORNODE
               End DoDot:1
 +9        QUIT 
 +10      ;
GETLOC(RESULT,CNT,DEFAULTS) ;
 +1        NEW DATALIST,X
 +2        DO HISTLOC^ORQQPX(.DATALIST)
 +3        SET X=0
           FOR 
               SET X=$ORDER(^TMP("OR",$JOB,"LOC",X))
               if X'>0
                   QUIT 
               Begin DoDot:1
 +4                SET CNT=CNT+1
                   SET RESULT(CNT)="DATA"_U_"LOCATION"_U_^TMP("OR",$JOB,"LOC",X)
               End DoDot:1
 +5        QUIT 
 +6       ;
GETDLOC(RESULT,CNT,DEFAULTS) ;
 +1        NEW DATALIST,X
 +2        DO GETDEFOL^ORQQPX(.DATALIST)
 +3        SET X=0
           FOR 
               SET X=$ORDER(DATALIST(X))
               if X'>0
                   QUIT 
               Begin DoDot:1
 +4                SET CNT=CNT+1
                   SET RESULT(CNT)="DATA DEFAULT"_U_"LOCATION"_U_DATALIST(X)
               End DoDot:1
 +5        QUIT 
 +6       ;
GETMANF(RESULT,CNT,DEFAULTS) ;
 +1        NEW DATALIST,X
 +2        DO IMAN^PXVRPC1(.DATALIST,"S:B","",1)
 +3       ;S CNT=CNT+1,RESULT(CNT)="DATA"_U_"INFO SOURCE"_U_"NUMBER"_U_4
 +4        SET X=0
           FOR 
               SET X=$ORDER(^TMP("PXVLST",$JOB,X))
               if X'>0
                   QUIT 
               Begin DoDot:1
 +5                IF +$PIECE(^TMP("PXVLST",$JOB,X),U)=-1
                       QUIT 
 +6                SET CNT=CNT+1
                   SET RESULT(CNT)="DATA"_U_"MANUFACTURER"_U_^TMP("PXVLST",$JOB,X)
               End DoDot:1
 +7        QUIT 
 +8       ;
GETREFUS(RESULT,CNT,DEFAULTS,LOC) ;
 +1        NEW DATALIST,X
 +2        DO GETICR^PXVRPC5(.DATALIST,920.5,"S:A","",LOC)
 +3        SET X=0
           FOR 
               SET X=$ORDER(DATALIST(X))
               if X'>0
                   QUIT 
               Begin DoDot:1
 +4                SET $PIECE(DATALIST(X),U)=+$PIECE(DATALIST(X),U)
 +5                SET CNT=CNT+1
                   SET RESULT(CNT)="DATA"_U_"REFUSAL"_U_DATALIST(X)
               End DoDot:1
 +6        QUIT 
 +7       ;
GETGROUP(RESULT,CNT,DEFAULTS,ID,DATETIME,ENCTYPE) ;
 +1        NEW GRP,IEN,OCNT,ORGRPS
 +2        SET OCNT=CNT
 +3        DO IMMGRP^PXAPIIM(.ORGRPS,ID)
 +4        SET GRP=""
           FOR 
               SET GRP=$ORDER(ORGRPS("VG",GRP))
               if GRP=""
                   QUIT 
               Begin DoDot:1
 +5                SET IEN=0
                   FOR 
                       SET IEN=$ORDER(ORGRPS("VG",GRP,IEN))
                       if IEN'>0
                           QUIT 
                       Begin DoDot:2
 +6                        SET CNT=CNT+1
                           SET RESULT(CNT)="DATA"_U_"GRPLIST"_U_IEN_U_ORGRPS("VG",GRP,IEN)
 +7       ;S CNT=CNT+1,RESULT(CNT)="DATA WORD PROCESSING"_U_"GRPLIST"_U_ORGRPS("VG",GRP,IEN)
                       End DoDot:2
               End DoDot:1
 +8        IF OCNT=CNT
               SET DEFAULTS("GRPLIST")="NONE"
               QUIT 
 +9        SET DEFAULTS("GRPLIST")="POPULATED"
 +10       QUIT 
 +11      ;
GETCVX(RESULT,CNT,DEFAULTS,ID,DATETIME,ENCTYPE) ;
 +1        SET CNT=CNT+1
           SET RESULT(CNT)="DATA"_U_"CVXONLY"_U_0_U_"No   (Refusal of all immunizations in this group)"
 +2        SET CNT=CNT+1
           SET RESULT(CNT)="DATA"_U_"CVXONLY"_U_1_U_"Yes  (Refusal of only this specific formulation of vaccine)"
 +3        IF $GET(DEFAULTS("CVXONLY"))=""
               SET DEFAULTS("CVXONLY")=0_U_"No   (Refusal of all immunizations in this group)"
 +4        QUIT 
 +5       ;
GETCONT(RESULT,CNT,DEFAULTS,ID,DATETIME,ENCTYPE,LOC) ;
 +1        NEW DATALST,NODE,X
 +2        DO IMMRPC^PXVRPC4(.DATALST,ID,DATETIME,"L:"_$GET(LOC))
 +3        SET X=0
           FOR 
               SET X=$ORDER(^TMP("PXVIMMRPC",$JOB,X))
               if X'>0
                   QUIT 
               Begin DoDot:1
 +4                SET NODE=^TMP("PXVIMMRPC",$JOB,X)
 +5                IF $PIECE(NODE,U)'="CONTRA"
                       QUIT 
 +6                SET $PIECE(NODE,U,3)=$SELECT($PIECE(NODE,U,7)="P":$PIECE(NODE,U,3)_" (PRECAUTION)",$PIECE(NODE,U,7)="C":$PIECE(NODE,U,3)_" (CONTRAINDICATED)",1:$PIECE(NODE,U,3))
 +7                SET $PIECE(NODE,U,2)=+$PIECE(NODE,U,2)
 +8                SET CNT=CNT+1
                   SET RESULT(CNT)="DATA"_U_"CONTRAINDICATED"_U_$PIECE(NODE,U,2,$LENGTH(NODE,U))
               End DoDot:1
 +9        QUIT 
 +10      ;
REMONLY(ID,TYPE) ;
 +1        NEW NAME,IDX,ORERR,ORVALUE,RESULT
 +2        SET RESULT=""
 +3        DO GETLST^XPAR(.ORVALUE,"ALL","OR IMM REMINDER DIALOG","I",.ORERR)
 +4        SET IDX=0
           FOR 
               SET IDX=$ORDER(ORVALUE(IDX))
               if IDX'>0!(RESULT'="")
                   QUIT 
               Begin DoDot:1
 +5                IF ORVALUE(IDX)=ID
                       Begin DoDot:2
 +6                        SET NAME=$PIECE($GET(^AUTTIMM(ID,0)),U)
                           SET RESULT=NAME_" administration can only be documented through a Reminder Dialog"
                       End DoDot:2
               End DoDot:1
 +7        QUIT RESULT
 +8       ;
VIS(VALUE) ;
 +1        NEW IMMVIS,IMMVISDT,IMMVISENTRY,PXSEQ,PXX,RESULT,X
 +2        SET PXSEQ=0
           SET RESULT=""
 +3        FOR PXX=1:1:$LENGTH(VALUE,";")
               Begin DoDot:1
 +4                SET IMMVISENTRY=$$TRIM^XLFSTR($PIECE(VALUE,";",PXX))
 +5                SET IMMVIS=$PIECE(IMMVISENTRY,"/",1)
 +6                IF 'IMMVIS
                       QUIT 
 +7                SET RESULT=$SELECT(RESULT="":IMMVIS,1:RESULT_";"_IMMVIS)
               End DoDot:1
 +8        QUIT RESULT