| 1 | RAREG1 ;HISC/CAH,FPT,DAD AISC/MJK,RMO-Register Patient ;10/15/97  09:34
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;**7,21**;Mar 16, 1998
 | 
|---|
| 3 | ASKORD I $D(RAVSTFLG),$G(YY)]"",$P(YY,U,5) D ASET G PACS
 | 
|---|
| 4 |  ; radparfl = 1 if user chose detail-to-parent conversion
 | 
|---|
| 5 |  ; radparpr = ien of file 74 of parent proc to replace detail proc
 | 
|---|
| 6 |  K RADPARPR,RADPARFL
 | 
|---|
| 7 |  S RAOLP=0,RAOVSTS="3;5;8" W ! D ^RAORDS G Q1:$D(RAOUT) G EXAM:$D(RAORDS)
 | 
|---|
| 8 |  S RARD("A")="Do you want to Request an Exam for "_RANME_"? ",RARD(0)="S",RARD(1)="Yes^enter a request.",RARD(2)="No^not enter a request.",RARD("B")=2 D SET^RARD K RARD G Q1:$E(X)'="Y"
 | 
|---|
| 9 |  W !!?3,"...requesting an exam for ",RANME,"...",! D ^RAORD1
 | 
|---|
| 10 | EXAM ;
 | 
|---|
| 11 |  ; block mixture of single proc with parent procedures
 | 
|---|
| 12 |  N RA6,RA7,RA8 S RA6="",RA7=0,RA8=0
 | 
|---|
| 13 |  F  S RA6=$O(RAORDS(RA6)) Q:'RA6  S:$P($G(^RAMIS(71,$P(^RAO(75.1,+RAORDS(RA6),0),U,2),0)),U,6)="P" RA7=1 S:$P($G(^RAMIS(71,$P(^RAO(75.1,+RAORDS(RA6),0),U,2),0)),U,6)'="P" RA8=1
 | 
|---|
| 14 |  I RA7,RA8 W !!?7,*7,"You may not register a mixture of single and parent procedures.",! G Q1
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  I $G(RADPARFL) D  G:Y<1 Q1 ; process detail-to-parent
 | 
|---|
| 17 |  . D PSETPNT^RAREG4
 | 
|---|
| 18 |  . Q
 | 
|---|
| 19 |  S RAPARENT=+$P($G(^RADPT(RADFN,"DT",RADTI,0)),U,5)
 | 
|---|
| 20 |  K ^TMP($J,"RAREG1") S (RAEXIT,RAQUIT,RASKIPIT,RACNICNT)=0
 | 
|---|
| 21 |  D RSBIT^RAREG3
 | 
|---|
| 22 |  F RAOLP=1:1 S RAOIFN=$G(RAORDS(RAOLP)) Q:'RAOIFN!RAEXIT!RAQUIT  D
 | 
|---|
| 23 |  . D PROCESS^RAREG4
 | 
|---|
| 24 |  . Q
 | 
|---|
| 25 |  I RAEXIT,RAPARENT D EXAMDEL^RAREG2
 | 
|---|
| 26 |  I $D(^TMP($J,"RAREG1")) D UOSM^RAREG2
 | 
|---|
| 27 | PACS I $D(^TMP($J,"RAREG1")) S RACNT=0 F  S RACNT=$O(^TMP($J,"RAREG1",RACNT)) Q:'RACNT  D
 | 
|---|
| 28 |  .S RAREGTMP=$G(^TMP($J,"RAREG1",RACNT)),RADFN=$P(RAREGTMP,U,1),RADTI=$P(RAREGTMP,U,2),RACNI=$P(RAREGTMP,U,3)
 | 
|---|
| 29 |  .D REG^RAHLRPC
 | 
|---|
| 30 |  .Q
 | 
|---|
| 31 |  K RAREGTMP
 | 
|---|
| 32 |  D:$D(RADPARFL) CKDUPORD^RAREG2 ; ck for dupl procs in outstndg orders
 | 
|---|
| 33 | Q I '$D(RAREC) W !!?3,*7,"No exams entered for this visit. Must delete..." S DA(1)=RADFN,DA=RADTI,DIK="^RADPT(DA(1),""DT""," D ^DIK W "...deletion complete!" K RAPX
 | 
|---|
| 34 |  D LABEL^RAREG3
 | 
|---|
| 35 | Q1 D Q4^RAREG4
 | 
|---|
| 36 |  G PAT^RAREG
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 |  ;CN entry point is called every time a new case number is assigned.
 | 
|---|
| 39 |  ;The next available CN and last date CN's were "recycled" is stored in
 | 
|---|
| 40 |  ;^RA(79.2,1,"CN")=Next availabe CN ^ date last recycled.
 | 
|---|
| 41 |  ;This routine uses the next available CN unless it has been used for
 | 
|---|
| 42 |  ;the same exam date before (DUP checks for duplicate case/date pair).
 | 
