Index: ccr/trunk/p/GPLLABS.m
===================================================================
--- ccr/trunk/p/GPLLABS.m	(revision 263)
+++ ccr/trunk/p/GPLLABS.m	(revision 264)
@@ -24,4 +24,12 @@
  ;
  ;
+ D GHL7 ; GET HL7 MESSAGE FOR THIS PATIENT
+ S C0CLB=$NA(^TMP("GPLCCR",$J,"LABS")) ; BASE GLB FOR LABS VARS
+ K @C0CLB ; CLEAR OUT OLD VARS IF ANY
+ S C0CSILENT=1 ; SURPRESS LISTING
+ D LIST ; EXTRACT THE VARIABLES
+ Q
+     ;
+GHL7 ; GET HL7 MESSAGE FOR LABS FOR THIS PATIENT
  ; N C0CPTID,C0CSPC,C0CSDT,C0CEDT,C0CR
  ; SET UP FOR LAB API CALL
@@ -33,19 +41,20 @@
  D DT^DILF(,"T",.C0CEDT) ; END DATE TODAY TO GET EVERYTHING
  S C0CR=$$GCPR^LA7QRY(C0CPTID,C0CSDT,C0CEDT,C0CSPC,C0CSPC) ; CALL LAB LOOKUP
- W "i'm back",!
- Q
-     ;
+ Q
+ ;
 LIST ; LIST THE HL7 MESSAGE
  ;
  ; N C0CI,C0CJ,C0COBT,C0CHB,C0CVAR
  ; D EXTRACT^GPLLABS(,1,)
+ I '$D(C0CLB) S C0CLB=$NA(^TMP("GPLCCR",$J,"LABS")) ; BASE GLB FOR LABS VARS
  I '$D(C0CSILENT) S C0CSILENT=0
  I '$D(DFN) S DFN=1 ; DEFAULT TEST PATIENT
  I '$D(^KVAI(0)) D SETTBL ; INITIALIZE LAB TABLE
  I ^KBAI(0)'="V1" D SETTBL ; NEED NEWEST VERSION
- I '$D(^TMP("HLS",$J,1)) D EXTRACT(,DFN,) ;EXTRACT IF NOT ALREADY DONE
+ I '$D(^TMP("HLS",$J,1)) D GHL7 ; GET HL7 MGS IF NOT ALREADY DONE
  S C0CTAB=$NA(^KBAI) ; BASE OF OBX TABLE
  S C0CHB=$NA(^TMP("HLS",$J))
  S C0CI=""
+ S @C0CLB@(0)=0 ; INITALIZE RESULTS VARS COUNT
  F  S C0CI=$O(@C0CHB@(C0CI)) Q:C0CI=""  D  ; FOR ALL RECORDS IN HL7 MSG
  . K C0CVAR,XV ; CLEAR OUT VARIABLE VALUES
@@ -53,4 +62,9 @@
  . D LTYP(@C0CHB@(C0CI),C0CTYP,.C0CVAR,C0CSILENT)
  . M XV=C0CVAR ;
+ . I C0CTYP="OBR" D  ; BEGINNING OF NEW SECTION
+ . . S @C0CLB@(0)=@C0CLB@(0)+1 ; INCREMENT COUNT
+ . . S C0CLI=@C0CLB@(0) ; INDEX FOR THIS RESULT
+ . . M @C0CLB@(C0CLI)=C0CVAR ; PERSIST THE OBR VARS
+ . . S C0CLOBX=0 ; MARK THE BEGINNING OF A NEW SECTION
  . I C0CTYP="OBX" D  ; SPECIAL CASE FOR OBX3
  . . ; RESULTTESTCODEVALUE
@@ -74,7 +88,15 @@
  . . I 'C0CSILENT D  ;
  . . . ZWR XV
+ . I C0CTYP="OBX" D  ; PROCESS TEST RESULTS
+ . . I C0CLOBX=0 D  ; FIRST TEST RESULT FOR THIS SECTION
+ . . . S C0CLB2=$NA(@C0CLB@(C0CLI,"M","TESTS")) ; INDENT FOR TEST RESULTS
+ . . S C0CLOBX=C0CLOBX+1 ; INCREMENT TEST COUNT
+ . . S @C0CLB2@(0)=C0CLOBX ; STORE THE TEST COUNT
+ . . M @C0CLB2@(C0CLOBX)=XV ; PERSIST THE TEST RESULT VARIABLES
  . I 'C0CSILENT D  ;
  . . W C0CI," ",C0CTYP,!
  . ; S C0CI=$O(@C0CHB@(C0CI))
+ K ^TMP("GPLRIM","VARS",DFN,"LABS")
+ M ^TMP("GPLRIM","VARS",DFN,"LABS")=@C0CLB
  Q
 LTYP(OSEG,OTYP,OVARA,OC0CSILENT) ;
@@ -91,5 +113,5 @@
  . . . S OI2=$P(OTI,";",2) ; THE SUB-INDEX
  . . . S OV=$P(OV,"^",OI2) ; PULL OUT SUB-VALUE
- . . S OVARA(OVAR)=OV ; PASS BACK VARIABLE AND VALUE
+ . . I OVAR'="" S OVARA(OVAR)=OV ; PASS BACK VARIABLE AND VALUE
  . . I 'C0CSILENT D  ; PRINT OUTPUT IF C0CSILENT IS FALSE
  . . . I OV'="" W OI_": "_$P(@OTAB@(OI),"^",3),": ",OVAR,": ",OV,!
Index: ccr/trunk/p/GPLXPATH.m
===================================================================
--- ccr/trunk/p/GPLXPATH.m	(revision 263)
+++ ccr/trunk/p/GPLXPATH.m	(revision 264)
@@ -439,8 +439,19 @@
  ; W $O(@IHASH@(H2I)),!
  F  S H2I=$O(@IHASH@(H2I)) Q:H2I=""  D  ; FOR EACH ELEMENT OF THE HASH
- . ; W H2I_"^"_@IHASH@(H2I),!
  . I $QS(H2I,$QL(H2I))="M" D  Q  ; SPECIAL CASE FOR MULTIPLES
- . . W "GPLZZ",!
- . . W $NA(@IHASH@(H2I)),!
+ . . ;W H2I_"^"_@IHASH@(H2I),!
+ . . N IH,IHI
+ . . S IH=$NA(@IHASH@(H2I)) ;
+ . . S IH2A=$O(@IH@("")) ; SKIP OVER MULTIPLE DISCRIPTOR
+ . . S IH2=$NA(@IH@(IH2A)) ; PAST THE "M","DIRETIONS" FOR EXAMPLE
+ . . S IHI="" ; INDEX INTO "M" MULTIPLES
+ . . F  S IHI=$O(@IH2@(IHI)) Q:IHI=""  D  ; FOR EACH SUB-MULTIPLE
+ . . . ; W @IH@(IHI)
+ . . . S IH3=$NA(@IH2@(IHI))
+ . . . ; W "HEY",IH3,!
+ . . . D H2ARY(.IARYRTN,IH3,IPRE_";"_IHI) ; RECURSIVE CALL - INDENTED ELEMENTS
+ . . ; W IH,!
+ . . ; W "GPLZZ",!
+ . . ; W $NA(@IHASH@(H2I)),!
  . . Q  ;
  . D PUSH(IARYRTN,IPRE_"^"_H2I_"^"_@IHASH@(H2I))
