Ejemplo n.º 1
0
        public static void Export(XmlWriter xmlWriter, IEnumerable <Organization> organizations, IEnumerable <Registry> registries, Lpp.Dns.Portal.IPluginService plugins)
        {
            try
            {
                xmlWriter.WriteStartDocument(true);
                xmlWriter.WriteStartElement("organizations", "urn://popmednet/organizations/metadata");
                xmlWriter.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
                xmlWriter.WriteAttributeString("xmlns", "xs", null, "http://www.w3.org/2001/XMLSchema");

                foreach (Organization o in organizations)
                {
                    Organization org = o;
                    xmlWriter.WriteStartElement("organization");

                    #region Organization Header
                    xmlWriter.WriteStartElement("header");
                    InsertStringValue(xmlWriter, "id", org.ID.ToString());
                    InsertStringValue(xmlWriter, "name", org.Name);
                    InsertStringValue(xmlWriter, "acronym", org.Acronym);
                    InsertStringValue(xmlWriter, "parentorganization", org.ParentOrganization != null ? org.ParentOrganization.Name : string.Empty);
                    InsertStringValue(xmlWriter, "contactfullname", org.ContactFirstName + " " + org.ContactLastName);
                    InsertStringValue(xmlWriter, "contactemail", org.ContactEmail);
                    InsertStringValue(xmlWriter, "description", org.OrganizationDescription);
                    InsertStringValue(xmlWriter, "collabrequest", org.SpecialRequirements);
                    InsertStringValue(xmlWriter, "researchcapabilities", org.ObservationClinicalExperience);
                    xmlWriter.WriteEndElement(); // end header element
                    #endregion
                    // There are a number of ways to represent these values.  I've chosen to write each of them out, howver another
                    // approach is the have a string enumeration similar to request status where we'd repeat the element, something
                    // like "<participation>clinicaltrials</participation><participation>pragmaticclinicaltrials</participation> ..."
                    xmlWriter.WriteStartElement("participation");
                    InsertStringValue(xmlWriter, "observationalresearch", org.ObservationalParticipation.ToString());
                    InsertStringValue(xmlWriter, "clinicaltrials", org.ProspectiveTrials.ToString());
                    InsertStringValue(xmlWriter, "pragmaticclinicaltrials", org.PragmaticClinicalTrials.ToString());
                    xmlWriter.WriteEndElement(); // end participation
                    xmlWriter.WriteStartElement("typedatacollected");
                    InsertStringValue(xmlWriter, "inpatient", org.InpatientClaims.ToString());
                    InsertStringValue(xmlWriter, "outpatient", org.OutpatientClaims.ToString());
                    InsertStringValue(xmlWriter, "pharmacydispensings", org.OutpatientClaims.ToString());
                    InsertStringValue(xmlWriter, "enrollment", org.EnrollmentClaims.ToString());
                    InsertStringValue(xmlWriter, "demographics", org.DemographicsClaims.ToString());
                    InsertStringValue(xmlWriter, "laboratoryresults", org.LaboratoryResultsClaims.ToString());
                    InsertStringValue(xmlWriter, "vitalsigns", org.VitalSignsClaims.ToString());
                    InsertStringValue(xmlWriter, "biorepositories", org.Biorepositories.ToString());
                    InsertStringValue(xmlWriter, "patientreportedoutcomes", org.PatientReportedOutcomes.ToString());
                    InsertStringValue(xmlWriter, "patientreportedbehaviors", org.PatientReportedBehaviors.ToString());
                    InsertStringValue(xmlWriter, "prescriptionorders", org.PrescriptionOrders.ToString());
                    InsertStringValue(xmlWriter, "Other", org.OtherClaims.ToString());
                    InsertStringValue(xmlWriter, "Other", org.OtherClaimsText);
                    xmlWriter.WriteEndElement(); // end typedatacollected
                    xmlWriter.WriteStartElement("datamodels");
                    InsertStringValue(xmlWriter, "mscdm", org.DataModelMSCDM.ToString());
                    InsertStringValue(xmlWriter, "hmornvdw", org.DataModelHMORNVDW.ToString());
                    InsertStringValue(xmlWriter, "esp", org.DataModelESP.ToString());
                    InsertStringValue(xmlWriter, "i2b2", org.DataModelI2B2.ToString());
                    InsertStringValue(xmlWriter, "omop", org.DataModelOMOP.ToString());
                    InsertStringValue(xmlWriter, "other", org.DataModelOther.ToString());
                    InsertStringValue(xmlWriter, "otherText", org.DataModelOtherText);
                    xmlWriter.WriteEndElement(); // end datamodels
                    xmlWriter.WriteStartElement("electronichealthrecordssystems");
                    foreach (var e in org.EHRSes)
                    {
                        xmlWriter.WriteStartElement("ehr");
                        InsertStringValue(xmlWriter, "type", e.Type.ToString());
                        InsertStringValue(xmlWriter, "system", e.System.ToString());
                        InsertStringValue(xmlWriter, "startyear", e.StartYear.HasValue ? e.StartYear.Value.ToString() : null);
                        InsertStringValue(xmlWriter, "endyear", e.EndYear.HasValue ? e.EndYear.Value.ToString() : null);
                        xmlWriter.WriteEndElement();     // end ehr
                    }
                    ;
                    xmlWriter.WriteEndElement(); // end electronichealthrecordssystems
                    xmlWriter.WriteStartElement("registries");
                    foreach (var regOrg in org.Registries)
                    {
                        Registry registry = registries.Single(rr => rr.ID == regOrg.RegistryID);

                        xmlWriter.WriteStartElement("registry");
                        InsertStringValue(xmlWriter, "type", registry.Type.ToString());
                        InsertStringValue(xmlWriter, "id", registry.ID.ToString());
                        InsertStringValue(xmlWriter, "name", registry.Name);
                        InsertStringValue(xmlWriter, "description", registry.Description);
                        InsertStringValue(xmlWriter, "RoPRUrl", registry.RoPRUrl);
                        InsertStringValue(xmlWriter, "memberdescription", regOrg.Description);
                        xmlWriter.WriteStartElement("classification");
                        foreach (var item in registry.Items.Where(i => i.Category == "Classification"))
                        {
                            InsertStringValue(xmlWriter, "item", item.Title);
                        }
                        ;
                        xmlWriter.WriteEndElement();     // end classification

                        xmlWriter.WriteStartElement("purpose");
                        foreach (var item in registry.Items.Where(i => i.Category == "Purpose"))
                        {
                            InsertStringValue(xmlWriter, "item", item.Title);
                        }
                        ;
                        xmlWriter.WriteEndElement();     // end purpose

                        xmlWriter.WriteStartElement("conditionofinterest");
                        foreach (var item in registry.Items.Where(i => i.Category == "Condition of Interest"))
                        {
                            InsertStringValue(xmlWriter, "item", item.Title);
                        }
                        ;
                        xmlWriter.WriteEndElement();     // end purpose

                        xmlWriter.WriteEndElement();     // end registry
                    }
                    ;
                    xmlWriter.WriteEndElement(); // end registries element

                    xmlWriter.WriteEndElement(); // end organization element
                    xmlWriter.Flush();
                }
                ;
                xmlWriter.WriteEndElement(); // end organizations element
                xmlWriter.WriteEndDocument();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //xmlWriter.Close();
            }
        }