|---|
| 43 |  ;Then the next available CN is calculated and written to the first
 | 
|---|
| 44 |  ;piece of ^RA(79.2,1,"CN").  The node is locked during this transaction.
 | 
|---|
| 45 | CN ;VARIABLES RATYPE,RADT AND RASET MUST EXIST AT THIS POINT
 | 
|---|
| 46 |  L +^RA(79.2,RATYPE,"CN") D CAL:'$D(^RA(79.2,RATYPE,"CN")),CAL:DT>$P(^("CN"),"^",2),CAL:+^("CN")>99999 S RAX=+^RA(79.2,RATYPE,"CN") D DUP
 | 
|---|
| 47 |  ; need recalculate if DUP returns an over 99999 value
 | 
|---|
| 48 |  I RAX>99999 D CAL S RAX=+^RA(79.2,RATYPE,"CN") D DUP
 | 
|---|
| 49 |  I 'RASET S X=RAX G CNQ
 | 
|---|
| 50 |  I $D(X),X'="N",X'=RAX W !!,*7,"New case number must be equal to '",RAX,"'. OK? YES// " R RANS:DTIME K X I RANS["N"!(RANS["n")!('$T) G CNQ
 | 
|---|
| 51 |  S X=RAX
 | 
|---|
| 52 |  ; get next available short case number for future registration
 | 
|---|
| 53 |  ; re-set "CN" node if future short case number >99999
 | 
|---|
| 54 |  ; NOTE1: find and store next free case number for future use 091300
 | 
|---|
| 55 |  F RAJ=(^RA(79.2,RATYPE,"CN")+1):1 I '$D(^RADPT("AE",RAJ)) S ^("CN")=RAJ_"^"_$P(^RA(79.2,RATYPE,"CN"),"^",2) Q
 | 
|---|
| 56 |  ; if the next free case no. for future use is >99999, need recalculate
 | 
|---|
| 57 |  I +^RA(79.2,RATYPE,"CN")>99999 D CAL
 | 
|---|
| 58 | CNQ L -^RA(79.2,RATYPE,"CN")
 | 
|---|
| 59 |  I $D(X),X>99999 W !!?3,*7,"You have reached the maximum limit for case numbers (99,999).",!?3,"You must first complete/purge your old exams before you can proceed." K X
 | 
|---|
| 60 |  K RAJ,RATYPE,RASET,RAX,RANS,RADT Q
 | 
|---|
| 61 | DUP ;Check to prevent use of same case number/date pair ;ch
 | 
|---|
| 62 |  ; both short and long case numbers will be checked for duplicates 091500
 | 
|---|
| 63 |  S RADTE99=$S('$D(RADTE):"",1:$E(RADTE,4,5)_$E(RADTE,6,7)_$E(RADTE,2,3))
 | 
|---|
| 64 |  I '$D(^RADPT("AE",RAX)),'$D(^RADPT("ADC",RADTE99_"-"_RAX)) G DUPQ
 | 
|---|
| 65 |  ; also check ADC xref while searching for next available number 08/15/00
 | 
|---|
| 66 |  ; note2: even though the current available case number is being
 | 
|---|
| 67 |  ;        stored, the next free case number for future use will be
 | 
|---|
| 68 |  ;        found and stored later, see note1 above     091300
 | 
|---|
| 69 |  F RAJ=(^RA(79.2,RATYPE,"CN")+1):1 I '$D(^RADPT("AE",RAJ)),'$D(^RADPT("ADC",RADTE99_"-"_RAJ)) S ^("CN")=RAJ_"^"_$P(^RA(79.2,RATYPE,"CN"),"^",2) S RAX=+^RA(79.2,RATYPE,"CN") Q
 | 
|---|
| 70 | DUPQ K RADTE99 Q
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ; the CAL section is called if :
 | 
|---|
| 73 |  ;       there isn't a ^RA(79.2,RATYPE,"CN")
 | 
|---|
| 74 |  ;   or  today's date is after the date in ^RA(79.2,RATYPE,"CN") piece 2
 | 
|---|
| 75 |  ;   or  ^RA(79.2,RATYPE,"CN") piece 1 is > 99999, this is
 | 
|---|
| 76 |  ;       checked in two places :
 | 
|---|
| 77 |  ;         before using this piece 1 as the next case number
 | 
|---|
| 78 |  ;         and after calculating future free case number
 | 
|---|
| 79 |  ;   or  DUP section returns a case number > 99999
 | 
|---|
| 80 |  ; 
 | 
|---|
| 81 |  ; the first calculation starts from today's date and finds the date
 | 
|---|
| 82 |  ; for the next Saturday
 | 
|---|
| 83 |  ;      %Y=day of week, 6 being Saturday
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  ; the second calculation starts from ^RADPT("AE",1 and finds the
 | 
|---|
| 86 |  ; lowest  n  where  ^RADPT("AE",n) doesn't exist anymore.
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  ; then the results are used to replace ^RA(79.2,RATYPE,"CN")
 | 
|---|
| 89 |  ;     where
 | 
|---|
| 90 |  ;       piece  1  is the next free case number
 | 
|---|
| 91 |  ;       piece  2  is the date for next Saturday
 | 
|---|
| 92 |  ;       RATYPE is always  1   by design
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | CAL K RAXX S:$D(X) RAXX=X S RAX=DT F RAII=0:0 S X1=RAX,X2=1 D C^%DTC S RAX=X D H^%DTC Q:%Y=6
 | 
|---|
| 95 |  D YMD^%DTC F RAJ=1:1 I '$D(^RADPT("AE",RAJ)) S ^RA(79.2,RATYPE,"CN")=RAJ_"^"_X S:$D(RAXX) X=RAXX Q
 | 
|---|
| 96 |  K RAJ,RAXX,RAX,RAII Q
 | 
|---|
| 97 | PROC(Y) Q $P($G(^RAMIS(71,+Y,0)),U)
 | 
|---|
| 98 | ASET ; register extra cases for a exam/print set that has no VALID report yet
 | 
|---|
| 99 |  ; there may be a stub report from imaging for this set
 | 
|---|
| 100 |  S RAREC="" ; prevent Q  from deleting the exam at "DT" level
 | 
|---|
| 101 |  S (RAEXIT,RAQUIT,RASKIPIT,RACNICNT)=0 K ^TMP($J,"RAREG1")
 | 
|---|
| 102 |  N RAFIRST S RAFIRST=$O(^RADPT(RADFN,"DT",RADTI,"P",0)) Q:'RAFIRST
 | 
|---|
| 103 |  S RAOIFN=$P(^RADPT(RADFN,"DT",RADTI,"P",RAFIRST,0),"^",11) ;imagg order ien
 | 
|---|
| 104 |  N DIR
 | 
|---|
| 105 | PS1 S DIR(0)="Y",DIR("A")="For "_RANME_"'s exam set -- register another descendent exam (Y/N)"
 | 
|---|
| 106 |  W ! D ^DIR Q:'Y
 | 
|---|
| 107 |  N RAPARENT S RAPARENT=1 D ORDER^RAREG2 ;preserve EXAM SET stored data
 | 
|---|
| 108 |  Q:RAQUIT  ;6/18/96
 | 
|---|
| 109 |  K RAPRC S RAPARENT=1 D EXAMLOOP^RAREG2 ;prevent undef RAPROC in EXAMLOOP
 | 
|---|
| 110 |  ; RACNI is set by edit tmpl that's used in EXAMLOOP^RAREG2
 | 
|---|
| 111 |  ; quit if registration was incomplete <-- rareg2 deleted entire case
 | 
|---|
| 112 |  Q:'$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
 | 
|---|
| 113 |  S RAPROC=$P($G(^RAO(75.1,+$G(RAOIFN),0)),U,2) ;ien of parent procedure
 | 
|---|
| 114 |  ; set value of MEMBER OF SET
 | 
|---|
| 115 |  ;    can't call memset^rareg2 to set MEMBER OF SET, due possiblity of
 | 
|---|
| 116 |  ;    orig. proc being a single procedure that got converted to printset
 | 
|---|
| 117 |  N RA25 S RA25=$P($G(^RADPT(RADFN,"DT",RADTI,"P",RAFIRST,0)),U,25)
 | 
|---|
| 118 |  I RA25 N D,D0,DA,DI,DIC,DIE,DQ,DR,X,Y S DA(2)=RADFN,DA(1)=RADTI,DA=RACNI,DR="25///"_RA25,DIE="^RADPT("_RADFN_",""DT"","_RADTI_",""P""," D ^DIE
 | 
|---|
| 119 |  G:RA25'=2 PS1
 | 
|---|
| 120 |  ; combined report need more processing
 | 
|---|
| 121 |  G:'$G(RA17) PS1 G:'$D(^RARPT(+$G(RA17),0))#2 PS1
 | 
|---|
| 122 |  ; since there's a stub rpt from imaging (RA17), set piece 17
 | 
|---|
| 123 |  D SET17^RAREG2(RADFN,RADTI,RACNI)
 | 
|---|
| 124 |  ; copy over any dx/res/staff
 | 
|---|
| 125 |  D COPYFROM^RAREG2(RACNI)
 | 
|---|
| 126 |  ; insert rec in 74.05
 | 
|---|
| 127 |  N RARPT,RARPTN,RA1,RAFDA,RAIEN,RAMSG,RAERR,RAXIT
 | 
|---|
| 128 |  S RARPT=RA17,RARPTN=$P(^RARPT(RARPT,0),U),RA1=$P($G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)),U)
 | 
|---|
| 129 |  D:RA1 INSERT^RARTE2
 | 
|---|
| 130 |  G PS1
 | 
|---|