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

MAGNTRAI.m

Go to the documentation of this file.
  1. MAGNTRAI ;WOIFO/NST - List images for Reports ; 16 Jan 2018 3:59 PM
  1. ;;3.0;IMAGING;**170,185**;Mar 19, 2002;Build 4525;May 01, 2013
  1. ;; Per VHA Directive 2004-038, this routine should not be modified.
  1. ;; +---------------------------------------------------------------+
  1. ;; | Property of the US Government. |
  1. ;; | No permission to copy or redistribute this software is given. |
  1. ;; | Use of unreleased versions of this software requires the user |
  1. ;; | to execute a written test agreement with the VistA Imaging |
  1. ;; | Development Office of the Department of Veterans Affairs, |
  1. ;; | telephone (301) 734-0100. |
  1. ;; | The Food and Drug Administration classifies this software as |
  1. ;; | a medical device. As such, it may not be changed in any way. |
  1. ;; | Modifications to this software may result in an adulterated |
  1. ;; | medical device under 21CFR820, the use of which is considered |
  1. ;; | to be a violation of US Federal Statutes. |
  1. ;; +---------------------------------------------------------------+
  1. ;;
  1. Q
  1. ;
  1. ;***** List Images for Rad Exams or TIU Notes by CPRS context
  1. ;
  1. ; RPC: MAGN CPRS IMAGE LIST
  1. ;
  1. ; Input Parameters
  1. ; ================
  1. ;
  1. ; DATA - Array holds Windows message received from CPRS in format
  1. ; e.g. 'RPT^CPRS^29027^RA^79029185.9998-1'
  1. ; or
  1. ; RPT^CPRS^4658^TIU^2243408^^^^^^^^1
  1. ; [IMGLESS] flag to speed up queries: if=1 (true), just get study-level data
  1. ;
  1. ; Return Values
  1. ; =============
  1. ;
  1. ; if error MAGRY(0) = 0 ^Error message^
  1. ; if success MAGRY(0) = 1
  1. ; MAGRY(1..n) = CONTEXTID | 0 or 1 | images in format defined in
  1. ; RPC [MAGG CPRS RAD EXAM] or [MAG3 CPRS TIU NOTE]
  1. ;
  1. IMAGEL(MAGRY,DATA,IMGLESS) ;RPC [MAGN CPRS IMAGE LIST]
  1. S IMGLESS=$S($D(IMGLESS):+IMGLESS,1:1) ; Defualt is IMAGELESS
  1. ;
  1. N MAGVER,MAGNII
  1. S MAGVER=""
  1. S MAGNII=""
  1. ; Check version of the RPC we need to call
  1. F S MAGNII=$O(DATA(MAGNII)) Q:(MAGVER'="")!(MAGNII="") D
  1. . S MAGVER=$P(DATA(MAGNII),"~",2)
  1. . Q
  1. I MAGVER=2 D IMAGEL^MAGNVQ06(.MAGRY,.DATA,IMGLESS) Q
  1. ;
  1. N MAGNCXT,MAGNI,MAGNCNT,MAGNX,MAGNTIU,RARPT
  1. N MAGZRY
  1. N $ETRAP,$ESTACK S $ETRAP="D AERRA^MAGGTERR"
  1. S IMGLESS=$S($D(IMGLESS):+IMGLESS,1:1) ; Defualt is IMAGELESS
  1. S MAGRY=$NA(^TMP("MAGNTRAI",$J))
  1. K @MAGRY
  1. S @MAGRY@(0)=0
  1. S MAGNCNT=0
  1. S MAGNI=""
  1. F S MAGNI=$O(DATA(MAGNI)) Q:MAGNI="" D
  1. . S MAGNCXT=DATA(MAGNI) ; CPRS contextID
  1. . S MAGNX=$P(MAGNCXT,"^",4)
  1. . I MAGNX="RA" D Q
  1. . . D IMAGEC(.MAGZRY,MAGNCXT,IMGLESS,.RARPT) ; get image list for a single contextID
  1. . . D APPENDRA(MAGRY,.MAGNCNT,MAGNCXT,MAGZRY,RARPT) ; Append individual contextID image list to final list
  1. . . Q
  1. . I MAGNX="TIU" D Q
  1. . . S MAGNTIU=$P(MAGNCXT,"^",5)
  1. . . K MAGZRY
  1. . . D IMAGES^MAGGNTI(.MAGZRY,MAGNTIU)
  1. . . D APPEND2(MAGRY,.MAGNCNT,MAGNCXT,.MAGZRY,MAGNTIU) ; Append individual contextID image list to final list
  1. . . Q
  1. . S MAGNCNT=MAGNCNT+1
  1. . S @MAGRY@(MAGNCNT)="NEXT_CONTEXTID|"_MAGNCXT_"|0|"_"Invalid ContextId Type"
  1. . Q
  1. S @MAGRY@(0)=1
  1. Q
  1. ;
  1. IMAGEC(MAGZRY,DATA,IMGLESS,RARPT) ;A copy from MAGGTRAI
  1. ; Call to list Images for a Rad Exam that was selected from CPRS
  1. ; and Imaging Window was notified via windows messaging
  1. ; INPUT : DATA is in format of Windows message received from CPRS
  1. ; example 'RPT^CPRS^29027^RA^i79029185.9998-1'
  1. N DFN,ENT,INVDTTM,INVDT,INVTM
  1. S MAGZRY=$NA(^TMP("MAGGTRAI",$J))
  1. K @MAGZRY
  1. S DFN=+$P(DATA,U,3)
  1. S ENT=+$P($P(DATA,U,5),"-",2)
  1. S INVDTTM=$P($P(DATA,U,5),"-",1)
  1. S INVDT=$P(INVDTTM,".",1)
  1. S INVTM=$P(INVDTTM,".",2)
  1. F Q:($L(INVDT)<8) S INVDT=$E(INVDT,2,$L(INVDT))
  1. S INVDTTM=INVDT_"."_INVTM
  1. S RARPT=0
  1. I '$D(^RADPT(DFN,"DT",INVDTTM,"P",ENT,0)) S @MAGZRY@(0)="0^INVALID Data : Attempt to access Exam failed." Q
  1. S RARPT=$P(^RADPT(DFN,"DT",INVDTTM,"P",ENT,0),U,17)
  1. I 'RARPT S @MAGZRY@(0)="0^No Report for selected Exam" Q
  1. ; MAGQI 8/22/01
  1. I $P($G(^RARPT(RARPT,0)),U,2)'=DFN S @MAGZRY@(0)="-2^Patient Mismatch. Radiology File" Q
  1. D GETSTUDY(.MAGZRY,RARPT,IMGLESS) ; Pass input parameters
  1. Q
  1. ;
  1. GETSTUDY(MAGZRY,RARPT,IMGLESS) ; Private call. From other points in this routine, when RARPT is defined
  1. ; RARPT -- Radiology report IEN
  1. ; and returns a list in MAGZRY(1..n).
  1. ; We'll make a tmp list of just the image IEN's
  1. ; splitting groups into individual image entries.
  1. ; If more than 1 Image group points to this report, we
  1. ; will prefix the Image Description with (G1), (G2) etc
  1. ; We call GROUP^MAGGTIG to get the images for the group, this call
  1. ; sorts the images in Dicom Series, Dicom Image number order.
  1. ;
  1. N GROUPS,OUT,REQDFN
  1. ;
  1. N CT,OI,IGCT,MAGIEN1,MAGQI,MAGX
  1. S IGCT=+$P($G(^RARPT(RARPT,2005,0)),U,4)
  1. ; Quit if no images for RARPT
  1. I IGCT=0 S @MAGZRY@(0)="0^0 Images for Radiology Report." Q
  1. ;
  1. ; Check all Image entries in RARPT 2005 NODE. for Patient match Pointer match, from both
  1. ; RARPT end, and Imaging end.
  1. S MAGQI=1
  1. S OI=0,CT=1 F S OI=$O(^RARPT(RARPT,2005,OI)) Q:'OI D Q:(MAGQI<1)
  1. . S MAGIEN1=$P(^RARPT(RARPT,2005,OI,0),U)
  1. . ; Assure magdfn = rarpt dfn
  1. . I $P($G(^RARPT(RARPT,0)),U,2)'=$P($G(^MAG(2005,MAGIEN1,0)),U,7) S MAGQI="-2^Patient Mismatch. Radiology Report" Q
  1. . ; Assure magien1 is pointing to this rarpt
  1. . I $P($G(^MAG(2005,MAGIEN1,2)),U,7)'=RARPT S MAGQI="-2^Pointer Mismatch. Radiology Report" Q
  1. . ; Now run the Imaging integrity check
  1. . D CHK^MAGGSQI(.MAGX,MAGIEN1) I 'MAGX(0) S MAGQI="-2^"_$P(MAGX(0),U,2,99) Q
  1. ;
  1. I MAGQI<1 S @MAGZRY@(0)=MAGQI Q
  1. S CT=0
  1. ;
  1. S OI=0,CT=1 F S OI=$O(^RARPT(RARPT,2005,OI)) Q:'OI D
  1. . S MAGIEN1=$P(^RARPT(RARPT,2005,OI,0),U) S GROUPS(OI)=MAGIEN1
  1. . Q
  1. ;
  1. S REQDFN=$P($G(^RARPT(RARPT,0)),U,2)
  1. D STUDY2^MAGDQR21(.OUT,.GROUPS,REQDFN,IMGLESS) ; MAG DOD GET STUDIES IEN
  1. ;
  1. S MAGZRY=OUT
  1. S @MAGZRY@(0)=1
  1. ;
  1. Q
  1. ;
  1. APPENDRA(OUT,MAGNCNT,MAGNCXT,MAGZRY,RARPT) ;
  1. ; Append individual contextID image list to final list
  1. ; and add more data
  1. ; OUT - destination image list array
  1. ; .MAGNCNT -- Start position in the array
  1. ; MAGNCXT -- context ID
  1. ; MAGZRY -- Image list to be appended - reference to a global
  1. ;
  1. N I,IMGIEN,MAGNCNTN,MAGSTUDY
  1. S @MAGZRY@(0)=$G(@MAGZRY@(0))
  1. I '@MAGZRY@(0) D Q
  1. . S MAGNCNT=MAGNCNT+1
  1. . S @OUT@(MAGNCNT)="NEXT_CONTEXTID|"_MAGNCXT_"|0|"_$P(@MAGZRY@(0),"^",2)
  1. . Q
  1. ;
  1. S MAGNCNTN=MAGNCNT
  1. S MAGNCNT=MAGNCNT+1
  1. ;
  1. S I=1 ; start from line number 2. Line number 1 is a records count
  1. F S I=$O(@MAGZRY@(I)) Q:'I D
  1. . S MAGNCNT=MAGNCNT+1
  1. . S @OUT@(MAGNCNT)=@MAGZRY@(I)
  1. . I $P(@MAGZRY@(I),"|")="STUDY_IEN" D ; Add STUDY_INFO. Better place will be MAGDQR21
  1. . . S MAGNCNT=MAGNCNT+1
  1. . . S IMGIEN=$P(@MAGZRY@(I),"|",2) ; IEN of the group
  1. . . S @OUT@(MAGNCNT)="STUDY_INFO|"_$$STDINFO(IMGIEN)_"|RA-"_RARPT
  1. . . S MAGSTUDY=@MAGZRY@(I)
  1. . . Q
  1. . I IMGLESS,($P(@MAGZRY@(I),"|")="STUDY_PAT") D INSFIMG(MAGSTUDY,.MAGNCNT,OUT) ; Append First Image Info
  1. . Q
  1. S @OUT@(MAGNCNTN+1)="NEXT_CONTEXTID|"_MAGNCXT_"|1|"_(MAGNCNT-MAGNCNTN) ; @MAGZRY@(1) is a result lines count
  1. Q
  1. ;
  1. INSFIMG(DATA,MAGNCNT,OUT) ; Append First Image Info I
  1. N IMGGRP,IMGIEN
  1. S IMGGRP=$P(DATA,"|",2)
  1. S IMGIEN=$P(DATA,"|",4)
  1. S MAGNCNT=MAGNCNT+1,@OUT@(MAGNCNT)="NEXT_SERIES"
  1. S MAGNCNT=MAGNCNT+1,@OUT@(MAGNCNT)="SERIES_IEN|"_IMGGRP
  1. S MAGNCNT=MAGNCNT+1,@OUT@(MAGNCNT)="SERIES_NUMBER|1"
  1. S MAGNCNT=MAGNCNT+1,@OUT@(MAGNCNT)="NEXT_IMAGE"
  1. S MAGNCNT=MAGNCNT+1,@OUT@(MAGNCNT)="IMAGE_IEN|"_IMGIEN
  1. S MAGNCNT=MAGNCNT+1,@OUT@(MAGNCNT)="GROUP_IEN|"_IMGGRP
  1. S MAGNCNT=MAGNCNT+1,@OUT@(MAGNCNT)="IMAGE_INFO|"_"^"_$$INFO^MAGGAII(IMGIEN,"E")
  1. Q
  1. ;
  1. APPEND2(OUT,MAGNCNT,MAGNCXT,MAGZRY,MAGNTIU) ;
  1. ; Append individual contextID image list to final list
  1. ; and add more data
  1. ; OUT - destination image list array
  1. ; .MAGNCNT -- Start position in the array
  1. ; MAGNCXT -- context ID
  1. ; .MAGZRY -- Image list to be appended
  1. ;
  1. N I,IMGIEN,STDINFO
  1. S MAGZRY(0)=$G(MAGZRY(0))
  1. I 'MAGZRY(0) D Q
  1. . S MAGNCNT=MAGNCNT+1
  1. . S @OUT@(MAGNCNT)="NEXT_CONTEXTID|"_MAGNCXT_"|0|"_$P(MAGZRY(0),"^",2)
  1. . Q
  1. ;
  1. S MAGNCNT=MAGNCNT+1
  1. S @OUT@(MAGNCNT)="NEXT_CONTEXTID|"_MAGNCXT_"|1|"_MAGZRY(0)
  1. S I=0
  1. F S I=$O(MAGZRY(I)) Q:'I D
  1. . S IMGIEN=$P(MAGZRY(I),"^",25) ; IEN of the group
  1. . S:'IMGIEN IMGIEN=$P(MAGZRY(I),"^",2) ; Ien of the image
  1. . S MAGNCNT=MAGNCNT+1
  1. . S STDINFO=$$STDINFO(IMGIEN)
  1. . S $P(STDINFO,"^",6)=$P(MAGZRY(I),"^",15) ; Group image count per VIX request
  1. . S @OUT@(MAGNCNT)=STDINFO_"|"_$P(MAGZRY(I),"^",2,9999)_"|TIU-"_MAGNTIU
  1. . Q
  1. Q
  1. ;
  1. STDINFO(IMGIEN) ; Get study info
  1. ; IMGIEN -- Image IEN
  1. ;
  1. ; Return Study( Image ) info. The code is a copy from MAGSIXG3
  1. N X0,X2,X40
  1. N PKG,TYPE,EVT,SPEC,ORIG,ORIG,CAPTAPP,CLASS
  1. N IMGNODE,FLTX
  1. ;
  1. S IMGNODE=$$NODE^MAGGI11(IMGIEN) Q:IMGNODE="" 0
  1. ;
  1. S X0=$G(@IMGNODE@(0))
  1. S X2=$G(@IMGNODE@(2))
  1. S X40=$G(@IMGNODE@(40))
  1. ;
  1. S PKG=$P(X40,U) ; PACKAGE INDEX (40)
  1. S TYPE=$P(X40,U,3) ; TYPE INDEX (42)
  1. S EVT=$P(X40,U,4) ; PROC/EVENT INDEX (43)
  1. S SPEC=$P(X40,U,5) ; SPEC/SUBSPEC INDEX (44)
  1. S ORIG=$P(X40,U,6) ; ORIGIN INDEX (45)
  1. S:ORIG="" ORIG="V" ; Show VA by default
  1. S CAPTAPP=$P(X2,U,12) ; CAPTURE APPLICATION (8.1)
  1. ;
  1. S CLASS=$S(TYPE:$P($G(^MAG(2005.83,+TYPE,0)),U,2),1:"")
  1. ;
  1. S FLTX=""
  1. S $P(FLTX,U,3)=$$RPTITLE^MAGSIXG3($P(X2,U,6),$P(X2,U,7)) ; Report title
  1. S $P(FLTX,U,4)=$$DTE^MAGSIXG3($P(X2,U,5)) ; Procedure date
  1. S $P(FLTX,U,5)=$P(X0,U,8) ; Procedure
  1. S $P(FLTX,U,7)=$P(X2,U,4) ; Short descr.
  1. S $P(FLTX,U,8)=PKG ; Package
  1. S $P(FLTX,U,9)=$P($G(^MAG(2005.82,+CLASS,0)),U) ; Class
  1. S $P(FLTX,U,10)=$P($G(^MAG(2005.83,+TYPE,0)),U) ; Type
  1. S $P(FLTX,U,11)=$P($G(^MAG(2005.84,+SPEC,0)),U) ; (Sub)Specialty
  1. S $P(FLTX,U,12)=$P($G(^MAG(2005.85,+EVT,0)),U) ; Proc/Event
  1. S $P(FLTX,U,13)=$$EXTERNAL^DILFD(2005,45,,ORIG) ; Origin
  1. S $P(FLTX,U,14)=$$DTE^MAGSIXG3($P(X2,U)) ; Capture date
  1. S $P(FLTX,U,15)=$$GET1^DIQ(200,+$P(X2,U,2)_",",.01) ; Captured by
  1. S $P(FLTX,U,16)=IMGIEN ; Image IEN
  1. Q FLTX