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

MAGVUID.m

Go to the documentation of this file.
  1. MAGVUID ;WOIFO/RRB,NST,DAC,RRM - MAGV Duplicate UID Utilities and RPCs ; 24 Oct16 8:30 AM
  1. ;;3.0;IMAGING;**118,138,172,345**;Mar 19, 2002;Build 2
  1. ;; Per VA Directive 6402, 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. ;
  1. STUDY(RESULT,DFN,ACNUMB,SITE,INSTR,STUDYUID,DUPEFLAG) ; RPC - MAGV STUDY UID CHECK - P172/DAC - Duplicate flag added
  1. ;
  1. N NEWUID,TYPE,UID
  1. S TYPE="STUDY",DUPEFLAG=$G(DUPEFLAG)
  1. ;
  1. ; Check length of incoming UID and reject with fatal error message if >96 characters.
  1. ;
  1. I $L(STUDYUID)>96 S RESULT="-1~Fatal UID > 96 Characters" Q
  1. ;
  1. ; Check IMAGING DUPLICATE UID LOG (#2005.66) to determine if the Study UID has been replaced.
  1. ; If it has return the replacement UID and quit. Otherwise, continue with UID checking.
  1. ;
  1. S RESULT=$$UIDCHECK(STUDYUID,TYPE) ; Check for illegal UID format and characters
  1. S UID=$$UIDLOOK^MAGVRS61(STUDYUID,DFN,ACNUMB,TYPE,STUDYUID)
  1. I RESULT=1,+UID>0 S RESULT="3~Illegal UID Replacement~"_UID Q
  1. I UID'=0 D Q
  1. . I $$STUDYUIDSTAT^MAGGETUIDSTATUS(UID)="I" S RESULT=0 Q ;P345-check if the replaced UID is accessible
  1. . S RESULT="1~LogUIDToUse~"_UID
  1. ;
  1. I $$STUDYUIDSTAT^MAGGETUIDSTATUS(STUDYUID)="I" S RESULT=0 Q ;P345-check if the original UID is accessible
  1. ;
  1. ; Check and replace illegal Study UID
  1. ;
  1. I $L(STUDYUID)>64 D Q RESULT ; Replace UID having Illegal Length
  1. . S RESULT="3~Illegal UID Replacement~"
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,STUDYUID,TYPE)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_NEWUID)
  1. . Q
  1. ;
  1. ; S RESULT=$$UIDCHECK(STUDYUID,TYPE) ; Check for illegal UID format and characters
  1. ;
  1. I RESULT=1 D Q RESULT ; Replace UID having Illegal format or characters
  1. . S RESULT="3~Illegal UID Replacement~"
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,STUDYUID,TYPE)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_NEWUID)
  1. ;
  1. I RESULT'=0 Q
  1. ;
  1. ; Proceed with checking Study UID
  1. ;
  1. S RESULT=$$STUDY^MAGVGUID(DFN,ACNUMB,STUDYUID) ; Check Study UID in ^MAG(2005)
  1. ;
  1. I (RESULT=1) D Q ; FIX 10/21/206
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,STUDYUID,TYPE)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_"~NewUIDToUse~"_NEWUID)
  1. . Q
  1. ;
  1. S RESULT=$$DUPSTUD^MAGVRS61(DFN,ACNUMB,STUDYUID) ; Check Study UID in ^MAGV(2005.62)
  1. ;
  1. I (RESULT=1) D ; Create New Study UID if duplicate is found in #2005.62 - P172/DAC - If flag not set store duplicate
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,STUDYUID,TYPE)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_"~NewUIDToUse~"_NEWUID)
  1. . Q
  1. ;
  1. Q
  1. ;
  1. SERIES(RESULT,DFN,ACNUMB,SITE,INSTR,STUDYUID,SERIESUID,DUPEFLAG) ; RPC - MAGV SERIES UID CHECK
  1. ;
  1. N NEWUID,TYPE,UID
  1. S TYPE="SERIES",DUPEFLAG=$G(DUPEFLAG)
  1. ;
  1. ; Check length of incoming UID and reject with fatal error message if >96 characters.
  1. ;
  1. I $L(SERIESUID)>96 S RESULT="-1~Fatal UID > 96 Characters" Q
  1. ;
  1. ; Check IMAGING DUPLICATE UID LOG (#2005.66) to determine if the Series UID has been replaced.
  1. ; If it has return the replacement UID and quit. Otherwise, continue with UID checking.
  1. ;
  1. ; S UID=$$UIDLOOK^MAGVRS61(SERIESUID,DFN,ACNUMB,TYPE,STUDYUID)
  1. ; I UID'=0 S RESULT="1~LogUIDToUse~"_UID Q
  1. ;
  1. S RESULT=$$UIDCHECK(SERIESUID,TYPE) ; Check for illegal UID format and characters
  1. S UID=$$UIDLOOK^MAGVRS61(SERIESUID,DFN,ACNUMB,TYPE,STUDYUID)
  1. I RESULT=1,+UID>0 S RESULT="3~Illegal UID Replacement~"_UID Q
  1. I UID'=0 D Q
  1. . I $$GETSERIESUIDSTAT^MAGGETUIDSTATUS(UID)="I" S RESULT=0 Q ;P345-check if the replaced UID is accessible
  1. . S RESULT="1~LogUIDToUse~"_UID
  1. ;
  1. I $$GETSERIESUIDSTAT^MAGGETUIDSTATUS(SERIESUID)="I" S RESULT=0 Q ;P345-check if the original UID is accessible
  1. ; Check and replace illegal Series UID
  1. ;
  1. I $L(SERIESUID)>64 D Q RESULT ; Replace UID having Illegal Length
  1. . S RESULT="3~Illegal UID Replacement~"
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,SERIESUID,TYPE,STUDYUID)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_NEWUID)
  1. . Q
  1. ;
  1. ; S RESULT=$$UIDCHECK(SERIESUID,TYPE) ; Check for illegal UID format and characters
  1. ;
  1. I RESULT=1 D Q RESULT ; Replace UID having Illegal format or characters
  1. . S RESULT="3~Illegal UID Replacement~"
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,SERIESUID,TYPE,STUDYUID)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_NEWUID)
  1. ;
  1. I RESULT'=0 Q
  1. ;
  1. ; Proceed with checking Series UID
  1. ;
  1. S RESULT=$$SERIES^MAGVGUID(DFN,ACNUMB,STUDYUID,SERIESUID) ; Check Series UID in ^MAG(2005) - P172/DAC - If flag not set store duplicate
  1. ;
  1. I (RESULT=1)&('DUPEFLAG) D Q ; Create New Series UID and Quit if duplicate is found in #2005
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,SERIESUID,TYPE,STUDYUID)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_"~NewUIDToUse~"_NEWUID)
  1. . Q
  1. ;
  1. S RESULT=$$DUPSER^MAGVRS61(DFN,ACNUMB,STUDYUID,SERIESUID) ; Check Series UID in ^MAGV(2005.63) - P172/DAC - If flag not set store duplicate
  1. ;
  1. I (RESULT=1)&('DUPEFLAG) D ; Create New Series UID if duplicate is found in #2005.63
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,SERIESUID,TYPE,STUDYUID)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_"~NewUIDToUse~"_NEWUID)
  1. . Q
  1. ;
  1. I (RESULT=1)&(DUPEFLAG) S RESULT=RESULT_"~NewUIDToUse~0" ; P172/DAC - If flag set do not store duplicate
  1. ;
  1. Q
  1. ;
  1. SOP(RESULT,DFN,ACNUMB,SITE,INSTR,STUDYUID,SERIESUID,SOPUID,DUPEFLAG) ; RPC - MAGV SOP UID CHECK
  1. ;
  1. N NEWUID,TYPE,UID
  1. S TYPE="SOP",DUPEFLAG=$G(DUPEFLAG)
  1. ;
  1. ; Check length of incoming UID and reject with fatal error message if >96 characters.
  1. ;
  1. I $L(SOPUID)>96 S RESULT="-1~Fatal UID > 96 Characters" Q
  1. ;
  1. ;
  1. ; Check IMAGING DUPLICATE UID LOG (#2005.66) to determine if the Series UID has been replaced.
  1. ; If it has return the replacement UID and quit. Otherwise, continue with UID checking.
  1. ;
  1. S UID=$$UIDLOOK^MAGVRS61(SOPUID,DFN,ACNUMB,TYPE,STUDYUID,SERIESUID)
  1. I UID'=0 D Q
  1. . I $$GETSOPUIDSTAT^MAGGETUIDSTATUS(UID)="I" S RESULT=0 Q ;P345-check if the replaced UID is accessible
  1. . S RESULT="2~RERUNLog~"
  1. ;
  1. I $$GETSOPUIDSTAT^MAGGETUIDSTATUS(SOPUID)="I" S RESULT=0 Q ;P345-check if the original UID is accessible
  1. ; Check and replace illegal SOP UID
  1. ;
  1. I $L(SOPUID)>64 D Q RESULT ; Replace UID having Illegal Length
  1. . S RESULT="3~Illegal UID Replacement~"
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,SOPUID,TYPE,STUDYUID,SERIESUID)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_NEWUID)
  1. . Q
  1. ;
  1. S RESULT=$$UIDCHECK(SOPUID,TYPE) ; Check for illegal UID format and characters
  1. ;
  1. I RESULT=1 D Q RESULT ; Replace UID having Illegal format or characters
  1. . S RESULT="3~Illegal UID Replacement~"
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,SOPUID,TYPE,STUDYUID,SERIESUID)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_NEWUID)
  1. ;
  1. I RESULT'=0 Q
  1. ;
  1. ; Proceed with checking SOP UID
  1. ;
  1. S RESULT=$$SOP^MAGVGUID(DFN,ACNUMB,STUDYUID,SERIESUID,SOPUID) ; Check SOP UID in ^MAG(2005)
  1. ;
  1. I RESULT=1 D Q ; Create New SOP UID and Quit if duplicate is found in #2005
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,SOPUID,TYPE,STUDYUID,SERIESUID)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_"~NewUIDToUse~"_NEWUID)
  1. . Q
  1. ;
  1. I RESULT=2 S RESULT=RESULT_"~RERUN" Q ; Quit with RERUN message if on file and not duplicate UID
  1. ;
  1. S RESULT=$$DUPSOP^MAGVRS61(DFN,ACNUMB,STUDYUID,SERIESUID,SOPUID) ; Check Series UID in ^MAGV(2005.64)
  1. ;
  1. I (RESULT=1)&('DUPEFLAG) D ; Create New SOP UID if duplicate is found in #2005.64
  1. . S NEWUID=$$NEWUID(DFN,ACNUMB,SITE,INSTR,SOPUID,TYPE,STUDYUID,SERIESUID)
  1. . S RESULT=$S(+NEWUID=-1:NEWUID,1:RESULT_"~NewUIDToUse~"_NEWUID)
  1. . Q
  1. ;
  1. I (RESULT=1)&(DUPEFLAG) S RESULT=RESULT_"~NewUIDToUse~0" ; P172/DAC - If flag set do not store duplicate
  1. I RESULT=2 S RESULT=RESULT_"~RERUN" ; Return RERUN message if on file and not duplicate UId
  1. ;
  1. Q
  1. ;
  1. UIDCHECK(UIDCHK,TYPE) ; Check UID for invalid UIDs
  1. ;
  1. N I,X
  1. S RESULT=0
  1. ;
  1. ; Check for Illegal Characters
  1. ;
  1. F I=1:1:$L(UIDCHK,".") S X=$P(UIDCHK,".",I) D I RESULT'=0 Q
  1. . I $L(X)>1,$E(X,1)=0 S RESULT=1 Q
  1. . I X'?1.N S RESULT=1 Q
  1. . Q
  1. ;
  1. Q RESULT
  1. ;
  1. NEWUID(DFN,ACNUMB,SITE,INSTR,OUID,TYPE,STUDYUID,SERIESUID) ; Utility to Generate new UID for TYPE
  1. ;
  1. Q:SITE="" "-1~Invalid Site Number"
  1. ;
  1. N UID
  1. ;
  1. S STUDYUID=$G(STUDYUID),SERIESUID=$G(SERIESUID)
  1. ;
  1. S UID=$$GENUID^MAGVUID2(ACNUMB,SITE,INSTR,TYPE) ; Generate a new UID
  1. ;
  1. ; Log duplicate UID error
  1. ;
  1. ;
  1. D LOGDUP^MAGVRS61(OUID,.UID,ACNUMB,DFN,TYPE,STUDYUID,SERIESUID) ; Log duplicate UID and adjust new UID to be unique if already logged
  1. ;
  1. Q UID ; Return new UID to use
  1. ;