| 1 | OREV1 ;SLC/DAN Event delayed orders set up continued ;1/14/03  11:54
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**142,141,165**;Dec 17, 1997
 | 
|---|
| 3 |  ;DBIA reference section
 | 
|---|
| 4 |  ;2686 - ^XTV(8989.5 and ^XTV(8989.51
 | 
|---|
| 5 |  ;519  - ^DIC(45.7
 | 
|---|
| 6 |  ;2263  - XPAR
 | 
|---|
| 7 |  ;10039- ^DIC(42
 | 
|---|
| 8 |  ;10009- DICN
 | 
|---|
| 9 |  ;10018- DIE
 | 
|---|
| 10 |  ;10026- DIR
 | 
|---|
| 11 |  ;10116- VALM1
 | 
|---|
| 12 |  ;10103- XLFDT
 | 
|---|
| 13 | SCR ;Sets DIC("S") for MAS MOVEMENT TYPE field of either file
 | 
|---|
| 14 |  N FILE
 | 
|---|
| 15 |  S FILE="^ORD("_$O(DR(1,0))_","
 | 
|---|
| 16 |  S DIC("S")="S TMP=$P("_FILE_"DA,0),U,2),TTP=$E($P(^DG(405.3,$P(^DG(405.2,Y,0),U,2),0),U)) I $S(TMP=TTP:1,1:0)"_$S('$G(@(FILE_DA_",1)")):"&('$$INUSEDC^OREV1())",1:"")
 | 
|---|
| 17 |  Q
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 | ACT ;Inactivate or reactivate an event or auto dc rule
 | 
|---|
| 20 |  N ORJ,Y,ORTMP,DA,DIC,ORGLOB
 | 
|---|
| 21 |  S VALMBCK="R" D FULL^VALM1
 | 
|---|
| 22 |  S ORGLOB="^ORD(100."_$S(ORTYPE="E":"5,",1:"6,")
 | 
|---|
| 23 |  I $G(ORNMBR)="" S ORNMBR=$$ORDERS("activate/inactivate")
 | 
|---|
| 24 |  F ORJ=1:1:$L(ORNMBR,",")-1 S ORTMP=$P(ORNMBR,",",ORJ),DA=$O(^TMP("OREDO",$J,"IDX",ORTMP,0)) D FLIP(DA)
 | 
|---|
| 25 |  Q
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 | FLIP(DA) ;Check status and flip if necessary
 | 
|---|
| 28 |  N STAT,DIR,DIE,DR,Y,NAME,CDT,MULT,IEN,SUB,USED,EVNTYPE
 | 
|---|
| 29 |  S NAME=$P(@(ORGLOB_DA_",0)"),U),EVNTYPE=$P(^(0),U,2)
 | 
|---|
| 30 |  S CDT=$$NOW^XLFDT
 | 
|---|
| 31 |  S STAT=$S($G(@(ORGLOB_DA_",1)")):^(1),1:0) ;Status is date/time if already inactivated
 | 
|---|
| 32 |  W !!,NAME," is currently ",$S(STAT:"IN",1:"")_"ACTIVE."
 | 
|---|
| 33 |  I ORTYPE="E",$$RELEVNTS(DA),'STAT W !!,"There are delayed orders awaiting release that are associated with this event.",!,"This event, even if inactivated, will still be applied to these delayed orders.",!!
 | 
|---|
| 34 |  I ORTYPE="A",'STAT W !!,"Inactivating auto-dc rules takes effect immediately.",!
 | 
|---|
| 35 |  I STAT,$G(EVNTYPE)="O",$$ACTSURG^OREV4(ORTYPE,DA) D  Q
 | 
|---|
| 36 |  .W !,NAME,!,"can not be activated because you already have an active surgery rule for this",!,"division.  Only one active surgery rule per division is allowed.",!
 | 
|---|
| 37 |  .S DIR(0)="E",DIR("A")="Press enter to continue" D ^DIR K DIR
 | 
|---|
| 38 |  I STAT,ORTYPE="E",$P($G(^ORD(100.5,DA,0)),U,12),$G(^ORD(100.5,$P(^(0),U,12),1)) D  Q  ;If inactive child event and parent is inactive don't activate child
 | 
|---|
| 39 |  .W !,NAME,!,"can not be activated until its parent event is active.",!
 | 
|---|
| 40 |  .S DIR(0)="E",DIR("A")="Press enter to continue" D ^DIR K DIR
 | 
|---|
| 41 |  I STAT,ORTYPE="E",'$$CANACT(DA,.USED) D  Q
 | 
|---|
| 42 |  .W !,NAME,!,"can not be activated because the following locations",!,"and/or treating specialties are currently in use by other entries.",!
 | 
|---|
| 43 |  .F MULT="LOC","TS" W:$D(USED(MULT)) !,$S(MULT="LOC":"LOCATIONS:",1:"TREATING SPECIALTIES:"),! D
 | 
|---|
| 44 |  ..S IEN=0 F  S IEN=$O(USED(MULT,IEN)) Q:'+IEN  D
 | 
|---|
| 45 |  ...S SUB=0 F  S SUB=$O(USED(MULT,IEN,SUB)) Q:'+SUB  D
 | 
|---|
| 46 |  ....W !,$S(MULT="LOC":$P($G(^DIC(42,SUB,0)),"^"),1:$P($G(^DIC(45.7,SUB,0)),"^"))," is in use by ",$P($G(@(ORGLOB_IEN_",0)")),"^"),!
 | 
|---|
| 47 |  .W !,"For active entries, LOCATIONS and TREATING SPECIALTIES",!,"must be unique within division and event type."
 | 
|---|
| 48 |  .S DIR(0)="E",DIR("A")="Press enter to continue" D ^DIR K DIR
 | 
|---|
| 49 |  I STAT I ORTYPE="A" I '$$CANACT(DA,.USED) D  Q
 | 
|---|
| 50 |  .W !,NAME,!,"can not be activated because the following MAS movements",!,"are currently in use by other entries.",!
 | 
|---|
| 51 |  .S IEN=0 F  S IEN=$O(USED(IEN)) Q:'+IEN  D
 | 
|---|
| 52 |  ..S SUB=0 F  S SUB=$O(USED(IEN,SUB)) Q:'+SUB  D
 | 
|---|
| 53 |  ...W !,$P($G(^DG(405.2,IEN,0)),U)," is in use by ",$P($G(^ORD(100.6,SUB,0)),U)
 | 
|---|
| 54 |  .W !,"For active entries, MAS movements within DIVISION must be unique."
 | 
|---|
| 55 |  .S DIR(0)="E",DIR("A")="Press return to continue" D ^DIR K DIR
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  S DIR(0)="Y",DIR("B")="NO",DIR("A")="Are you sure you want to "_$S(STAT:"",1:"IN")_"ACTIVATE this entry" D ^DIR
 | 
|---|
| 58 |  I Y'=1 W !,"Nothing changed!" Q
 | 
|---|
| 59 |  S DIE=ORGLOB,DR="1///"_$S(STAT:"@",1:CDT) D ^DIE W !,NAME," is now "_$S(STAT:"",1:"IN")_"ACTIVATED!"
 | 
|---|
| 60 |  I 'STAT S DA(1)=DA,DA=$O(@(ORGLOB_DA(1)_",2,"_"""ACT"""_",0)")),DIE=ORGLOB_DA(1)_",2,",DR="1///"_CDT D ^DIE D:ORTYPE="E" UPDTCHLD^OREV3(DA(1),CDT) Q
 | 
|---|
| 61 |  D SET(DA,CDT)
 | 
|---|
| 62 |  Q
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 | SET(MIEN,X) ;add new multiple to activation history
 | 
|---|
| 65 |  N DIC,DA
 | 
|---|
| 66 |  S DA(1)=MIEN
 | 
|---|
| 67 |  S DIC=ORGLOB_DA(1)_",2,",DIC(0)="L"
 | 
|---|
| 68 |  D FILE^DICN
 | 
|---|
| 69 |  Q
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | INUSE(MULT) ;determine if location or treating specialty is already in use
 | 
|---|
| 72 |  N ACTIVE,USED,NAME,TYPE,DIV,FMIEN
 | 
|---|
| 73 |  S USED=0,NAME="",FMIEN=$G(DA(1),DA)
 | 
|---|
| 74 |  S TYPE=$P($G(^ORD(100.5,FMIEN,0)),"^",2) ;movement type of entry being checked
 | 
|---|
| 75 |  S DIV=$P($G(^ORD(100.5,FMIEN,0)),"^",3) ;division of entry being checked
 | 
|---|
| 76 |  F  S NAME=$O(^ORD(100.5,"C",NAME)) Q:NAME=""!(USED)  D
 | 
|---|
| 77 |  .S ACTIVE=0 F  S ACTIVE=$O(^ORD(100.5,"C",NAME,ACTIVE)) Q:'+ACTIVE!USED  D
 | 
|---|
| 78 |  ..Q:DIV'=$P($G(^ORD(100.5,ACTIVE,0)),"^",3)  ;stop processing if not same division
 | 
|---|
| 79 |  ..Q:TYPE'=$P($G(^ORD(100.5,ACTIVE,0)),"^",2)  ;stop processing if not the same type
 | 
|---|
| 80 |  ..S USED=$D(^ORD(100.5,ACTIVE,MULT,"B",Y)) I USED S WHO=ACTIVE
 | 
|---|
| 81 |  Q USED
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 | CANACT(DA,USED) ;Function returns whether or not an entry can be activated.
 | 
|---|
| 84 |  ;For EVENTS, locations and specialties must be unique within division
 | 
|---|
| 85 |  ;and EVENT TYPE.  For AUTO DC, movement types must be unique within
 | 
|---|
| 86 |  ;division.
 | 
|---|
| 87 |  N MULT,SUB,Y,CANACT,WHO
 | 
|---|
| 88 |  S CANACT=1
 | 
|---|
| 89 |  I ORTYPE="E" F MULT="LOC","TS" D
 | 
|---|
| 90 |  .S SUB=0 F  S SUB=$O(^ORD(100.5,DA,MULT,SUB)) Q:'+SUB  D
 | 
|---|
| 91 |  ..S Y=$G(^(SUB,0)) I Y I $$INUSE(MULT) S CANACT=0,USED(MULT,WHO,Y)=""
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  I ORTYPE="A" D
 | 
|---|
| 94 |  .S SUB=0 F  S SUB=$O(^ORD(100.6,DA,3,SUB)) Q:'+SUB  D
 | 
|---|
| 95 |  ..S Y=+$G(^(SUB,0)) I Y I $$INUSEDC() S CANACT=0,USED(Y,WHO)=""
 | 
|---|
| 96 |  Q CANACT
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 | INUSEDC() ;Checks AUTO-DC rules for unique movement types
 | 
|---|
| 99 |  N DIV,USED
 | 
|---|
| 100 |  S USED=0
 | 
|---|
| 101 |  S DIV=+$P($G(^ORD(100.6,DA,0)),U,3)
 | 
|---|
| 102 |  I DIV I $D(^ORD(100.6,"AC",DIV,Y)) S WHO=$O(^(Y,0)),USED=1
 | 
|---|
| 103 |  Q USED
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 | HASREQD() ;Function returns whether entry has required entries or not
 | 
|---|
| 106 |  N REQD
 | 
|---|
| 107 |  S REQD=0
 | 
|---|
| 108 |  I ORTYPE="E" D
 | 
|---|
| 109 |  .I "^22^23^24^"[("^"_$P($G(^ORD(100.5,DA,0)),U,7)_"^") S REQD=1 Q  ;From pass (transfer) doesn't require treating specialty
 | 
|---|
| 110 |  .I $O(^ORD(100.5,DA,"LOC",0))>0!($O(^ORD(100.5,DA,"TS",0))>0) S REQD=1 ;Has locations or treating specialties
 | 
|---|
| 111 |  .I $O(^ORD(100.5,DA,"LOC",0))>0&($O(^ORD(100.5,DA,"TS",0))>0) S REQD=2 ;Warn user that both must be true if both defined.
 | 
|---|
| 112 |  I ORTYPE="A" D
 | 
|---|
| 113 |  .I $P($G(^ORD(100.6,DA,0)),U,2)="O" S REQD=1 ;If type is operating room then movements not required
 | 
|---|
| 114 |  .I $P($G(^ORD(100.6,DA,0)),U,2)'="O"&($O(^ORD(100.6,DA,3,0))>0) S REQD=1 ;movement type exists
 | 
|---|
| 115 |  .I $P($G(^ORD(100.6,DA,0)),U,2)="T",$D(^ORD(100.6,DA,3,"B",4)),$P($G(^ORD(100.6,DA,3,0)),U,4)>1 S REQD=2 ;If transfer type and interward transfer type not by itself
 | 
|---|
| 116 |  Q REQD
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 | CHKTYP(IEN) ;Check type of event and delete fields that are no longer needed based on the event type
 | 
|---|
| 119 |  N J,DR,DIE,DA,DIC,TYPE
 | 
|---|
| 120 |  I ORTYPE="E" D  Q
 | 
|---|
| 121 |  .S TYPE=$P(^ORD(100.5,IEN,0),U,2)
 | 
|---|
| 122 |  .I TYPE'="A"&(TYPE'="T") D DELMUL(100.5,IEN,"""LOC"""),DELMUL(100.5,IEN,"""TS""") ;if not admit or transfer delete locations and treating specialties
 | 
|---|
| 123 |  .S DA=IEN,DIE=100.5,DR="7///@" D ^DIE ;Delete MAS MOVEMENT when type changes as movement types are associated with event type
 | 
|---|
| 124 |  ;If not event type must be auto-dc
 | 
|---|
| 125 |  S TYPE=$P(^ORD(100.6,IEN,0),U,2)
 | 
|---|
| 126 |  I TYPE'="D" S DA=IEN,DIE=100.6,DR="6///@" D ^DIE ;Delete 'except from observation" if not discharge type
 | 
|---|
| 127 |  D DELMUL(100.6,IEN,3) ;delete MAS MOVEMENT
 | 
|---|
| 128 |  I TYPE'="S" D DELMUL(100.6,IEN,4) ;If not specialty type delete excluded treating specialties
 | 
|---|
| 129 |  I TYPE'="T" D DELMUL(100.6,IEN,5),DELMUL(100.6,IEN,6) ;If not transfer type delete included locations and included divisions
 | 
|---|
| 130 |  Q
 | 
|---|
| 131 |  ;
 | 
|---|
| 132 | ORDERS(ACTION) ; -- Return order numbers to act on, if action chosen first
 | 
|---|
| 133 |  N X,Y,DIR,MAX
 | 
|---|
| 134 |  S MAX=$G(VALMCNT) Q:MAX'>0 ""
 | 
|---|
| 135 |  I ACTION="edit" W !!,"Enter item number to edit or press enter to create a new entry"
 | 
|---|
| 136 |  S DIR(0)="LAO^1:"_MAX,DIR("A")="Select item(s): "
 | 
|---|
| 137 |  S DIR("?")="Enter the items you wish to "_ACTION_", as a range or list of numbers."_$S(ACTION="edit":" Press enter to create a NEW entry",1:"")
 | 
|---|
| 138 |  D ^DIR S:$D(DTOUT) Y="^"
 | 
|---|
| 139 |  I $D(Y(1)) W !,">>>Too many entries selected, try using smaller ranges" H 2 S Y="^"
 | 
|---|
| 140 |  Q Y
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 | CANDEL(FILE) ;Determines if event or rule can be deleted
 | 
|---|
| 144 |  N DEL,EVENT,LIST,I,J
 | 
|---|
| 145 |  S DEL=1
 | 
|---|
| 146 |  S EVENT=$O(^XTV(8989.51,"B","ORWDX WRITE ORDERS EVENT LIST",0))
 | 
|---|
| 147 |  S LIST=$O(^XTV(8989.51,"B","OREVNT COMMON LIST",0))
 | 
|---|
| 148 |  I FILE=100.5 D
 | 
|---|
| 149 |  .I $O(^ORE(100.2,"E",DA,0)) W !,"< Can't delete this event because file 100.2 is pointing to it >  " S DEL=0 Q
 | 
|---|
| 150 |  .I $D(^ORD(100.5,"DAD",DA)) W !,"< Can't delete parent events that have children >  " S DEL=0 Q
 | 
|---|
| 151 |  .S FND=0
 | 
|---|
| 152 |  .K LST D ENVAL^XPAR(.LST,LIST)
 | 
|---|
| 153 |  .S I="" F  S I=$O(LST(I)) Q:I=""!(FND)  D
 | 
|---|
| 154 |  ..S J="" F  S J=$O(LST(I,J)) Q:J=""!(FND)  I LST(I,J)=DA S FND=1
 | 
|---|
| 155 |  .I 'FND K LST D ENVAL^XPAR(.LST,EVENT) D
 | 
|---|
| 156 |  ..S I="" F  S I=$O(LST(I)) Q:I=""!(FND)  D
 | 
|---|
| 157 |  ...S J="" F  S J=$O(LST(I,J)) Q:J=""!(FND)  I DA=J S FND=1
 | 
|---|
| 158 |  .I FND W !,"< Can't delete event because parameters are pointing to it >  " S DEL=0
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 |  I FILE=100.6 D
 | 
|---|
| 161 |  .I $O(^ORE(100.2,"DC",DA,0)) S DEL=0 W !,"< Can't delete this rule because file 100.2 is pointing to it >  " Q
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 |  Q 'DEL  ;Reverse value of DEL so that $T is set correctly for fileman to determine if entry can be deleted.  Code is in ^DD(file#,.01,"DEL",.01,0)
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 | ASKOBS() ;Function to determine if 'except from observation' field should be asked.
 | 
|---|
| 166 |  N ANS
 | 
|---|
| 167 |  S ANS=1
 | 
|---|
| 168 |  I ETYPE="D" I $D(^ORD(100.6,DA,3,"B",12))!($D(^ORD(100.6,DA,3,"B",38))) S ANS=0 ;Don't ask if MAS MOVEMENT TYPE is 12 (death) or 38 (death with autopsy)
 | 
|---|
| 169 |  I ETYPE="T" I '$D(^ORD(100.6,DA,3,"B",14)) S ANS=0 ;If MAS MOVEMENT TYPE doesn't contain FROM ASIH (VAH) when type is transfer then don't ask
 | 
|---|
| 170 |  Q ANS
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 | DELMUL(FILE,IEN,LOC) ;Delete multiple entries for entry IEN in file FILE stored at location LOC
 | 
|---|
| 173 |  N I,DR,DIE,DA,DIC,GLOB,Y,DQ,DP,DL,DM,DI,DK
 | 
|---|
| 174 |  S GLOB="^ORD("_FILE_","_IEN_","
 | 
|---|
| 175 |  S I=0 F  S I=$O(@(GLOB_LOC_","_I_")")) Q:'+I  S DA(1)=IEN,DA=I,DR=".01///@",DIE="^ORD("_FILE_",DA(1),"_LOC_"," D ^DIE
 | 
|---|
| 176 |  Q
 | 
|---|
| 177 |  ;
 | 
|---|
| 178 | RELEVNTS(DA) ;Check to see if release event is currently being pointed to
 | 
|---|
| 179 |  N DFN,EVENT
 | 
|---|
| 180 |  S (DFN,EVENT)=0
 | 
|---|
| 181 |  F  S DFN=$O(^ORE(100.2,"AE",DFN)) Q:'+DFN  I $D(^ORE(100.2,"AE",DFN,DA)) S EVENT=1 Q
 | 
|---|
| 182 |  Q EVENT
 | 
|---|