| 1 | RA45PST2 ;Hines OI/GJC - Post-init 'B', patch 45 ;10/10/03  06:32
 | 
|---|
| 2 | VERSION ;;5.0;Radiology/Nuclear Medicine;**45**;Mar 16, 1998
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | ENQ2 ;The second process must be tasked off that will identify all the
 | 
|---|
| 5 |  ;non-parent Rad/Nuc Med orderable items (OI) in file 101.43 checking
 | 
|---|
| 6 |  ;them to see if barium, oral cholecystogram or unspecified contrast
 | 
|---|
| 7 |  ;media happen to be associated contrasts.
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ;If no associations move onto the next OI and check for CMs
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;If yes, update the procedure in file 71; add barium, oral
 | 
|---|
| 12 |  ;cholecystografic or unspecified contrast media to the CONTRAST MEDIA
 | 
|---|
| 13 |  ;(#125) multiple in file 71. All successful and unsuccessful updates
 | 
|---|
| 14 |  ;will be presented to the user in the form of an email message.
 | 
|---|
| 15 |  ;(Failure to update occurs when a record cannot be locked)
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  ;Finally, the Rad/Nuc Med Procedure (71) file will be synchronized with
 | 
|---|
| 18 |  ;the Orderable Items (101.43) file.
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ;Note: since parent procedure records resident in the OI file prior
 | 
|---|
| 21 |  ;to RA*5*45 did not have CM associations synchronizing files 101.43 &
 | 
|---|
| 22 |  ;71 will occur just before processing is finished.
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  S:$D(ZTQUEUED) ZTREQ="@" S RAX="",(RACT,ZTSTOP)=0
 | 
|---|
| 25 |  F  S RAX=$O(^ORD(101.43,"S.XRAY",RAX)) Q:RAX=""  D  Q:ZTSTOP
 | 
|---|
| 26 |  .S RAY=0 F  S RAY=$O(^ORD(101.43,"S.XRAY",RAX,RAY)) Q:'RAY  D
 | 
|---|
| 27 |  ..S RAOIRA=$G(^ORD(101.43,RAY,"RA")),RAOICM=$P(RAOIRA,U) Q:RAOICM=""
 | 
|---|
| 28 |  ..S RAOIPT=$P(RAOIRA,U,2) Q:("^B^P^")[("^"_RAOIPT_"^")
 | 
|---|
| 29 |  ..;parents have no descendents in 101.43 & broads have no CPTs quit
 | 
|---|
| 30 |  ..S RAOI=$G(^ORD(101.43,RAY,0)),RAOI(2)=$P(RAOI,U,2)
 | 
|---|
| 31 |  ..Q:$P(RAOI(2),";",2)'="99RAP"  ;just to be on the safe side...
 | 
|---|
| 32 |  ..;update file 71 with CM data, lock the record if lock fails quit
 | 
|---|
| 33 |  ..;record will not be updated in this case
 | 
|---|
| 34 |  ..L +^RAMIS(71,+RAOI(2)):30
 | 
|---|
| 35 |  ..I '$T D SETMP(+RAOI(2),$E($P(RAOI,U),1,40),"",RAOICM,"*failed*",1) Q
 | 
|---|
| 36 |  ..F RAI=1:1:$L(RAOICM) D FILECM(+RAOI(2),$E(RAOICM,RAI),RAI)
 | 
|---|
| 37 |  ..L -^RAMIS(71,+RAOI(2)) ;unlock
 | 
|---|
| 38 |  ..;identify those records in file 71 that have been updated; the
 | 
|---|
| 39 |  ..;user will be made aware of rad/nuc med procedure updates via email
 | 
|---|
| 40 |  ..S RAMIS(0)=$G(^RAMIS(71,+RAOI(2),0)),RAPNAME=$P(RAMIS(0),U)
 | 
|---|
| 41 |  ..S RACT=RACT+1 S:RACT#200=0 ZTSTOP=$$S^%ZTLOAD()
 | 
|---|
| 42 |  ..S RACPT=$P($$CPT^ICPTCOD($P(RAMIS(0),U,9)),U),RACPT=$S(RACPT=-1:"none",1:RACPT)
 | 
|---|
| 43 |  ..D SETMP(+RAOI(2),$E(RAPNAME,1,40),RACPT,RAOICM,"*done*",1)
 | 
|---|
| 44 |  ..Q
 | 
|---|
| 45 |  .Q
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ;if the user stopped this process via TaskMan (TM) inform the user
 | 
|---|
| 48 |  D:ZTSTOP=1 STOP
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  ;if there has been data updated, let the user know through an email
 | 
|---|
| 51 |  ;even if the user stopped the task via TaskMan (TM)
 | 
|---|
| 52 |  I +$O(^TMP("RA PROC UPDATE 45",$J,0)) D MAILQ2^RA45PST(1,"RA*5*45: Update Rad/NM CM definitions from Ord. Item CM definitions")
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  ;user stopped the process, do not proceed kill variables and quit
 | 
|---|
| 55 |  I ZTSTOP=1 D KILLQ2 Q
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  ;make sure the all from file 71 get updated in file 101.43; ZTSTOP
 | 
|---|
| 58 |  ;exists and is set to zero.
 | 
|---|
| 59 |  ;RAO7MFN takes care of: skipping broad procedures, skipping inactive
 | 
|---|
| 60 |  ;procedures, & flagging parent procedure with contrasts if a non-broad
 | 
|---|
| 61 |  ;descendent has contrasts.
 | 
|---|
| 62 |  S (RACT,RAY)=0 K ^TMP("RA PROC UPDATE 45",$J)
 | 
|---|
| 63 |  F  S RAY=$O(^RAMIS(71,RAY)) Q:'RAY  D  Q:ZTSTOP
 | 
|---|
| 64 |  .S RAMIS(0)=$G(^RAMIS(71,RAY,0)),RAPNAME=$E($P(RAMIS(0),U),1,40)
 | 
|---|
| 65 |  .S RASTAT=+$G(^RAMIS(71,RAY,"I")),RASTAT=$S(RASTAT=0:1,RASTAT>DT:1,1:0)
 | 
|---|
| 66 |  .S RAPTY=$P(RAMIS(0),U,6),RAPTY=$S(RAPTY="P":"(p)",1:"")
 | 
|---|
| 67 |  .S RACPTB=$P($$CPT^ICPTCOD($P(RAMIS(0),U,9)),U),RACPTB=$S(RACPTB=-1:"none",1:RACPTB),RAPNAME=RAPNAME_RAPTY
 | 
|---|
| 68 |  .;build Rad/Nuc Med procedure file based contrast media string
 | 
|---|
| 69 |  .S (I,RACM)=""
 | 
|---|
| 70 |  .F  S I=$O(^RAMIS(71,RAY,"CM","B",I)) Q:I=""  S RACM=RACM_I
 | 
|---|
| 71 |  .;
 | 
|---|
| 72 |  .;update file 71 with CM data; attempt lock, if lock fails quit
 | 
|---|
| 73 |  .;record will not be updated if a lock attempt fails
 | 
|---|
| 74 |  .K I S RACT=RACT+1 S:RACT#50=0 ZTSTOP=$$S^%ZTLOAD()
 | 
|---|
| 75 |  .Q:ZTSTOP  L +^RAMIS(71,RAY):30
 | 
|---|
| 76 |  .I '$T D SETMP(RAY,RAPNAME,RACPTB,RACM,"*failed*",2) Q
 | 
|---|
| 77 |  .D PROC^RAO7MFN(0,71,"1^"_RASTAT,RAY_"^"_RAPNAME)
 | 
|---|
| 78 |  .;1st parameter (param) indicates a single procedure update; 2nd param
 | 
|---|
| 79 |  .;indicates the file being edited (RAD/NUC MED PROCEDURE); 3rd param
 | 
|---|
| 80 |  .;indicates the 'before & after' status of the procedure after an
 | 
|---|
| 81 |  .;edit event ('before' status always active to guarantee unconditional
 | 
|---|
| 82 |  .;OI file updates); 4th param indicates the IEN (1st piece) and name
 | 
|---|
| 83 |  .;(2nd piece) of the procedure in file 71
 | 
|---|
| 84 |  .L -^RAMIS(71,RAY) ;unlock...
 | 
|---|
| 85 |  .D SETMP(RAY,RAPNAME,RACPTB,RACM,"*done*",2)
 | 
|---|
| 86 |  .Q
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  ;if the user stopped this process via TaskMan (TM) inform the user
 | 
|---|
| 89 |  D:ZTSTOP=1 STOP
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  ;if there has been data updated, let the user know through an email
 | 
|---|
| 92 |  I +$O(^TMP("RA PROC UPDATE 45",$J,0)) D MAILQ2^RA45PST(2,"RA*5*45: Synch up the Rad/Nuc Med Procedure & Orderable Item files")
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | KILLQ2 ;kill & quit
 | 
|---|
| 95 |  K RACM,RACT,RACPT,RACPTB,RAI,RAMIS,RAOI,RAOICM,RAOIPT,RAOIRA,RAPNAME
 | 
|---|
| 96 |  K RAPTY,RASTAT,RAX,RAY,ZTSTOP,^TMP("RA PROC UPDATE 45",$J)
 | 
|---|
| 97 |  Q
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 | FILECM(RAIEN,RACM,RAI) ;Files contrast medium into the CONTRAST MEDIA (#125)
 | 
|---|
| 100 |  ;field in the RAD/NUC MED PROCEDURE (#71) file. Set the 'CONTRAST MEDIA
 | 
|---|
| 101 |  ;USED' field (20) to 'Y'es on the initial pass into FILECM (when RAI=1)
 | 
|---|
| 102 |  ;Input
 | 
|---|
| 103 |  ; RAIEN=IEN of rad/nuc med procedure in file 71
 | 
|---|
| 104 |  ;  RACM=I (Iodinated ionic); N (Iodinated non-ionic); L (Gadolinium);
 | 
|---|
| 105 |  ;       C (Oral Cholecystographic); G (Gastrografin); B (Barium);
 | 
|---|
| 106 |  ;       M (unspecified contrast media)
 | 
|---|
| 107 |  ;   RAI=position of a particular character in a data string 
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  Q:$D(^RAMIS(71,RAIEN,"CM","B",RACM))\10  ;prevents duplicate records
 | 
|---|
| 110 |  K RAFDA S RAD1=+$O(^RAMIS(71,RAIEN,"CM",$C(32)),-1)+1
 | 
|---|
| 111 |  S:RAI=1 RAFDA(71,RAIEN_",",20)="Y"
 | 
|---|
| 112 |  S RAFDA(71.0125,"+"_RAD1_","_RAIEN_",",.01)=RACM
 | 
|---|
| 113 |  D UPDATE^DIE("","RAFDA") K RAD1,RAFDA
 | 
|---|
| 114 |  Q
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 | SETMP(SUB,NME,CPT,CMU,MSG,FMT) ;set the ^TMP("RA PROC UPDATE 45",$J) global
 | 
|---|
| 117 |  ;with procedure information
 | 
|---|
| 118 |  ;input: SUB=IEN of Rad/Nuc Med Procedure (Orderable Item ID fld value)
 | 
|---|
| 119 |  ;       NME=procedure name
 | 
|---|
| 120 |  ;       CPT=procedure CPT
 | 
|---|
| 121 |  ;       CMU=contrast media (see RACM definition for FILECM subroutine)
 | 
|---|
| 122 |  ;       MSG=indicator *done* or *failed*
 | 
|---|
| 123 |  ;       FMT=format for data in email(column position 80 chars wide max) 
 | 
|---|
| 124 |  N I,RAX,RAY S $P(RAY," ",81)="",RAX=""
 | 
|---|
| 125 |  F I=1:1:$L(CMU) S RAX=RAX_$E(CMU,I)_$S($L(CMU)>I:",",1:"")
 | 
|---|
| 126 |  S $E(RAY,1,8)=$G(MSG),$E(RAY,10,50)=$G(NME)
 | 
|---|
| 127 |  S:FMT=1 $E(RAY,52,59)=$G(CPT)
 | 
|---|
| 128 |  S:FMT=2 $E(RAY,55,60)=$G(CPT)
 | 
|---|
| 129 |  S:FMT=1 $E(RAY,60,70)=$G(RAX)
 | 
|---|
| 130 |  S:FMT=2 $E(RAY,65,77)=$G(RAX)
 | 
|---|
| 131 |  S ^TMP("RA PROC UPDATE 45",$J,SUB)=RAY
 | 
|---|
| 132 |  Q
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 | STOP ;inform the user that the task has been stopped
 | 
|---|
| 135 |  S ^TMP("RA PROC UPDATE 45",$J,$$SUB())="RA*5*45's Orderable Items-Rad/Nuc Med Proc. synchronization has been terminated prematurely"
 | 
|---|
| 136 |  Q
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 | SUB() ;return the next available subscript (arithmetic progression)
 | 
|---|
| 139 |  Q +$O(^TMP("RA PROC UPDATE 45",$J,$C(32)),-1)+1
 | 
|---|
| 140 |  ;
 | 
|---|