| 1 | RAPCE1 ;HIRMFO/GJC-Interface with PCE APIs for workload, visits;6/4/96  15:03 ;5/28/97  12:59
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;**17,21**;Mar 16, 1998
 | 
|---|
| 3 |  Q
 | 
|---|
| 4 | UNCOMPL(RADFN,RADTI,RACNI) ; When an exam backs out of a complete status
 | 
|---|
| 5 |  ;back out all credit, visit pointers for all rad exams on this d/t
 | 
|---|
| 6 |  ;and re-credit any complete ones that are not part of exam sets.
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ; Input Variables: RADFN=Patient DFN
 | 
|---|
| 9 |  ;                  RADTI=Inv. date/time of exam
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ; $$DELVFILE^PXAPI returns: 1 if no errors, -4 if transaction OK but
 | 
|---|
| 12 |  ;                  visit rec still there, else error condition
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  N RA7002,RA7003,RARECMPL,RAVSIT,RAXAMSET,RALCKFAL,RAEARRY
 | 
|---|
| 15 |  K ^TMP("RAPXAPI",$J)
 | 
|---|
| 16 |  S RALCKFAL=0 ; need define this due its being used in RAPCE
 | 
|---|
| 17 |  ; RARECMPL (re-complete), if set, is used to suppress displaying msgs
 | 
|---|
| 18 |  S RA7002=$G(^RADPT(RADFN,"DT",RADTI,0))
 | 
|---|
| 19 |  S RAXAMSET=+$P(RA7002,"^",5)
 | 
|---|
| 20 |  S RA7003=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
 | 
|---|
| 21 |  ;If this case has no visit ptr, whether it is within a set or not,
 | 
|---|
| 22 |  ; quit because crediting never took place (exam set crediting is
 | 
|---|
| 23 |  ; on an "all or nothing" basis)
 | 
|---|
| 24 |  S RAVSIT=$P(RA7003,U,27) I 'RAVSIT Q
 | 
|---|
| 25 |  S RAPKG=+$O(^DIC(9.4,"B","RADIOLOGY/NUCLEAR MEDICINE",0))
 | 
|---|
| 26 |  S RADTE=9999999.9999-RADTI
 | 
|---|
| 27 |  S RA791=$G(^RA(79.1,+$P(RA7002,"^",4),0))
 | 
|---|
| 28 |  S RAEARRY="RAERROR" N @RAEARRY
 | 
|---|
| 29 |  D DELVST
 | 
|---|
| 30 |  K ^TMP("RAPXAPI",$J)
 | 
|---|
| 31 |  Q
 | 
|---|
| 32 | DELVST ; Delete all Rad/Nuc Med pkg data from
 | 
|---|
| 33 |  ; Visit file, other V-files for exam date/time
 | 
|---|
| 34 |  ; lock at DT level due re-crediting all prev cmpltd exms for same dt/tm
 | 
|---|
| 35 |  ; also, lock before deleting entire visit, in case can't delete
 | 
|---|
| 36 |  ;     cl.stp.rec and visit pointers from locked record
 | 
|---|
| 37 |  L +^RADPT(RADFN,"DT",RADTI):30 I '$T S RALCKFAL=3 D FAILBUL^RAPCE2(RADFN,RADTI,RACNI,$S($G(RADUZ):RADUZ,1:DUZ)) W !?5,"Credit cannot be deleted for this exam due to lock failure for this exam date." Q
 | 
|---|
| 38 |  ; quit if lock fails at DT level
 | 
|---|
| 39 |  D DELVPTR(RADFN,RADTI)
 | 
|---|
| 40 |  S RASULT=$$DELVFILE^PXAPI("ALL",RAVSIT,RAPKG,"",0,0,0)
 | 
|---|
| 41 |  I RASULT=1!(RASULT=-4) D
 | 
|---|
| 42 |  . D MULCS(RADFN,RADTI)
 | 
|---|
| 43 |  . W:'$D(ZTQUEUED)&('$D(RADUPRC)) !,"Credit deleted for this Visit."
 | 
|---|
| 44 |  . Q:RAXAMSET
 | 
|---|
| 45 |  .;non-exmsets: re-credit cmplt'd cases of same dt/tm via exmset logic
 | 
|---|
| 46 |  .; set var RAXAMSET to 1 to use code that credits all exms in same dt/tm
 | 
|---|
| 47 |  . S RAXAMSET=1 N RA71,RACNT,RABAD,RACNT,RASTAT S RACNT=0,RARECMPL=1 K RAVSIT D EN2^RAPCE
 | 
|---|
| 48 |  . Q
 | 
|---|
| 49 |  L -^RADPT(RADFN,"DT",RADTI)
 | 
|---|
| 50 |  Q
 | 
|---|
| 51 | DELVPTR(RADFN,RADTI) ; each case in this exmset: del case ptrs to Visit file
 | 
|---|
| 52 |  ; (subfile: 70.03 Field #: 27) ;visit ptr fld
 | 
|---|
| 53 |  N RACNI,RADA1 S RACNI=0
 | 
|---|
| 54 |  F  S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI)) Q:RACNI'>0  D
 | 
