| 1 | VAQDBIP2 ;ALB/JRP - PDX EXTRACTION UTILITY;16-MAR-93 | 
|---|
| 2 | ;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993 | 
|---|
| 3 | XTRCT(INFOLINE,DFN,RXIFN,ARRAY,ENCPTR,KEY1,KEY2) ;EXTRACT INFORMATION | 
|---|
| 4 | ;INPUT  : INFOLINE - Line containing information to extract | 
|---|
| 5 | ;         DFN - Pointer to patient in PATIENT file | 
|---|
| 6 | ;         RXIFN - Pointer to prescription in PRESCRIPTION file | 
|---|
| 7 | ;         ARRAY - Extraction array (full global reference) | 
|---|
| 8 | ;         ENCPTR - Pointer to VAQ - ENCRYPTION METHOD file (optional) | 
|---|
| 9 | ;                  (only used if encryption will be done) | 
|---|
| 10 | ;         KEY1 - Primary encryption key | 
|---|
| 11 | ;                (only required if ENCPTR passed) | 
|---|
| 12 | ;         KEY2 - Secondary encryption key | 
|---|
| 13 | ;                (only required if ENCPTR passed) | 
|---|
| 14 | ;OUTPUT : 0 - Extraction was successfull | 
|---|
| 15 | ;             Information stored in extraction array | 
|---|
| 16 | ;        -1^Error_Text - Extraction was not successfull | 
|---|
| 17 | ;NOTES  : INFOLINE is in the format | 
|---|
| 18 | ;  <TAB>;;File;Field,Field,...,Field;Multiple Limit;Reverse Order Mult | 
|---|
| 19 | ;       : 'Multiple Limit' is the number of multiples to extract | 
|---|
| 20 | ;         (defaults to all) | 
|---|
| 21 | ;       : If 'Reverse Order Mult' contains a value other than 0, | 
|---|
| 22 | ;         multiples will be extracted in reverse order (last in | 
|---|
| 23 | ;         first out).  If it does not have a value or is 0, | 
|---|
| 24 | ;         multiples will be extracted in normal fashion (first in | 
|---|
| 25 | ;         first out). | 
|---|
| 26 | ; | 
|---|
| 27 | ;CHECK INPUT | 
|---|
| 28 | Q:($G(INFOLINE)="") "-1^Did not pass info line" | 
|---|
| 29 | Q:($G(DFN)="") "-1^Did not pass pointer to PATIENT file" | 
|---|
| 30 | S RXIFN=$G(RXIFN) | 
|---|
| 31 | S ENCPTR=+$G(ENCPTR) | 
|---|
| 32 | S KEY1=$G(KEY1) | 
|---|
| 33 | S KEY2=$G(KEY2) | 
|---|
| 34 | I (ENCPTR) Q:((KEY1="")!(KEY2="")) "-1^Did not pass both encription keys" | 
|---|
| 35 | ;DECLARE VARIABLES | 
|---|
| 36 | N TMP,FILE,FIELDS,MAINFILE,MAINFLD,GLOBAL,NODE,STRING | 
|---|
| 37 | N WORDPROC,ENTRY,ERROR,MULTLIM,COUNT,MULTREV,ENCRYPT | 
|---|
| 38 | N DIC,DR,DA,DIQ,SEQUENCE,ID,RXNUM,PATNAME,FIELD,ENCSTR | 
|---|
| 39 | ;SAFE GUARD DELETION OF UTILITY GLOBAL | 
|---|
| 40 | K ^UTILITY("DIQ1",$J) | 
|---|
| 41 | ;GET ENCRYPTION METHOD | 
|---|
| 42 | S TMP="STRING" | 
|---|
| 43 | S:(ENCPTR) TMP=$$ENCMTHD^VAQUTL2(ENCPTR,0) | 
|---|
| 44 | Q:((ENCPTR)&(TMP="")) "-1^Could not determine encryption method" | 
|---|
| 45 | S ENCRYPT="S ENCSTR="_TMP | 
|---|
| 46 | ;GET PATIENT'S NAME | 
|---|
| 47 | S TMP=$$PATINFO^VAQUTL1(DFN) | 
|---|
| 48 | S STRING=$P(TMP,"^",1) | 
|---|
| 49 | Q:(STRING="-1") "-1^Could not determine patient's name" | 
|---|
| 50 | ;ENCRYPT | 
|---|
| 51 | S ENCSTR=STRING | 
|---|
| 52 | I $$NCRPFLD^VAQUTL2(2,.01) X ENCRYPT | 
|---|
| 53 | S PATNAME=ENCSTR | 
|---|
| 54 | ;GET RX # | 
|---|
| 55 | I (RXIFN'="") D | 
|---|
| 56 | .S DIC="^PSRX(" | 
|---|
| 57 | .S DR=.01 | 
|---|
| 58 | .S DA=RXIFN | 
|---|
| 59 | .S DIQ(0)="E" | 
|---|
| 60 | .D EN^DIQ1 | 
|---|
| 61 | .S STRING=$G(^UTILITY("DIQ1",$J,52,RXIFN,.01,"E")) | 
|---|
| 62 | .;ENCRYPT | 
|---|
| 63 | .S ENCSTR=STRING | 
|---|
| 64 | .I $$NCRPFLD^VAQUTL2(52,.01) X ENCRYPT | 
|---|
| 65 | .S RXNUM=ENCSTR | 
|---|
| 66 | .;TESTING OF RESULT DONE IF NEEDED LATER ON | 
|---|
| 67 | .K ^UTILITY("DIQ1",$J) | 
|---|
| 68 | S ERROR=0 | 
|---|
| 69 | S FILE=$P(INFOLINE,";",3) | 
|---|
| 70 | S FIELDS=$P(INFOLINE,";",4) | 
|---|
| 71 | S MULTLIM=$P(INFOLINE,";",5) | 
|---|
| 72 | S MULTREV=$P(INFOLINE,";",6) | 
|---|
| 73 | ;CHECK FOR MULTIPLE | 
|---|
| 74 | S MAINFILE=$G(^DD(FILE,0,"UP")) | 
|---|
| 75 | ;CHECK FOR WORD-PROCESSING FIELD | 
|---|
| 76 | S WORDPROC=$F($P($G(^DD(FILE,.01,0)),"^",2),"W") | 
|---|
| 77 | ;NON-MULTIPLE | 
|---|
| 78 | I (MAINFILE="") D  Q ERROR | 
|---|
| 79 | .I ((FILE=52)&(RXIFN="")) S ERROR="-1^Pointer to PRESCRIPTION file not passed" Q | 
|---|
| 80 | .S DIC=FILE | 
|---|
| 81 | .S DR=$TR(FIELDS,",",";") | 
|---|
| 82 | .S DA=$S(FILE=52:RXIFN,1:DFN) | 
|---|
| 83 | .S DIQ(0)="E" | 
|---|
| 84 | .K ^UTILITY("DIQ1",$J) | 
|---|
| 85 | .D EN^DIQ1 | 
|---|
| 86 | .;STORE IN EXTRACTION ARRAY | 
|---|
| 87 | .F TMP=1:1:$L(FIELDS,",") D | 
|---|
| 88 | ..S FIELD=$P(FIELDS,",",TMP) | 
|---|
| 89 | ..S SEQUENCE=$$GETSEQ^VAQDBIP(ARRAY,FILE,FIELD) | 
|---|
| 90 | ..;DETERMINE IDENTIFIER | 
|---|
| 91 | ..S ID=PATNAME | 
|---|
| 92 | ..S:((FILE=52)&(FIELD'=.01)) ID=RXNUM | 
|---|
| 93 | ..S STRING=$G(^UTILITY("DIQ1",$J,FILE,DA,FIELD,"E")) | 
|---|
| 94 | ..;ENCRYPT | 
|---|
| 95 | ..S ENCSTR=STRING | 
|---|
| 96 | ..I $$NCRPFLD^VAQUTL2(FILE,FIELD) X ENCRYPT | 
|---|
| 97 | ..S @ARRAY@("VALUE",FILE,FIELD,SEQUENCE)=ENCSTR | 
|---|
| 98 | ..S @ARRAY@("ID",FILE,FIELD,SEQUENCE)=ID | 
|---|
| 99 | .K ^UTILITY("DIQ1",$J) | 
|---|
| 100 | ;MULTIPLE | 
|---|
| 101 | I ((MAINFILE'="")&('WORDPROC)) D MLTPLE^VAQDBIP5 Q ERROR | 
|---|
| 102 | ;WORD-PROCESSING FIELD | 
|---|
| 103 | I ((MAINFILE'="")&(WORDPROC)) D WORD^VAQDBIP5 Q ERROR | 
|---|
| 104 | Q | 
|---|