Index: /qrda/C0Q/trunk/p/C0QQRDA.m
===================================================================
--- /qrda/C0Q/trunk/p/C0QQRDA.m	(revision 1518)
+++ /qrda/C0Q/trunk/p/C0QQRDA.m	(revision 1519)
@@ -1,3 +1,3 @@
-C0QQRDA ; GPL - Quality Reporting QRDA Processing ; 8/2/12 12:42am
+C0QQRDA ; GPL - Quality Reporting QRDA Processing ; 8/2/12 10:15am
 	;;1.0;QUALITY MEASURES;**4**;May 21, 2012;Build 28
 	;Copyright 2012 George Lilly.  Licensed under the terms of the GNU
@@ -21,7 +21,12 @@
 	; This EP is interactive or silent depending on params
 	;
-	; Check for config errors first
-	N % S %=$$CHECKERR()
-	I % D EN^DDIOL($P(%,U,2)) QUIT
+	; Check for config errors first; try to set-up.
+	N % S %=$$CHECKPAR()
+	I +%=1 D EN^DDIOL($P(%,U,2)) QUIT  ; No inpatient pars found... QUIT
+	I +%=2 D  ; No QRDA Measure Sets... try to set it up.
+	. D EN^DDIOL("Trying to automatically set-up measure sets in parameters")
+	. N % S %=$$SETUPPAR($$INPPARM())
+	. I % D EN^DDIOL("Failed to set-up..."_$P(%,U,2))
+	. E  D EN^DDIOL("...Set-up complete")
 	;
 	; Print Intro
@@ -39,9 +44,9 @@
 	; Ask user which measure set to run
 	N DIR,DTOUT,DUOUT,X,Y,DIRUT,DIROUT,DA ; DIR variables
-	S DIR(0)="SB^V:VTE;S:STK;E:ED"
+	S DIR(0)="SB^V:VTE;S:STK;E:ED;A:ALL"
 	S DIR("A")="Measure to calculate"
 	S DIR("A",1)="Which measure set would you like to produce QRDA documents for?"
 	S DIR("A",2)="Choose to Run [V]TE Measure Set, [S]TK Measure Set, or "
-	S DIR("A",3)="[E]D Measure Set"
+	S DIR("A",3)="[E]D Measure Set. Or you can choose to run [A]ll of them."
 	D ^DIR
 	;
@@ -52,19 +57,42 @@
 	; of DIR directly.
 	;
-	N FLD S FLD=Y(0)
-	N C0QMSIEN S C0QMSIEN=$$GET1^DIQ(1130580001.401,$$INPPARM(),FLD,"I")
-	;
-	S:'C0QMSIEN $EC=",U1,"  ; Debug.Assert that MSIEN is numeric.
+	N FLD S FLD=Y(0) ; Grab full text of user choice into var "FLD" for field.
+	N C0QMSIENS ; Measure set IENs (^ piece); (0) stores the identifier for file names
+	;looks like this in the end
+	; C0QMSIENS=1^3^5
+	; C0QMSIENS(0)="ED^VTE^STK"
+	;
+	N INPPARM S INPPARM=$$INPPARM() ; Inpatient Parameter IEN in 401
+	;
+	; If not all, grab the measure; else, grab all of them in ^ pieces
+	I FLD'="ALL" D
+	. S C0QMSIENS=$$GET1^DIQ(1130580001.401,INPPARM,FLD,"I")
+	. S C0QMSIENS(0)=FLD
+	;
+	E  D
+	. N C0QED S C0QED=$$GET1^DIQ(1130580001.401,INPPARM,"ED","I")
+	. N C0QVTE S C0QVTE=$$GET1^DIQ(1130580001.401,INPPARM,"VTE","I")
+	. N C0QSTK S C0QSTK=$$GET1^DIQ(1130580001.401,INPPARM,"STK","I")
+	. S C0QMSIENS=C0QED_U_C0QVTE_U_C0QSTK
+	. S C0QMSIENS(0)="ED"_U_"VTE"_U_"STK"
+	;
+	;
+	S:'C0QMSIENS $EC=",U1,"  ; Debug.Assert that MSIEN is numeric.
+	;
 	;
 	; Do the work
