| 1 | MAGGSIA1 ;WOIFO/GEK - RPC Call to Add Image File entry ; [ 12/27/2000 10:49 ] | 
|---|
| 2 | ;;3.0;IMAGING;**7,8,85,59**;Nov 27, 2007;Build 20 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ;; +---------------------------------------------------------------+ | 
|---|
| 5 | ;; | Property of the US Government.                                | | 
|---|
| 6 | ;; | No permission to copy or redistribute this software is given. | | 
|---|
| 7 | ;; | Use of unreleased versions of this software requires the user | | 
|---|
| 8 | ;; | to execute a written test agreement with the VistA Imaging    | | 
|---|
| 9 | ;; | Development Office of the Department of Veterans Affairs,     | | 
|---|
| 10 | ;; | telephone (301) 734-0100.                                     | | 
|---|
| 11 | ;; |                                                               | | 
|---|
| 12 | ;; | The Food and Drug Administration classifies this software as  | | 
|---|
| 13 | ;; | a medical device.  As such, it may not be changed in any way. | | 
|---|
| 14 | ;; | Modifications to this software may result in an adulterated   | | 
|---|
| 15 | ;; | medical device under 21CFR820, the use of which is considered | | 
|---|
| 16 | ;; | to be a violation of US Federal Statutes.                     | | 
|---|
| 17 | ;; +---------------------------------------------------------------+ | 
|---|
| 18 | ;; | 
|---|
| 19 | Q | 
|---|
| 20 | PRE(MAGERR,MAGGFDA,MAGGRP,MAGGDRV,MAGREF) ; | 
|---|
| 21 | ;  Check on some possible problems: required fields etc. | 
|---|
| 22 | ;  Object Type and (Patient, or Short Desc) Required. | 
|---|
| 23 | N MAGRSLT,X,Z | 
|---|
| 24 | I '$D(MAGGFDA(2005,"+1,",3)) D OBJTYPE | 
|---|
| 25 | I '$D(MAGGFDA(2005,"+1,",3)) S MAGERR="0^Need an Object Type " Q | 
|---|
| 26 | I '$D(MAGGFDA(2005,"+1,",5)),'$D(MAGGFDA(2005,"+1,",10)) D  Q | 
|---|
| 27 | . S MAGERR="0^Need Patient or Short Desc.  Operation CANCELED " | 
|---|
| 28 | ; IF no Procedure text we'll give it some so crossref will set. | 
|---|
| 29 | D PATCHK(.MAGRSLT) I 'MAGRSLT S MAGERR=MAGRSLT Q | 
|---|
| 30 | ; Patch 8 IAPI We Create IXCLS (#41 CLASS) and  IXPKG (#40 Package) if TYPE is in Data. | 
|---|
| 31 | ; But we are not making TYPE required yet for backward compatibality. | 
|---|
| 32 | I $D(MAGGFDA(2005,"+1,",42)) D | 
|---|
| 33 | . I $$GET1^DIQ(2005.83,MAGGFDA(2005,"+1,",42),2,"E")="INACTIVE" D  S MAGRY=MAGERR Q | 
|---|
| 34 | . . S MAGERR="0^Index Type: "_$$GET1^DIQ(2005.83,MAGGFDA(2005,"+1,",42),.01,"E")_"is INACTIVE" | 
|---|
| 35 | . I '$D(MAGGFDA(2005,"+1,",41)) D MAKECLAS^MAGGSIU1 I $L(MAGERR) S MAGRY=MAGERR Q | 
|---|
| 36 | . I ($D(MAGGFDA(2005,"+1,",16)))&($$ISTYPADM(MAGGFDA(2005,"+1,",42))) D  S MAGRY=MAGERR Q | 
|---|
| 37 | . . S MAGERR="0^Can't have an ADMIN TYPE with Clinical Image." | 
|---|
| 38 | . I '$D(MAGGFDA(2005,"+1,",40)) D MAKEPKG^MAGGSIU1 I $L(MAGERR) S MAGRY=MAGERR Q | 
|---|
| 39 | . I '$D(MAGGFDA(2005,"+1,",6)) D MAKEPROC^MAGGSIU1 I $L(MAGERR) S MAGRY=MAGERR Q | 
|---|
| 40 | . I '$D(MAGGFDA(2005,"+1,",45)) D MAKEORIG^MAGGSIU1 I $L(MAGERR) S MAGRY=MAGERR Q | 
|---|
| 41 | . Q | 
|---|
| 42 | ; | 
|---|
| 43 | I '$D(MAGGFDA(2005,"+1,",6)) D PROCTEXT | 
|---|
| 44 | ; | 
|---|
| 45 | ; If no Procedure/Exam Date/Time we'll give it DocDT, or NOW | 
|---|
| 46 | I '$D(MAGGFDA(2005,"+1,",15)) D | 
|---|
| 47 | . I $D(MAGGFDA(2005,"+1,",110)) S MAGGFDA(2005,"+1,",15)=MAGGFDA(2005,"+1,",110) Q | 
|---|
| 48 | . S MAGGFDA(2005,"+1,",15)=$E($$NOW^XLFDT,1,12) | 
|---|
| 49 | ; DateTime image saved. | 
|---|
| 50 | I '$D(MAGGFDA(2005,"+1,",7)) S MAGGFDA(2005,"+1,",7)=$E($$NOW^XLFDT,1,12) | 
|---|
| 51 | ; Short Description | 
|---|
| 52 | ;I '$D(MAGGFDA(2005,"+1,",10)) S MAGGFDA(2005,"+1,",10)=$$MAKENAME^MAGGSIU1(.MAGGFDA) | 
|---|
| 53 | I '$D(MAGGFDA(2005,"+1,",10)) S MAGGFDA(2005,"+1,",10)=$G(MAGGFDA(2005,"+1,",6)) | 
|---|
| 54 | ; Name (.01) | 
|---|
| 55 | I '$D(MAGGFDA(2005,"+1,",.01)) S MAGGFDA(2005,"+1,",.01)=$$MAKENAME^MAGGSIU1(.MAGGFDA) | 
|---|
| 56 | I '$D(MAGGFDA(2005,"+1,",8)) S MAGGFDA(2005,"+1,",8)=$G(DUZ) | 
|---|
| 57 | ; Acquisition Site, Use it to tell where to save the file. | 
|---|
| 58 | I $D(MAGACT("ACQS")) D | 
|---|
| 59 | . ; Patch 8 Have to modify: Field 105 (Acquisition Site) is NOW Field .05 | 
|---|
| 60 | . I $P(MAGACT("ACQS"),";")]"" S MAGGFDA(2005,"+1,",.05)=$P(MAGACT("ACQS"),";") | 
|---|
| 61 | ; Only get drive:dir if not a group | 
|---|
| 62 | I 'MAGGRP D  I $L(MAGERR) Q | 
|---|
| 63 | . ; The value of the Action Code "WRITE^value" OVERRIDES any Write Location | 
|---|
| 64 | . ; sent as field # 2 in the input array. (The only value we check for is "PACS" from peter's code) | 
|---|
| 65 | . S X=$S($D(MAGACT("WRITE")):MAGACT("WRITE"),$D(MAGGFDA(2005,"+1,",2)):MAGGFDA(2005,"+1,",2),1:"") | 
|---|
| 66 | . ;P85 Send ACQS as second Param. $$DRIVE will use ACQS If X = "" | 
|---|
| 67 | . ; | 
|---|
| 68 | . S Z=$$DRIVE^MAGGTU1(X,$G(MAGGFDA(2005,"+1,",.05))) ;Drv:Dir to Write | 
|---|
| 69 | . I 'Z S MAGERR=Z Q | 
|---|
| 70 | . S MAGGDRV=$P(Z,U,2) | 
|---|
| 71 | . S MAGGFDA(2005,"+1,",2)=+Z               ;Disk & Vol magnetic | 
|---|
| 72 | . ; if a big file is being made on workstation, put NetWork Location | 
|---|
| 73 | . ; pointer in the BIG NETWORK LOCATION field. | 
|---|
| 74 | . ; (BIG files default to same Network Location as FullRes (or PACS)) | 
|---|
| 75 | . I $G(MAGACT("BIG"))=1 S MAGGFDA(2005,"+1,",102)=+Z | 
|---|
| 76 | . S MAGREF=+Z ; save network location ien for $$DIRHASH in ^MAGGSIA1 | 
|---|
| 77 | . I $G(MAGACT("ABS"))="STUFFONLY" S MAGGFDA(2005,"+1,",2.1)=+Z | 
|---|
| 78 | ; | 
|---|
| 79 | I $D(MAGACT("ACQL")) S MAGGFDA(2005,"+1,",101)=MAGACT("ACQL") | 
|---|
| 80 | ; HERE we are putting PRE Processing for the Import API action codes. | 
|---|
| 81 | ; "ACQD,ACQS" If Acquisition device entry doesn't exist, create it. | 
|---|
| 82 | I $D(MAGACT("ACQD")) D | 
|---|
| 83 | . ; IF Value is a pointer to the ACQ DEVICE File Quit.  If it's invalid then UPDATE will catch it. | 
|---|
| 84 | . I (+MAGACT("ACQD")=MAGACT("ACQD")) S MAGGFDA(2005,"+1,",107)=MAGACT("ACQD") Q | 
|---|
| 85 | . I $D(^MAG(2006.04,"B",MAGACT("ACQD"))) D  Q | 
|---|
| 86 | . . ; IF Already exists, add it to the FDA | 
|---|
| 87 | . . S MAGGFDA(2005,"+1,",107)=$O(^MAG(2006.04,"B",MAGACT("ACQD"),"")) | 
|---|
| 88 | . . ; What do we do with the Acquisition Site. IF Acq Dev already exists. ? | 
|---|
| 89 | . . ; ?? | 
|---|
| 90 | . ; IF it doesn't exist, create it, and add it's ien to the image entry | 
|---|
| 91 | . N MAGDFDA,MAGDIEN,MAGDXE | 
|---|
| 92 | . S MAGDFDA(2006.04,"+1,",.01)=MAGACT("ACQD") | 
|---|
| 93 | . S MAGDFDA(2006.04,"+1,",1)=$S($D(MAGACT("ACQS")):$P(MAGACT("ACQS"),";"),1:$G(MAGGFDA(2005,"+1,",.05))) | 
|---|
| 94 | . S MAGDFDA(2006.04,"+1,",2)=$S($D(MAGACT("ACQL")):MAGACT("ACQL"),$D(MAGGFDA(2005,"+1,",101)):MAGGFDA(2005,"+1,",101),1:$P($G(MAGACT("ACQS")),";",2)) | 
|---|
| 95 | . ; ACQS was a 2 ';' piece value with Acq Location (HOSPITAL LOCATION) as 2nd piece | 
|---|
| 96 | . ;   now it is sent as it's own value in ACQL | 
|---|
| 97 | . D UPDATE^DIE("","MAGDFDA","MAGDIEN","MAGDXE") | 
|---|
| 98 | . S MAGGFDA(2005,"+1,",107)=MAGDIEN(1) | 
|---|
| 99 | ; | 
|---|
| 100 | ;  Check the last entry in Audit File to see if it is greater than | 
|---|
| 101 | ; last image in Image File.  IF yes, change Image File (0) node entry. | 
|---|
| 102 | I ($O(^MAG(2005,"A"),-1)<$O(^MAG(2005.1,"A"),-1)) S $P(^MAG(2005,0),U,3)=$O(^MAG(2005.1,"A"),-1) | 
|---|
| 103 | ; | 
|---|
| 104 | Q | 
|---|
| 105 | PATCHK(MAGR) ; This uses the FDA Array and checks the Imaging Patient against the Procedure patient | 
|---|
| 106 | ; | 
|---|
| 107 | N MAGDFN,PX,PXDA,MAGY | 
|---|
| 108 | S PX=$G(MAGGFDA(2005,"+1,",16)) | 
|---|
| 109 | S PXDA=$G(MAGGFDA(2005,"+1,",17)) | 
|---|
| 110 | I 'PX S MAGR=1 Q  ; This is a category, or an Image of a group (no parent pointer) | 
|---|
| 111 | S MAGDFN=MAGGFDA(2005,"+1,",5) | 
|---|
| 112 | I (PX=8925) D  Q | 
|---|
| 113 | . I '$D(^TIU(8925,PXDA)) S MAGR="0^Invalid TIU Entry Number: "_PXDA Q | 
|---|
| 114 | . D DATA^MAGGNTI(.MAGY,PXDA) | 
|---|
| 115 | . I '(MAGDFN=$P(MAGY,U,4)) S MAGR="0^Procedure and Imaging patients don't match." Q | 
|---|
| 116 | . S MAGR=1 | 
|---|
| 117 | Q | 
|---|
| 118 | OBJTYPE ; This call uses the EXT and computes an Object Type | 
|---|
| 119 | N MTYPE | 
|---|
| 120 | I '$L($G(MAGACT("EXT"))) Q | 
|---|
| 121 | S MTYPE=$O(^MAG(2005.02,"AD",MAGACT("EXT"),"")) | 
|---|
| 122 | ;I 'MTYPE Q | 
|---|
| 123 | ;TODO : Answer question, do we want to have a default Image type ? | 
|---|
| 124 | I 'MTYPE S MTYPE=1 | 
|---|
| 125 | S MAGGFDA(2005,"+1,",3)=MTYPE | 
|---|
| 126 | Q | 
|---|
| 127 | ISTYPADM(TYPE) ; Returns 1 if this is an Admin Type | 
|---|
| 128 | N CL | 
|---|
| 129 | I '$G(TYPE) Q 0 | 
|---|
| 130 | S CL=$$GET1^DIQ(2005.83,TYPE,1,"E") | 
|---|
| 131 | Q $S($E(CL,1,5)="ADMIN":1,1:0) | 
|---|
| 132 | PROCTEXT ;This call uses flds 16 and 17 to compute fld #6 PROCEDURE TEXT [8F] | 
|---|
| 133 | ; We are here because fld #6 PROCEDURE [8F] is null. | 
|---|
| 134 | ; If a pointer to a package is in the data, (flds 16 and 17) | 
|---|
| 135 | ;  get fld #6 from that , if not then treat it as an UNASSIGNED image | 
|---|
| 136 | ; i.e. Category UNASSIGNED. | 
|---|
| 137 | N MAGYPX,PARENT,PARIEN,PXDESC | 
|---|
| 138 | S PARENT=$G(MAGGFDA(2005,"+1,",16)) | 
|---|
| 139 | S PARIEN=$G(MAGGFDA(2005,"+1,",17)) | 
|---|
| 140 | ; | 
|---|
| 141 | I (PARENT=8925),(PARIEN]"") D  Q | 
|---|
| 142 | . D DATA^MAGGNTI(.MAGYPX,PARIEN) | 
|---|
| 143 | . S MAGGFDA(2005,"+1,",6)=$P(MAGYPX,U,2) | 
|---|
| 144 | ;TODO; create calls to get default procedure desc for all specialties | 
|---|
| 145 | ; AND default to NONE if a TYPE and no PARENT data File (fld 16) | 
|---|
| 146 | ; If a Parent pointer exists, and it isn't TIU, for now set "NO Description" | 
|---|
| 147 | I PARENT]"" S MAGGFDA(2005,"+1,",6)="No Description" Q | 
|---|
| 148 | ; | 
|---|
| 149 | ; Do we have a pointer to a MAG DESCRIPTIVE CATEGORY | 
|---|
| 150 | I ($G(MAGGFDA(2005,"+1,",100))]"") D  Q | 
|---|
| 151 | . S MAGGFDA(2005,"+1,",6)=$P(^MAG(2005.81,MAGGFDA(2005,"+1,",100),0),U,1) | 
|---|
| 152 | ; | 
|---|
| 153 | ; If a new child of a Group, use that Proc Desc | 
|---|
| 154 | I $G(MAGGFDA(2005,"+1,",14))]"" D  Q | 
|---|
| 155 | . S MAGGFDA(2005,"+1,",6)=$P(^MAG(2005,MAGGFDA(2005,"+1,",14),0),U,8) | 
|---|
| 156 | ; | 
|---|
| 157 | ; Parent="", and no Category pointer, then we Call it UNASSIGNED | 
|---|
| 158 | S MAGGFDA(2005,"+1,",100)=$O(^MAG(2005.81,"B","UNASSIGNED","")) | 
|---|
| 159 | S MAGGFDA(2005,"+1,",6)="UNASSIGNED" | 
|---|
| 160 | Q | 
|---|