Index: ccr/trunk/p/GPLCCR.m
===================================================================
--- ccr/trunk/p/GPLCCR.m	(revision 271)
+++ ccr/trunk/p/GPLCCR.m	(revision 272)
@@ -134,5 +134,5 @@
     D PUSH^GPLXPATH(TAB,"EXTRACT;CCRMEDS;//ContinuityOfCareRecord/Body/Medications;^TMP(""GPLCCR"",$J,DFN,""MEDICATIONS"")")
     D PUSH^GPLXPATH(TAB,"EXTRACT;GPLVITAL;//ContinuityOfCareRecord/Body/VitalSigns;^TMP(""GPLCCR"",$J,DFN,""VITALS"")")
-    D PUSH^GPLXPATH(TAB,"EXTRACT;GPLLABS;//ContinuityOfCareRecord/Body/Results;^TMP(""GPLCCR"",$J,DFN,""RESULTS"")")
+    D PUSH^GPLXPATH(TAB,"MAP;GPLLABS;//ContinuityOfCareRecord/Body/Results;^TMP(""GPLCCR"",$J,DFN,""RESULTS"")")
     I TESTALERT D PUSH^GPLXPATH(TAB,"EXTRACT;GPLALERT;//ContinuityOfCareRecord/Body/Alerts;^TMP(""GPLCCR"",$J,DFN,""ALERTS"")")
     Q
Index: ccr/trunk/p/GPLCCR0.m
===================================================================
--- ccr/trunk/p/GPLCCR0.m	(revision 271)
+++ ccr/trunk/p/GPLCCR0.m	(revision 272)
@@ -493,5 +493,4 @@
  ;;</Actor>
  ;;</Source>
- ;;<TEST_NORMALDESCRIPTION>
  ;;<Test>
  ;;<CCRDataObjectID>@@RESULTTESTOBJECTID@@</CCRDataObjectID>
@@ -505,5 +504,5 @@
  ;;<Text>@@RESULTTESTDESCRIPTIONTEXT@@</Text>
  ;;<Code>
- ;;<Value>@@RESULTTESTCODE@@</Value>
+ ;;<Value>@@RESULTTESTCODEVALUE@@</Value>
  ;;<CodingSystem>@@RESULTTESTCODINGSYSTEM@@</CodingSystem>
  ;;</Code>
@@ -539,69 +538,4 @@
  ;;</Flag>
  ;;</Test>
- ;;</TEST_NORMALDESCRIPTION>
- ;;<TEST_NORMALSEQUENCE>
- ;;<Test>
- ;;<CCRDataObjectID>@@RESULTTESTOBJECTID@@</CCRDataObjectID>
- ;;<DateTime>
- ;;<Type>
- ;;<Text>Assessment Time</Text>
- ;;</Type>
- ;;<ExactDateTime>@@RESULTTESTDATETIME@@</ExactDateTime>
- ;;</DateTime>
- ;;<Description>
- ;;<Text>@@RESULTTESTDESCRIPTIONTEXT@@</Text>
- ;;<Code>
- ;;<Value>@@RESULTTESTCODEVALUE@@</Value>
- ;;<CodingSystem>@@RESULTTESTCODINGSYSTEM@@</CodingSystem>
- ;;</Code>
- ;;</Description>
- ;;<Status>
- ;;<Text>@@RESULTTESTSTATUSTEXT@@</Text>
- ;;</Status>
- ;;<Source>
- ;;<Actor>
- ;;<ActorID>@@RESULTTESTSOURCEACTORID@@</ActorID>
- ;;</Actor>
- ;;</Source>
- ;;<TestResult>
- ;;<Value>@@RESULTTESTVALUE@@</Value>
- ;;<Units>
- ;;<Unit>@@RESULTTESTUNITS@@</Unit>
- ;;</Units>
- ;;</TestResult>
- ;;<NormalResult>
- ;;<Normal>
- ;;<Value>@@RESULTTESTNORMALVALUESEQ1@@</Value>
- ;;<Units>
- ;;<Unit>@@RESULTTESTNORMALUNITSEQ1@@</Unit>
- ;;</Units>
- ;;<ValueSequencePosition>1</ValueSequencePosition>
- ;;<Source>
- ;;<Actor>
- ;;<ActorID>@@RESULTTESTNORMALSOURCEACTORID@@</ActorID>
- ;;</Actor>
- ;;</Source>
- ;;</Normal>
- ;;<Normal>
- ;;<Value>@@RESULTTESTNORMALVALUESEQ2@@</Value>
- ;;<Units>
- ;;<Unit>@@RESULTTESTNORMALUNITSEQ2@@</Unit>
- ;;</Units>
- ;;<ValueSequencePosition>2</ValueSequencePosition>
- ;;<VariableNomalModifier>
- ;;<Text>@@RESULTTESTNORMALMODIFIER@@</Text>
- ;;</VariableNomalModifier>
- ;;<Source>
- ;;<Actor>
- ;;<ActorID>@@RESULTTESTNORMALSOURCEACTORID@@</ActorID>
- ;;</Actor>
- ;;</Source>
- ;;</Normal>
- ;;</NormalResult>
- ;;<Flag>
- ;;<Text>@@RESULTTESTFLAG@@</Text>
- ;;</Flag>
- ;;</Test>
- ;;</TEST_NORMALSEQUENCE>
  ;;</Result>
  ;;</Results>
