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

BGOVSTR2.m

Go to the documentation of this file.
  1. BGOVSTR2 ; MSC/JS - Utility calls for V STROKE ;12-Nov-2014 14:03;PLS
  1. ;;1.1;BGO COMPONENTS;**13,14**;Mar 20, 2007
  1. ;01.24.14 - MSC/JS - move SET here to keep within 15k routine size limits
  1. ;02.06.14 - MSC/MGH Changed field .17 to store text
  1. ;05.01.14 - MSC/DKA Allow neither Fib Init nor Fib Not Init.
  1. ;
  1. ;Add/edit V STROKE entry
  1. SET(RET,INP) ;EP
  1. ; INP is an array of strings.
  1. ; The first string is the VFIEN^NumberOfLines^VisitIsLocked
  1. ; Each subsequent string is prefixed with a letter indicating the type of record:
  1. ; A - Arrival
  1. ; AT - Arrival Text (Comment)
  1. ; F - Fibrinolytic Therapy
  1. ; FT - Fibrinolytic Therapy Text (Comment)
  1. ; N - NIH Stroke Scale (Multiple)
  1. ; P - Protocol Standing Orders (Multiple)
  1. ; PT - Standing Order Comment (Multiple)
  1. ; SS - Stroke Symptoms (Multiple)
  1. ; ST - Stroke Symptoms EKG Findings Comment (Multiple)
  1. ; MA - NIH Motor Arm Comments
  1. ; ML - NIH Motor Limb Comments
  1. ; LA - NIH Limb Ataxia Comment
  1. ; DY - NIH Dysarthria Comment
  1. N BASELINE,DESCT,I,FDA,FNUM,NI,NIHDATE,NIHTOTAL,NOW,NUMNEW,NARR,NARRPTR,REFUSED,AARDT,EVTDT,EVTSTR,FIBTXT,REFDT,DFN
  1. N QIEN,DEL,QUAL,QUALS,SNOMED,SUBIEN,SUM,TYPE,VCODE,VFIEN,VFLDERR,VFNEW,VFSTR,VI,VIEN,VMIEN,VMINP,VISDAT,ARRDT,VFCOMM,VFVAL,FI
  1. S RET="",FNUM=$$FNUM
  1. S VFIEN=+INP(0)
  1. S VFNEW='VFIEN
  1. S VIEN=$P(INP(1),U,4)
  1. S VISDAT=$G(^AUPNVSIT(VIEN,0))
  1. S DFN=$P(VISDAT,U,5)
  1. I $G(DFN)="" S RET=$$ERR^BGOUTL(1062) Q
  1. S NOW=$$NOW^XLFDT ; Use the same value for Date/Time Entered fields
  1. S RET=$$CHKVISIT^BGOUTL(VIEN) Q:RET
  1. I VFNEW I VFIEN=0 S VFIEN=NOW
  1. I VFNEW D VFNEW^BGOUTL2(.RET,FNUM,VFIEN,VIEN) S:RET>0 VFIEN=RET,RET=""
  1. I 'VFIEN S RET=$$ERR^BGOUTL(1070) Q
  1. S FDA=$NA(FDA(FNUM,VFIEN_","))
  1. F VI=1:1:$P(INP(0),U,2) D
  1. .S VFSTR=$G(INP(VI)) Q:VFSTR=""
  1. .S VCODE=$P(VFSTR,U)
  1. .I VCODE="A" D
  1. ..S FDA=$NA(FDA(FNUM,VFIEN_","))
  1. ..S ARRDT=$P(VFSTR,U,2)
  1. ..I ARRDT>0,ARRDT'["." S ARRDT=(ARRDT-1)+.24
  1. ..S @FDA@(.01)=ARRDT ;ArrivalDateTime
  1. ..S @FDA@(.04)=$P(VFSTR,U,3) ;Handedness
  1. ..S @FDA@(1203)=$$GET1^DIQ(44,$P(VFSTR,U,5),8,"I") ;Clinic
  1. ..S @FDA@(1204)=$P(VFSTR,U,6) ;EncounterProvider
  1. ..S EVTDT=$P(VFSTR,U,7)
  1. ..I EVTDT>0,EVTDT'["." S EVTDT=(EVTDT-1)+.24
  1. ..S @FDA@(1201)=EVTDT ;EventDateTime
  1. ..S BASELINE=EVTDT
  1. .E I VCODE="AT" D
  1. ..S FDA=$NA(FDA(FNUM,VFIEN_","))
  1. ..S VFCOMM=$P(VFSTR,U,2) ; Comment (Date/Time Arrival)
  1. ..I VFCOMM="" S @FDA@(1)="@" ; Delete the comment, whether or not it already exists.
  1. ..E D
  1. ...S @FDA@(1)=$NA(FDA(FNUM,VFIEN_",",1))
  1. ...S @FDA@(1,0)=$G(@FDA@(1,0))+1
  1. ...S @FDA@(1,@FDA@(1,0))=VFCOMM
  1. .E I VCODE="F" D
  1. ..; 2014-05-01 DKA If no date is sent, then clear both FibInit and FibNotInit fields,
  1. ..; else if a reason is not sent, set FibInit and clear FibNotInit fields,
  1. ..; otherwise set FibNotInit and clear FibInit fields.
  1. ..S FDA=$NA(FDA(FNUM,VFIEN_","))
  1. ..;First check to see if neither FT Initiated nor FT Not Initiated (None button checked)
  1. ..I $P(VFSTR,U,2,3)=U F FI=.11:.01:.17 S @FDA@(FI)="@" ; Clear all the FibInit and FibNotInit fields
  1. ..E I $P(VFSTR,U,4)="" D
  1. ...; FT Initiated
  1. ...S @FDA@(.11)=$P(VFSTR,U,2) ;FibrinolyticTherapyInitiated
  1. ...S:@FDA@(.11)'=""&(@FDA@(.11)'[".") @FDA@(.11)=@FDA@(.11)-1+.24
  1. ...S @FDA@(.12)=NOW,@FDA@(.13)=DUZ
  1. ...S @FDA@(.14)="@"
  1. ...S @FDA@(.15)="@"
  1. ...S @FDA@(.16)="@"
  1. ...S @FDA@(.17)="@"
  1. ...;IHS/MSC/MGH Try to remove any refusal reason if this is an edit
  1. ...D DELREF^BGOVSTR1(VFIEN)
  1. ..E D
  1. ...; FT Not Initiated
  1. ...S (@FDA@(.14),REFDT)=$P(VFSTR,U,3) ;DidNotInit
  1. ...S:@FDA@(.14)'=""&(@FDA@(.14)'[".") @FDA@(.14)=@FDA@(.14)-1+.24
  1. ...S @FDA@(.15)=NOW,@FDA@(.16)=DUZ
  1. ...;S (@FDA@(.17),REFUSED)=$P(VFSTR,U,4) ;DidnotInitReason
  1. ...S REFUSED=$P(VFSTR,U,4)
  1. ...S FIBTXT=$$GET1^DIQ(9999999.102,REFUSED,.01)
  1. ...S @FDA@(.17)=FIBTXT
  1. ...S @FDA@(.11)="@"
  1. ...S @FDA@(.12)="@"
  1. ...S @FDA@(.13)="@"
  1. .E I VCODE="FT" D
  1. ..S FDA=$NA(FDA(FNUM,VFIEN_","))
  1. ..S VFCOMM=$P(VFSTR,U,2) ; Fibrinolytic Therapy Comment
  1. ..I VFCOMM="" S @FDA@(4)="@" ; Delete the comment, whether or not it already exists.
  1. ..E D
  1. ...S @FDA@(4)=$NA(FDA(FNUM,VFIEN_",",4))
  1. ...S @FDA@(4,0)=$G(@FDA@(4,0))+1
  1. ...S @FDA@(4,@FDA@(4,0))=VFCOMM
  1. .E I VCODE="N" D ;NIH Stroke Scale (Multiple-9000010.6315), [15;0]
  1. ..S SUBIEN=$P(VFSTR,U,2)
  1. ..I $G(SUBIEN)]"" Q:'$D(^AUPNVSTR(VFIEN,15,+SUBIEN))
  1. ..S DEL=$P(VFSTR,U,5) ;Delete flag
  1. ..I +SUBIEN&(DEL="@") D DEL(RET,VFIEN,SUBIEN) Q
  1. ..I SUBIEN="" S NUMNEW=$G(NUMNEW)+1,SUBIEN="+"_NUMNEW
  1. ..S SUBIEN=SUBIEN_","_VFIEN_","
  1. ..S FDA=$NA(FDA(FNUM_15,SUBIEN))
  1. ..;$p3 = .01 field (DateTime)
  1. ..S @FDA@(.01)=$S($P(VFSTR,U,3)>0:$P(VFSTR,U,3),1:NOW)
  1. ..S:@FDA@(.01)'=""&(@FDA@(.01)'[".") @FDA@(.01)=@FDA@(.01)-1+.24
  1. ..S @FDA@(.02)=$P(VFSTR,U,4) ;.02
  1. ..S:@FDA@(.02)'=""&(@FDA@(.02)'[".") @FDA@(.02)=@FDA@(.02)-1+.24
  1. ..S @FDA@(.03)=DUZ ;.03
  1. ..S VFVAL=$P(VFSTR,U,6),@FDA@(.04)=$S(VFVAL="":"@",1:VFVAL) ;.04
  1. ..S VFVAL=$P(VFSTR,U,7),@FDA@(.05)=$S(VFVAL="":"@",1:VFVAL) ;.05
  1. ..S VFVAL=$P(VFSTR,U,8),@FDA@(.06)=$S(VFVAL="":"@",1:VFVAL) ;.06
  1. ..S VFVAL=$P(VFSTR,U,9),@FDA@(.07)=$S(VFVAL="":"@",1:VFVAL) ;.07
  1. ..S VFVAL=$P(VFSTR,U,10),@FDA@(.08)=$S(VFVAL="":"@",1:VFVAL) ;.08
  1. ..S VFVAL=$P(VFSTR,U,11),@FDA@(.09)=$S(VFVAL="":"@",1:VFVAL) ;.09
  1. ..S VFVAL=$P(VFSTR,U,12),@FDA@(.1)=$S(VFVAL="":"@",1:VFVAL) ;.1
  1. ..S VFVAL=$P(VFSTR,U,13),@FDA@(.11)=$S(VFVAL="":"@",1:VFVAL) ;.11
  1. ..S VFVAL=$P(VFSTR,U,14),@FDA@(.12)=$S(VFVAL="":"@",1:VFVAL) ;.12
  1. ..S VFVAL=$P(VFSTR,U,15),@FDA@(.13)=$S(VFVAL="":"@",1:VFVAL) ;.13
  1. ..S VFVAL=$P(VFSTR,U,16),@FDA@(.14)=$S(VFVAL="":"@",1:VFVAL) ;.14
  1. ..S VFVAL=$P(VFSTR,U,17),@FDA@(.15)=$S(VFVAL="":"@",1:VFVAL) ;.15
  1. ..S VFVAL=$P(VFSTR,U,18),@FDA@(.16)=$S(VFVAL="":"@",1:VFVAL) ;.16
  1. ..S VFVAL=$P(VFSTR,U,19),@FDA@(.17)=$S(VFVAL="":"@",1:VFVAL) ;.17
  1. ..S VFVAL=$P(VFSTR,U,20),@FDA@(.18)=$S(VFVAL="":"@",1:VFVAL) ;.18
  1. ..S NIHTOTAL=0 F SUM=6:1:20 S NIHTOTAL=NIHTOTAL+$P($G(VFSTR),U,SUM)
  1. ..S @FDA@(.19)=NIHTOTAL ;.19
  1. ..N COMCODE,COMSTR,ZI D ;check for NIH comment fields
  1. ...;F ZI=1:1:$P(INP(0),U,2) D
  1. ...F ZI=VI+1:1:VI+4 D
  1. ....S COMSTR=$G(INP(ZI)) Q:COMSTR=""
  1. ....S COMCODE=$P(COMSTR,U)
  1. ....I COMCODE="MA" D
  1. .....S VFCOMM=$P(COMSTR,U,3) ;1.01
  1. .....S @FDA@(1.01)=$S(VFCOMM="":"@",1:VFCOMM)
  1. .....S VFCOMM=$P(COMSTR,U,4) ;1.02
  1. .....S @FDA@(1.02)=$S(VFCOMM="":"@",1:VFCOMM)
  1. ....I COMCODE="ML" D
  1. .....S VFCOMM=$P(COMSTR,U,3) ;2.01
  1. .....S @FDA@(2.01)=$S(VFCOMM="":"@",1:VFCOMM)
  1. .....S VFCOMM=$P(COMSTR,U,4) ;2.02
  1. .....S @FDA@(2.02)=$S(VFCOMM="":"@",1:VFCOMM)
  1. ....I COMCODE="LA" D
  1. .....S VFCOMM=$P(COMSTR,U,3) ;3.01
  1. .....S @FDA@(3.01)=$S(VFCOMM="":"@",1:VFCOMM)
  1. ....I COMCODE="DY" D
  1. .....S VFCOMM=$P(COMSTR,U,3) ;3.02
  1. .....S @FDA@(3.02)=$S(VFCOMM="":"@",1:VFCOMM)
  1. .E I VCODE="P" D ; Protocol Standing Orders (Sub-File)
  1. ..S SUBIEN=$P(VFSTR,U,2)
  1. ..I $G(SUBIEN)]"" Q:'$D(^AUPNVSTR(VFIEN,13,+SUBIEN))
  1. ..I SUBIEN["@" N NODE S NODE=",13," D DMULT^BGOVSTR1(RET,VFIEN,SUBIEN,NODE) Q
  1. ..I SUBIEN="" S NUMNEW=$G(NUMNEW)+1,SUBIEN="+"_NUMNEW
  1. ..S SUBIEN=SUBIEN_","_VFIEN_","
  1. ..S FDA=$NA(FDA(FNUM_13,SUBIEN))
  1. ..S @FDA@(.01)=$P(VFSTR,U,3)
  1. ..S @FDA@(.02)=$P(VFSTR,U,4)
  1. ..S:@FDA@(.02)'=""&(@FDA@(.02)'[".") @FDA@(.02)=@FDA@(.02)-1+.24
  1. ..S @FDA@(.03)=NOW
  1. ..S @FDA@(.04)=DUZ
  1. .E I VCODE="PT" D ;
  1. ..Q:+SUBIEN&(SUBIEN["@")
  1. ..S VFCOMM=$P(VFSTR,U,3)
  1. ..I VFCOMM="" S @FDA@(1)="@"
  1. ..E D
  1. ...S @FDA@(1)=$NA(FDA(FNUM_13,SUBIEN,1))
  1. ...S @FDA@(1,0)=$G(@FDA@(1,0))+1
  1. ...S @FDA@(1,@FDA@(1,0))=VFCOMM
  1. .E I VCODE="SS" D
  1. ..S SUBIEN=$P(VFSTR,U,2)
  1. ..I $G(SUBIEN)]"" Q:'$D(^AUPNVSTR(VFIEN,14,+SUBIEN))
  1. ..I SUBIEN["@" N NODE S NODE=",14," D DMULT^BGOVSTR1(RET,VFIEN,SUBIEN,NODE) Q
  1. ..I SUBIEN="" S NUMNEW=$G(NUMNEW)+1,SUBIEN="+"_NUMNEW
  1. ..S SUBIEN=SUBIEN_","_VFIEN_","
  1. ..S FDA=$NA(FDA(FNUM_14,SUBIEN))
  1. ..S @FDA@(.01)=$P(VFSTR,U,4) ;Concept ID
  1. ..S (DESCT,@FDA@(.02))=$P(VFSTR,U,3) ;Description ID
  1. ..S NARR=""
  1. ..I DESCT]"" S NARRPTR=$$NARR^BGOVSTR1(DESCT,NARR)
  1. ..S @FDA@(.03)=$S($G(NARRPTR)>0:NARRPTR,1:"")
  1. ..S @FDA@(.06)=$P(VFSTR,U,6) ;Witnessed?
  1. ..S @FDA@(.07)=$P(VFSTR,U,7) ;Witnessed By
  1. ..S:@FDA@(.07)="" @FDA@(.07)="@"
  1. ..S @FDA@(.08)=$P(VFSTR,U,8) ;Date/Time Witnessed
  1. ..I @FDA@(.08)="" S @FDA@(.08)="@"
  1. ..E S:@FDA@(.08)'["." @FDA@(.08)=@FDA@(.08)-1+.24
  1. ..I $P(VFSTR,U,6)=1 I $P(VFSTR,U,8)="" S @FDA@(.08)=NOW
  1. ..S @FDA@(.09)=$P(VFSTR,U,9) ;Baseline State LOINC
  1. ..S @FDA@(.1)=$P(VFSTR,U,10) ;Baseline State Date/Time
  1. ..S:@FDA@(.1)'=""&(@FDA@(.1)'[".") @FDA@(.1)=@FDA@(.1)-1+.24
  1. ..S @FDA@(.04)=NOW ; Date/Time Entered
  1. ..S @FDA@(.05)=DUZ ; Entered By
  1. .E I VCODE="ST" D
  1. ..Q:+SUBIEN&(SUBIEN["@")
  1. ..S VFCOMM=$P(VFSTR,U,3)
  1. ..I VFCOMM="" S @FDA@(1)="@"
  1. ..E D
  1. ...S @FDA@(1)=$NA(FDA(FNUM_14,SUBIEN,1))
  1. ...S @FDA@(1,0)=$G(@FDA@(1,0))+1
  1. ...S @FDA@(1,@FDA@(1,0))=VFCOMM
  1. S RET=$$UPDATE^BGOUTL(.FDA,"")
  1. I RET,VFNEW,$$DELETE^BGOUTL(FNUM,VFIEN) Q RET
  1. D:'RET VFEVT^BGOUTL2(FNUM,VFIEN,'VFNEW)
  1. S:'RET RET=VFIEN
  1. ;Patient Refusals for Service/NMI entry:
  1. I $G(REFUSED)]"" N RET S RET=$$SETREF^BGOVSTR1(DFN,REFUSED,REFDT,VFNEW)
  1. ;V Measurement LKW entry:
  1. I $G(BASELINE)]"" D
  1. .N RET1,RET2,LKW
  1. .S LKW=$$GET1^DIQ(9000010.63,VFIEN,1601,"I")
  1. .S RET1=$$SETLKW^BGOVSTR1(DFN_U_VIEN_U_BASELINE_U_LKW)
  1. .I +RET1 D
  1. ..N FDA
  1. ..S FDA=$NA(FDA(FNUM,VFIEN_","))
  1. ..S @FDA@(1601)=RET1
  1. ..S RET2=$$UPDATE^BGOUTL(.FDA,"")
  1. ;V Measurement NIH entry:
  1. I $G(NIHTOTAL)]"" D
  1. .N RET1 S RET1=$$SETNIH^BGOVSTR1(VFIEN,VIEN,.INP)
  1. Q RET
  1. DEL(RET,IEN,SUBIEN) ;EP Delete the subfield
  1. N ERR,DA,DIK,NODE,VMIEN
  1. S ERR=""
  1. S VMIEN=$$GET1^DIQ(9000010.6315,SUBIEN_","_IEN_",",.2,"I")
  1. S NODE=15
  1. S DA(1)=IEN,DA=SUBIEN
  1. S DIK="^AUPNVSTR(DA(1),"_NODE_","
  1. S:DA ERR=$$DELETE^BGOUTL(DIK,.DA)
  1. I ERR'="" S RET=RET_"^"_ERR
  1. D STRDEL^BGOVSTR1(VMIEN)
  1. Q
  1. ; Return V File #
  1. FNUM(RET,INP) S RET=9000010.63
  1. Q RET