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

PXCEVFI1.m

Go to the documentation of this file.
  1. PXCEVFI1 ;ISL/dee,esw - Routine to edit a Visit or V-file entry ;May 14, 2021@11:51:23
  1. ;;1.0;PCE PATIENT CARE ENCOUNTER;**23,73,112,136,143,124,184,185,210,215,216,211,217**;Aug 12, 1996;Build 134
  1. Q
  1. ;
  1. EDIT ; -- edit the V-File stored in "AFTER"
  1. N DIR,DA,X,Y,C,PT01,PXCEINP,PXCEIN01,PXCEEND,PXD,PXCONTRA,PXJUST,PXVACK
  1. N PXCELINE,PXCETEXT,PXCEDIRB,PXCEMOD,PXVMISS,PXVRT,PXALERGY ; PX*1*216
  1. N PXCEKEY,PXCEIKEY,PXCENKEY,PXMDCNT
  1. W !
  1. G:PXCECAT="VST"!(PXCECAT="APPM")!(PXCECAT="CSTP") REST
  1. ;Do not allow editing of V-file .01s; V-file entries must be added
  1. ;to or deleted from the encounter. All the other fields can be
  1. ;edited. PX*1.0*211
  1. I $G(PXCEAFTR(300))'="" D Q
  1. . N TEXT
  1. . S TEXT(1)="This entry was created as a result of mapping, therefore it cannot be edited."
  1. . D EN^DDIOL(.TEXT)
  1. . H 4
  1. . S PXCELOOP=1
  1. S PT01=$P(PXCEAFTR(0),U,1)
  1. I PT01'="" D G REST
  1. . S PXCETEXT=$P($T(FORMAT+1^@PXCECODE),";;",2)
  1. . W !,$P(PXCETEXT,"~",4),$$EXTERNAL^DILFD(PXCEFILE,.01,"",PT01)
  1. . I PXCECAT="CPT" D
  1. ..;Get the number of modifiers.
  1. .. S PXMDCNT=$$CODM^ICPTCOD(PT01,"^TMP(""PXMODARR"",$J",PXCESOR,+^TMP("PXK",$J,"VST",1,0,"AFTER"))
  1. .. K ^TMP("PXMODARR",$J)
  1. ;
  1. EDIT01 ;
  1. I (PXCECAT="CPT")!(PXCECAT="POV")!(PXCECAT="SK")!(PXCECAT="IMM") D SC^PXCEVFI2($P(^AUPNVSIT(PXCEVIEN,0),U,5))
  1. S PXCETEXT=$P($T(FORMAT+1^@PXCECODE),";;",2)
  1. K DIR,DA,X,Y,C,PXCEDIRB,TEMP
  1. S PXCEDIRB=""
  1. S TEMP=$P(PXCETEXT,"~",7)
  1. I TEMP'="" D @TEMP
  1. I TEMP="" D
  1. . I PXCEDIRB'="" S DIR("B")=PXCEDIRB
  1. . S DIR(0)=PXCEFILE_",.01OA"
  1. . S DIR("A")=$P(PXCETEXT,"~",4)
  1. . S:$P(PXCETEXT,"~",8)]"" DIR("?")=$P(PXCETEXT,"~",8)
  1. . I PXCECAT="IMM" D
  1. . . S DIR(0)="PAO^9999999.14:QEM"
  1. . . S DIR("S")="I $$IMMSEL^PXVUTIL(Y,$G(PXCEVIEN))"
  1. . D ^DIR
  1. I X="@" D G ENDEDIT
  1. . N DIRUT
  1. . I $P(PXCEAFTR(0),"^",1)="" D
  1. .. W !,"There is no entry to delete."
  1. .. D WAIT^PXCEHELP
  1. . E D DEL^PXCEVFI2(PXCECAT)
  1. I $D(DIRUT),$P(PXCEAFTR(0),"^",1)="" S PXCELOOP=1
  1. I $D(DIRUT) S PXCEQUIT=1 Q
  1. S (PXCEINP,PXD)=Y
  1. S PXCEIN01=X
  1. I $P(Y,"^",2)'=PXCEDIRB,$$DUP(PXCEINP) G EDIT01
  1. I PXCECAT="IMM" D Q:PXCEQUIT ; PX*1*215
  1. . S (PXCONTRA,PXVACK)=0,PXJUST="" D CONTRA^PXCEICR
  1. . I 'PXCONTRA S $P(PXCEAFTR(12),"^",20)="@",$P(PXCEAFTR(16),"^",1)="@" Q
  1. . I PXCONTRA,'PXVACK S PXCEQUIT=1 Q
  1. . I PXCONTRA,PXVACK D
  1. ..S $P(PXCEAFTR(12),"^",20)=1
  1. ..S $P(PXCEAFTR(16),"^",1)=PXJUST
  1. ; for non-historicals stuff info source and require dose, dose unit, route or site ; PX*1*216
  1. I PXCECAT="IMM",'$$HIST,PXCEFIEN="" S $P(PXCEAFTR(13),"^")=$$HL72IEN(920.1,"00"),PXVMISS=0 D REQ I PXVMISS S PXCEQUIT=1 Q ; PX*1*216
  1. ; send Adverse Reaction Tracking (ART) alert if allergy type in ^PXV(920.4 is selected ; PX*1*216
  1. I PXCECAT="ICR" I $P($P(PXCEINP,";",2),",")="PXV(920.4" S PXALERGY=($P($P(PXCEINP,";"),",")) I $$ARTAPI^PXVUTIL(PXALERGY) D ARTALERT ; PX*1*216
  1. ;--File new CPT code and retrieve IEN
  1. I PXCECAT="CPT" D
  1. . S PXMDCNT=$$CODM^ICPTCOD(+Y,"^TMP(""PXMODARR"",$J",PXCESOR,+^TMP("PXK",$J,"VST",1,0,"AFTER"))
  1. . K ^TMP("PXMODARR",$J)
  1. . I $P(PXCEAFTR(0),"^",1)'=""!(PXMDCNT'>0) Q
  1. . N PXCEFIEN
  1. . D NEWCODE^PXCECPT
  1. . S ^TMP("PXK",$J,PXCECATS,1,"IEN")=PXCEFIEN
  1. I PXCECAT="PRV",$P(PXCEAFTR(0),"^",1)>0,PXCEDIRB]"" S $P(PXCEAFTR(0),"^",6)=""
  1. I $P(PXCEAFTR(0),U,1)="" S $P(PXCEAFTR(0),"^",1)=$P(PXCEINP,"^")
  1. K DIR,DA
  1. ;following code added per PX*185
  1. I $D(XQORNOD(0)) I $P(XQORNOD(0),U,4)="HF" D
  1. .N HFIEN,NODE
  1. .S HFIEN=$P(PXCEINP,U),NODE=$G(^AUTTHF(HFIEN,0))
  1. .Q:'$D(NODE)
  1. .I $P(NODE,U,8)'="Y" W !!,"WARNING: This Health Factor is currently not set to",!?10,"display on a Health Summary report.",!!
  1. .K HFIEN,NODE
  1. .Q
  1. ;
  1. REST ;Edit the rest of the fields.
  1. N FIELD,SKIPEVDT,TEMP,PXCESKTYP
  1. ;Because it has already been prompted for skip Event Date and Time
  1. ;for V CPT, V POV, and V Standard Codes.
  1. S SKIPEVDT=$S(PXCECAT="CPT":1,PXCECAT="POV":1,PXCECAT="SC":1,1:0)
  1. S PXCEEND=0
  1. ;
  1. ; For skin tests, check if entering placement/reading/both
  1. I PXCECAT="SK" D Q:PXCEQUIT
  1. . S PXCESKTYP="B"
  1. . I 'PXCEFIEN S PXCEQUIT=$$NEW^PXCESK(.PXCESKTYP,.PXCEAFTR,PXCEPAT,PXCEVIEN)
  1. . I PXCEFIEN S PXCEQUIT=$$EDIT^PXCESK(.PXCESKTYP,.PXCEAFTR,PXCEFIEN)
  1. . I PXCEQUIT S PXCENOER=1
  1. ;
  1. F PXCELINE=2:1 S PXCETEXT=$P($T(FORMAT+PXCELINE^@PXCECODE),";;",2) Q:PXCETEXT']"" D Q:PXCEEND
  1. . S FIELD=$P(PXCETEXT,"~",3)
  1. . I PXCECAT="SK",'$$PROMPT^PXCESK(PXCESKTYP,FIELD) Q
  1. . I (FIELD=1201),SKIPEVDT Q
  1. . I FIELD=.06,PXCECAT="ICR" Q ; PX*1*215
  1. . I FIELD=1301,PXCECAT="IMM",'$$HIST Q ; PX*1*215
  1. . I FIELD=1220,PXCECAT="IMM" Q ; PX*1*215
  1. . I FIELD=1601,PXCECAT="IMM" Q ; PX*1*215
  1. . I FIELD=1214,PXCECAT="SK" Q ; PX*1*210
  1. . I FIELD=1405,PXCECAT="IMM" Q ; PX*1*211
  1. . I FIELD=1406,PXCECAT="IMM" Q ; PX*1*210
  1. . I FIELD=1207,PXCECAT="IMM",$$HIST Q ; PX*1*216
  1. . I (FIELD=1302)!(FIELD=1303)!(FIELD=1312)!(FIELD=1313),PXCECAT="IMM",PXCEFIEN="",'$$HIST Q ; PX*1*216
  1. . I FIELD=1403 D Q:PXCEEND ; PX*1*210
  1. .. I PXCECAT'="IMM" S PXCEEND=1 Q ; PX*1*210
  1. .. N IMMIEN
  1. .. S IMMIEN=$P(PXCEAFTR(0),U,1)
  1. .. I $P($G(^AUTTIMM(IMMIEN,.5)),U,1)'=1 S PXCEEND=1 Q ; PX*1*210
  1. . I $P(PXCETEXT,"~",9)]"",$P(PXCETEXT,"~",3)'=80201 S PXCEKEY="" D Q:PXCEKEY'=1
  1. .. S PXCENKEY=$L($P(PXCETEXT,"~",9))
  1. .. F PXCEIKEY=1:1:PXCENKEY I PXCEKEYS[$E($P(PXCETEXT,"~",9),PXCEIKEY) S PXCEKEY=1 Q
  1. . K DIR,DA,X,Y,C
  1. . S TEMP=$P(PXCETEXT,"~",7)
  1. . I TEMP'="" D @TEMP
  1. . I TEMP="" D
  1. .. I PXCECAT="IMM",FIELD=1303 S PXVRT=$P(PXCEAFTR(13),"^",2) D Q:$$IEN2HL7(920.2,PXVRT)="PO" ; PX*1*216
  1. ... I $$IEN2HL7(920.2,PXVRT)="PO",$P(PXCEAFTR(13),"^",3)'="" S $P(PXCEAFTR(13),"^",3)="@"
  1. .. I $P(PXCEAFTR($P(PXCETEXT,"~",1)),"^",$P(PXCETEXT,"~",2))'="" D
  1. ... N DIERR,PXCEDILF,PXCEINT,PXCEEXT
  1. ... S PXCEINT=$P(PXCEAFTR($P(PXCETEXT,"~",1)),"^",$P(PXCETEXT,"~",2))
  1. ... S PXCEEXT=$$EXTERNAL^DILFD(PXCEFILE,$P(PXCETEXT,"~",3),"",PXCEINT,"PXCEDILF")
  1. ... S DIR("B")=$S('$D(DIERR):PXCEEXT,1:PXCEINT)
  1. .. S DIR(0)=PXCEFILE_","_$P(PXCETEXT,"~",3)_"A"
  1. .. S DIR("A")=$P(PXCETEXT,"~",4)
  1. .. I PXCECAT="IMM",$G(DIR("B"))="" D DEF ; PX*1*215
  1. .. S:$P(PXCETEXT,"~",8)]"" DIR("?")=$P(PXCETEXT,"~",8)
  1. .. I PXCECAT="IMM",'$$HIST,$P(PXCETEXT,"~",3)=1303 D SITE Q ; PX*1*216
  1. .. D ^DIR
  1. .. I PXCECAT="IMM",'$$HIST,$$REQF D MUST ; PX*1*216
  1. .. K DIR,DA
  1. .. I X="@" S Y="@"
  1. .. E I $D(DTOUT)!$D(DUOUT) S PXCEEND=1 S:PXCECAT="SIT"!(PXCECAT="APPM")!(PXCECAT="HIST")!(PXCECAT="CPT") PXCEQUIT=1 Q
  1. .. S $P(PXCEAFTR($P(PXCETEXT,"~",1)),"^",$P(PXCETEXT,"~",2))=$P(Y,"^")
  1. . I ($P(PXCETEXT,"~",3)=1202!($P(PXCETEXT,"~",3)=1204)) D:+Y>0 PROVIDER^PXCEVFI4(+Y)
  1. ;
  1. ENDEDIT ;
  1. Q
  1. REQ ; prompt for dose, dose units, route and site for non-historical administrations ; PX*1*216
  1. N PXEXT,PXVF,PXVP
  1. K DIR S PXVP=12,PXVF=1312 D EXTB S DIR("A")="Dose",DIR(0)="9000010.11,1312" D ^DIR,MUST K DIR Q:PXVMISS
  1. S $P(PXCEAFTR(13),"^",12)=$P(Y,"^")
  1. S PXVP=13,PXVF=1313 D EXTB S DIR("A")="Dose Units",DIR(0)="9000010.11,1313" D ^DIR,MUST K DIR Q:PXVMISS
  1. S $P(PXCEAFTR(13),"^",13)=$P(Y,"^")
  1. S PXVP=2,PXVF=1302 D EXTB S DIR("A")="Route of Administration",DIR(0)="9000010.11,1302" D ^DIR,MUST K DIR Q:PXVMISS
  1. S ($P(PXCEAFTR(13),"^",2),PXVRT)=$P(Y,"^")
  1. I $$IEN2HL7(920.2,PXVRT)="PO" Q
  1. SITE S PXVP=3,PXVF=1303 D EXTB
  1. I '$D(^PXV(920.6,PXVRT,0)) S DIR("A")="Site of Administration",DIR(0)="9000010.11,1303" D ^DIR,MUST K DIR Q:PXVMISS S $P(PXCEAFTR(13),"^",3)=$P(Y,"^")
  1. I $D(^PXV(920.6,PXVRT,0)) D D ^DIR,MUST K DIR,DA Q:PXVMISS S $P(PXCEAFTR(13),"^",3)=$P(Y,"^",2)
  1. .S DA(1)=PXVRT,DIR("A")="Site of Administration",DIR(0)="P^PXV(920.6,"_PXVRT_",1,:QEMZ"
  1. .S DIR("?")="Select the site the vaccine was administered."
  1. Q
  1. REQF() ; check if field is dose, dose unit, route or site ; PX*1*216
  1. N PXV294,PXVF
  1. S PXV294=0,PXVF=$P(PXCETEXT,"~",3)
  1. I PXVF=1312!(PXVF=1313)!(PXVF=1302)!(PXVF=1303) S PXV294=1
  1. Q PXV294
  1. ;
  1. MUST ; prompt for required entries if not entered ; PX*1*216
  1. S PXVMISS=0
  1. I X="@"!((Y="")) N PXVX S PXVX=$C(7)_"This is a required response. Enter '^' to exit." D EN^DDIOL(PXVX) D ^DIR
  1. I $D(DTOUT)!$D(DUOUT) S PXVMISS=1 Q
  1. I X="@"!((Y="")) D MUST
  1. Q
  1. EXTB ; get external value for DIR("B") ; PX*1*216
  1. N PXVDEF,PXVFAC,PXVIMM
  1. Q:'$D(PXCEVIEN)
  1. S PXVFAC=$$INST^PXVRESP(PXCEVIEN) Q:'PXVFAC
  1. S PXVIMM=+$G(PXD) Q:'PXVIMM
  1. S PXVDEF=$P($G(^PXV(920.05,PXVFAC,1,PXVIMM,13)),"^",PXVP)
  1. S PXEXT=$$EXTERNAL^DILFD(PXCEFILE,PXVF,"",PXVDEF,"PXCEDILF")
  1. I PXEXT'="" S DIR("B")=PXEXT
  1. Q
  1. DUP(PXCEINP) ; -- Check for dup entries.
  1. Q:PXCECAT="SIT"!(PXCECAT="APPM")!(PXCECAT="HIST") 0
  1. ;
  1. N PXCEDUP,PXCEINDX,X,Y
  1. S PXCEDUP=0
  1. S PXCEINDX=""
  1. F S PXCEINDX=$O(@(PXCEAUPN_"(""AD"",PXCEVIEN,PXCEINDX)")) Q:'PXCEINDX!PXCEDUP S:+@(PXCEAUPN_"(PXCEINDX,0)")=+PXCEINP&(PXCEINDX'=PXCEFIEN) PXCEDUP=1
  1. I PXCEDUP D
  1. . I PXCEDUP
  1. . W !,$P(PXCEINP,"^",2)," is already a "_PXCECATT_" for this Encounter."
  1. . I PXCECAT="POV" W !!,"Duplicate Diagnosis Not Allowed." Q ;PX/112
  1. . I PXCECAT="CPT",$$GET1^DIQ(357.69,$P(PXCEINP,"^",2),.01)>0 D Q
  1. . . W !,"No duplicate E&M codes allowed." ;PX/136
  1. . I $P($T(FORMAT^@PXCECODE),"~",4) D
  1. .. N DIR,DA
  1. .. S DIR(0)="Y"
  1. .. S DIR("A")="Do you want to add another "_$P(PXCEINP,"^",2)_""
  1. .. S DIR("B")="NO"
  1. .. D ^DIR
  1. .. S PXCEDUP='+Y
  1. Q PXCEDUP
  1. ;
  1. DEF ; get default response from file #920.05; PX*1*215
  1. N PXVDEF,PXVFAC,PXVIMM,PXCEEXT
  1. Q:'$D(PXCEVIEN)
  1. S PXVFAC=$$INST^PXVRESP(PXCEVIEN) Q:'PXVFAC
  1. S PXVIMM=+$G(PXD) Q:'PXVIMM
  1. S PXVDEF=$P($G(^PXV(920.05,PXVFAC,1,PXVIMM,$P(PXCETEXT,"~",1))),"^",$P(PXCETEXT,"~",2))
  1. S PXCEEXT=$$EXTERNAL^DILFD(PXCEFILE,$P(PXCETEXT,"~",3),"",PXVDEF,"PXCEDILF")
  1. I PXCEEXT'="" S DIR("B")=PXCEEXT
  1. Q
  1. HIST() ; check if historical encounter; PX*1*215
  1. N PXVHIST S PXVHIST=0
  1. I $G(PXCEVIEN),$P(^AUPNVSIT(PXCEVIEN,0),"^",7)="E" S PXVHIST=1
  1. Q PXVHIST
  1. ARTALERT ; Alert for Adverse Reaction Tracking (ART) ; PX*1*216
  1. Q:('$D(PXCEPAT("NAME")))!('$D(PXCEPAT("SSN_BRIEF"))) ; PX*1*216
  1. N XQA,XQAID,XQADATA,XQAMSG,XQATEXT,PXVVAR ; PX*1*216
  1. S XQA(DUZ)="" ; PX*1*216
  1. S XQAID="PX VIMM" ; PX*1*216
  1. S XQADATA=$E(PXCEPAT("NAME"),1,9)_" ("_$E(PXCEPAT("NAME"))_PXCEPAT("SSN_BRIEF")_"): " ; PX*1*216/p217
  1. S XQAMSG=XQADATA_"Allergy should be recorded in Adverse Reaction Tracking." ; PX*1*216/p217
  1. S XQATEXT(1)="" ; PX*1*216
  1. S XQATEXT(2)="You have recorded an allergy/adverse reaction contraindication reason. This" ; PX*1*216
  1. S XQATEXT(3)="information should also be recorded in the Adverse Reaction Tracking package" ; PX*1*216
  1. S XQATEXT(4)="if it is not already present there." ; PX*1*216
  1. S PXVVAR=$$SETUP1^XQALERT ; PX*1*216
  1. Q ; PX*1*216
  1. ;
  1. HL72IEN(PXFILE,PXHL7CODE) ;
  1. I $G(PXFILE)'?1(1"920.1",1"920.2") Q ""
  1. I '$D(PXHL7CODE) Q ""
  1. Q $O(^PXV(PXFILE,"H",PXHL7CODE,0))
  1. ;
  1. IEN2HL7(PXFILE,PXIEN) ;
  1. I $G(PXFILE)'?1(1"920.1",1"920.2",1"920.3",1"920.5") Q ""
  1. I '$G(PXIEN) Q ""
  1. Q $P($G(^PXV(PXFILE,PXIEN,0)),U,2)
  1. ;