Ejemplo n.º 2
0
        public static void Export(XmlWriter xmlWriter, IEnumerable <DataMart> dataMarts, Lpp.Dns.Portal.IPluginService plugins)
        {
            try
            {
                xmlWriter.WriteStartDocument(true);
                xmlWriter.WriteStartElement("datamarts", "urn://popmednet/datamarts/metadata");
                xmlWriter.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
                xmlWriter.WriteAttributeString("xmlns", "xs", null, "http://www.w3.org/2001/XMLSchema");

                foreach (var d in dataMarts)
                {
                    DataMart dm = d;
                    xmlWriter.WriteStartElement("datamart");
                    #region DataMart Header
                    xmlWriter.WriteStartElement("header");

                    InsertStringValue(xmlWriter, "id", dm.ID.ToString());
                    InsertStringValue(xmlWriter, "name", dm.Name);
                    InsertStringValue(xmlWriter, "acronym", dm.Acronym);
                    InsertStringValue(xmlWriter, "organization", dm.Organization.Name);
                    InsertStringValue(xmlWriter, "contactfullname", dm.ContactFirstName + " " + dm.ContactLastName);
                    InsertStringValue(xmlWriter, "contactemail", dm.ContactEmail);
                    InsertStringValue(xmlWriter, "healthplandescription", dm.HealthPlanDescription);
                    InsertStringValue(xmlWriter, "collabrequest", dm.SpecialRequirements);
                    InsertStringValue(xmlWriter, "datamodel", dm.DataModel);
                    InsertStringValue(xmlWriter, "datamodelother", dm.OtherDataModel);
                    InsertStringValue(xmlWriter, "dataperiodstartyear", dm.StartDate.HasValue ? dm.StartDate.Value.ToShortDateString() : "");
                    InsertStringValue(xmlWriter, "dataperiodendyear", dm.EndDate.HasValue ? dm.EndDate.Value.ToShortDateString() : "");
                    InsertStringValue(xmlWriter, "dataupdatefrequency", dm.DataUpdateFrequency);

                    xmlWriter.WriteEndElement(); // end header element
                    #endregion

                    #region Data Domains

                    xmlWriter.WriteStartElement("datadomains");

                    //InPatient Encounters
                    xmlWriter.WriteStartElement("inpatientencounters");
                    InsertStringValue(xmlWriter, "value", dm.InpatientEncountersAny.ToString());
                    InsertStringValue(xmlWriter, "encounterid", dm.InpatientEncountersEncounterID.ToString());
                    InsertStringValue(xmlWriter, "dateofservice", dm.InpatientDatesOfService.ToString());
                    InsertStringValue(xmlWriter, "providerfacilityid", dm.InpatientEncountersProviderIdentifier.ToString());
                    InsertStringValue(xmlWriter, "icd9diagnosis", dm.InpatientICD9Diagnosis.ToString());
                    InsertStringValue(xmlWriter, "icd10diagnosis", dm.InpatientICD10Diagnosis.ToString());
                    InsertStringValue(xmlWriter, "icd9procedure", dm.InpatientICD9Procedures.ToString());
                    InsertStringValue(xmlWriter, "icd10procedure", dm.InpatientICD10Procedures.ToString());
                    InsertStringValue(xmlWriter, "dischargestatus", dm.InpatientDischargeStatus.ToString());
                    InsertStringValue(xmlWriter, "disposition", dm.InpatientDisposition.ToString());
                    InsertStringValue(xmlWriter, "hphcs", dm.InpatientHPHCS.ToString());
                    InsertStringValue(xmlWriter, "snomed", dm.InpatientSNOMED.ToString());
                    InsertStringValueWithAttribute(xmlWriter, "other", dm.InpatientOther.ToString(), "name", dm.InpatientOtherText);
                    xmlWriter.WriteEndElement(); // end inpatientencounters element

                    //outpatient Encounters
                    xmlWriter.WriteStartElement("outpatientencounters");
                    InsertStringValue(xmlWriter, "value", dm.OutpatientEncountersAny.ToString());
                    InsertStringValue(xmlWriter, "encounterid", dm.OutpatientEncountersEncounterID.ToString());
                    InsertStringValue(xmlWriter, "dateofservice", dm.OutpatientDatesOfService.ToString());
                    InsertStringValue(xmlWriter, "providerfacilityid", dm.OutpatientEncountersProviderIdentifier.ToString());
                    InsertStringValue(xmlWriter, "icd9diagnosis", dm.OutpatientICD9Diagnosis.ToString());
                    InsertStringValue(xmlWriter, "icd10diagnosis", dm.OutpatientICD10Diagnosis.ToString());
                    InsertStringValue(xmlWriter, "icd9procedure", dm.OutpatientICD9Procedures.ToString());
                    InsertStringValue(xmlWriter, "icd10procedure", dm.OutpatientICD10Procedures.ToString());
                    InsertStringValue(xmlWriter, "hphcs", dm.OutpatientHPHCS.ToString());
                    InsertStringValue(xmlWriter, "snomed", dm.OutpatientSNOMED.ToString());
                    InsertStringValueWithAttribute(xmlWriter, "other", dm.OutpatientOther.ToString(), "name", dm.OutpatientOtherText);
                    xmlWriter.WriteEndElement(); // end outpatientencounters element

                    //enrollment Encounters
                    //xmlWriter.WriteStartElement("enrollmentencounters");
                    //InsertStringValue(xmlWriter, "patientid", dm.ERPatientID.ToString());
                    //InsertStringValue(xmlWriter, "encounterid", dm.EREncounterID.ToString());
                    //InsertStringValue(xmlWriter, "enrollmentdates", dm.ERICD9Diagnosis.ToString());
                    //InsertStringValue(xmlWriter, "encounterdates", dm.ERICD10Diagnosis.ToString());
                    //InsertStringValue(xmlWriter, "clinicalsettings", dm.ERClinicalSetting.ToString());
                    //InsertStringValue(xmlWriter, "icd9diagnosis", dm.ERICD9Diagnosis.ToString());
                    //InsertStringValue(xmlWriter, "icd10diagnosis", dm.ERICD10Diagnosis.ToString());
                    //InsertStringValue(xmlWriter, "hphcs", dm.ERHPHCS.ToString());
                    //InsertStringValue(xmlWriter, "ndc", dm.ERNDC.ToString());
                    //InsertStringValue(xmlWriter, "snomed", dm.ERSNOMED.ToString());
                    //InsertStringValue(xmlWriter, "provideridentiier", dm.ERProviderIdentifier.ToString());
                    //InsertStringValue(xmlWriter, "providerfacility", dm.ERProviderFacility.ToString());
                    //InsertStringValue(xmlWriter, "encountertype", dm.EREncounterType.ToString());
                    //InsertStringValue(xmlWriter, "drg", dm.ERDRG.ToString());
                    //InsertStringValue(xmlWriter, "drgtype", dm.ERDRGType.ToString());
                    //InsertStringValueWithAttribute(xmlWriter, "other", dm.EROther.ToString(), "name", dm.EROtherText);
                    //xmlWriter.WriteEndElement(); // end enrollmentencounters element

                    //Laboratory Results
                    xmlWriter.WriteStartElement("laboratoryresults");
                    InsertStringValue(xmlWriter, "value", dm.LaboratoryResultsAny.ToString());
                    InsertStringValue(xmlWriter, "orderdates", dm.LaboratoryResultsOrderDates.ToString());
                    InsertStringValue(xmlWriter, "resultdates", dm.LaboratoryResultsDates.ToString());
                    InsertStringValue(xmlWriter, "testname", dm.LaboratoryResultsTestName.ToString());
                    InsertStringValue(xmlWriter, "testdescription", dm.LaboratoryResultsTestDescriptions.ToString());
                    InsertStringValue(xmlWriter, "testloinc", dm.LaboratoryResultsTestLOINC.ToString());
                    InsertStringValue(xmlWriter, "testsnomed", dm.LaboratoryResultsTestSNOMED.ToString());
                    InsertStringValue(xmlWriter, "testresultsinterpretation", dm.LaboratoryResultsTestResultsInterpretation.ToString());
                    InsertStringValueWithAttribute(xmlWriter, "testother", dm.LaboratoryResultsTestOther.ToString(), "name", dm.LaboratoryResultsTestOtherText);
                    xmlWriter.WriteEndElement(); // end laboratoryresults element

                    //prescription orders
                    xmlWriter.WriteStartElement("prescriptionorders");
                    InsertStringValue(xmlWriter, "value", dm.PrescriptionOrdersAny.ToString());
                    InsertStringValue(xmlWriter, "ndc", dm.PrescriptionOrderNDC.ToString());
                    InsertStringValue(xmlWriter, "rxnorm", dm.PrescriptionOrderRxNorm.ToString());
                    InsertStringValueWithAttribute(xmlWriter, "other", dm.PrescriptionOrderOther.ToString(), "name", dm.PrescriptionOrderOtherText);
                    xmlWriter.WriteEndElement(); // end prescription orders element

                    //pharmacy dispensings
                    xmlWriter.WriteStartElement("pharmacydispensings");
                    InsertStringValue(xmlWriter, "value", dm.PharmacyDispensingAny.ToString());
                    InsertStringValue(xmlWriter, "dates", dm.PharmacyDispensingDates.ToString());
                    InsertStringValue(xmlWriter, "ndc", dm.PharmacyDispensingNDC.ToString());
                    InsertStringValue(xmlWriter, "rxnorm", dm.PharmacyDispensingRxNorm.ToString());
                    InsertStringValue(xmlWriter, "dayssupply", dm.PharmacyDispensingDaysSupply.ToString());
                    InsertStringValue(xmlWriter, "amountdispensed", dm.PharmacyDispensingAmountDispensed.ToString());
                    InsertStringValueWithAttribute(xmlWriter, "other", dm.PharmacyDispensingOther.ToString(), "name", dm.PharmacyDispensingOtherText);
                    xmlWriter.WriteEndElement(); // end pharmacy dispensings element

                    //demographics
                    xmlWriter.WriteStartElement("demographics");
                    InsertStringValue(xmlWriter, "value", dm.DemographicsAny.ToString());
                    InsertStringValue(xmlWriter, "patientid", dm.DemographicsPatientID.ToString());
                    InsertStringValue(xmlWriter, "sex", dm.DemographicsSex.ToString());
                    InsertStringValue(xmlWriter, "dateofbirth", dm.DemographicsDateOfBirth.ToString());
                    InsertStringValue(xmlWriter, "dateofdeath", dm.DemographicsDateOfDeath.ToString());
                    InsertStringValue(xmlWriter, "address", dm.DemographicsAddressInfo.ToString());
                    InsertStringValue(xmlWriter, "race", dm.DemographicsRace.ToString());
                    InsertStringValue(xmlWriter, "ethnicity", dm.DemographicsEthnicity.ToString());
                    InsertStringValueWithAttribute(xmlWriter, "other", dm.DemographicsOther.ToString(), "name", dm.DemographicsOtherText);
                    xmlWriter.WriteEndElement(); // end demographics element


                    //patient reported outcomes
                    xmlWriter.WriteStartElement("patientreportedoutcomes");
                    InsertStringValue(xmlWriter, "value", dm.PatientOutcomesAny.ToString());
                    InsertStringValue(xmlWriter, "healthbehavior", dm.PatientOutcomesHealthBehavior.ToString());
                    InsertStringValue(xmlWriter, "hrqol", dm.PatientOutcomesHRQoL.ToString());
                    InsertStringValue(xmlWriter, "reportedoutcome", dm.PatientOutcomesReportedOutcome.ToString());
                    //InsertStringValueWithAttribute(xmlWriter, "instruments", dm.PatientOutcomesInstruments.ToString(), "name", dm.PatientOutcomesInstrumentText);
                    InsertStringValueWithAttribute(xmlWriter, "other", dm.PatientOutcomesOther.ToString(), "name", dm.PatientOutcomesOtherText);
                    xmlWriter.WriteEndElement(); // end patient reported outcomes element

                    //patient reported behavior
                    //xmlWriter.WriteStartElement("patientreportedbehavior");
                    //InsertStringValue(xmlWriter, "healthbehavior", dm.PatientOutcomesHealthBehavior.ToString());
                    //InsertStringValueWithAttribute(xmlWriter, "instruments", dm.PatientBehaviorInstruments.ToString(), "name", dm.PatientBehaviorInstrumentText);
                    //InsertStringValueWithAttribute(xmlWriter, "other", dm.PatientBehaviorOther.ToString(), "name", dm.PatientBehaviorOtherText);
                    //xmlWriter.WriteEndElement(); // end patient reported behavior element

                    //vital signs
                    xmlWriter.WriteStartElement("vitalsigns");
                    InsertStringValue(xmlWriter, "value", dm.VitalSignsAny.ToString());
                    InsertStringValue(xmlWriter, "temperature", dm.VitalSignsTemperature.ToString());
                    InsertStringValue(xmlWriter, "height", dm.VitalSignsHeight.ToString());
                    InsertStringValue(xmlWriter, "weight", dm.VitalSignsWeight.ToString());
                    InsertStringValue(xmlWriter, "bmi", dm.VitalSignsBMI.ToString());
                    InsertStringValue(xmlWriter, "bloodpressure", dm.VitalSignsBloodPressure.ToString());
                    InsertStringValueWithAttribute(xmlWriter, "other", dm.VitalSignsOther.ToString(), "name", dm.VitalSignsOtherText);
                    xmlWriter.WriteEndElement(); // end vital signs outcomes element

                    //longtitudinal capture
                    xmlWriter.WriteStartElement("longtitudinalcapture");
                    InsertStringValue(xmlWriter, "value", dm.LongitudinalCaptureAny.ToString());
                    InsertStringValue(xmlWriter, "patientid", dm.LongitudinalCapturePatientID.ToString());
                    InsertStringValue(xmlWriter, "capturestart", dm.LongitudinalCaptureStart.ToString());
                    InsertStringValue(xmlWriter, "capturestop", dm.LongitudinalCaptureStop.ToString());
                    InsertStringValue(xmlWriter, "other", dm.LongitudinalCaptureOther.ToString());
                    xmlWriter.WriteEndElement(); // end longtitudinal capture

                    //bio repositories
                    xmlWriter.WriteStartElement("biorepositories");
                    InsertStringValue(xmlWriter, "value", dm.BiorepositoriesAny.ToString());
                    //InsertStringValue(xmlWriter, "name", dm.BiorepositoriesName.ToString());
                    //InsertStringValue(xmlWriter, "description", dm.BiorepositoriesDescription.ToString());
                    //InsertStringValue(xmlWriter, "diseasename", dm.BiorepositoriesDiseaseName.ToString());
                    //InsertStringValue(xmlWriter, "specimensource", dm.BiorepositoriesSpecimenSource.ToString());
                    //InsertStringValue(xmlWriter, "specimenttype", dm.BiorepositoriesSpecimenType.ToString());
                    //InsertStringValue(xmlWriter, "processingmethod", dm.BiorepositoriesProcessingMethod.ToString());
                    //InsertStringValue(xmlWriter, "snomed", dm.BiorepositoriesSNOMED.ToString());
                    //InsertStringValue(xmlWriter, "storagemethod", dm.BiorepositoriesStorageMethod.ToString());
                    //InsertStringValueWithAttribute(xmlWriter, "other", dm.BiorepositoriesOther.ToString(), "name", dm.BiorepositoriesOtherText);
                    xmlWriter.WriteEndElement(); // end bio repositories outcomes element

                    xmlWriter.WriteEndElement(); // end datadomain element

                    #endregion

                    #region Installed Models
                    xmlWriter.WriteStartElement("installedmodels");

                    var pluginModels = plugins.GetAllPlugins().SelectMany(p => p.Models.Select(m => new { p, m }));
                    foreach (var mm in dm.Models)
                    {
                        var       m     = mm;
                        IDnsModel model = null;
                        if (pluginModels.Any(pm => pm.m.ID == m.ModelID))
                        {
                            model = pluginModels.Where(pm => pm.m.ID == m.ModelID).Select(pm => pm.m).FirstOrDefault();
                            InsertStringValue(xmlWriter, "name", model.Name);
                        }
                    }
                    ;

                    xmlWriter.WriteEndElement(); // end installed models element
                    #endregion

                    xmlWriter.WriteEndElement(); // end data mart element

                    xmlWriter.Flush();
                }
                ;
                xmlWriter.WriteEndElement(); // end datamarts element
                xmlWriter.WriteEndDocument();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //xmlWriter.Close();
            }
        }