Index: ccr/trunk/p/GPLLABS.m
===================================================================
--- ccr/trunk/p/GPLLABS.m	(revision 271)
+++ ccr/trunk/p/GPLLABS.m	(revision 272)
@@ -18,4 +18,78 @@
  ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
            ;
+;MAP(DFN,MOXML,MIVAR,MIXML) ; MAP RESULTS VARIABLES TO XML - GPL -TBD
+MAP(MIXML,DFN,MOXML) ;TO MAKE THIS COMPATIBLE WITH OLD CALLING FOR EXTRACT
+ ; ASSUMES THAT EXTRACT HAS BEEN RUN AND THE VARIABLES STORED IN MIVAR
+ ; MIXML,MIVAR, AND MOXML ARE PASSED BY NAME
+ ; MIXML IS THE TEMPLATE TO USE
+ ; MOXML IS THE OUTPUT XML ARRAY
+ ; DFN IS THE PATIENT RECORD NUMBER
+ N C0COXML,C0CO,C0CV,C0CIXML
+ I '$D(MIVAR) S C0CV="" ;DEFAULT
+ E  S C0CV=MIVAR ;PASSED VARIABLE ARRAY
+ I '$D(MIXML) S C0CIXML="" ;DEFAULT
+ E  S C0CIXML=MIXML ;PASSED INPUT XML
+ D RPCMAP(.C0COXML,DFN,C0CV,C0CIXML) ; CALL RPC TO DO THE WORK
+ I '$D(MOXML) S C0CO=$NA(^TMP("GPLCCR",$J,DFN,"RESULTS")) ;DEFAULT FOR OUTPUT
+ E  S C0CO=MOXML
+ ; ZWR C0COXML
+ M @C0CO=C0COXML ; COPY RESULTS TO OUTPUT
+ Q
+ ;
+RPCMAP(RTN,DFN,RMIVAR,RMIXML) ; RPC ENTRY POINT FOR MAPPING RESULTS
+ ; RTN IS PASSED BY REFERENCE
+ ;N C0CT0,C0CT,C0CV ; CCR TEMPLATE, RESULTS SUBTEMPLATE, VARIABLES
+ ;N C0CRT,C0CTT ; TEST REQUEST TEMPLATE, TEST RESULT TEMPLATE
+ I '$D(DEBUG) S DEBUG=0 ; DEFAULT NO DEBUGGING
+ I RMIXML="" D  ; INPUT XML NOT PASSED
+ . D LOAD^GPLCCR0("C0CT0") ; LOAD ENTIRE CCR TEMPLATE
+ . D QUERY^GPLXPATH("C0CT0","//ContinuityOfCareRecord/Body/Results","C0CT")
+ E  S C0CT=RMIXML ; WE ARE PASSED THE RESULTS PART OF THE TEMPLATE
+ I RMIVAR="" D  ; LOCATION OF VARIABLES NOT PASSED
+ . S C0CV=$NA(^TMP("GPLRIM","VARS",DFN,"RESULTS")) ;DEFAULT VARIABLE LOCATION
+ E  S C0CV=RMIVAR ; PASSED LOCATIONS OF VARS
+ D CP^GPLXPATH(C0CT,"C0CRT") ; START MAKING TEST REQUEST TEMPLATE
+ D REPLACE^GPLXPATH("C0CRT","","//Results/Result/Test") ; DELETE TEST FROM REQ
+ D QUERY^GPLXPATH(C0CT,"//Results/Result/Test","C0CTT") ; MAKE TEST TEMPLATE
+ I '$D(C0CQT) S C0CQT=0 ; DEFAULT NOT SILENT
+ I 'C0CQT D  ; WE ARE DEBUGGING
+ . W "I MAPPED",!
+ . W "VARS:",C0CV,!
+ . W "DFN:",DFN,!
+ . ;D PARY^GPLXPATH("C0CT") ; SECTION TEMPLATE
+ . D PARY^GPLXPATH("C0CRT") ;REQUEST TEMPLATE (OCR)
+ . D PARY^GPLXPATH("C0CTT") ;TEST TEMPLATE (OCX)
+ D EXTRACT("C0CT",DFN,) ; FIRST CALL EXTRACT
+ I '$D(@C0CV@(0)) D  Q  ; NO VARS THERE
+ . S @C0CO@(0)=0 ; PASS BACK NO RESULTS INDICATOR
+ N C0CI,C0CJ,C0CMAP,C0CTMAP,C0CTMP
+ S C0CIN=@C0CV@(0) ; COUNT OF RESULTS (OBR)
+ N C0CRTMP ; AREA TO BUILD ONE RESULT REQUEST AND ALL TESTS FOR IT
+ F C0CI=1:1:C0CIN D  ; LOOP THROUGH VARIABLES
+ . K C0CMAP,C0CTMP,C0CRTMP ;EMPTY OUT LAST BATCH OF VARIABLES
+ . S C0CMAP=$NA(@C0CV@(C0CI)) ;
+ . I 'C0CQT W "MAPOBR:",C0CMAP,!
+ . ;MAPPING FOR TEST REQUEST GOES HERE
+ . D MAP^GPLXPATH("C0CRT",C0CMAP,"C0CRTMP") ; MAP OBR DATA
+ . I $D(@C0CMAP@("M","TESTS",0)) D  ; TESTS EXIST
+ . . S C0CJN=@C0CMAP@("M","TESTS",0) ; NUMBER OF TESTS
+ . . K C0CTO ; CLEAR OUTPUT VARIABLE
+ . . F C0CJ=1:1:C0CJN D   ;FOR EACH TEST RESULT
+ . . . K C0CTMAP,C0CTMP ; EMPTY MAPS FOR TEST RESULTS
+ . . . S C0CTMAP=$NA(@C0CMAP@("M","TESTS",C0CJ)) ;
+ . . . I 'C0CQT W "MAPOBX:",C0CTMAP,!
+ . . . D MAP^GPLXPATH("C0CTT",C0CTMAP,"C0CTMP") ; MAP TO TMP
+ . . . ;I C0CJ=1 D  ; FIRST TIME, JUST COPY
+ . . . ;. D CP^GPLXPATH("C0CTMP","C0CTO") ; START BUILDING TEST XML
+ . . . ;E  D INSINNER^GPLXPATH("C0CTO","C0CTMP")
+ . . . ;
+ . . . D PUSHA^GPLXPATH("C0CTO","C0CTMP") ;ADD THE TEST TO BUFFER
+ . . I 'C0CQT D PARY^GPLXPATH("C0CTO")
+ . . D INSINNER^GPLXPATH("C0CRTMP","C0CTO","//Results/Result/Test") ;INSERT TST
+ . I C0CI=1 D  ; FIRST TIME, COPY INSTEAD OF INSERT
+ . . D CP^GPLXPATH("C0CRTMP","RTN") ;
+ . E  D INSINNER^GPLXPATH("RTN","C0CRTMP") ; INSERT THIS TEST REQUEST
+ Q
+ ;
 EXTRACT(ILXML,DFN,OLXML) ; EXTRACT LABS INTO THE C0CLVAR GLOBAL
  ;
