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

MAGNAN03.m

Go to the documentation of this file.
  1. MAGNAN03 ;WOIFO/NST - Get image annotations ; 10 Apr 2018 3:59 PM
  1. ;;3.0;IMAGING;**185,197**;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. ;***** Get image annotations by CPRS context or Image IEN
  1. ;
  1. ; RPC: MAGN ANNOT GET IMAGE ANNOT
  1. ;
  1. ; Input Parameters
  1. ; ================
  1. ;
  1. ; DATA - ContextID in format
  1. ; e.g. 'RPT^CPRS^29027^RA^79029185.9998-1'
  1. ; or
  1. ; RPT^CPRS^4658^TIU^2243408^^^^^^^^1
  1. ; or
  1. ; ^ ^ ^MAG^10454
  1. ;
  1. ; Return Values
  1. ; =============
  1. ;
  1. ; if error MAGRY(0) = 0 ^Error message^
  1. ; if success MAGRY(0) = 1
  1. ; MAGRY(1..n) = NEXT_CONTEXTID | CONTEXTID | 0 or 1 |
  1. ; NEXT_IMAGE | IMAGE IEN
  1. ; images in format defined in RPC [MAGJ STUDY_DATA] or
  1. ; [MAG ANNOT GET IMAGE DETAIL], [MAG ANNOT GET IMAGE]
  1. ;
  1. IMAGEL(MAGRY,DATA) ;RPC [MAGN ANNOT GET IMAGE ANNOT]
  1. N MAGNCNT,MAGNX,RARPT
  1. N $ETRAP,$ESTACK S $ETRAP="D AERRA^MAGGTERR"
  1. S MAGRY=$NA(^TMP("MAGNTRAI",$J))
  1. K @MAGRY
  1. S @MAGRY@(0)=0
  1. S MAGNCNT=0
  1. S MAGNX=$P(DATA,"^",4)
  1. I MAGNX="RA" D Q
  1. . D GRAANNCX(MAGRY,MAGNCNT,DATA) ; get RAD annotations
  1. . Q
  1. ;
  1. I MAGNX="TIU" D Q
  1. . D GTUIANN(MAGRY,MAGNCNT,DATA) ; Get TIU annotations
  1. . Q
  1. ;
  1. I MAGNX="MAG" D Q
  1. . D GMAGANN(MAGRY,MAGNCNT,DATA) ; Get TIU annotations
  1. . Q
  1. ;
  1. S MAGNCNT=MAGNCNT+1
  1. S @MAGRY@(MAGNCNT)="NEXT_CONTEXTID|"_DATA_"|0|"_"Invalid ContextId Type"
  1. S @MAGRY@(0)=1
  1. Q
  1. ;
  1. GRAANNCX(MAGRY,MAGNCNT,MAGNCXT) ; Get RAD annotations by CPRS Context ID
  1. N MAGX,MAGNRPT,DATA
  1. ;
  1. S MAGNRPT=$$GRARPT(MAGNCXT) ; Get RA Report IEN by CPRS Context
  1. S MAGNCNT=MAGNCNT+1
  1. S @MAGRY@(MAGNCNT)="NEXT_CONTEXTID|"_MAGNCXT_"|"_MAGNRPT_"|RAD"
  1. I MAGNRPT'>0 Q
  1. ;
  1. ; e.g. MAGNCXT=RPT^CPRS^29027^RA^79029185.9998-1
  1. ; See MAGJEX3
  1. ; MAGX--TXID ^ DFN ^ DTI ^ CNI ^ RARPT ^ MAGIEN ^ PSDETAIL
  1. S $P(MAGX,"^",1)=3 ; TXID Key and Interp Images
  1. S $P(MAGX,"^",2)=$P(MAGNCXT,"^",3) ; DFN
  1. S $P(MAGX,"^",3)=$P($P(MAGNCXT,"^",5),"-",1)
  1. S $P(MAGX,"^",4)=$P($P(MAGNCXT,"^",5),"-",2)
  1. S $P(MAGX,"^",5)=MAGNRPT ; Report IEN
  1. S $P(MAGX,"^",7)=1 ; PSDETAIL
  1. ;
  1. D GRAANN(MAGRY,.MAGNCNT,MAGNCXT,MAGX)
  1. ;
  1. ; Get Clinical Annotations
  1. D GIMGRARP(.DATA,MAGNRPT)
  1. D GIENANN(MAGRY,.MAGNCNT,MAGNCXT,.DATA)
  1. Q
  1. ;
  1. GRAANNRP(MAGRY,MAGNCNT,MAGNCXT,MAGNRPT) ; Get RAD annotations by RA Report
  1. N MAGX
  1. ;
  1. S MAGNCNT=MAGNCNT+1
  1. S @MAGRY@(MAGNCNT)="NEXT_CONTEXTID|"_MAGNCXT_"|"_MAGNRPT_"|RAD"
  1. I MAGNRPT'>0 Q
  1. ;
  1. ; e.g. MAGNCXT=^^^MAG^10454
  1. ; See MAGJEX3
  1. ; MAGX--TXID ^ DFN ^ DTI ^ CNI ^ RARPT ^ MAGIEN ^ PSDETAIL
  1. S $P(MAGX,"^",1)=3 ; TXID Key and Interp Images
  1. S $P(MAGX,"^",2)="" ; DFN
  1. S $P(MAGX,"^",3)=""
  1. S $P(MAGX,"^",4)=""
  1. S $P(MAGX,"^",5)=MAGNRPT ; Report IEN
  1. S $P(MAGX,"^",7)=1 ; PSDETAIL
  1. ;
  1. D GRAANN(MAGRY,.MAGNCNT,MAGNCXT,MAGX)
  1. Q
  1. ;
  1. GRAANN(MAGRY,MAGNCNT,MAGNCXT,MAGX) ; Get Radiology study annotations
  1. N J,MAGOUT
  1. ;
  1. D RPCIN^MAGJEX3(.MAGOUT,MAGX)
  1. S @MAGRY@(MAGNCNT)="NEXT_CONTEXTID|"_MAGNCXT_"|"_@MAGOUT@(0)_"|RAD"
  1. S J=0
  1. F S J=$O(@MAGOUT@(J)) Q:'J D
  1. . S MAGNCNT=MAGNCNT+1
  1. . S @MAGRY@(MAGNCNT)=@MAGOUT@(J)
  1. . Q
  1. K @MAGOUT
  1. S @MAGRY@(0)=1
  1. Q
  1. ;
  1. GTUIANN(MAGRY,MAGNCNT,MAGNCXT) ;Get TIU annotations
  1. N DATA,MAGNTIU
  1. ;
  1. S MAGNTIU=$P(MAGNCXT,"^",5)
  1. D IMAGES^MAGGNTI(.DATA,MAGNTIU) ; Get all images for TIU
  1. ;
  1. D GIENANN(MAGRY,.MAGNCNT,MAGNCXT,.DATA) ;Get annotations for image IEN
  1. ;
  1. Q
  1. ;
  1. GMAGANN(MAGRY,MAGNCNT,MAGNCXT) ; Get study annotations by image ien
  1. N DATA,MAGIEN,MAGROOT,MAGD0
  1. ;
  1. S MAGIEN=$P(MAGNCXT,"^",5)
  1. S MAGROOT=$$GET1^DIQ(2005,MAGIEN,16)
  1. S MAGD0=$$GET1^DIQ(2005,MAGIEN,17)
  1. ;
  1. I MAGROOT="TIU" D Q
  1. . D IMAGES^MAGGNTI(.DATA,MAGD0) ; Get all images for TIU
  1. . D GIENANN(MAGRY,.MAGNCNT,MAGNCXT,.DATA) ;Get annotations for image IEN
  1. . Q
  1. ;
  1. I MAGROOT="RADIOLOGY" D Q
  1. . D GRAANNRP(MAGRY,MAGNCNT,MAGNCXT,MAGD0)
  1. . ; Try to get images in case of Capture (Clinical) annotation
  1. . D IMAGES(.DATA,MAGIEN) ; Get Images by Group image IEN
  1. . D GIENANN(MAGRY,.MAGNCNT,MAGNCXT,.DATA) ;Get annotations for image IEN
  1. . Q
  1. ;
  1. I MAGROOT="" D ; No report
  1. . D IMAGES(.DATA,MAGIEN) ; Get Images by Group image IEN
  1. . D GIENANN(MAGRY,.MAGNCNT,MAGNCXT,.DATA) ;Get annotations for image IEN
  1. . Q
  1. Q
  1. ;
  1. GRARPT(DATA) ; Get RA Report IEN by CPRS Context
  1. N DFN,ENT,INVDTTM,INVDT,INVTM,RARPT
  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)) Q "0^INVALID Data : Attempt to access Exam failed."
  1. S RARPT=$P(^RADPT(DFN,"DT",INVDTTM,"P",ENT,0),U,17)
  1. I 'RARPT Q "0^No Report for selected Exam"
  1. I $P($G(^RARPT(RARPT,0)),U,2)'=DFN Q "-2^Patient Mismatch. Radiology File"
  1. Q RARPT
  1. ;
  1. GIENANN(MAGRY,MAGNCNT,MAGNCXT,DATA) ;Get annotations for image IEN
  1. ; MAGRY = Output array
  1. ; MAGNCNT = initial output counter
  1. ; MAGNCXT = Context ID
  1. ; DATA(0) = Result output
  1. ; DATA(1..n) = Image IEN
  1. ;
  1. N J,I,MAGIEN,MAGNTIU,MAGOUT
  1. ;
  1. I '$D(DATA(0)) Q ; no data to report
  1. S MAGNCNT=MAGNCNT+1
  1. S @MAGRY@(MAGNCNT)="NEXT_CONTEXTID|"_MAGNCXT_"|"_DATA(0)_"|CLN"
  1. I 'DATA(0) Q ; Error quit
  1. ;
  1. S I=0
  1. F S I=$O(DATA(I)) Q:'I D
  1. . S MAGIEN=$P(DATA(I),"^",2)
  1. . K MAGOUT
  1. . ;P122 handles only one type of annotation (Clinic or VistARAD), but not on both
  1. . I '$D(^MAG(2005.002,MAGIEN,0)) Q ; VistA Rad annotations are present. Quit. We need only Clinic
  1. . D GETD^MAGSANNO(.MAGOUT,MAGIEN) ; Get annotation details by image IEN
  1. . S MAGNCNT=MAGNCNT+1
  1. . S @MAGRY@(MAGNCNT)="NEXT_IMAGE|"_MAGIEN_"|"_MAGOUT(0)
  1. . I 'MAGOUT(0) Q ; Error, get next one
  1. . S J=0
  1. . F S J=$O(MAGOUT(J)) Q:'J D
  1. . . S MAGNCNT=MAGNCNT+1
  1. . . S @MAGRY@(MAGNCNT)=MAGOUT(J)
  1. . . Q
  1. . Q
  1. S @MAGRY@(0)=1
  1. Q
  1. ;
  1. IMAGES(DATA,MAGIEN) ; Get all Images for a Group Image IEN
  1. N GROUP
  1. S GROUP=$$ISGRP^MAGGI11(MAGIEN)
  1. S DATA(0)=1 ; Set result to okay
  1. I GROUP D Q
  1. . N NO,CH
  1. . S NO=0
  1. . F S NO=$O(^MAG(2005,MAGIEN,1,NO)) Q:'NO D
  1. . . S CH=+$G(^MAG(2005,MAGIEN,1,NO,0))
  1. . . Q:'CH
  1. . . S $P(DATA(NO),"^",2)=CH
  1. . Q
  1. S $P(DATA(1),"^",2)=MAGIEN
  1. Q
  1. ;
  1. GIMGRARP(DATA,RARPT) ; Get list of images by radiology report
  1. ; RARPT -- Radiology report IEN
  1. ; and returns a list in DATA(1..n).
  1. ;
  1. N GROUPS,OUT,REQDFN
  1. ;
  1. N CT,OI,IGCT,MAGIEN1,MAGQI,MAGX
  1. K MAGZRY
  1. S IGCT=+$P($G(^RARPT(RARPT,2005,0)),U,4)
  1. ; Quit if no images for RARPT
  1. I IGCT=0 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 DATA(0)=MAGQI Q ; Integrity error
  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 $P(DATA(OI),"^",2)=MAGIEN1
  1. . Q
  1. S DATA(0)=1 ; okay result
  1. Q