Ejemplo n.º 3
0
        public static void Export(XmlWriter xmlWriter, IEnumerable <ExportedRequestSearchResult> requests, List <ExportedRequestSearchRoutingResult> routings, Lpp.Dns.Portal.IPluginService plugins)
        {
            try
            {
                xmlWriter.WriteStartDocument(true);
                xmlWriter.WriteStartElement("requests", "urn://popmednet/requests/metadata");
                xmlWriter.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
                xmlWriter.WriteAttributeString("xmlns", "xs", null, "http://www.w3.org/2001/XMLSchema");

                foreach (var rr in requests)
                {
                    var request = rr;
                    xmlWriter.WriteStartElement("request");
                    #region Request Header
                    xmlWriter.WriteStartElement("header");
                    xmlWriter.WriteStartElement("requestType");
                    InsertStringValue(xmlWriter, "name", request.RequestType);
                    InsertStringValue(xmlWriter, "id", request.RequestTypeID.ToString());
                    xmlWriter.WriteEndElement(); // end requestType element
                    InsertStringValue(xmlWriter, "id", request.Identifier.ToString());
                    InsertStringValue(xmlWriter, "name", request.RequestName);
                    InsertStringValue(xmlWriter, "requestid", request.MSRequestID);
                    InsertStringValue(xmlWriter, "description", request.Description);
                    xmlWriter.WriteElementString("priority", "Normal");
                    InsertDateValue(xmlWriter, "dueDate", request.DueDate);
                    InsertDateValue(xmlWriter, "submittedOn", request.SubmittedOn);
                    InsertUserValue(xmlWriter, "createdBy", request.CreatedByUserName, request.CreatedByOrganization, request.CreatedByEmail);
                    InsertDateValue(xmlWriter, "createdOn", request.CreatedOn);
                    InsertUserValue(xmlWriter, "updatedBy", request.UpdatedByUserName, request.UpdatedByOrganization, request.UpdatedByEmail);
                    InsertDateValue(xmlWriter, "updatedOn", request.UpdatedOn);
                    InsertStringValue(xmlWriter, "purposeOfUse", request.PurposeOfUse);
                    xmlWriter.WriteElementString("phiDisclosureLevel", request.LevelOfPHIDisclosure);
                    xmlWriter.WriteStartElement("activity");
                    InsertStringValue(xmlWriter, "id", request.ActivityProjectID.HasValue ? request.ActivityProjectID.Value.ToString("D") : null);
                    InsertStringValue(xmlWriter, "description", request.ActivityProject);
                    xmlWriter.WriteEndElement(); // end activity element
                    xmlWriter.WriteStartElement("group");
                    InsertStringValue(xmlWriter, "name", request.Group);
                    InsertStringValue(xmlWriter, "description", null); // TODO: define group description
                    xmlWriter.WriteEndElement();                       // end group element
                    xmlWriter.WriteStartElement("project");
                    InsertStringValue(xmlWriter, "name", request.Project);
                    xmlWriter.WriteElementString("description", request.ProjectDescription);
                    xmlWriter.WriteEndElement(); // end project element
                    xmlWriter.WriteEndElement(); // end header element
                    #endregion
                    #region Body

                    /*
                     * xmlWriter.WriteStartElement("body");
                     * xmlWriter.WriteStartElement("criteria");
                     * xmlWriter.WriteStartElement("codes");
                     *
                     * xmlWriter.WriteStartElement("idc9Diagnosis");
                     * xmlWriter.WriteElementString("code", "250.01");
                     * xmlWriter.WriteElementString("description", "description");
                     * xmlWriter.WriteEndElement(); // end idc9Diagnosis element
                     * xmlWriter.WriteStartElement("observationRange");
                     * xmlWriter.WriteElementString("startDate", "2011-03-30T09:30:10Z");
                     * xmlWriter.WriteElementString("endDate", "2012-03-30T09:30:10Z");
                     * xmlWriter.WriteEndElement(); // end observationRange element
                     * xmlWriter.WriteEndElement(); // end criteria element
                     *
                     * xmlWriter.WriteStartElement("report");
                     * xmlWriter.WriteElementString("ageRange", "01-05,06-18,19-30,31-65,66+");
                     * xmlWriter.WriteElementString("race", "white,black, ...");
                     * xmlWriter.WriteEndElement(); // end report element
                     * xmlWriter.WriteEndElement(); // end body element
                     * xmlWriter.Flush();
                     */
                    #endregion
                    #region Routing - DataMarts
                    xmlWriter.WriteStartElement("routing");
                    foreach (var requestRouting in routings.Where(rt => rt.RequestID == request.RequestID).GroupBy(k => new { k.DataMartID, k.DataMart, k.Organization, k.Status }))
                    {
                        xmlWriter.WriteStartElement("dataMart");
                        InsertDataMart(xmlWriter, requestRouting.Key.DataMartID, requestRouting.Key.DataMart, requestRouting.Key.Organization);
                        xmlWriter.WriteElementString("status", requestRouting.Key.Status.ToString());

                        //var currentCount = requestRouting.Responses.Max(r => r.Count);
                        //foreach(var response in requestRouting.Responses){
                        //    InsertRoutingInstance(xmlWriter, "instance", response, response.Count == currentCount);
                        //}
                        foreach (var response in requestRouting.OrderByDescending(x => x.ResponseIndex))
                        {
                            InsertRoutingInstance(xmlWriter, "instance", response);
                        }

                        xmlWriter.WriteEndElement();
                    }
                    ;
                    xmlWriter.WriteEndElement(); // end routing element
                    #endregion
                    xmlWriter.WriteEndElement(); // end request element
                    xmlWriter.Flush();
                }
                ;
                xmlWriter.WriteEndElement(); // end requests element
                xmlWriter.WriteEndDocument();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //xmlWriter.Close();
            }
        }