@@ -27,7 +101,8 @@
  S C0CLB=$NA(^TMP("GPLCCR",$J,"RESULTS")) ; BASE GLB FOR LABS VARS
  K @C0CLB ; CLEAR OUT OLD VARS IF ANY
- S C0CSILENT=1 ; SURPRESS LISTING
+ N QTSAV S QTSAV=C0CQT ;SAVE QUIET FLAG
+ S C0CQT=1 ; SURPRESS LISTING
  D LIST ; EXTRACT THE VARIABLES
- K C0CSILENT ; RESET SILENT FLAG
+ S C0CQT=QTSAV ; RESET SILENT FLAG
  K ^TMP("HLS",$J) ; KILL HL7 MESSAGE OUTPUT
  I $D(OLXML) S @OLXML@(0)=0 ; EXTRACT DOES NOT PRODUCE XML... SEE MAP^GPLLABS
@@ -46,10 +121,9 @@
  Q
  ;
-LIST ; LIST THE HL7 MESSAGE
+LIST ; LIST THE HL7 MESSAGE; ALSO, EXTRACT THE RESULT VARIABLES TO C0CLB
  ;
  ; N C0CI,C0CJ,C0COBT,C0CHB,C0CVAR
- ; D EXTRACT^GPLLABS(1)
  I '$D(C0CLB) S C0CLB=$NA(^TMP("GPLCCR",$J,"RESULTS")) ; BASE GLB FOR LABS VARS
- I '$D(C0CSILENT) S C0CSILENT=0
+ I '$D(C0CQT) S C0CQT=0
  I '$D(DFN) S DFN=1 ; DEFAULT TEST PATIENT
  I '$D(^KVAI(0)) D SETTBL ; INITIALIZE LAB TABLE