|---|
| 55 |  . S RADA1(70.03,RACNI_","_RADTI_","_RADFN_",",27)="@"
 | 
|---|
| 56 |  . D FILE^DIE("K","RADA1")
 | 
|---|
| 57 |  . K RADA1 ; clear var before reuse, incase filing problem met
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 | MULCS(RADFN,RADTI) ; Clear the 'Clinic Stop Recorded?' field for ea case
 | 
|---|
| 60 |  ; in this exam set
 | 
|---|
| 61 |  ; (subfile: 70.03 Field #: 23) ;credit recorded fld
 | 
|---|
| 62 |  N RACNI,RADA2 S RACNI=0
 | 
|---|
| 63 |  F  S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI)) Q:RACNI'>0  D
 | 
|---|
| 64 |  . S RADA2(70.03,RACNI_","_RADTI_","_RADFN_",",23)="@"
 | 
|---|
| 65 |  . D FILE^DIE("K","RADA2")
 | 
|---|
| 66 |  . K RADA2 ; clear var before reuse, incase filing problem met
 | 
|---|
| 67 |  . Q
 | 
|---|
| 68 |  Q
 | 
|---|
| 69 | REPNT(RADFN,RADTI) ; Repopulate the visit field
 | 
|---|
| 70 |  N RAFDA S RAFDA(70.03,RACNI_","_RADTI_","_RADFN_",",27)=RAVSIT
 | 
|---|
| 71 |  D FILE^DIE("K","RAFDA")
 | 
|---|
| 72 |  Q
 | 
|---|
| 73 | CKDUP ; are there more than one procedure of same name ?
 | 
|---|
| 74 |  ; return 0 if 1 or fewer completed procedure of the same name/dt/tm
 | 
|---|
| 75 |  ; return 1 if more than 1 completed procedure of the same name/dt/tm
 | 
|---|
| 76 |  ;             as this case
 | 
|---|
| 77 |  ; RAX(raprcien) = no. cases with this procedure ien
 | 
|---|
| 78 |  S RADUPRC=0
 | 
|---|
| 79 |  I '$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI)),'$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI),-1) Q  ;only 1 case for this dt/tm
 | 
|---|
| 80 |  N I,J,K,RAX,RAPRCIEN
 | 
|---|
| 81 |  S I=0,RAPRCIEN=+$P(RA7003,U,2)
 | 
|---|
| 82 | C1 S I=$O(^RADPT(RADFN,"DT",RADTI,"P",I)) G:I'=+I C9
 | 
|---|
| 83 |  S J=$P(^(I,0),U,2),K=$P(^(0),U,3) ; J = proc ien, K = status ien
 | 
|---|
| 84 |  G:$P($G(^RA(72,+K,0)),U,3)'=9 C1 ; skip if ordercode is not 9
 | 
|---|
| 85 |  S RACOMIEN(I)="" ; save ien of completed cases for use in RESEND
 | 
|---|
| 86 |  S:J RAX(J)=$G(RAX(J))+1
 | 
|---|
| 87 |  G C1
 | 
|---|
| 88 | C9 Q:$G(RAX(RAPRCIEN))<2
 | 
|---|
| 89 |  S RADUPRC=1 ; more than one completed case has the same procedure for this dt/tm
 | 
|---|
| 90 |  Q
 | 
|---|
| 91 | RESEND ; del and resend this dt/tm
 | 
|---|
| 92 |  ; delete what was previously sent to PCE
 | 
|---|
| 93 |  ; need to lock before finding RAVSIT because another case with same
 | 
|---|
| 94 |  ;    patient/procedure/dt/tm may be setting up the visit pointer
 | 
|---|
| 95 |  ;    for the first time for this dt/tm, at this moment
 | 
|---|
| 96 |  L +^RADPT(RADFN,"DT",RADTI):30 I '$T S RALCKFAL=2 D FAILBUL^RAPCE2(RADFN,RADTI,RACNI,$S($G(RADUZ):RADUZ,1:DUZ)) Q  ;quit resend if DT-level lock failed
 | 
|---|
| 97 |  N I
 | 
|---|
| 98 |  S I=0 ; find visit pointer from first complted case's non-null visit fld
 | 
|---|
| 99 | D1 S I=$O(RACOMIEN(I)) G:I'=+I D9
 | 
|---|
| 100 |  G:$P(^RADPT(RADFN,"DT",RADTI,"P",I,0),U,27)="" D1
 | 
|---|
| 101 |  S RAVSIT=$P(^(0),U,27)
 | 
|---|
| 102 | D9 I $G(RAVSIT)="" G DUNL ; no valid vst ptr to delete
 | 
|---|
| 103 |  D DELVST
 | 
|---|
| 104 |  W:$G(RASENT)&('$D(ZTQUEUED)) !?5,"Visit credited for duplicate procedure."
 | 
|---|
| 105 | DUNL L -^RADPT(RADFN,"DT",RADTI)
 | 
|---|
| 106 |  Q
 | 
|---|