| 1 | RASETU ;HISC/DAD-Determine Order Status for an Exam Set ;6/17/97  11:17
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;**15**;Mar 16, 1998
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;Routine reads through all cases generated from a single order
 | 
|---|
| 5 |  ;to gather information about the case statuses needed to determine
 | 
|---|
| 6 |  ;what status the order should be updated to
 | 
|---|
| 7 |  ;Input:   RADFN=Patient ien     <->     RAOIFN=order IEN
 | 
|---|
| 8 |  ;Output:  RASTATUS array with status info about exam set passed back
 | 
|---|
| 9 |  ;         format: min status_"^"_max status_"^"_$S(All_Statuses=0:1,1:0)
 | 
|---|
| 10 | EN1(RAOIFN,RADFN) ;
 | 
|---|
| 11 |  Q:'($D(^RADPT("AO",RAOIFN,RADFN))\10) "^^"
 | 
|---|
| 12 |  ; save current RACNI so we'd know which exam to skip
 | 
|---|
| 13 |  ; in the loop below if Exam Deletion is being processed, because
 | 
|---|
| 14 |  ; 1. the exam node hasn't been killed off yet,
 | 
|---|
| 15 |  ; 2. the exam node may have a non-cancelled exam status,
 | 
|---|
| 16 |  ;    which would throw off the loop calculation below
 | 
|---|
| 17 |  N RACNISAV S RACNISAV=$G(RACNI)
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  N RACNI,RADTI,RAORDER,RAPROC,RASTATUS
 | 
|---|
| 20 |  S RAORDER=$G(^RAO(75.1,RAOIFN,0))
 | 
|---|
| 21 |  I RAORDER="" Q "^^"
 | 
|---|
| 22 |  S RAPROC=+$P(RAORDER,U,2) ;             Procedure IEN
 | 
|---|
| 23 |  S RASTATUS("ORD")=$P(RAORDER,U,5) ;     Initial status
 | 
|---|
| 24 |  S RASTATUS("MAX")=-1 ;                  Largest status found
 | 
|---|
| 25 |  S RASTATUS("MIN")=10 ;                  Smallest non-zero status found
 | 
|---|
| 26 |  S RASTATUS("NUL")=1 ;                   $S(All_Statuses=0:1,1:0)
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  S RADTI=0
 | 
|---|
| 29 |  F  S RADTI=$O(^RADPT("AO",RAOIFN,RADFN,RADTI)) Q:RADTI'>0  D
 | 
|---|
| 30 |  . S RACNI=0
 | 
|---|
| 31 |  . F  S RACNI=$O(^RADPT("AO",RAOIFN,RADFN,RADTI,RACNI)) Q:RACNI'>0  D
 | 
|---|
| 32 |  .. I $D(RADELFLG),RACNISAV=RACNI Q  ;skip if Exam Deletion
 | 
|---|
| 33 |  .. S RASTATUS=+$P($G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)),U,3)
 | 
|---|
| 34 |  .. S RASTATUS(0)=$P($G(^RA(72,RASTATUS,0)),U,3) Q:RASTATUS(0)=""
 | 
|---|
| 35 |  .. I RASTATUS(0)>RASTATUS("MAX") S RASTATUS("MAX")=RASTATUS(0)
 | 
|---|
| 36 |  .. I (RASTATUS(0)),(RASTATUS(0)<RASTATUS("MIN")) D
 | 
|---|
| 37 |  ... S RASTATUS("MIN")=RASTATUS(0)
 | 
|---|
| 38 |  ... Q
 | 
|---|
| 39 |  .. I RASTATUS(0)>0 S RASTATUS("NUL")=0
 | 
|---|
| 40 |  .. Q
 | 
|---|
| 41 |  . Q
 | 
|---|
| 42 |  Q RASTATUS("MIN")_"^"_RASTATUS("MAX")_"^"_RASTATUS("NUL")
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 | PARNT(RAOIFN,RADFN) ; Based on the patient and the order number, determine
 | 
|---|
| 45 |  ;                 if the exams are part of an exam set.
 | 
|---|
| 46 |  ;  Input: 'RAOIFN' -> Order #            'RADFN' -> Patient ien
 | 
|---|
| 47 |  ; Output: $S(Exam Set:1,1:0)
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  Q:'($D(^RADPT("AO",RAOIFN,RADFN))\10) 0
 | 
|---|
| 50 |  N RADTI,RARXM
 | 
|---|
| 51 |  S RADTI=+$O(^RADPT("AO",RAOIFN,RADFN,0)) Q:'RADTI 0
 | 
|---|
| 52 |  S RARXM(0)=$G(^RADPT(RADFN,"DT",RADTI,0))
 | 
|---|
| 53 |  Q +$P(RARXM(0),"^",5)
 | 
|---|