-	N REF S REF=$NAME(^TMP("C0QQRDA",$J)) ; Global for data collection
-	K @REF  ; Clear global
-	D WORK(REF,C0QMSIEN) ; Process Measure Set, collect data in global
-	D PRINTXML(REF,FLD) ; Generate XML; output to File. 
-	K @REF  ; Clear global
+	N C0QI ; Counter through the measures
+	F C0QI=1:1:$L(C0QMSIENS,U) D
+	. N MSIEN S MSIEN=$P(C0QMSIENS,U,C0QI) ; Measure Set IEN
+	. N MSNAME S MSNAME=$P(C0QMSIENS(0),U,C0QI) ; Measure Set Name
+	. N REF S REF=$NAME(^TMP("C0QQRDA",$J)) ; Global for data collection
+	. K @REF  ; Clear global
+	. D WORK(REF,MSIEN) ; Process Measure Set, collect data in global
+	. D PRINTXML(REF,MSNAME) ; Generate XML; output to File. 
+	. K @REF  ; Clear global
 	QUIT
 	;
 	;SILENTEN(RETURN) ; For future RPC calls...; needs to be reworked.
-	; N % S %=$$CHECKERR() 
+	; N % S %=$$CHECKPAR() 
 	; I % S RETURN(0)=% Q
 	;
@@ -74,6 +102,9 @@
 	; QUIT
 	;
-CHECKERR() ; Private Proc; Check if environment is okay.
-	; Output: 0 -> Okay; +ve^message for error
+CHECKPAR() ; Private Proc; Check if environment is okay.
+	; Output: 0 or +ve^message for error
+	; 1 -> No Inpatient Parameters found
+	; 2 -> Measurement Set(s) not found.
+	;
 	N INPPARM S INPPARM=$$INPPARM() ; Inpatient Parameters IEN
 	I 'INPPARM Q 1_U_"No Inpatient Parameters found"
@@ -88,8 +119,29 @@
 	I 'C0QSTK S TXT=TXT_"STK,"
 	I 'C0QVTE S TXT=TXT_"VTE"
-	I $E(TXT,$L(TXT)=",") S TXT=$E(TXT,1,$L(TXT)-1)
+	I $E(TXT,$L(TXT))="," S TXT=$E(TXT,1,$L(TXT)-1) ; remove trailing comma
 	I $L(TXT) Q 2_U_"Measure Sets missing from parameters: "_TXT
 	;
 	QUIT 0 ; All okay
+	;
+SETUPPAR(INPPARM) ; Private Proc; Set-up QRDA lists if Inpatient Param is found.
+	; Input: Inpatient Parameter IEN in C0Q(401, -> C0Q Parameters
+	; Output: 0 if okay or 1^error description
+	N C0QFDA
+	;
+	N VTEIEN S VTEIEN=$O(^C0Q(201,"B","VTE CMS REPORTING MEASURES",""))
+	I 'VTEIEN QUIT 1_U_"VTE not found"
+	N STKIEN S STKIEN=$O(^C0Q(201,"B","STK CMS REPORTING MEASURES",""))
+	I 'STKIEN QUIT 1_U_"STK not found"
+	N EDIEN S EDIEN=$O(^C0Q(201,"B","ED CMS REPORTING MEASURES",""))
+	I 'EDIEN QUIT 1_U_"ED not found"
+	;
+	S C0QFDA(1130580001.401,INPPARM_",",5.1)=VTEIEN
+	S C0QFDA(1130580001.401,INPPARM_",",5.2)=STKIEN
+	S C0QFDA(1130580001.401,INPPARM_",",5.3)=EDIEN
+	;
+	N C0QERR
+	D FILE^DIE("",$NA(C0QFDA),$NA(C0QERR))
+	I $D(C0QERR) Q 2_U_C0QERR("DIERR",1,"TEXT",1)
+	Q 0
 	;
 WORK(C0QREF,C0QMSIEN) ; Private Proc; Process Measure Sets; Collect the data.
@@ -102,4 +154,5 @@
 	;
 	; Calculate totals and move patients over from individual measures
+	N A
 	D UPDATE^C0QUPDT(.A,C0QMSIEN) ; FYI: A isn't used.
 	;
