| 1 | VAQUPD2 ;ALB/JRP - EXTRACT SEGMENT FROM DATA FILE;08-APR-1993 | 
|---|
| 2 | ;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993 | 
|---|
| 3 | TRNDSP(TRANPTR,ROOT,OFFSET) ;BUILD DISPLAY FOR ALL SEGMENTS IN A TRANSACTION | 
|---|
| 4 | ;INPUT  : TRANPTR - Pointer to VAQ - TRANSACTION file | 
|---|
| 5 | ;         ROOT - Where to store the information (full global reference) | 
|---|
| 6 | ;                Defaluts to ^TMP("VAQ",$J) | 
|---|
| 7 | ;         OFFSET - Where to begin placing information (defaults to 0) | 
|---|
| 8 | ;OUTPUT : N - Number of lines in display | 
|---|
| 9 | ;        -1^Error_Text - Error | 
|---|
| 10 | ;NOTES  : ROOT will be returned in the format | 
|---|
| 11 | ;           ROOT("DISPLAY",Line_Number,0) | 
|---|
| 12 | ;       : Deletion of the outupt array before calling this routine | 
|---|
| 13 | ;         is the responsiblity of the calling application. | 
|---|
| 14 | ; | 
|---|
| 15 | ;CHECK INPUT | 
|---|
| 16 | S TRANPTR=+$G(TRANPTR) | 
|---|
| 17 | Q:('TRANPTR) "-1^Pointer to VAQ - TRANSACTION file not passed" | 
|---|
| 18 | Q:('$D(^VAT(394.61,TRANPTR))) "-1^Transaction did not exist" | 
|---|
| 19 | S ROOT=$G(ROOT) | 
|---|
| 20 | S:(ROOT="") ROOT="^TMP(""VAQ"","_$J_")" | 
|---|
| 21 | S OFFSET=+$G(OFFSET) | 
|---|
| 22 | ;DECLARE VARIABLES | 
|---|
| 23 | N SEG,LINE,LINECNT,X | 
|---|
| 24 | S LINE=OFFSET | 
|---|
| 25 | Q:('$D(^VAT(394.61,TRANPTR,"SEG"))) "-1^Transaction did not contain any data segments" | 
|---|
| 26 | S SEG=0 | 
|---|
| 27 | ;LOOP THROUGH EACH DATA SEGMENT CONTAINED IN TRANSACTION | 
|---|
| 28 | F  S SEG=+$O(^VAT(394.61,TRANPTR,"SEG","B",SEG)) Q:('SEG)  D | 
|---|
| 29 | .;PUT DISPLAY INTO OUTPUT ARRAY | 
|---|
| 30 | .S LINECNT=$$BLDDSP(TRANPTR,SEG,ROOT,LINE) | 
|---|
| 31 | .Q:(LINECNT<1) | 
|---|
| 32 | .S LINE=LINE+LINECNT | 
|---|
| 33 | .;PUT WHITE SPACE AFTER EACH SEGMENT | 
|---|
| 34 | .F X=1:1:3 S @ROOT@("DISPLAY",LINE,0)="",LINE=LINE+1 | 
|---|
| 35 | Q (LINE-OFFSET) | 
|---|
| 36 | ; | 
|---|
| 37 | BLDDSP(TRAN,SEGPTR,ROOT,OFFSET) ;BUILD DISPLAYABLE SEGMENT FROM DATA FILE | 
|---|
| 38 | ;INPUT  : TRAN - Pointer to VAQ - TRANSACTION file | 
|---|
| 39 | ;         SEGPTR - Pointer to VAQ - DATA SEGMENT file | 
|---|
| 40 | ;         ROOT - Where to store the display array (full global ref) | 
|---|
| 41 | ;         OFFSET - Where to begin placing information (defaults to 0) | 
|---|
| 42 | ;OUTPUT : n - Number of lines in display | 
|---|
| 43 | ;        -1^Error_Text - Error | 
|---|
| 44 | ;NOTES  : ROOT will contain the display ready segment in the format | 
|---|
| 45 | ;           ROOT("DISPLAY",LineNumber,0)=Line of display | 
|---|
| 46 | ;       : It is the responsibility of the calling module to delete | 
|---|
| 47 | ;         ROOT before and after the call. | 
|---|
| 48 | ; | 
|---|
| 49 | ;CHECK INPUT | 
|---|
| 50 | S TRAN=+$G(TRAN) | 
|---|
| 51 | S SEGPTR=+$G(SEGPTR) | 
|---|
| 52 | Q:(('TRAN)!('SEGPTR)) "-1^Did not pass pointer to transaction or segment" | 
|---|
| 53 | S OFFSET=+$G(OFFSET) | 
|---|
| 54 | Q:('$D(^VAT(394.61,TRAN))) "-1^Did not pass valid transaction" | 
|---|
| 55 | Q:('$D(^VAT(394.71,SEGPTR))) "-1^Did not pass a valid segment" | 
|---|
| 56 | Q:($G(ROOT)="") "-1^Did not pass reference to output array" | 
|---|
| 57 | ;DECLARE VARIABLES | 
|---|
| 58 | N TMP,XTRCT,MTHD,MINPTR,GETMIN | 
|---|
| 59 | S XTRCT="^TMP(""VAQ-SEG"","_$J_","_TRAN_","_SEGPTR_")" | 
|---|
| 60 | K @XTRCT | 
|---|
| 61 | ;SEGMENT NOT PASSED IN PDX | 
|---|
| 62 | Q:('$D(^VAT(394.62,"A-SEGMENT",TRAN,SEGPTR))) "-1^Transaction did not contain information for segment" | 
|---|
| 63 | ;DISPLAY READY | 
|---|
| 64 | S TMP=$D(^VAT(394.62,"A-DISPLAY",TRAN,SEGPTR)) | 
|---|
| 65 | Q:(TMP) $$EXTARR^VAQUPD25(TRAN,SEGPTR,ROOT,OFFSET) | 
|---|
| 66 | ;GET METHOD TO BUILD DISPLAY ARRAY | 
|---|
| 67 | S MTHD=$G(^VAT(394.71,SEGPTR,"DRTN")) | 
|---|
| 68 | Q:(MTHD="") "-1^Display method did not exist for segment" | 
|---|
| 69 | ;GET EXTRACTION ARRAY | 
|---|
| 70 | S TMP=$$EXTARR^VAQUPD25(TRAN,SEGPTR,XTRCT) | 
|---|
| 71 | I (TMP) K @XTRCT Q TMP | 
|---|
| 72 | ;DETERMINE IF MINIMUM DATA NEEDS TO BE PLACED IN EXTRACTION ARRAY | 
|---|
| 73 | ;  THIS IS DONE FOR INFO FROM A 1.0 SITE | 
|---|
| 74 | S TMP=$P($G(^VAT(394.71,SEGPTR,0)),"^",2) | 
|---|
| 75 | S GETMIN=$S((TMP="PDX*MPL"):1,(TMP="PDX*MPS"):1,1:0) | 
|---|
| 76 | I ((GETMIN)&((+$P($G(^VAT(394.61,TRAN,0)),"^",7))=1)) D  I (TMP) K @XTRCT Q TMP | 
|---|
| 77 | .;GET POINTER TO MINIMUM SEGMENT | 
|---|
| 78 | .S MINPTR=+$O(^VAT(394.71,"C","PDX*MIN","")) | 
|---|
| 79 | .I ('MINPTR) S TMP="-1^Version 1.0 transaction did not contain minimum patient information" Q | 
|---|
| 80 | .;MIN SEGMENT NOT PASSED IN PDX | 
|---|
| 81 | .I ('$D(^VAT(394.62,"A-SEGMENT",TRAN,MINPTR))) S TMP="-1^Version 1.0 transaction did not contain minimum patient information" Q | 
|---|
| 82 | .;PUT MINIMUM DATA INTO EXTRACTION ARRAY | 
|---|
| 83 | .S TMP=$$EXTARR^VAQUPD25(TRAN,MINPTR,XTRCT) | 
|---|
| 84 | .S:(TMP) TMP="-1^Unable to extract minimum patient information from version 1.0 transaction" | 
|---|
| 85 | ;BUILD DISPLAY | 
|---|
| 86 | X ("S TMP="_MTHD) | 
|---|
| 87 | K @XTRCT | 
|---|
| 88 | Q TMP | 
|---|