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

BGOVSTR.m

Go to the documentation of this file.
  1. BGOVSTR ; MSC/JS - Manage V STROKE ;30-Apr-2014 14;38;DKA
  1. ;;1.1;BGO COMPONENTS;**13,14**;Mar 20, 2007
  1. ;12.30.13 - MSC/JS add translation for Midnight, test in both pxiijs and pfrteen
  1. ;01.08.14 - MSC/DKA Send "@" to filer to delete comments when they are blank in the SET call.
  1. ;01.09.14 - MSC/JS delete fibrinolytic fields for fibrin therapy initiated or fibrin therapy refused.
  1. ;01.09.14 - MSC/DKA Remove calls to MIDGET() and MIDSET() because GUI got changed.
  1. ; Added code to change date only values to midnight (<Date-1>.24),
  1. ; and code to delete dates when they are blank.
  1. ;01.13.14 - MSC/JS moved GETVFIEN and NARR code to BGOVSTR1, reduce comments
  1. ;01.17.14 - MSC/JS - p13 update fixes added (IHS CCB items from Monday IHS call 1/13)
  1. ;01.24.14 - MSC/JS - moved SET code to BGOVSTR2 to keep routine size within 15k limit
  1. ;04.30.14 - MSC/DKA Corrected the order of the Scores (N) and their comments (MA,ML,LA,DY)
  1. ;
  1. ;Get STROKE by individual entry, visit, or patient
  1. ; INP = Patient IEN [1] ^ V File IEN [2] ^ Visit IEN [3]
  1. GET(RET,INP) ;EP
  1. N COUNT,FNUM,FN,FNS,FX,DIDNOT,Z2,INDX,IENARR,VFARR,VFDATA,VFFLD,VFMSG,VFSTR,VIEN,VFDEL,DNIR,ARRDT,EVTDT,RETMID
  1. S RET=$$TMPGBL^BGOUTL,FNUM=$$FNUM,COUNT=0
  1. ; Get the V file IEN value(s)
  1. ; The number of values returned in IENARR
  1. D GETVFIEN^BGOVSTR1(.IENARR,INP)
  1. I +$G(IENARR)=0 S @RET@(0)=$$ERR^BGOUTL(1035) Q ; Indicate there's an unexplained error (Item not found)
  1. I IENARR<0 S @RET@(0)=IENARR Q
  1. F INDX=1:1:IENARR D
  1. .S FNUM=$$FNUM ; Reset for each iteration
  1. .S VFIEN=IENARR(INDX)
  1. .K VFDATA,VFMSG
  1. .S VFDEL=0
  1. .D GETS^DIQ($$FNUM,VFIEN,"**","IE","VFDATA","VFMSG")
  1. .I $D(VFMSG("DIERR")) D
  1. ..S VFARR=0_U_$G(VFMSG("DIERR",1))_U_$G(VFMSG("DIERR",1,"TEXT",1))
  1. ..S VIEN=0 ; So $$ISLOCKED returns -1
  1. .E D
  1. ..S FX=$O(VFDATA(FNUM,"")) ; Take the first subscript
  1. ..I VFDATA(FNUM,FX,5.01,"I") S VFDEL=1 Q ; Ignore Deleted Records
  1. ..S @RET@(0)=$G(@RET@(0))+1 ; Increment the top-level counter for active records
  1. ..S VFARR=0,VFSTR="A"
  1. ..S ARRDT=VFDATA(FNUM,FX,.01,"I")
  1. ..S $P(VFSTR,U,2)=ARRDT ;ArrivalDateTime
  1. ..S $P(VFSTR,U,3)=VFDATA(FNUM,FX,.02,"I") ;PatientName
  1. ..S (VIEN,$P(VFSTR,U,4))=VFDATA(FNUM,FX,.03,"I") ;Visit
  1. ..S $P(VFSTR,U,5)=VFDATA(FNUM,FX,.04,"I") ;Handedness
  1. ..S $P(VFSTR,U,6)=VFDATA(FNUM,FX,1203,"I") ;Clinic
  1. ..S $P(VFSTR,U,7)=VFDATA(FNUM,FX,1204,"I") ;EncounterProvider
  1. ..S EVTDT=VFDATA(FNUM,FX,1201,"I")
  1. ..S $P(VFSTR,U,8)=EVTDT ;EventDateTime
  1. ..S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ..; Add the comment lines from field 1 on separate "AT" records
  1. ..S FNS=0
  1. ..F S FNS=$O(VFDATA(FNUM,FX,1,FNS)) Q:'FNS D
  1. ...S VFSTR="AT"
  1. ...S $P(VFSTR,U,2)=$G(VFDATA(FNUM,FX,1,FNS))
  1. ...S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ..S VFSTR="F"
  1. ..S $P(VFSTR,U,2)=$G(VFDATA(FNUM,FX,.11,"I")) ;FibrinolyticTherapyInitiated
  1. ..S $P(VFSTR,U,3)=VFDATA(FNUM,FX,.12,"I") ;FibDateEntered
  1. ..S $P(VFSTR,U,4)=VFDATA(FNUM,FX,.13,"I") ;FibEnteredBy
  1. ..S $P(VFSTR,U,5)=$G(VFDATA(FNUM,FX,.14,"I")) ;DidNotInit
  1. ..S $P(VFSTR,U,6)=VFDATA(FNUM,FX,.15,"I") ;DidnotInitDateTime
  1. ..S $P(VFSTR,U,7)=VFDATA(FNUM,FX,.16,"I") ;DidnotInitEnteredBy
  1. ..S DIDNOT=$G(VFDATA(FNUM,FX,.17,"I")) ;DidnotInitReason
  1. ..I $L(DIDNOT)<4 S $P(VFSTR,U,8)=DIDNOT
  1. ..E S Z2=$O(^AUTTREFR("B",DIDNOT,"")) S $P(VFSTR,U,8)=Z2
  1. ..S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ..; Add the comment lines from field 4 on separate "FT" records
  1. ..S FNS=0 F S FNS=$O(VFDATA(FNUM,FX,4,FNS)) Q:'FNS D
  1. ...S VFSTR="FT"
  1. ...S $P(VFSTR,U,2)=$G(VFDATA(FNUM,FX,4,FNS))
  1. ...S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ..;For NIH STROKE SCALE, create a separate set of N records for each multiple
  1. ..S FNUM=$$FNUM_15
  1. ..S FX="" F S FX=$O(VFDATA(FNUM,FX)) Q:FX="" D
  1. ...S VFSTR="N"_U_$P(FX,",")
  1. ...S $P(VFSTR,U,3)=$G(VFDATA(FNUM,FX,.01,"I")) ;NihStrokeScale
  1. ...S $P(VFSTR,U,4)=$G(VFDATA(FNUM,FX,.02,"I")) ;EventDateTime
  1. ...S $P(VFSTR,U,5)=$G(VFDATA(FNUM,FX,.03,"I")) ;EnteredBy
  1. ...S $P(VFSTR,U,6)=$G(VFDATA(FNUM,FX,.04,"I")) ;LOC
  1. ...S $P(VFSTR,U,7)=$G(VFDATA(FNUM,FX,.05,"I")) ;LOCquestions
  1. ...S $P(VFSTR,U,8)=$G(VFDATA(FNUM,FX,.06,"I")) ;LOCcommands
  1. ...S $P(VFSTR,U,9)=$G(VFDATA(FNUM,FX,.07,"I")) ;StrokeScale2BestGaze
  1. ...S $P(VFSTR,U,10)=$G(VFDATA(FNUM,FX,.08,"I")) ;Visual
  1. ...S $P(VFSTR,U,11)=$G(VFDATA(FNUM,FX,.09,"I")) ;StrokeScaleFacialPalsy
  1. ...S $P(VFSTR,U,12)=$G(VFDATA(FNUM,FX,.1,"I")) ;MotorArmLeft
  1. ...S $P(VFSTR,U,13)=$G(VFDATA(FNUM,FX,.11,"I")) ;MotorArmRight
  1. ...S $P(VFSTR,U,14)=$G(VFDATA(FNUM,FX,.12,"I")) ;MotorLegRight
  1. ...S $P(VFSTR,U,15)=$G(VFDATA(FNUM,FX,.13,"I")) ;MotorLegLeft
  1. ...S $P(VFSTR,U,16)=$G(VFDATA(FNUM,FX,.14,"I")) ;LimbAtaxia
  1. ...S $P(VFSTR,U,17)=$G(VFDATA(FNUM,FX,.15,"I")) ;Sensory
  1. ...S $P(VFSTR,U,18)=$G(VFDATA(FNUM,FX,.16,"I")) ;BestLanguage
  1. ...S $P(VFSTR,U,19)=$G(VFDATA(FNUM,FX,.17,"I")) ;Dysarthria
  1. ...S $P(VFSTR,U,20)=$G(VFDATA(FNUM,FX,.18,"I")) ;ExtinctionInattention
  1. ...S $P(VFSTR,U,21)=$G(VFDATA(FNUM,FX,.19,"I")) ;TotalStrokeScore
  1. ...S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ...;For NIH STROKE SCALE MOTOR ARM COMMENTS, create a separate MA record
  1. ...S VFSTR="MA"_U_$P(FX,",")
  1. ...S $P(VFSTR,U,2)=$G(VFDATA(FNUM,FX,1.01,"I")) ;Motor Arm Left Comment
  1. ...S $P(VFSTR,U,3)=$G(VFDATA(FNUM,FX,1.02,"I")) ;Motor Arm Right Comment
  1. ...S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ...;For NIH STROKE SCALE MOTOR LEG COMMENTS, create a separate ML record
  1. ...S VFSTR="ML"_U_$P(FX,",")
  1. ...S $P(VFSTR,U,2)=$G(VFDATA(FNUM,FX,2.01,"I")) ;Motor Leg Right Comment
  1. ...S $P(VFSTR,U,3)=$G(VFDATA(FNUM,FX,2.02,"I")) ;Motor Leg Left Comment
  1. ...S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ...;For NIH STROKE SCALE LIMB ATAXIA COMMENT, create a separate LA record
  1. ...S VFSTR="LA"_U_$P(FX,",")
  1. ...S $P(VFSTR,U,2)=$G(VFDATA(FNUM,FX,3.01,"I")) ;Limb Ataxia Comment
  1. ...S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ...;For NIH STROKE SCALE DYSARTHRIA COMMENT, create a separate DY record
  1. ...S VFSTR="DY"_U_$P(FX,",")
  1. ...S $P(VFSTR,U,2)=$G(VFDATA(FNUM,FX,3.02,"I")) ;Dysarthria Comment
  1. ...S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ..;For PROTOCOL STANDING ORDERS, create P and PT records for each multiple
  1. ..S FNUM=$$FNUM_13
  1. ..S FX="" F S FX=$O(VFDATA(FNUM,FX)) Q:FX="" D
  1. ...S VFSTR="P"_U_$P(FX,",")
  1. ...S $P(VFSTR,U,3)=$G(VFDATA(FNUM,FX,.01,"I")) ;ProtocolStandingOrders
  1. ...S $P(VFSTR,U,4)=$G(VFDATA(FNUM,FX,.02,"I")) ;EventDateTime
  1. ...S $P(VFSTR,U,5)=$G(VFDATA(FNUM,FX,.03,"I")) ;Date/Time Entered
  1. ...S $P(VFSTR,U,6)=$G(VFDATA(FNUM,FX,.04,"I")) ;Entered By
  1. ...S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ...; Add comment lines for "PT" record
  1. ...S FNS=0 F S FNS=$O(VFDATA(FNUM,FX,1,FNS)) Q:'FNS D
  1. ....S VFSTR="PT"_U_$P(FX,",")
  1. ....S $P(VFSTR,U,3)=$G(VFDATA(FNUM,FX,1,FNS))
  1. ....S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ..;For STROKE SYMPTOMS, create S and ST records for each multiple
  1. ..S FNUM=$$FNUM_14
  1. ..S FX="" F S FX=$O(VFDATA(FNUM,FX)) Q:FX="" D
  1. ...S VFSTR="SS"_U_$P(FX,",")
  1. ...S $P(VFSTR,U,3)=$G(VFDATA(FNUM,FX,.01,"I")) ;ConceptID
  1. ...S $P(VFSTR,U,4)=$G(VFDATA(FNUM,FX,.019,"I")) ;SnomedPreferredTerm
  1. ...S $P(VFSTR,U,5)=$G(VFDATA(FNUM,FX,.02,"I")) ;DescriptionID
  1. ...S $P(VFSTR,U,6)=$P($G(VFDATA(FNUM,FX,.03,"E")),"|",1) ;ProviderText
  1. ...S $P(VFSTR,U,7)=$G(VFDATA(FNUM,FX,.04,"I")) ;DateTimeEntered
  1. ...S $P(VFSTR,U,8)=$G(VFDATA(FNUM,FX,.05,"I")) ;EnteredBy
  1. ...S $P(VFSTR,U,9)=$G(VFDATA(FNUM,FX,.06,"I")) ;Witnessed?
  1. ...S $P(VFSTR,U,10)=$G(VFDATA(FNUM,FX,.07,"I")) ;WitnessedBy
  1. ...S $P(VFSTR,U,11)=$G(VFDATA(FNUM,FX,.08,"I")) ;DateTimeWitnessed
  1. ...S $P(VFSTR,U,12)=$G(VFDATA(FNUM,FX,.09,"I")) ;BaselineStateLoinc
  1. ...S $P(VFSTR,U,13)=$G(VFDATA(FNUM,FX,.1,"I")) ;BaselineStateDateTime
  1. ...S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ...; Add the STROKE SYMPTOMS COMMENT lines on "ST" records
  1. ...S FNS=0 F S FNS=$O(VFDATA(FNUM,FX,1,FNS)) Q:'FNS D
  1. ....S VFSTR="ST"_U_$P(FX,",")
  1. ....S $P(VFSTR,U,3)=$G(VFDATA(FNUM,FX,1,FNS))
  1. ....S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. ..; For HANDEDNESS SNOMED CT, create a separate set of HS records for each multiple
  1. ..S FNUM=$$FNUM_2
  1. ..S FX="" F S FX=$O(VFDATA(FNUM,FX)) Q:FX="" D
  1. ...S VFSTR="HS"_U_$P(FX,",")
  1. ...S $P(VFSTR,U,3)=$G(VFDATA(FNUM,FX,.01,"I")) ; HandednessSnomedCode
  1. ...S $P(VFSTR,U,4)=$G(VFDATA(FNUM,FX,.019,"I")) ;HandednessPreferredTerm
  1. ...S VFARR=VFARR+1,VFARR(VFARR)=VFSTR
  1. .I 'VFDEL D
  1. ..S COUNT=COUNT+1
  1. ..M @RET@(COUNT)=VFARR
  1. ..S @RET@(COUNT)=VFIEN_U_VFARR_U_$$ISLOCKED^BEHOENCX(VIEN) ; Reset value to include the Visit File IEN
  1. ..K VFARR
  1. Q RET
  1. SET(RET,INP) ;EP
  1. ;Add/edit V STROKE entry
  1. ;The first string is the VFIEN^NumberOfLines^VisitIsLocked, check BGOVSTR2 for input string descriptions
  1. S RET=""
  1. D SET^BGOVSTR2(.RET,.INP)
  1. Q
  1. ; Logically Delete a STROKE entry
  1. ; INP = V File IEN ^ DELETE REASON ^ OTHER
  1. ; Flag the entry as Entered in Error
  1. ; Specify the Reason and Comment (if Reason is Other)
  1. ; Update V Measurement file LKW and NSST entries EIE
  1. DEL(RET,INP) ;EP
  1. N COMMENT,FDA,REASON,VFIEN
  1. S VFIEN=$P(INP,U)
  1. S REASON=$P(INP,U,2)
  1. S COMMENT=$P(INP,U,3)
  1. I VFIEN="" S RET=$$ERR^BGOUTL(1008) Q
  1. I '$D(^AUPNVSTR(VFIEN)) S RET=$$ERR^BGOUTL(1035) Q
  1. S FDA=$NA(FDA($$FNUM,VFIEN_","))
  1. S @FDA@(5.01)=1
  1. S @FDA@(5.02)=DUZ
  1. S @FDA@(5.03)=$$NOW^XLFDT()
  1. S @FDA@(5.04)=REASON
  1. S @FDA@(5.05)=COMMENT
  1. S RET=$$UPDATE^BGOUTL(.FDA,,VFIEN)
  1. S:RET="" RET=1
  1. N REFREA
  1. S REFREA=$$GET1^DIQ(9000010.63,VFIEN,.17)
  1. I $G(REFREA)]"" D
  1. .N RET S RET=$$DELREF^BGOVSTR1(VFIEN)
  1. D EIEVM^BGOVSTR1(.RET2,VFIEN)
  1. Q
  1. ; Return V File #
  1. FNUM(RET,INP) S RET=9000010.63
  1. Q RET