| 1 | MAGGTLB1 ;WOIFO/LB - RPC routine for Imaging Lab Interface ; [ 06/20/2001 08:56 ] | 
|---|
| 2 | ;;3.0;IMAGING;**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 | ;; | The Food and Drug Administration classifies this software as  | | 
|---|
| 12 | ;; | a medical device.  As such, it may not be changed in any way. | | 
|---|
| 13 | ;; | Modifications to this software may result in an adulterated   | | 
|---|
| 14 | ;; | medical device under 21CFR820, the use of which is considered | | 
|---|
| 15 | ;; | to be a violation of US Federal Statutes.                     | | 
|---|
| 16 | ;; +---------------------------------------------------------------+ | 
|---|
| 17 | ;; | 
|---|
| 18 | Q | 
|---|
| 19 | ;This routine is called from the Laboratory Image capture window. | 
|---|
| 20 | ;After an image is captured and an entry is created in file 2005, | 
|---|
| 21 | ;this routine will be called to set the imaging pointers in the | 
|---|
| 22 | ;corresponding Lab subfile (Autopsy/ Organism, Surgical Path, EM, | 
|---|
| 23 | ;or Cytology) and update the imaging file with the corresponding | 
|---|
| 24 | ;Lab pointers. | 
|---|
| 25 | FILE(MAGRY,IMIEN,DATA) ;RPC Call to file pointers in Lab and Image files. | 
|---|
| 26 | ;IMIEN - ^MAG(2005,IMIEN image captured. | 
|---|
| 27 | ;DATA - piece 1 = stain             piece 2 = micro obj | 
|---|
| 28 | ;             3 = Pt name                 4 = ssn | 
|---|
| 29 | ;             5 = date/time               6 = acc# | 
|---|
| 30 | ;             7 = Pathologist             8 = specimen desc. | 
|---|
| 31 | ;             9 = lab section            10 = dfn | 
|---|
| 32 | ;            11 = lrdfn                  12 = lri | 
|---|
| 33 | ;            13 = spec ien               14 = field# | 
|---|
| 34 | ;            15 = global root e.g. ^LR(1,"SP",7069758,1,1 | 
|---|
| 35 | ;DATA is the result of START^MAGGTLB (the specimen variable during the | 
|---|
| 36 | ;image capture window). | 
|---|
| 37 | ;Will return a single value on filing success. | 
|---|
| 38 | ; | 
|---|
| 39 | IF $$NEWERR^%ZTER N $ETRAP,$ESTACK S $ETRAP="D ERR^MAGGTERR" | 
|---|
| 40 | E  S X="ERR^MAGGTERR",@^%ZOSF("TRAP") | 
|---|
| 41 | ; | 
|---|
| 42 | N ANUM,DA,DA1,DAS,DFN,DIERR,FIELD,I,IMOBJ,LABD,LABFDA,LABIEN,LABIENS | 
|---|
| 43 | N LRDFN,LRI,MAGFDA,MAGIEN,MAGNODE,OUT,SECT,SECTLTR,SPEC,SPECD | 
|---|
| 44 | N SSUBFILE,SSUBFL,STAIN,SUBFILE,X,Y | 
|---|
| 45 | S MAGRY="0^Started filing",MAGIEN=IMIEN | 
|---|
| 46 | S SECT=$P(DATA,"^",9),DFN=$P(DATA,"^",10),LRDFN=$P(DATA,"^",11) | 
|---|
| 47 | S LRI=$P(DATA,"^",12) | 
|---|
| 48 | S SPEC=$P(DATA,"^",13),FIELD=$P(DATA,"^",14) | 
|---|
| 49 | S MAGNODE="^"_$P(DATA,"^",15,99),ANUM=$P(DATA,"^",6) | 
|---|
| 50 | S SPECD=$P(DATA,"^",8),STAIN=$P(DATA,"^",1),IMOBJ=$P(DATA,"^",2) | 
|---|
| 51 | I SECT["~" S SECT=$P(SECT,"~",1) | 
|---|
| 52 | ;Check for valid image | 
|---|
| 53 | I '$D(^MAG(2005,MAGIEN,0)) D  Q | 
|---|
| 54 | . S Y(0)="0^Image entry does not exist." | 
|---|
| 55 | ;Check for valid image patient entry. | 
|---|
| 56 | I $P(^MAG(2005,MAGIEN,0),"^",7)'=DFN D  Q | 
|---|
| 57 | . S MAGRY="0^Image patient does not match Lab patient." | 
|---|
| 58 | ;Check if parent file and corresponding fields are filed in file 2005. | 
|---|
| 59 | I $D(^MAG(2005,MAGIEN,2)) S X=^MAG(2005,MAGIEN,2) D  Q:OUT | 
|---|
| 60 | . S OUT=0 | 
|---|
| 61 | . I $P(X,"^",6),$P(X,"^",7),$P(X,"^",8) S OUT=1 | 
|---|
| 62 | . I OUT S MAGRY="0^Report already exist for this image." | 
|---|
| 63 | ;Check the Lab entries...do they still exists. | 
|---|
| 64 | S MAGNODE=MAGNODE_",0)" | 
|---|
| 65 | I '$D(@MAGNODE) S MAGRY="0^Specimen no longer in Lab file." Q | 
|---|
| 66 | ;Everything seem okay lets file image pointer in lab file. | 
|---|
| 67 | S SECTLTR=$S(SECT=63:"AY",SECT=63.2:"AY",1:$P(^MAG(2005.03,SECT,0),"^",2)) | 
|---|
| 68 | ;Lab nodes; AY, SP, EM or CY. | 
|---|
| 69 | ; | 
|---|
| 70 | LAB2 ;updating files using silent Fileman DB calls. | 
|---|
| 71 | N MAGERR,MAGLVL | 
|---|
| 72 | S SUBFILE=$S(SECT=63:63.2,1:SECT) | 
|---|
| 73 | S MAGRY="0^Lab's Imaging subfile doesn't exisit." ;default | 
|---|
| 74 | ;Laboratory's Autopsy subfile has two imaging fields (2005 & 2005.1) | 
|---|
| 75 | ; and file 2005.03 does not reflect this. | 
|---|
| 76 | D FIELD^DID(SUBFILE,FIELD,"","SPECIFIER","MAGLVL","MAGERR") | 
|---|
| 77 | I $D(MAGERR("DIERR")) Q | 
|---|
| 78 | I '$D(MAGLVL("SPECIFIER")) Q | 
|---|
| 79 | S SSUBFL=$G(MAGLVL("SPECIFIER"))      ;Lab's Imaging subfile | 
|---|
| 80 | I SSUBFL="" Q | 
|---|
| 81 | ;Image sub-subfile. | 
|---|
| 82 | S SSUBFILE="" F I=1:1:$L(SSUBFL) D | 
|---|
| 83 | . I $E(SSUBFL,I)?1N!($E(SSUBFL,I)?1".") S SSUBFILE=SSUBFILE_$E(SSUBFL,I) | 
|---|
| 84 | . ;Leave off the alpha characters | 
|---|
| 85 | S DA1=$S(SECTLTR="AY":SPEC,1:LRI)  ;Autopsy is by specimen not date/time | 
|---|
| 86 | S DAS="+3,"_DA1_","_LRDFN_"," | 
|---|
| 87 | ;Sets the iens e.g. da,da(1),da(2). The +3 can be any #; it is the | 
|---|
| 88 | ;subscript of the return variable LABIENS. | 
|---|
| 89 | ;Returns IEN for that subfile & use of +3 is because it's 2 levels down. | 
|---|
| 90 | S LABFDA(SSUBFILE,DAS,.01)=MAGIEN,LABIENS="" | 
|---|
| 91 | D UPDATE^DIE("S","LABFDA","LABIENS") | 
|---|
| 92 | I $D(DIERR) S MAGRY="O^Unsuccessful Lab updating." Q | 
|---|
| 93 | I '$D(LABIENS(3)) S MAGRY="0^Unsuccessful Lab updating" Q | 
|---|
| 94 | S DA=$G(LABIENS(3)) | 
|---|
| 95 | I 'DA!('$D(^LR(LRDFN,SECTLTR,DA1,FIELD,DA,0))) D  Q | 
|---|
| 96 | . S MAGRY="0^Unsuccessful Lab updating" | 
|---|
| 97 | IMAGE2 ; | 
|---|
| 98 | S MAGIEN=MAGIEN_",",LABIEN=DA,LABD=DA1 K DA,DA1 | 
|---|
| 99 | ;  The following fields are saved in the ADDIMAGE Call. | 
|---|
| 100 | ;       50 =ANUM  ;ACCESSION NUMBER FIELD | 
|---|
| 101 | ;       51 =SPECD  ;SPECIMEN DESCRIPTION FIELD | 
|---|
| 102 | ;       52 =SPEC  ;SPECIMEN DO | 
|---|
| 103 | ;       53 =STAIN  ;Histology stain | 
|---|
| 104 | ;       54 =IMOBJ  ;MICROSCOPE OBJECTIVE | 
|---|
| 105 | N DIK | 
|---|
| 106 | S MAGFDA(2005,MAGIEN,16)=SECT     ;LAB SECTION | 
|---|
| 107 | S MAGFDA(2005,MAGIEN,17)=LRDFN    ;PARENT FILE DO VALUE | 
|---|
| 108 | S MAGFDA(2005,MAGIEN,18)=LABIEN   ;LAB BACKWARD IMAGE POINTER | 
|---|
| 109 | S MAGFDA(2005,MAGIEN,63)=LABD  ;If AUTOPSY, it's specimen else date/time | 
|---|
| 110 | S I=0 F I=$O(MAGFDA(2005,MAGIEN,I)) Q:'I  D | 
|---|
| 111 | . D UPDATE^DIE("S","MAGFDA","") | 
|---|
| 112 | I $D(DIERR) S I=0 F  S I=$O(MAGFDA(2005,MAGIEN,I)) Q:'I  D | 
|---|
| 113 | . S MAGFDA(2005,MAGIEN,I)="" D UPDATE^DIE("","MAGFDA","") | 
|---|
| 114 | I $D(DIERR),$D(^LR(LRDFN,SECTLTR,DA1,FIELD,LABIEN,0)),$G(^LR(LRDFN,SECTLTR,DA1,FIELD,LABIEN,0))=MAGIEN D | 
|---|
| 115 | . S DA(2)=LRDFN,DA(1)=DA1,DA=LABIEN | 
|---|
| 116 | . S DIK="^LR("_LRDFN_","""_SECTLTR_""","_DA1_","_FIELD_"," | 
|---|
| 117 | . D ^DIK    ;Remove imaging pointers from lab subfile. | 
|---|
| 118 | I $D(DIERR) S MAGRY="0^Unsuccessful both files not updated." K DIERR Q | 
|---|
| 119 | S MAGRY="1^Success in filing both parent & image files." K DIERR | 
|---|
| 120 | D LINKDT^MAGGTU6(.X,+MAGIEN) | 
|---|
| 121 | Q | 
|---|