Index: qrda/C0Q/trunk/p/C0QMUERX.m
===================================================================
--- qrda/C0Q/trunk/p/C0QMUERX.m	(revision 1442)
+++ qrda/C0Q/trunk/p/C0QMUERX.m	(revision 1443)
@@ -1,3 +1,3 @@
-C0QMUERX ; VEN - Analyze ERx Data for Patients ; 5/30/12 10:21am
+C0QMUERX ; VEN - Analyze ERx Data for Patients ; 5/30/12 1:48am
  ;;1.0;C0Q;;May 21, 2012;Build 44
  QUIT  ; No Entry from the top
@@ -23,4 +23,8 @@
  D EN("^C0Q(301,4,1,""B"")")
  QUIT
+UT3 ; More Unit Tests
+ N C0QDEBUG S C0QDEBUG=1
+ D EN($$PATLN^C0QMU12("MU12-EP-HasERX"))
+ QUIT
 EN(C0QLIST) ; PEP - Analyze ERx Data and store
  ; Parameters:
@@ -54,5 +58,5 @@
  ;
  ; Walk the global
- N C0QWALK S C0QWALK=$SELECT(C0QB:"",'C0QB:0) ; Walker
+ N C0QWALK S C0QWALK=$SELECT(C0QB:"",'C0QB:0) ; Walker, start of $ORDER?
  N C0QDONE S C0QDONE=0 ; Finish Flag
  FOR  SET C0QWALK=$O(@C0QLIST@(C0QWALK)) QUIT:C0QDONE  DO
@@ -80,5 +84,5 @@
  . W:$G(C0QDEBUG) "Calling GETMEDS6 SOAP Web Service Call for "_C0QDFN,!
  . D SOAP^C0PWS2("C0POUT","GETMEDS6",DUZ,C0QDFN)
- . Q:$G(^TMP($J,C0QDFN,1,"RowCount"))=0 ; WS says no data
+ . Q:$G(C0POUT(1,"RowCount"))=0 ; WS says no data
  . M ^TMP($J,C0QDFN)=C0POUT
  ;
@@ -109,8 +113,9 @@
  ; 
  N C0QDFN,C0QRXNO S (C0QDFN,C0QRXNO)=0
- N C0QD S C0QD=0 ; Denominator
+ N C0QD S C0QD=0 ; Denominator - Overall (cf C0QDP below)
  ;
  ; Calculate Denominator below
  F  S C0QDFN=$O(^TMP($J,C0QDFN)) Q:C0QDFN=""  DO
+ . N C0QDP S C0QDP=0 ; Denominator - Patient Specific
  . F  S C0QRXNO=$O(^TMP($J,C0QDFN,C0QRXNO)) Q:C0QRXNO=""  DO
  .. W:$G(C0QDEBUG) "Patient "_C0QDFN_" Rx "_C0QRXNO,!
@@ -139,10 +144,15 @@
  .. ;
  .. W:$G(C0QDEBUG) "Adding to Denominator",!
+ .. S C0QDP=C0QDP+1
  .. S C0QD=C0QD+1
+ . ;
+ . ; SAVE C0QDP - while it lasts!
+ . D SAVE(C0QLIST,C0QDFN,"ERXDEN",C0QDP)
  ;
  ; Calculate Numerator below
  N C0QDFN,C0QRXNO S (C0QDFN,C0QRXNO)=0
- N C0QN S C0QN=0 ; Numerator
+ N C0QN S C0QN=0 ; Numerator - Overall (cf C0QNP below)
  F  S C0QDFN=$O(^TMP($J,C0QDFN)) Q:C0QDFN=""  DO
+ . N C0QNP S C0QNP=0 ; Numerator - Patient Specific
  . F  S C0QRXNO=$O(^TMP($J,C0QDFN,C0QRXNO)) Q:C0QRXNO=""  DO
  .. W:$G(C0QDEBUG) "Patient "_C0QDFN_" Rx "_C0QRXNO,!
@@ -171,5 +181,9 @@
  .. ;
  .. W:$G(C0QDEBUG) "Adding to Numerator",!
+ .. S C0QNP=C0QNP+1
  .. S C0QN=C0QN+1
+ . ;
+ . ; Save C0QNP while it lasts
+ . D SAVE(C0QLIST,C0QDFN,"ERXNUM",C0QNP)
  ;
  S ^TMP($J)=C0QN_U_C0QD
@@ -192,2 +206,45 @@
  . I $G(@ZERX@(ZI,1,1,0))["E-Rx Web" S (DONE,HASERX)=1
  Q +$G(HASERX)
+ ;
+SAVE(C0QLIST,C0QDFN,TYPE,COUNT) ; Proc - Private; Save Count
+ ; TODO: Documentation
+ ;
+ ; First, QUIT if this isn't a Quality Measures List?
+ ; $QS(x,0) gets you the global name
+ ; 
+ ; This should give you an idea of what I am dealing with!
+ ; 
+ ; ^C0Q(301,48,1,15,0)=91
+ ; ^C0Q(301,48,1,16,0)=93
+ ; ^C0Q(301,48,1,17,0)=173
+ ; ^C0Q(301,48,1,18,0)=174
+ ; ^C0Q(301,48,1,"B",5,1)=""
+ ; ^C0Q(301,48,1,"B",10,2)=""
+ ; ^C0Q(301,48,1,"B",11,3)=""
+ ; ^C0Q(301,48,1,"B",14,4)=""
+ ;
+ I $QS(C0QLIST,0)'="^C0Q" W:$G(C0QDEBUG) "Not Saving Patient "_C0QDFN,! QUIT
+ ;
+ ; Otherwise, prepare to save
+ N C0QFDA ; Fileman Data Array
+ N C0QIENS ; IENS
+ N L1,L2 ; Top Level, Level 2
+ S L1=$QS(C0QLIST,2) ; Top Level IEN
+ S L2=$O(^C0Q(301,L1,1,"B",C0QDFN,"")) ; Patient IEN
+ S C0QIENS="?+1"_C0QDFN_","_L2_","_L1_"," ; TODO: Here C0QDFN is a dummy for uniqueness in FDA, not meaningful! - DO BETTER!
+ W:$G(C0QDEBUG) "IENs "_C0QIENS_" ready to file",!
+ W:$G(C0QDEBUG) "Saving "_TYPE_" of "_COUNT_" for Patient "_$P(^DPT(C0QDFN,0),U)_" ("_C0QDFN_")",!
+ S C0QFDA(1130580001.3111,C0QIENS,.01)=TYPE
+ S C0QFDA(1130580001.3111,C0QIENS,.02)=COUNT
+ ;
+ W:$G(C0QDEBUG) "Fileman Data Array",!
+ I $G(C0QDEBUG) N % S %=$NA(C0QFDA) F  S %=$Q(@%) Q:%=""  W %_": "_@%,!
+ ;
+ N C0QERR ; Errors
+ D UPDATE^DIE("","C0QFDA","","C0QERR")
+ ;
+ I $D(C0QERR) DO
+ . W "Error in filing data",!
+ . S %=$NAME(C0QERR) F  S %=$Q(@%) Q:%=""  W %_": "_@%,!
+ ;
+ QUIT
