| 1 | VAQUPD25 ;ALB/JRP - EXTRACT SEGMENT FROM DATA FILE;08-APR-93
 | 
|---|
| 2 |  ;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993
 | 
|---|
| 3 | EXTARR(TRAN,SEG,ROOT,OFFSET) ;PULL EXTRACTION ARRAY OUT OF DATA FILE
 | 
|---|
| 4 |  ;INPUT  : TRAN - Pointer to VAQ - TRANSACTION file
 | 
|---|
| 5 |  ;         SEG - Pointer to VAQ - DATA SEGMENT file
 | 
|---|
| 6 |  ;         ROOT - Where to store the extraction array (full global ref)
 | 
|---|
| 7 |  ;         OFFSET - Where to begin placing information (defaults to 0)
 | 
|---|
| 8 |  ;                  (Only valid for extractions that are in Display
 | 
|---|
| 9 |  ;                   Ready format)
 | 
|---|
| 10 |  ;OUTPUT : 0 - Success (non-display ready)
 | 
|---|
| 11 |  ;         n - Number of lines in display (display ready format)
 | 
|---|
| 12 |  ;        -1^Error_Text - Error
 | 
|---|
| 13 |  ;NOTES  : If the segment is not in display ready format
 | 
|---|
| 14 |  ;           ROOT("VALUE",File,Field,Seq)=Data
 | 
|---|
| 15 |  ;           ROOT("ID",File,Field,Seq)=Identifier
 | 
|---|
| 16 |  ;         If the segment is in display ready format
 | 
|---|
| 17 |  ;           ROOT("DISPLAY",LineNumber,0)=Line of display
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ;CHECK INPUT
 | 
|---|
| 20 |  S TRAN=+$G(TRAN)
 | 
|---|
| 21 |  S SEG=+$G(SEG)
 | 
|---|
| 22 |  Q:(('TRAN)!('SEG)) "-1^Did not pass pointer transaction or segment"
 | 
|---|
| 23 |  S OFFSET=+$G(OFFSET)
 | 
|---|
| 24 |  Q:('$D(^VAT(394.61,TRAN))) "-1^Did not pass valid transaction"
 | 
|---|
| 25 |  Q:('$D(^VAT(394.71,SEG))) "-1^Did not pass a valid segment"
 | 
|---|
| 26 |  Q:($G(ROOT)="") "-1^Did not pass reference to output array"
 | 
|---|
| 27 |  ;DON'T EXTRACT IF PURGE FLAG IS SET
 | 
|---|
| 28 |  Q:($D(^VAT(394.61,"PURGE",1,TRAN))) "-1^Transaction has been flagged for purging"
 | 
|---|
| 29 |  ;DECLARE VARIABLES
 | 
|---|
| 30 |  N LINE,IFN,TMP,SEQ,FILE,FIELD,VALUE,ID,DISPLAY
 | 
|---|
| 31 |  S LINE=OFFSET
 | 
|---|
| 32 |  ;DETERMINE IF SEGMENT HAS DATA
 | 
|---|
| 33 |  Q:('$D(^VAT(394.62,"A-SEGMENT",TRAN,SEG))) "-1^Segment did not contain any data"
 | 
|---|
| 34 |  ;DETERMINE IF SEGMENT IS DISPLAY READY
 | 
|---|
| 35 |  S DISPLAY=$D(^VAT(394.62,"A-DISPLAY",TRAN,SEG))
 | 
|---|
| 36 |  ;DISPLAY READY
 | 
|---|
| 37 |  I (DISPLAY) D  Q LINE-OFFSET
 | 
|---|
| 38 |  .;GET IFN (USED FOR DIPSLAY READY)
 | 
|---|
| 39 |  .S IFN=+$O(^VAT(394.62,"A-SEGMENT",TRAN,SEG,""))
 | 
|---|
| 40 |  .Q:('IFN)
 | 
|---|
| 41 |  .S SEQ=0
 | 
|---|
| 42 |  .F  S SEQ=$O(^VAT(394.62,IFN,"DSP",SEQ)) Q:('SEQ)  D
 | 
|---|
| 43 |  ..S VALUE=$G(^VAT(394.62,IFN,"DSP",SEQ,0))
 | 
|---|
| 44 |  ..S @ROOT@("DISPLAY",LINE,0)=VALUE
 | 
|---|
| 45 |  ..S LINE=LINE+1
 | 
|---|
| 46 |  ;EXTRACTION ARRAY
 | 
|---|
| 47 |  S IFN=""
 | 
|---|
| 48 |  F  S IFN=$O(^VAT(394.62,"A-SEGMENT",TRAN,SEG,IFN)) Q:('IFN)  D
 | 
|---|
| 49 |  .S TMP=$G(^VAT(394.62,IFN,0))
 | 
|---|
| 50 |  .S FILE=+$P(TMP,"^",3)
 | 
|---|
| 51 |  .Q:('FILE)
 | 
|---|
| 52 |  .S FIELD=+$P(TMP,"^",4)
 | 
|---|
| 53 |  .Q:('FIELD)
 | 
|---|
| 54 |  .S SEQ=+$G(^VAT(394.62,IFN,"SQNCE"))
 | 
|---|
| 55 |  .S VALUE=$G(^VAT(394.62,IFN,"VAL"))
 | 
|---|
| 56 |  .S ID=$G(^VAT(394.62,IFN,"IDNT1"))
 | 
|---|
| 57 |  .S @ROOT@("VALUE",FILE,FIELD,SEQ)=VALUE
 | 
|---|
| 58 |  .S @ROOT@("ID",FILE,FIELD,SEQ)=ID
 | 
|---|
| 59 |  Q 0
 | 
|---|