Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: RAPCE

RAPCE.m

Go to the documentation of this file.
  1. RAPCE ;HIRMFO/GJC-Interface with PCE APIs for wrkload, visits ; 20 Apr 2011 7:29 PM
  1. ;;5.0;Radiology/Nuclear Medicine;**10,17,21,26,41,57,56,1003**;Nov 01, 2010;Build 3
  1. ;Supported IA #2053 FILE^DIE
  1. ;Supported IA #4663 SWSTAT^IBBAPI
  1. ;Controlled IA #1889 DATA2PCE^PXAPI
  1. Q
  1. COMPLETE(RADFN,RADTI,RACNI) ; When an exam status changes to 'complete'
  1. ; Input: RADFN-> Patient DFN, RADTI-> Exam Timestamp, RACNI-> Case IEN
  1. ; NOTE: RACNI input param is ignored for exam sets (all cases under
  1. ; an exam set are processed at once when order is complete)
  1. ; $$DATA2PCE^PXAPI returns: 1 if no errors, else error condition
  1. ;
  1. K ^TMP("DIERR",$J),^TMP("RAPXAPI",$J)
  1. N RA7002,RA7003,RA71,RA791,RACNT,RADTE,RAEARRY,RAPKG,RAVSIT,RABAD,RASTAT,RACPTM,RA,RA1,RARECMPL,RACNISAV
  1. N RADUPRC,RACOMIEN,RASENT,RALCKFAL
  1. S RALCKFAL=0 ; >0 if lock fails when :
  1. ; 1= complt'g exam that's unique to other cases same dt/tm, if any
  1. ; 2= complt'g exam that's a dupl of another cmplt'd exam (RESEND^RAPCE1)
  1. ; 3= UNcompleting exam before deleting credit+visit pointers same dt/tm
  1. S RAPKG=$O(^DIC(9.4,"B","RADIOLOGY/NUCLEAR MEDICINE",0))
  1. S RADTE=9999999.9999-RADTI,RACNT=0
  1. S RA7002=$G(^RADPT(RADFN,"DT",RADTI,0))
  1. S RAXAMSET=+$P(RA7002,"^",5) ; is this part of an exam set? 1=YES
  1. EN2 S RA791=$G(^RA(79.1,+$P(RA7002,"^",4),0))
  1. ; Initialize variables required for PFSS 1B project and check the switch status.
  1. ;IHS/BJI/DAY - Patch 1003 - Comment out call to VA's IBB pkg - set variable
  1. ;N RAPFSW,RACCOUNT S RAPFSW=$$SWSTAT^IBBAPI ; Requirement 12
  1. N RAPFSW S RAPFSW=0
  1. ;End Patch
  1. Q:+$P(RA791,"^",21)=2 ; no credit, quit
  1. S RAEARRY="RAERROR" N @RAEARRY
  1. LON ; lock at P level
  1. L +^RADPT(RADFN,"DT",RADTI,"P",RACNI):30 I '$T S RALCKFAL=1 D FAILBUL^RAPCE2(RADFN,RADTI,RACNI,$S($G(RADUZ):RADUZ,1:DUZ)) Q
  1. I 'RAXAMSET G NONSET
  1. ; exam set, grab all the completed records!
  1. S RACNISAV=RACNI
  1. S RACNI=0
  1. F S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI)) Q:RACNI'>0!($G(RABAD)) D
  1. . S RA7003=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)) I $P($G(^RA(72,+$P(RA7003,U,3),0)),U,3)'=9 Q ;check code instead of name
  1. . S RACNT=RACNT+1 D SETUP I $G(RABAD) Q
  1. . D:'$D(^TMP("RAPXAPI",$J,"ENCOUNTER")) ENC(RACNT)
  1. . D DX^RABWPCE($P(RA7003,U,11)) ; Ordering ICD Dx and related data.
  1. . D PROC(RACNT)
  1. . Q
  1. S RACNI=RACNISAV ;restore value so unlock would work 012601
  1. I '$G(RABAD),$D(^TMP("RAPXAPI",$J)) D PCE(RADFN,RADTI,RACNI)
  1. ;Missing data, send failure bulletin for ea case in set, don't attempt to send data to PCE
  1. I $G(RABAD) W:'$D(ZTQUEUED)&('$D(RARECMPL)) !,"Unable to credit Exam set" D
  1. . S RACNI=0 F S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI)) Q:RACNI'>0 D FAILBUL^RAPCE2(RADFN,RADTI,RACNI,$S($G(RADUZ):RADUZ,1:DUZ))
  1. G KOUT
  1. NONSET ; non-exam sets
  1. S RA7003=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
  1. D CKDUP^RAPCE1 ; chk for duplicate procedure(s) non-examset
  1. I $G(RADUPRC) D RESEND^RAPCE1 G KOUT ; branch off to re-send rec(s) this dt/tm
  1. S RACNT=RACNT+1
  1. D SETUP
  1. D:'$G(RABAD) ENC(RACNT) D:'$G(RABAD) DX^RABWPCE($P(RA7003,U,11)) D:'$G(RABAD) PROC(RACNT) D:'$G(RABAD) PCE(RADFN,RADTI,RACNI)
  1. I $G(RABAD) W:'$D(ZTQUEUED)&('$D(RARECMPL)) !,"Unable to credit exam" D FAILBUL^RAPCE2(RADFN,RADTI,RACNI,$S($G(RADUZ):RADUZ,1:DUZ)) ;Missing data, send failure bulletin for single case, don't attempt to pass data to PCE
  1. ;
  1. KOUT K ^TMP("RAPXAPI",$J)
  1. L -^RADPT(RADFN,"DT",RADTI,"P",RACNI)
  1. Q
  1. ENC(X) ; Set up the '"RAPXAPI",$J,"ENCOUNTER"' nodes
  1. N RAIMGLOC,RA17,RARPTLOC
  1. S RA17=+$P(RA7003,U,17)
  1. S RARPTLOC=$P($G(^RARPT(RA17,"BA")),U,1)
  1. S RAIMGLOC=$P($G(^RA(79.1,+RARPTLOC,0)),"^")
  1. S:'RAIMGLOC RAIMGLOC=$P($G(^RA(79.1,+$P(RA7002,"^",4),0)),"^")
  1. I RAIMGLOC="" S RABAD=1 Q ; needs imaging location
  1. S ^TMP("RAPXAPI",$J,"ENCOUNTER",X,"PATIENT")=RADFN
  1. S ^TMP("RAPXAPI",$J,"ENCOUNTER",X,"ENC D/T")=RADTE
  1. S ^TMP("RAPXAPI",$J,"ENCOUNTER",X,"HOS LOC")=RAIMGLOC
  1. S ^TMP("RAPXAPI",$J,"ENCOUNTER",X,"SERVICE CATEGORY")="X"
  1. S ^TMP("RAPXAPI",$J,"ENCOUNTER",X,"ENCOUNTER TYPE")="A"
  1. Q
  1. PCE(RADFN,RADTI,RACNI) ; Pass on the information to the PCE software
  1. ;IHS/BJI/DAY - Patch 1003 - Continue Chris Saddler 2003 patch
  1. ;Quit this section, and use IHS calls to PCC instead
  1. Q
  1. ;End Patch
  1. N RASULT
  1. ; If the PFSS switch is not active then do not pass RACCOUNT parameter to DATA2PCE call.
  1. I 'RAPFSW S RASULT=$$DATA2PCE^PXAPI("^TMP(""RAPXAPI"",$J)",RAPKG,"RAD/NUC MED",.RAVSIT,"","","","",.@RAEARRY)
  1. ; If the PFSS switch is active then use RACCOUNT parameter in DATA2PCE call.
  1. I RAPFSW D
  1. . ; PFSS Requirement 6, 11
  1. . S RASULT=$$DATA2PCE^PXAPI("^TMP(""RAPXAPI"",$J)",RAPKG,"RAD/NUC MED",.RAVSIT,"","","","",.@RAEARRY,.RACCOUNT)
  1. . Q
  1. I (RASULT=1)!(RASULT=-1) D ;Visit file pointer, set 'Credit recorded' to yes.
  1. . W:'$D(ZTQUEUED)&('$D(RARECMPL)) !?5,"Visit credited.",!
  1. . D:'RAXAMSET VISIT(RADFN,RADTI,RACNI,RAVSIT)
  1. . D:'RAXAMSET RECDCS(RADFN,RADTI,RACNI) ; only one exam, not a set
  1. . D:RAXAMSET MULCS(RADFN,RADTI) ; set, update all exams!
  1. . S RASENT=1 ; sent to PCE was okay
  1. . Q
  1. E D
  1. . N RAWHOERR S RAWHOERR=""
  1. . W:'$D(ZTQUEUED)&('$D(RARECMPL)) !?5,$C(7),"Unable to credit.",!
  1. . I '$G(RAXAMSET) D FAILBUL^RAPCE2(RADFN,RADTI,RACNI,$S($G(RADUZ):RADUZ,1:DUZ))
  1. . I $G(RAXAMSET) D
  1. .. S RACNI=0 F S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI)) Q:RACNI'>0 D FAILBUL^RAPCE2(RADFN,RADTI,RACNI,$S($G(RADUZ):RADUZ,1:DUZ))
  1. .. Q
  1. . Q
  1. Q
  1. MULCS(RADFN,RADTI) ; Update the 'Credit recorded' field and the Visit
  1. ;pointer for each case that is complete
  1. N RACNI S RACNI=0
  1. F S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI)) Q:RACNI'>0 D
  1. . Q:$P($G(^RA(72,+$P($G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)),U,3),0)),U,3)'=9
  1. . D RECDCS(RADFN,RADTI,RACNI)
  1. . D VISIT(RADFN,RADTI,RACNI,RAVSIT)
  1. . Q
  1. Q
  1. PROC(X) ; Set up the other '"RAPXAPI",$J,"PROCEDURE"' nodes for this case
  1. ; If same procedure repeated in exam set, add to qty of existing
  1. ; 'procedure' node. Else, if different provider, create new
  1. ; separate 'procedure' nodes
  1. N X1,X2,X3,RADUP F X1=1:1:X S X2=$G(^TMP("RAPXAPI",$J,"PROCEDURE",X1,"PROCEDURE")) I X2=$P(RA71,"^",9),^("ENC PROVIDER")=$S(RA7003(15)]"":RA7003(15),1:RA7003(12)) D Q
  1. . S ^TMP("RAPXAPI",$J,"PROCEDURE",X1,"QTY")=^("QTY")+1
  1. . D CPTMOD(X1)
  1. . S RADUP=1
  1. . Q
  1. I $D(RADUP) Q
  1. S ^TMP("RAPXAPI",$J,"PROCEDURE",X,"QTY")=1
  1. S ^TMP("RAPXAPI",$J,"PROCEDURE",X,"PROCEDURE")=$P(RA71,"^",9)
  1. S ^TMP("RAPXAPI",$J,"PROCEDURE",X,"NARRATIVE")=$P(RA71,"^")
  1. S ^TMP("RAPXAPI",$J,"PROCEDURE",X,"ENC PROVIDER")=$S(RA7003(15)]"":RA7003(15),1:RA7003(12)) ; Pri. Int Staff if exists, else Pri Int Resident
  1. S ^TMP("RAPXAPI",$J,"PROCEDURE",X,"ORD PROVIDER")=RA7003(14) ; Requesting Physician.
  1. S ^TMP("RAPXAPI",$J,"PROCEDURE",X,"EVENT D/T")=RADTE
  1. ; if the PFSS switch is active Get both Dept. Code and Account Reference Number (RACCOUNT)
  1. ;IHS/BJI/DAY - Patch 1003 - Comment out call to VA's IBB package
  1. ;I RAPFSW D GETDEPT^RABWIBB ; Requirement 9
  1. ;End Patch
  1. D CPTMOD(X)
  1. D PROCDX^RABWPCE(X) ; Add Ordering ICD Dx to each Procedure.
  1. Q
  1. RECDCS(RADFN,RADTI,RACNI) ; Set 'Clinic Stop Recorded' to yes
  1. ; (70.03, fld 23)
  1. N RAFDA S RAFDA(70.03,RACNI_","_RADTI_","_RADFN_",",23)="Y"
  1. D FILE^DIE("K","RAFDA")
  1. Q
  1. SETUP ; Setup examination data node information
  1. ; If no provider, or inactive CPT, fail
  1. S RA7003=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
  1. S RA7003(12)=$P(RA7003,"^",12) ; Pri. Inter. Resident
  1. S RA7003(14)=$P(RA7003,"^",14) ; Requesting Physician.
  1. S RA7003(15)=$P(RA7003,"^",15) ; Pri. Inter. Staff
  1. ; OK to send if missing resident/staff ONLY if report Elec. Filed
  1. I (RA7003(12)="")&(RA7003(15)=""),$P($G(^RARPT(+$P(RA7003,U,17),0)),U,5)'="EF" S RABAD=1 Q
  1. S RA71=$G(^RAMIS(71,+$P(RA7003,"^",2),0))
  1. ; store CPT Modifiers' .01 value
  1. K RACPTM S RA=0 F S RA=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"CMOD",RA)) Q:'RA S RA1=$$BASICMOD^RACPTMSC($P($G(^(RA,0)),"^"),+$P(RA7002,"^")) S:+RA1>0 RACPTM(RA)=$P(RA1,"^",2) ;only valid cpt mods
  1. ; find out if CPT code is active
  1. I '$$ACTCODE^RACPTMSC(+$P(RA71,"^",9),$P(RA7002,"^")) S RABAD=1
  1. Q
  1. VISIT(RADFN,RADTI,RACNI,RAVSIT) ; Stuff the Visit file pointer passed back
  1. ; from $$DATA2PCE^PXAPI() into the Visit field (70.02, fld 6)
  1. N RAFDA S RAFDA(70.03,RACNI_","_RADTI_","_RADFN_",",27)=RAVSIT
  1. D FILE^DIE("K","RAFDA")
  1. Q
  1. CPTMOD(X3) ;CPT Modifiers
  1. ; CPT Mods for dupl. procedure+provider will be accounted for
  1. ; however, same CPT Mod will overwrite previous CPT Mod
  1. S ^TMP("RAPXAPI",$J,"PROCEDURE",X3,"MODIFIERS")="" ;prevent abend
  1. S RA=0
  1. F S RA=$O(RACPTM(RA)) Q:'RA S ^TMP("RAPXAPI",$J,"PROCEDURE",X3,"MODIFIERS",RACPTM(RA))=""
  1. Q