@@ -63,5 +137,5 @@
  . K C0CVAR,XV ; CLEAR OUT VARIABLE VALUES
  . S C0CTYP=$P(@C0CHB@(C0CI),"|",1)
- . D LTYP(@C0CHB@(C0CI),C0CTYP,.C0CVAR,C0CSILENT)
+ . D LTYP(@C0CHB@(C0CI),C0CTYP,.C0CVAR,C0CQT)
  . M XV=C0CVAR ;
  . I C0CTYP="OBR" D  ; BEGINNING OF NEW SECTION
@@ -69,4 +143,5 @@
  . . S C0CLI=@C0CLB@(0) ; INDEX FOR THIS RESULT
  . . M @C0CLB@(C0CLI)=C0CVAR ; PERSIST THE OBR VARS
+ . . S @C0CLB@(C0CLI,"RESULTOBJECTID")="RESULT_"_C0CLI
  . . S C0CLOBX=0 ; MARK THE BEGINNING OF A NEW SECTION
  . I C0CTYP="OBX" D  ; SPECIAL CASE FOR OBX3
@@ -89,6 +164,4 @@
  . . . S XV("RESULTTESTCODINGSYSTEM")=C0CVAR("C3") ; PRIMARY DISPLAY NAME
  . . . S XV("RESULTTESTDESCRIPTIONTEXT")=C0CVAR("C2") ; USE PRIMARY TEXT
- . . I 'C0CSILENT D  ;
- . . . ZWR XV
  . I C0CTYP="OBX" D  ; PROCESS TEST RESULTS
  . . I C0CLOBX=0 D  ; FIRST TEST RESULT FOR THIS SECTION
@@ -96,6 +169,8 @@
  . . S C0CLOBX=C0CLOBX+1 ; INCREMENT TEST COUNT
  . . S @C0CLB2@(0)=C0CLOBX ; STORE THE TEST COUNT
+ . . S XV("RESULTTESTOBJECTID")="RESULTTEST_"_C0CLI_"_"_C0CLOBX
+ . . I 'C0CQT ZWR XV
  . . M @C0CLB2@(C0CLOBX)=XV ; PERSIST THE TEST RESULT VARIABLES
- . I 'C0CSILENT D  ;
+ . I 'C0CQT D  ;
  . . W C0CI," ",C0CTYP,!
  . ; S C0CI=$O(@C0CHB@(C0CI))
@@ -103,8 +178,8 @@
  ;M ^TMP("GPLRIM","VARS",DFN,"RESULTS")=@C0CLB
  Q
-LTYP(OSEG,OTYP,OVARA,OC0CSILENT) ;
+LTYP(OSEG,OTYP,OVARA,OC0CQT) ;
  S OTAB=$NA(@C0CTAB@(OTYP)) ; TABLE FOR SEGMENT TYPE
- I '$D(OC0CSILENT) S C0CSILENT=0 ; NOT C0CSILENT IS DEFAULT
- E  S C0CSILENT=OC0CSILENT ; ACCEPT C0CSILENT FLAG
+ I '$D(OC0CQT) S C0CQT=0 ; NOT C0CQT IS DEFAULT
+ E  S C0CQT=OC0CQT ; ACCEPT C0CQT FLAG
  I 1 D  ; FOR HL7 SEGMENT TYPE
  . S OI="" ; INDEX INTO FIELDS IN SEG
@@ -117,5 +192,5 @@
  . . . S OV=$P(OV,"^",OI2) ; PULL OUT SUB-VALUE
  . . I OVAR'="" S OVARA(OVAR)=OV ; PASS BACK VARIABLE AND VALUE
- . . I 'C0CSILENT D  ; PRINT OUTPUT IF C0CSILENT IS FALSE
+ . . I 'C0CQT D  ; PRINT OUTPUT IF C0CQT IS FALSE
  . . . I OV'="" W OI_": "_$P(@OTAB@(OI),"^",3),": ",OVAR,": ",OV,!
  Q
@@ -183,5 +258,5 @@
  S X("OBR","OBR4;LOINC")="4;1^00238^Universal Service ID - LOINC^RESULTCODE"
  S X("OBR","OBR4;DESC")="4;2^00238^Universal Service ID - DESC^RESULTDESCRIPTIONTEXT"
- S X("OBR","OBR4;VACODE")="4;3^00238^Universal Service ID - VACODE"
+ S X("OBR","OBR4;VACODE")="4;3^00238^Universal Service ID - VACODE^RESULTCODINGSYSTEM"
  S X("OBR","OBR5")="5^00239^Priority"
  S X("OBR","OBR6")="6^00240^Requested Date/Time"
