Exemple #1
0
        /// <summary>
        /// This method populates an consumerEnteredNotes model with either the mandatory sections only, or both
        /// the mandatory and optional sections
        /// </summary>
        /// <param name="mandatorySectionsOnly">mandatorySectionsOnly</param>
        /// <returns>ConsumerEnteredNotes</returns>
        public static ConsumerEnteredNotes PopulateConsumerEnteredNotes(Boolean mandatorySectionsOnly)
        {
            var consumerEnteredNotes = ConsumerEnteredNotes.CreateConsumerEnteredNotes();

            // Include Logo
            consumerEnteredNotes.IncludeLogo = true;
            consumerEnteredNotes.LogoPath    = OutputFolderPath;

            // Set Creation Time
            consumerEnteredNotes.DocumentCreationTime = new ISO8601DateTime(DateTime.Now);

            #region Setup and populate the CDA context model

            // Setup and populate the CDA context model
            var cdaContext = ConsumerEnteredNotes.CreateCDAContext();
            // Document Id
            cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid(), null);
            // Set Id
            cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid(), null);
            // CDA Context Version
            cdaContext.Version = "1";

            // Custodian
            cdaContext.Custodian = BaseCDAModel.CreateCustodian();
            GenericObjectReuseSample.HydrateCustodian(cdaContext.Custodian, mandatorySectionsOnly);

            // Legal authenticator
            if (!mandatorySectionsOnly)
            {
                cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator();
                GenericObjectReuseSample.HydrateAuthenticator(cdaContext.LegalAuthenticator, mandatorySectionsOnly);
            }

            consumerEnteredNotes.CDAContext = cdaContext;
            #endregion

            #region Setup and Populate the SCS Context model
            // Setup and Populate the SCS Context model

            consumerEnteredNotes.SCSContext = ConsumerEnteredNotes.CreateSCSContext();

            consumerEnteredNotes.SCSContext.Author = ConsumerEnteredNotes.CreateAuthor();
            PopulateAuthor(consumerEnteredNotes.SCSContext.Author, mandatorySectionsOnly);

            consumerEnteredNotes.SCSContext.SubjectOfCare = PopulateSubjectofCare(mandatorySectionsOnly);

            #endregion

            #region Setup and populate the SCS Content model
            // Setup and populate the SCS Content model
            consumerEnteredNotes.SCSContent = ConsumerEnteredNotes.CreateSCSContent();

            consumerEnteredNotes.SCSContent.Title       = "My Health Summary";
            consumerEnteredNotes.SCSContent.Description = "I have been really healthy all my life.";

            #endregion

            return(consumerEnteredNotes);
        }
Exemple #2
0
        /// <summary>
        /// Creates and Hydrates an IParticipationHealthcareFacility
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Hydrated IParticipationHealthcareFacility</returns>
        public static IParticipationHealthcareFacility PopulateHealthcareFacility(bool mandatoryOnly)
        {
            var participation = Nehta.VendorLibrary.CDA.Common.PCML.CreateHealthcareFacility();

            participation.ParticipationPeriod = BaseCDAModel.CreateInterval(new ISO8601DateTime(DateTime.Now), new ISO8601DateTime(DateTime.Now));

            participation.Participant = BaseCDAModel.CreateParticipantForHealthcareFacility();
            participation.Participant.Organisation = BaseCDAModel.CreateOrganisation();

            participation.Role = BaseCDAModel.CreateCodableText(NullFlavour.NoInformation);

            // HealthcareFacility > Participant > Entity Identifier
            participation.Participant.Organisation.Identifiers = new List <Identifier> {
                BaseCDAModel.CreateIdentifier("HealthcareFacility", null, null, "1.2.3.4.5.66666", null),
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, "8003620833333789")
            };

            // Organisation Name
            participation.Participant.Organisation.Name = "West End Healthiness";

            // HealthcareFacility > Address
            var address1 = BaseCDAModel.CreateAddress();

            address1.AddressPurpose    = AddressPurpose.Business;
            address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();
            address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                "1 Clinician Street"
            };
            address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
            address1.AustralianAddress.State           = AustralianState.QLD;
            address1.AustralianAddress.PostCode        = "5555";
            address1.AustralianAddress.DeliveryPointId = 32568931;

            participation.Participant.Addresses = new List <IAddress> {
                address1
            };

            if (!mandatoryOnly)
            {
                // Electronic Communication Details
                participation.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail>
                {
                    BaseCDAModel.CreateElectronicCommunicationDetail("0712341234", ElectronicCommunicationMedium.Telephone, ElectronicCommunicationUsage.WorkPlace),
                    BaseCDAModel.CreateElectronicCommunicationDetail("0712341236", ElectronicCommunicationMedium.Fax, ElectronicCommunicationUsage.WorkPlace),
                };

                // Organisation Continued
                participation.Participant.Organisation.NameUsage  = OrganisationNameUsage.LocallyUsedName;
                participation.Participant.Organisation.Department = "General Health";
            }

            return(participation);
        }
        /// <summary>
        /// Creates and Hydrates an Prescription Item.
        ///
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <param name="mandatorySectionsOnly">Only show mandatorySectionsOnly fields</param>
        /// <param name="prescriptionId">Prescription Identifier </param>
        /// <returns>A Hydrated PrescriptionItem </returns>
        internal static IPCEHRPrescriptionItem CreatePrescriptionItem(Boolean mandatorySectionsOnly, string prescriptionId)
        {
            var prescriptionItem = PCEHRPrescriptionRecord.CreatePrescriptionItem();

            // The Dispensing Information Object
            prescriptionItem.DispensingInformation = CreateDispensingInformation(mandatorySectionsOnly);

            // Prescription Item Identifier - A globally unique object identifier for each instance of a Medication Instruction
            prescriptionItem.PrescriptionItemIdentifier = BaseCDAModel.CreateIdentifier("1.2.36.1.2001.1005.36", BaseCDAModel.CreateGuid());

            if (!mandatorySectionsOnly)
            {
                // Therapeutic Good Identification - The medicine, vaccine or other therapeutic good being ordered, administered to or used by the subject of care
                prescriptionItem.TherapeuticGoodId = BaseCDAModel.CreateCodableText("01158Y", CodingSystem.PBSCode, "cimetidine 400 mg tablet, 60", null, null);

                // Therapeutic Good Strength (Additional Therapeutic Good Detail) - Information concerning the strength of the Therapeutic Good
                prescriptionItem.TherapeuticGoodStrength = "Therapeutic Good Strength";

                // Therapeutic Good Generic Name (Additional Therapeutic Good Detail) - The generic name of the Therapeutic Good
                prescriptionItem.TherapeuticGoodGenericName = "Therapeutic Good Generic Name";

                // Directions - A complete narrative description of how much, when and how to use the medicine, vaccine or other therapeutic good
                prescriptionItem.Directions = "Directions";

                // Formula - The recipe for compounding a medicine
                prescriptionItem.Formula = "Formula";

                // Form - The formulation or presentation of the overall substance
                prescriptionItem.Form = BaseCDAModel.CreateCodableText("385057009", CodingSystem.SNOMED, "Film-coated tablet", null, null);

                // ClinicalIndication - A reason for ordering the medicine, vaccine or other therapeutic good
                prescriptionItem.ClinicalIndication = "Clinical Indication";

                // Route - The route by which the medication is administered
                prescriptionItem.Route = BaseCDAModel.CreateCodableText("26643006", CodingSystem.SNOMED, "Oral route", null, null);

                // Comment - Any additional information that may be needed to ensure the continuity of supply, rationale for current dose and timing, or safe and appropriate use
                prescriptionItem.Comment = "Comment";

                // DateTime Prescription Expires
                prescriptionItem.DateTimePrescriptionExpires = new ISO8601DateTime(DateTime.Now.AddMonths(12));

                // PBS Manufacturer Code (Administrative Manufacturer Code) - Administrative code of the manufacturer of the pharmaceutical item supplied
                prescriptionItem.PBSManufacturerCode = BaseCDAModel.CreateExternalConceptIdentifier(ExternalConcepts.AustralianPBSManufacturerCode, "AB");
            }
            else
            {
                // Therapeutic Good Identification - The medicine, vaccine or other therapeutic good being ordered, administered to or used by the subject of care
                prescriptionItem.TherapeuticGoodId = BaseCDAModel.CreateCodableText("28237011000036107", CodingSystem.AMTV3, "amoxycillin 500 mg capsule, 20", null, null);
            }
            return(prescriptionItem);
        }
        /// <summary>
        /// Creates and hydrates the 'OrderDetails' section.
        /// </summary>
        /// <param name="mandatorySectionsOnly">Includes on the mandatory items</param>
        /// <returns>A hydrated 'OrderDetails' object.</returns>
        public static OrderDetails CreateOrderDetails(Boolean mandatorySectionsOnly)
        {
            // Order Details
            var orderDetails = DiagnosticImagingReport.CreateOrderDetails();

            // Requester Order Identifier
            orderDetails.RequesterOrderIdentifier = BaseCDAModel.CreateIdentifier("1.2.36.1.2001.1005.52.8003620833333789", "10523479");

            // Requester
            orderDetails.Requester = GenericObjectReuseSample.CreateRequester(mandatorySectionsOnly);

            return(orderDetails);
        }
        /// <summary>
        /// Creates and Hydrates an IParticipationHealthcareFacility
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Hydrated IParticipationHealthcareFacility</returns>
        public static void HydrateHealthcareFacility(IParticipationHealthcareFacility participation, bool mandatoryOnly)
        {
            participation.ParticipationPeriod = BaseCDAModel.CreateInterval(new ISO8601DateTime(DateTime.Now), new ISO8601DateTime(DateTime.Now));

            participation.Participant = BaseCDAModel.CreateParticipantForHealthcareFacility();
            participation.Participant.Organisation = BaseCDAModel.CreateOrganisation();

            // HealthcareFacility > Participant > Entity Identifier
            participation.Participant.Organisation.Identifiers = new List <Identifier> {
                BaseCDAModel.CreateIdentifier("Test Authority", null, null, "2.999.1234567890", null),
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, "8003620833333789")
            };

            // Organisation Name
            participation.Participant.Organisation.Name = "West End Healthiness";

            // HealthcareFacility > Address
            var address1 = BaseCDAModel.CreateAddress();

            address1.AddressPurpose    = AddressPurpose.Business;
            address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();
            address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                "1 Clinician Street"
            };
            address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
            address1.AustralianAddress.State    = AustralianState.QLD;
            address1.AustralianAddress.PostCode = "5555";

            participation.Participant.Addresses = new List <IAddress> {
                address1
            };

            if (!mandatoryOnly)
            {
                // Role
                participation.Role = BaseCDAModel.CreateRole(Occupation.Legislatorsnfd);

                // Organisation Continued
                participation.Participant.Organisation.NameUsage  = OrganisationNameUsage.LocallyUsedName;
                participation.Participant.Organisation.Department = "General Health";

                participation.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail>
                {
                    BaseCDAModel.CreateElectronicCommunicationDetail("0712341234", ElectronicCommunicationMedium.Telephone, ElectronicCommunicationUsage.WorkPlace),
                    BaseCDAModel.CreateElectronicCommunicationDetail("0712341236", ElectronicCommunicationMedium.Fax, ElectronicCommunicationUsage.WorkPlace),
                };
            }
        }
        /// <summary>
        /// Creates a PathologyMetadata instance for this sample.
        /// </summary>
        /// <returns></returns>
        public static PathologyMetadata CreateRequiredMetadataForPathologyCdaTransform()
        {
            PathologyMetadata metadata = new PathologyMetadata();

            // Author organisation HPIO
            metadata.AuthorOrganisationHpio = "8003628233352432";

            // Report identifier
            metadata.ReportIdentifier = BaseCDAModel.CreateIdentifier("1.2.36.1.2001.1005.54.8003628233352432", "HOM07051718571.7841");

            // Requester order identifier
            metadata.RequesterOrderIdentifier = BaseCDAModel.CreateIdentifier("1.2.36.1.2001.1005.52.8003628233352432", "100041");

            // Reporting pathologist
            metadata.ReportingPathologist                  = new ReportingPathologist();
            metadata.ReportingPathologist.Hpii             = "8003610102030405"; // Hpii must be set here, or provided in OBR-32 of HL7 V2 report
            metadata.ReportingPathologist.OrganisationHpio = "8003628233352432";
            metadata.ReportingPathologist.Role             = Occupation.Pathologist;

            // Reporting pathologist - address
            var address = BaseCDAModel.CreateAddress();

            address.AddressPurpose    = AddressPurpose.Business;
            address.AustralianAddress = BaseCDAModel.CreateAustralianAddress();
            address.AustralianAddress.UnstructuredAddressLines = new List <string> {
                "400 George Street"
            };
            address.AustralianAddress.PostCode    = "4000";
            address.AustralianAddress.State       = AustralianState.QLD;
            metadata.ReportingPathologist.Address = new List <IAddress>()
            {
                address
            };

            // Reporting pathologist - contact details
            var coms = BaseCDAModel.CreateElectronicCommunicationDetail(
                "(08) 8888 6666",
                ElectronicCommunicationMedium.Telephone,
                ElectronicCommunicationUsage.WorkPlace);

            metadata.ReportingPathologist.ContactDetails = new List <ElectronicCommunicationDetail>()
            {
                coms
            };

            return(metadata);
        }
        /// <summary>
        /// Creates and Hydrates the Author Authoring Device
        ///
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Hydrated AuthorAuthoringDevice object</returns>
        public static void HydrateAuthorDevice(AuthorAuthoringDevice author)
        {
            // Date Time Authored
            author.DateTimeAuthored = new ISO8601DateTime(DateTime.Now);

            // Document Author > Role
            author.Role = BaseCDAModel.CreateRole(NullFlavour.NotApplicable);

            // Document Author > Software Name
            author.SoftwareName = "PCEHR National Repository";

            // Document Author > Participant > Entity Identifier
            author.Identifiers = new List <Identifier>
            {
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.PAID, "8003640001000036"),
                BaseCDAModel.CreateIdentifier("AuthorDevice", null, null, "1.2.3.4.5.66666", null)
            };
        }
        /// <summary>
        /// Creates a Document Provenance.
        /// </summary>
        /// <returns>DocumentProvenance</returns>
        public static DocumentDetails CreateDocumentProvenance(Boolean mandatorySectionsOnly)
        {
            DocumentDetails documentDetails = BaseCDAModel.CreateDocumentDetails();

            // Report Identifier
            documentDetails.ReportIdentifier = BaseCDAModel.CreateIdentifier("1.2.36.1.2001.1005.54.8003620833333789", "10523477");

            // Report Date
            documentDetails.ReportDate = new ISO8601DateTime(DateTime.Now);

            // Result Status
            documentDetails.ReportStatus = BaseCDAModel.CreateResultStatus(Hl7V3ResultStatus.CorrectionToResults, "Correction To Results"); // or BaseCDAModel.CreateResultStatus(Hl7V3ResultStatus.CorrectionToResults)

            // Report Name
            documentDetails.ReportDescription = "Full Blood Count";

            return(documentDetails);
        }
        /// <summary>
        /// Creates and hydrates the 'DocumentProvenances' section.
        /// </summary>
        /// <param name="mandatorySectionsOnly">Includes on the mandatory sections</param>
        /// <returns>A hydrated 'DocumentProvenance' object.</returns>
        public static DocumentProvenance CreateDocumentProvenance(bool mandatorySectionsOnly)
        {
            var documentProvenance = AdvanceCareInformation.CreateDocumentProvenance();

            // Document Type
            documentProvenance.DocumentType = DocumentType.AdvanceCarePlanDirectiveAndSubstituteDecisionMaker;

            // Author of the CDA document
            documentProvenance.Author = CreateDocumentAuthor(mandatorySectionsOnly);

            if (!mandatorySectionsOnly)
            {
                // Document Identifier
                documentProvenance.DocumentIdentifier = BaseCDAModel.CreateIdentifier("Test Authority", null, null, "2.999.1234567890", null);
            }

            return(documentProvenance);
        }
        /// <summary>
        /// Creates and hydrates the 'OrderDetails' section.
        /// </summary>
        /// <param name="mandatorySectionsOnly">Includes on the mandatory items</param>
        /// <returns>A hydrated 'OrderDetails' object.</returns>
        public static OrderDetails CreateOrderDetails(Boolean mandatorySectionsOnly)
        {
            // Order Details
            var orderDetails = DiagnosticImagingReport.CreateOrderDetails();

            if (!mandatorySectionsOnly)
            {
                // Requester Order Identifier
                orderDetails.RequesterOrderIdentifier = BaseCDAModel.CreateIdentifier("1.2.36.1.2001.1005.52.8003620833333789", "10523479");

                // Requester Order Identifier
                orderDetails.RequestedTestName = BaseCDAModel.CreateCodableText("26604007", CodingSystem.SNOMED, "Complete blood count");
            }

            // Requester
            orderDetails.Requester = GenericObjectReuseSample.CreateRequester(mandatorySectionsOnly);

            return(orderDetails);
        }
        /// <summary>
        /// Creates and Hydrates a custodian
        ///
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Custodian</returns>
        public static void HydrateCustodian(IParticipationCustodian participationCustodian, bool mandatoryOnly)
        {
            var custodian = BaseCDAModel.CreateParticipantCustodian();

            // custodian/assignedCustodian
            participationCustodian.Participant = custodian;

            // custodian/assignedCustodian/representedCustodianOrganization
            custodian.Organisation = BaseCDAModel.CreateOrganisationName();

            if (!mandatoryOnly)
            {
                // custodian/assignedCustodian/representedCustodianOrganization/<Entity Identifier>
                custodian.Organisation.Identifiers = new List <Identifier> {
                    BaseCDAModel.CreateIdentifier("SampleAuthority", null, null, "1.2.3.4.77777", null),
                    BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, "8003620833333789")
                };

                // custodian/assignedCustodian/representedCustodianOrganization/name
                custodian.Organisation.Name = "Burrill Lake Medical Centre";

                // custodian/assignedCustodian/representedCustodianOrganization/<Address>
                var address1 = BaseCDAModel.CreateAddress();
                address1.AddressPurpose    = AddressPurpose.Residential;
                address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();
                address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "1 Custodian Street"
                };
                address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address1.AustralianAddress.State           = AustralianState.QLD;
                address1.AustralianAddress.PostCode        = "5555";
                address1.AustralianAddress.DeliveryPointId = 32568931;

                custodian.Address = address1;

                // custodian/assignedCustodian/representedCustodianOrganization/<Electronic Communication Detail>
                var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "0345754566",
                    ElectronicCommunicationMedium.Telephone,
                    ElectronicCommunicationUsage.WorkPlace);
                custodian.ElectronicCommunicationDetail = coms1;
            }
        }
        /// <summary>
        /// Creates and Hydrates the Author Authoring Device
        ///
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Hydrated AuthorAuthoringDevice object</returns>
        public static void HydrateAuthorDevice(AuthorAuthoringDevice author, Boolean mandatorySectionsOnly)
        {
            // Date Time Authored
            author.DateTimeAuthored = new ISO8601DateTime(DateTime.Now);

            // Document Author > Role
            author.Role = BaseCDAModel.CreateRole(NullFlavour.NotApplicable);

            // Document Author > Software Name
            author.SoftwareName = "PCEHR National Repository";

            if (!mandatorySectionsOnly)
            {
                // Document Author > Participant > Entity Identifier
                author.Identifiers = new List <Identifier>
                {
                    BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.PAID, "8003640001000036"),
                    BaseCDAModel.CreateIdentifier("Test Authority", null, null, "2.999.1234567890", null)
                };
            }
        }
        /// <summary>
        /// Creates and Hydrates an Parent Document Item
        ///
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <param name="mandatorySectionsOnly">Only show mandatorySectionsOnly fields</param>
        /// <returns>A Hydrated ParentDocument </returns>
        internal static ParentDocument CreateParentDocument(ReleatedDocumentType documentType, Identifier setID, string parentIdentifier, CDADocumentType?CDAdocumentType, string versionNumber, Boolean mandatorySectionsOnly)
        {
            var parentDocument = BaseCDAModel.CreateParentDocument();

            // Related Document Type Code
            parentDocument.ReleatedDocumentType = documentType;

            // Represents the unique instance identifier of a clinical document.
            parentDocument.DocumentId = BaseCDAModel.CreateIdentifier(null, null, parentIdentifier, CDAdocumentType.HasValue ? "1.2.36.1.2001.1005.35" : "1.2.76.56.4567.6654.45", null);

            // An integer value used to version successive replacement documents.
            parentDocument.VersionNumber = versionNumber;

            if (!mandatorySectionsOnly)
            {
                // The code specifying the particular kind of document (e.g. History and Physical, Discharge Summary, Progress Note)
                parentDocument.DocumentType = CDAdocumentType;

                // Represents an identifier that is common across all document revisions
                parentDocument.SetId = setID;
            }

            return(parentDocument);
        }
Exemple #14
0
        public void Process(Spia.PathologyReportModel.Model.PathologyReport Report, string CdaOutputDirectory, string PdfDirectory, byte[] LogoBytes = null)
        {
            var pathologyResultReport = PathologyResultReport.CreatePathologyResultReport();

            // Include Logo
            if (LogoBytes != null)
            {
                pathologyResultReport.IncludeLogo = true;
                pathologyResultReport.LogoByte    = LogoBytes;
            }
            else
            {
                pathologyResultReport.IncludeLogo = false;
            }


            // Set Creation Time
            DateTimeOffset DocumentCreationDateTime = Report.GetOldestReportReleaseDateTime();

            pathologyResultReport.DocumentCreationTime = new ISO8601DateTime(DocumentCreationDateTime.DateTime, ISO8601DateTime.Precision.Second, DocumentCreationDateTime.Offset);


            #region Setup and populate the CDA context model

            // Setup and populate the CDA context model
            var cdaContext = PathologyResultReport.CreateCDAContext();
            // Document Id
            cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid(), null);
            // Set Id
            cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid(), null);

            // CDA Context Version , this needs to increment for each correction to the first report instance
            cdaContext.Version = "1";
            // Custodian
            cdaContext.Custodian = BaseCDAModel.CreateCustodian();

            //custodian/assignedCustodian
            cdaContext.Custodian.Participant = BaseCDAModel.CreateParticipantCustodian();;

            // custodian/assignedCustodian/representedCustodianOrganization
            cdaContext.Custodian.Participant.Organisation = BaseCDAModel.CreateOrganisationName();

            // custodian/assignedCustodian/representedCustodianOrganization/<Entity Identifier>
            cdaContext.Custodian.Participant.Organisation.Identifiers = new List <Identifier>
            {
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, Report.PerformingLaboratory.Hpio.Replace(" ", string.Empty))
            };

            // custodian/assignedCustodian/representedCustodianOrganization/name
            cdaContext.Custodian.Participant.Organisation.Name = Report.PerformingLaboratory.FacilityName;

            ElectronicCommunicationDetail PerformingPathologyLabComms = BaseCDAModel.CreateElectronicCommunicationDetail(
                Report.PerformingLaboratory.BusinessPhoneNumber,
                ElectronicCommunicationMedium.Telephone,
                ElectronicCommunicationUsage.WorkPlace);

            // custodian/assignedCustodian/representedCustodianOrganization/<Address>
            cdaContext.Custodian.Participant.Address = GetCdaAddress(Report.PerformingLaboratory.Address);

            // custodian/assignedCustodian/representedCustodianOrganization/<Electronic Communication Detail>
            cdaContext.Custodian.Participant.ElectronicCommunicationDetail = PerformingPathologyLabComms;


            // Legal Authenticator
            cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator();
            // LegalAuthenticator/assignedEntity
            cdaContext.LegalAuthenticator.Participant = BaseCDAModel.CreateParticipantForLegalAuthenticator();

            // LegalAuthenticator/assignedEntity/assignedPerson
            cdaContext.LegalAuthenticator.Participant.Person = BaseCDAModel.CreatePerson();

            DateTimeOffset OldestReportReleaseDate = Report.GetOldestReportReleaseDateTime();
            // LegalAuthenticator/time/@value
            cdaContext.LegalAuthenticator.Participant.DateTimeAuthenticated = new ISO8601DateTime(OldestReportReleaseDate.DateTime, ISO8601DateTime.Precision.Second, OldestReportReleaseDate.Offset);


            Spia.PathologyReportModel.Model.Provider FirstReportingPathologist = Report.ReportList.First().ReportingPathologist;

            //LegalAuthenticator/assignedEntity/assignedPerson/<Person Name>
            var ReportingPathologistName = BaseCDAModel.CreatePersonName();
            if (FirstReportingPathologist.Name.Given is object)
            {
                ReportingPathologistName.GivenNames = new List <string> {
                    FirstReportingPathologist.Name.Given
                };
            }

            ReportingPathologistName.FamilyName = FirstReportingPathologist.Name.Family;
            if (FirstReportingPathologist.Name.Title is object)
            {
                ReportingPathologistName.Titles = new List <string> {
                    FirstReportingPathologist.Name.Title
                };
            }

            ReportingPathologistName.NameUsages = new List <NameUsage> {
                NameUsage.Legal
            };

            cdaContext.LegalAuthenticator.Participant.Person.PersonNames = new List <Nehta.VendorLibrary.CDA.IPersonName> {
                ReportingPathologistName
            };

            // LegalAuthenticator/assignedEntity/<Entity Identifier>
            cdaContext.LegalAuthenticator.Participant.Person.Identifiers = new List <Identifier>
            {
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, FirstReportingPathologist.IdentifierList.SingleOrDefault(x => x.Type == PathologyReportModel.Model.IdentifierType.HPII).Value.Replace(" ", ""))
            };

            // LegalAuthenticator/assignedEntity/code
            cdaContext.LegalAuthenticator.Role = BaseCDAModel.CreateRole(Occupation.Pathologist, Nehta.VendorLibrary.CDA.Generator.Enums.CodingSystem.ANZSCORevision1);

            cdaContext.LegalAuthenticator.Participant.Addresses = new List <IAddress>()
            {
                GetCdaAddress(Report.PerformingLaboratory.Address)
            };

            // LegalAuthenticator/assignedEntity/<Electronic Communication Detail>
            cdaContext.LegalAuthenticator.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                PerformingPathologyLabComms
            };

            // LegalAuthenticator/assignedEntity/representedOrganization
            cdaContext.LegalAuthenticator.Participant.Organisation = BaseCDAModel.CreateOrganisationName();

            // LegalAuthenticator/assignedEntity/representedOrganization/name
            cdaContext.LegalAuthenticator.Participant.Organisation.Name = Report.PerformingLaboratory.FacilityName;

            // LegalAuthenticator/assignedEntity/representedOrganization/<Entity Identifier>
            cdaContext.LegalAuthenticator.Participant.Organisation.Identifiers = new List <Identifier>();

            var CodableConceptNataSiteNumber = BaseCDAModel.CreateCodableText();
            CodableConceptNataSiteNumber.Code           = "XX";
            CodableConceptNataSiteNumber.CodeSystemName = "Identifier Type (HL7)";
            CodableConceptNataSiteNumber.CodeSystemCode = "2.16.840.1.113883.12.203";
            CodableConceptNataSiteNumber.DisplayName    = "Organization identifier";

            var NataSiteNumber = BaseCDAModel.CreateIdentifier("1.2.36.1.2001.1005.74", Report.PerformingLaboratory.NataSiteNumber);
            NataSiteNumber.Code = CodableConceptNataSiteNumber;
            NataSiteNumber.AssigningGeographicArea = "National Identifier";
            NataSiteNumber.AssigningAuthorityName  = "NATA Site Number";
            cdaContext.LegalAuthenticator.Participant.Organisation.Identifiers.Add(NataSiteNumber);

            //cdaContext.LegalAuthenticator.Participant.Organisation.Identifiers.Add(BaseCDAModel.CreateIdentifier("NATA", Nehta.VendorLibrary.CDA.Generator.Enums.HealthcareIdentifierGeographicArea.NationalIdentifier, PerformingPathologyLab.NataSiteNumber, "1.2.36.1.2001.1005.12", BaseCDAModel.CreateCodableText("AUSNATA", Nehta.VendorLibrary.CDA.Generator.Enums.CodingSystem.HL7IdentifierType, "National Association of Testing Authorities (NATA) Site Number")));
            cdaContext.LegalAuthenticator.Participant.Organisation.Identifiers.Add(BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, Report.PerformingLaboratory.Hpio.Replace(" ", "")));

            pathologyResultReport.CDAContext = cdaContext;

            #endregion

            #region Setup and Populate the SCS Context model

            pathologyResultReport.SCSContext = PathologyResultReport.CreateSCSContext();

            // Author Health Care Provider
            pathologyResultReport.SCSContext.Author = BaseCDAModel.CreateAuthorHealthcareProvider();

            // Document Author > Participant
            pathologyResultReport.SCSContext.Author.Participant = BaseCDAModel.CreateParticipantForAuthorHealthcareProvider();

            pathologyResultReport.SCSContext.Author.AuthorParticipationPeriodOrDateTimeAuthored = BaseCDAModel.CreateParticipationPeriod(new ISO8601DateTime(OldestReportReleaseDate.DateTime, ISO8601DateTime.Precision.Second, OldestReportReleaseDate.Offset));

            // Document Author > Role = AddressPurpose.Residential
            pathologyResultReport.SCSContext.Author.Role = BaseCDAModel.CreateRole(Occupation.Pathologist, Nehta.VendorLibrary.CDA.Generator.Enums.CodingSystem.ANZSCORevision1);

            // Document Author > Participant > Person or Organisation or Device > Person > Person Name (Note: 1..* in ACI)
            pathologyResultReport.SCSContext.Author.Participant.Person             = BaseCDAModel.CreatePersonHealthcareProvider();
            pathologyResultReport.SCSContext.Author.Participant.Person.PersonNames = new List <IPersonName> {
                ReportingPathologistName
            };

            //person.PersonNames = new List<IPersonName> { ReportingPathologistName };
            //if (!mandatoryOnly)
            //{
            //  // Not providing a family name will insert a nullflavor of 'NI'
            //  name.FamilyName = "Doctor family name";
            //}

            pathologyResultReport.SCSContext.Author.Participant.Person.Identifiers              = cdaContext.LegalAuthenticator.Participant.Person.Identifiers;
            pathologyResultReport.SCSContext.Author.Participant.Person.Organisation             = BaseCDAModel.CreateEmploymentOrganisation();
            pathologyResultReport.SCSContext.Author.Participant.Person.Organisation.Name        = Report.PerformingLaboratory.FacilityName;
            pathologyResultReport.SCSContext.Author.Participant.Person.Organisation.Identifiers = new List <Identifier>()
            {
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, Report.PerformingLaboratory.Hpio.Replace(" ", ""))
            };
            pathologyResultReport.SCSContext.Author.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail>()
            {
                PerformingPathologyLabComms
            };


            // Document Author > Participant > Addresses
            pathologyResultReport.SCSContext.Author.Participant.Addresses = new List <IAddress>
            {
                GetCdaAddress(Report.PerformingLaboratory.Address)
            };

            // Document Author > Participant > Address (Note: optional in ACI)
            pathologyResultReport.SCSContext.Author.Participant.Person.Organisation.Addresses = new List <IAddress>
            {
                GetCdaAddress(Report.PerformingLaboratory.Address)
            };

            pathologyResultReport.SCSContext.Author.Participant.Person.Organisation.Name      = Report.PerformingLaboratory.FacilityName;
            pathologyResultReport.SCSContext.Author.Participant.Person.Organisation.NameUsage = OrganisationNameUsage.BusinessName;

            //pathologyResultReport.SCSContext.Author.Participant.Person.Organisation.Department = "Some department service provider";
            //pathologyResultReport.SCSContext.Author.Participant.Person.Organisation.EmploymentType = BaseCDAModel.CreateCodableText(null, null, null, "Casual", null);
            pathologyResultReport.SCSContext.Author.Participant.Person.Organisation.Occupation = BaseCDAModel.CreateRole(Occupation.Pathologist, Nehta.VendorLibrary.CDA.Generator.Enums.CodingSystem.ANZSCORevision1);
            //pathologyResultReport.SCSContext.Author.Participant.Person.Organisation.PositionInOrganisation = BaseCDAModel.CreateCodableText(null, null, null, "Manager", null);

            pathologyResultReport.SCSContext.Author.Participant.Person.Organisation.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail>
            {
                PerformingPathologyLabComms
            };


            // The Reporting Pathologist
            pathologyResultReport.SCSContext.ReportingPathologist = PathologyResultReport.CreateReportingPathologist();

            // Document reportingPathologist > Participant
            pathologyResultReport.SCSContext.ReportingPathologist.Participant = PathologyResultReport.CreateParticipantForReportingPathologist();

            pathologyResultReport.SCSContext.ReportingPathologist.Participant.Person             = BaseCDAModel.CreatePersonWithOrganisation();
            pathologyResultReport.SCSContext.ReportingPathologist.Participant.Person.PersonNames = new List <IPersonName> {
                ReportingPathologistName
            };

            // Participation Period
            pathologyResultReport.SCSContext.ReportingPathologist.ParticipationEndTime = new ISO8601DateTime(OldestReportReleaseDate.DateTime, ISO8601DateTime.Precision.Second, OldestReportReleaseDate.Offset);

            // Document reportingPathologist > Role
            pathologyResultReport.SCSContext.ReportingPathologist.Role = PathologyResultReport.CreateRole(Occupation.Pathologist);

            // Document reportingPathologist > Participant > Address
            pathologyResultReport.SCSContext.ReportingPathologist.Participant.Addresses = new List <IAddress>()
            {
                GetCdaAddress(Report.PerformingLaboratory.Address)
            };

            pathologyResultReport.SCSContext.ReportingPathologist.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                PerformingPathologyLabComms
            };
            pathologyResultReport.SCSContext.ReportingPathologist.Participant.Person = pathologyResultReport.SCSContext.Author.Participant.Person;


            // Order Details
            pathologyResultReport.SCSContext.OrderDetails = DiagnosticImagingReport.CreateOrderDetails();

            // Requester Order Identifier
            //pathologyResultReport.SCSContext.OrderDetails.RequesterOrderIdentifier = BaseCDAModel.CreateIdentifier("1.2.36.1.2001.1005.52.8003620833333789", "10523479");

            // Requester
            pathologyResultReport.SCSContext.OrderDetails.Requester = BaseCDAModel.CreateRequester();

            pathologyResultReport.SCSContext.OrderDetails.Requester.ParticipationEndTime = new ISO8601DateTime(Report.Request.RequestedDate.DateTime, ISO8601DateTime.Precision.Day, Report.Request.RequestedDate.Offset);
            // Document Requester> Role
            pathologyResultReport.SCSContext.OrderDetails.Requester.Role = BaseCDAModel.CreateRole(Occupation.GeneralMedicalPractitioner, Nehta.VendorLibrary.CDA.Generator.Enums.CodingSystem.ANZSCORevision1);

            pathologyResultReport.SCSContext.OrderDetails.Requester.Participant        = BaseCDAModel.CreateParticipantForRequester();
            pathologyResultReport.SCSContext.OrderDetails.Requester.Participant.Person = BaseCDAModel.CreatePersonWithOrganisation();
            // Participation Period


            var RequestingDoctorName = BaseCDAModel.CreatePersonName();
            RequestingDoctorName.FamilyName = Report.Request.RequestingProvider.Name.Family;
            if (Report.Request.RequestingProvider.Name.Given is object)
            {
                RequestingDoctorName.GivenNames = new List <string>()
                {
                    Report.Request.RequestingProvider.Name.Given
                };
            }
            pathologyResultReport.SCSContext.OrderDetails.Requester.Participant.Person.PersonNames = new List <IPersonName>()
            {
                RequestingDoctorName
            };


            pathologyResultReport.SCSContext.OrderDetails.Requester.Participant.Person.Identifiers = new List <Identifier>();

            ///Get Requester HPI-I
            var RequesterHpii = Report.Request.RequestingProvider.IdentifierList.SingleOrDefault(x => x.Type == PathologyReportModel.Model.IdentifierType.HPII);
            if (RequesterHpii is object)
            {
                pathologyResultReport.SCSContext.OrderDetails.Requester.Participant.Person.Identifiers.Add(BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, RequesterHpii.Value.Replace(" ", "")));
            }

            ///Get Requester Medicare Provider Number
            var RequesterMedicareProvidernumber = Report.Request.RequestingProvider.IdentifierList.SingleOrDefault(x => x.Type == PathologyReportModel.Model.IdentifierType.MedicareProviderNumber);
            if (RequesterMedicareProvidernumber is object)
            {
                var MedicareProvidernumberIdentifier = BaseCDAModel.CreateIdentifier("Medicare", Nehta.VendorLibrary.CDA.Generator.Enums.HealthcareIdentifierGeographicArea.NationalIdentifier, RequesterMedicareProvidernumber.Value, "1.2.36.174030967.0.2", BaseCDAModel.CreateCodableText("AUSHICPR", Nehta.VendorLibrary.CDA.Generator.Enums.CodingSystem.HL7IdentifierType, "Medicare Provider Number"));
                pathologyResultReport.SCSContext.OrderDetails.Requester.Participant.Person.Identifiers.Add(MedicareProvidernumberIdentifier);
            }

            // Subject Of Care
            pathologyResultReport.SCSContext.SubjectOfCare                    = BaseCDAModel.CreateSubjectOfCare();
            pathologyResultReport.SCSContext.SubjectOfCare.Participant        = BaseCDAModel.CreateParticipantForSubjectOfCare();
            pathologyResultReport.SCSContext.SubjectOfCare.Participant.Person = BaseCDAModel.CreatePersonForSubjectOfCare();

            pathologyResultReport.SCSContext.SubjectOfCare.Participant.Person.PersonNames = new List <IPersonName>();
            pathologyResultReport.SCSContext.SubjectOfCare.Participant.Person.PersonNames.Add(GetCdaPatientName(Report.Patient.Name));

            pathologyResultReport.SCSContext.SubjectOfCare.Participant.Person.Gender = GetCdaGender(Report.Patient.Gender);

            pathologyResultReport.SCSContext.SubjectOfCare.Participant.Person.DateOfBirth = new ISO8601DateTime(Report.Patient.DateOfBirth, ISO8601DateTime.Precision.Day);

            pathologyResultReport.SCSContext.SubjectOfCare.Participant.Person.IndigenousStatus = IndigenousStatus.NeitherAboriginalNorTorresStraitIslanderOrigin;

            //Phone numbers
            if (Report.Patient.HomePhoneNumber is object)
            {
                if (pathologyResultReport.SCSContext.SubjectOfCare.Participant.ElectronicCommunicationDetails is null)
                {
                    pathologyResultReport.SCSContext.SubjectOfCare.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail>();
                }

                //Work out if it is a Mobile number
                ElectronicCommunicationMedium ElectronicCommunicationMedium = ElectronicCommunicationMedium.Telephone;
                if (Report.Patient.HomePhoneNumber.Replace(" ", "").StartsWith("04", StringComparison.CurrentCultureIgnoreCase) || Report.Patient.HomePhoneNumber.Replace(" ", "").StartsWith("+614", StringComparison.CurrentCultureIgnoreCase))
                {
                    ElectronicCommunicationMedium = ElectronicCommunicationMedium.Mobile;
                }
                pathologyResultReport.SCSContext.SubjectOfCare.Participant.ElectronicCommunicationDetails.Add(
                    BaseCDAModel.CreateElectronicCommunicationDetail(
                        Report.Patient.HomePhoneNumber,
                        ElectronicCommunicationMedium,
                        ElectronicCommunicationUsage.Home)
                    );
            }

            //Address
            pathologyResultReport.SCSContext.SubjectOfCare.Participant.Addresses = new List <IAddress>();
            foreach (var Address in Report.Patient.AddressList)
            {
                pathologyResultReport.SCSContext.SubjectOfCare.Participant.Addresses.Add(GetCdaAddress(Address));
            }

            pathologyResultReport.SCSContext.SubjectOfCare.Participant.Person.Identifiers = new List <Identifier>();

            var IhiNumber = Report.Patient.IdentifierList.SingleOrDefault(x => x.Type == PathologyReportModel.Model.IdentifierType.IHI);
            if (IhiNumber is object)
            {
                pathologyResultReport.SCSContext.SubjectOfCare.Participant.Person.Identifiers.Add(BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.IHI, IhiNumber.Value.Replace(" ", "")));
            }

            var MedicareNumber = Report.Patient.IdentifierList.SingleOrDefault(x => x.Type == PathologyReportModel.Model.IdentifierType.MedicareNumber);
            if (MedicareNumber is object)
            {
                //Medicare Number goes in Entitlements as it is not a true identifier legally
                var MedicareEntitlement = BaseCDAModel.CreateEntitlement();
                MedicareEntitlement.Id   = BaseCDAModel.CreateMedicareNumber(MedicareNumberType.MedicareCardNumber, MedicareNumber.Value.Replace(" ", ""));
                MedicareEntitlement.Type = EntitlementType.MedicareBenefits;
                //MedicareEntitlement.ValidityDuration = BaseCDAModel.CreateInterval(new ISO8601DateTime(DateTime.Now), new ISO8601DateTime(DateTime.Now));
                pathologyResultReport.SCSContext.SubjectOfCare.Participant.Entitlements = new List <Entitlement> {
                    MedicareEntitlement
                };
            }

            //var MrnNumber = this.Input.Message.Segment("PID").Element(3).RepeatList.SingleOrDefault(x => x.Component(5).AsString.Equals("MR", StringComparison.CurrentCultureIgnoreCase));
            //if (MrnNumber is object)
            //{
            //  pathologyResultReport.SCSContext.SubjectOfCare.Participant.Person.Identifiers.Add(BaseCDAModel.CreateMedicalRecordNumber(MrnNumber.Component(1).AsString, "We need a root OID for the MRN  Facility", MrnNumber.Component(4).AsString));
            //}
            #endregion

            #region Setup and populate the SCS Content model

            // Setup and populate the SCS Content model
            pathologyResultReport.SCSContent = PathologyResultReport.CreateSCSContent();

            // Pathology Test Result
            string ReportLinkName = string.Empty;
            pathologyResultReport.SCSContent.PathologyTestResult = new List <Nehta.VendorLibrary.CDA.SCSModel.Pathology.PathologyTestResult>();
            foreach (var Panel in Report.ReportList)
            {
                var TestResult = PathologyResultReport.CreatePathologyTestResult();
                pathologyResultReport.SCSContent.PathologyTestResult.Add(TestResult);

                // Please note optional field - Note: This field is only displayed in the Narrative
                TestResult.ReportingPathologistForTestResult = Report.ReportList.First().ReportingPathologist.Name.Title ?? "";
                TestResult.ReportingPathologistForTestResult = $"{TestResult.ReportingPathologistForTestResult} {Report.ReportList.First().ReportingPathologist.Name.Family.ToUpper()}";
                TestResult.ReportingPathologistForTestResult = $"{TestResult.ReportingPathologistForTestResult}, {Report.ReportList.First().ReportingPathologist.Name.Given ?? ""}";


                if (!string.IsNullOrWhiteSpace(Panel.ReportType.Local.Oid))
                {
                    TestResult.TestResultName                = BaseCDAModel.CreateCodableText();
                    TestResult.TestResultName.Code           = Panel.ReportType.Local.Term;
                    TestResult.TestResultName.DisplayName    = Panel.ReportType.Local.Description;
                    TestResult.TestResultName.CodeSystemCode = Panel.ReportType.Local.Oid;
                    TestResult.TestResultName.OriginalText   = Panel.ReportType.Local.Description;
                }
                else
                {
                    TestResult.TestResultName = BaseCDAModel.CreateCodableText();
                    TestResult.TestResultName.OriginalText = Panel.ReportType.Local.Description;
                }

                if (Panel.ReportType.Snomed is object)
                {
                    TestResult.TestResultName.Translations = new List <ICodableTranslation>();
                    TestResult.TestResultName.Translations.Add(BaseCDAModel.CreateCodableTranslation(Panel.ReportType.Snomed.Term, Nehta.VendorLibrary.CDA.Generator.Enums.CodingSystem.SNOMED, Panel.ReportType.Snomed.Description));
                }

                // Department Code
                TestResult.PathologyDiscipline = GetCdaDiagnosticService(Panel.Department);

                // ResultStatus
                TestResult.OverallTestResultStatus = GetCdaResultStatus(Panel.ReportStatus);

                // Test Specimen Detail
                TestResult.TestSpecimenDetail = PathologyResultReport.CreateTestSpecimenDetail();
                TestResult.TestSpecimenDetail.CollectionDateTime = new ISO8601DateTime(Panel.CollectionDateTime.DateTime, ISO8601DateTime.Precision.Minute, Panel.CollectionDateTime.Offset);
                TestResult.ObservationDateTime = TestResult.TestSpecimenDetail.CollectionDateTime;
            }

            // Related Document
            pathologyResultReport.SCSContent.RelatedDocument = PathologyResultReport.CreateRelatedDocument();
            System.IO.FileInfo PdfFileInfo = new System.IO.FileInfo(System.IO.Path.Combine(PdfDirectory, Report.PdfFileName));

            if (!PdfFileInfo.Exists)
            {
                throw new FieldAccessException($"Unable to locate PDF attachment file at path: {PdfFileInfo.FullName}");
            }

            if (!PdfFileInfo.Extension.EndsWith(".pdf", StringComparison.CurrentCultureIgnoreCase))
            {
                throw new FieldAccessException($"The report attachment file must be in a .pdf format.");
            }

            // Pathology PDF
            var AttachmentPdf = BaseCDAModel.CreateExternalData();
            AttachmentPdf.ExternalDataMediaType = Nehta.VendorLibrary.CDA.Generator.Enums.MediaType.PDF;

            //We have to move the PDF attachment file to a new place and then rename it to 'attachment.pdf' and then after
            //generating the CDA document we will delete at copy of the PDF.
            System.IO.FileInfo TempAttachmentFilePath = new System.IO.FileInfo(System.IO.Path.Combine(TempWorkingDirectoryPath.FullName, "attachment.pdf"));
            if (TempAttachmentFilePath.Exists)
            {
                TempAttachmentFilePath.Delete();
            }
            PdfFileInfo.CopyTo(TempAttachmentFilePath.FullName);
            AttachmentPdf.Path = TempAttachmentFilePath.FullName;
            pathologyResultReport.SCSContent.RelatedDocument.ExaminationResultRepresentation = AttachmentPdf;

            // Document Provenance
            pathologyResultReport.SCSContent.RelatedDocument.DocumentDetails = BaseCDAModel.CreateDocumentDetails();

            // Report Identifier
            pathologyResultReport.SCSContent.RelatedDocument.DocumentDetails.ReportIdentifier = BaseCDAModel.CreateIdentifier($"1.2.36.1.2001.1005.54.{Report.PerformingLaboratory.Hpio.Replace(" ", "")}", Report.ReportList.First().ReportId);

            // Report Date
            pathologyResultReport.SCSContent.RelatedDocument.DocumentDetails.ReportDate = new ISO8601DateTime(Report.GetOldestReportReleaseDateTime().DateTime, ISO8601DateTime.Precision.Second, Report.GetOldestReportReleaseDateTime().Offset);

            // Result Status
            pathologyResultReport.SCSContent.RelatedDocument.DocumentDetails.ReportStatus = GetCdaResultStatus(Report.GetRolledUpReportStatus());

            // Report Name
            if (Report.ReportList.Count == 1)
            {
                pathologyResultReport.SCSContent.RelatedDocument.DocumentDetails.ReportDescription = Report.ReportList[0].ReportType.Local.Description;
            }
            else
            {
                pathologyResultReport.SCSContent.RelatedDocument.DocumentDetails.ReportDescription = "Pathology Report";
            }


            #endregion


            XmlDocument xmlDoc;
            try
            {
                Nehta.VendorLibrary.CDA.Generator.CDAGenerator.NarrativeGenerator = new Nehta.VendorLibrary.CDA.Generator.CDANarrativeGenerator();

                //Pass the Event Summary model into the GeneratePathologyResultReport method
                xmlDoc = Nehta.VendorLibrary.CDA.Generator.CDAGenerator.GeneratePathologyResultReport(pathologyResultReport);

                System.IO.DirectoryInfo CdaOutputDirectoryInfo = new System.IO.DirectoryInfo(CdaOutputDirectory);
                System.IO.FileInfo      CdaFileInfo            = new System.IO.FileInfo(System.IO.Path.Combine(CdaOutputDirectoryInfo.FullName, Report.PdfFileName.Replace(".pdf", ".xml")));
                if (System.IO.File.Exists(CdaFileInfo.FullName))
                {
                    System.IO.File.Delete(CdaFileInfo.FullName);
                }

                using (var writer = XmlWriter.Create(CdaFileInfo.FullName, new XmlWriterSettings {
                    Indent = true
                }))
                {
                    xmlDoc.Save(writer);
                }
            }
            catch (Nehta.VendorLibrary.Common.ValidationException ex)
            {
                //Catch any validation exceptions
                var validationMessages = ex.GetMessagesString();
                throw new ApplicationException($"Error encountered in generating CDA document: {validationMessages}");
            }
            finally
            {
                TempAttachmentFilePath.Delete();
            }
        }
        /// <summary>
        /// Creates and Hydrates a IParticipationReceivingLaboratory
        ///
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>IParticipationReceivingLaboratory</returns>
        private static IParticipationReportingPathologist CreateReportingPathologist(Boolean mandatoryOnly)
        {
            // Receiving Laboratory
            var reportingPathologist = PathologyResultReport.CreateReportingPathologist();

            // Document reportingPathologist > Participant
            reportingPathologist.Participant = PathologyResultReport.CreateParticipantForReportingPathologist();

            var person = BaseCDAModel.CreatePersonWithOrganisation();

            // Participation Period
            reportingPathologist.ParticipationEndTime = new ISO8601DateTime(DateTime.Now);

            // Document reportingPathologist > Role
            reportingPathologist.Role = PathologyResultReport.CreateRole(Occupation.Pathologist);

            // Document reportingPathologist > Participant > Person or Organisation or Device > Person > Person Name
            var name = BaseCDAModel.CreatePersonName();

            name.FamilyName = "Doctor";

            person.PersonNames = new List <IPersonName> {
                name
            };

            // Document reportingPathologist > Participant > Address
            var address1 = BaseCDAModel.CreateAddress();

            address1.AddressPurpose    = AddressPurpose.Business;
            address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();

            var address2 = BaseCDAModel.CreateAddress();

            address2.AddressPurpose    = AddressPurpose.Business;
            address2.AustralianAddress = BaseCDAModel.CreateAustralianAddress();

            var addressList = new List <IAddress> {
                address1, address2
            };

            reportingPathologist.Participant.Addresses = addressList;

            // Document reportingPathologist > Participant > Electronic Communication Detail
            var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail(
                "0345754566",
                ElectronicCommunicationMedium.Telephone,
                ElectronicCommunicationUsage.WorkPlace);
            var coms2 = BaseCDAModel.CreateElectronicCommunicationDetail(
                "*****@*****.**",
                ElectronicCommunicationMedium.Email,
                ElectronicCommunicationUsage.WorkPlace);

            reportingPathologist.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                coms1, coms2
            };

            // Participant > Entitlement
            var entitlement = BaseCDAModel.CreateEntitlement();
            var code        = BaseCDAModel.CreateCodableText("11", CodingSystem.NCTISEntitlementTypeValues, "Medicare Pharmacy Approval Number", null, null);

            entitlement.Id = BaseCDAModel.CreateIdentifier("Pharmacy",
                                                           null,
                                                           "1234567892",
                                                           "1.2.36.174030967.1.3.2.1",
                                                           code);

            entitlement.Type             = EntitlementType.MedicarePharmacyApprovalNumber;
            entitlement.ValidityDuration = BaseCDAModel.CreateInterval("1", TimeUnitOfMeasure.Year);

            reportingPathologist.Participant.Entitlements = new List <Entitlement> {
                entitlement, entitlement
            };

            person.Organisation                        = BaseCDAModel.CreateEmploymentOrganisation();
            person.Organisation.Name                   = "Hay Bill Hospital";
            person.Organisation.NameUsage              = OrganisationNameUsage.Other;
            person.Organisation.Department             = "Some department service provider";
            person.Organisation.EmploymentType         = BaseCDAModel.CreateCodableText(null, null, null, "Casual", null);
            person.Organisation.Occupation             = PathologyResultReport.CreateRole(Occupation.GeneralMedicalPractitioner);
            person.Organisation.PositionInOrganisation = BaseCDAModel.CreateCodableText(null, null, null, "Manager", null);

            person.Organisation.Identifiers = new List <Identifier> {
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, "8003620833333789"),
                BaseCDAModel.CreateIdentifier("NATA", null, "3715", "1.2.36.1.2001.1005.12", BaseCDAModel.CreateCodableText("XX", CodingSystem.HL7IdentifierType, "Organization identifier"))
            };

            // Document reportingPathologist > Participant > Entity Identifier
            person.Identifiers = new List <Identifier> {
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, "8003615833334118"),
            };

            if (!mandatoryOnly)
            {
                name.GivenNames = new List <string> {
                    "Good"
                };
                name.Titles = new List <string> {
                    "Doctor"
                };
                name.NameUsages = new List <NameUsage> {
                    NameUsage.Legal
                };

                address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "1 Clinician Street"
                };
                address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address1.AustralianAddress.State           = AustralianState.QLD;
                address1.AustralianAddress.PostCode        = "5555";
                address1.AustralianAddress.DeliveryPointId = 32568931;

                address2.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "2 Clinician Street"
                };
                address2.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address2.AustralianAddress.State           = AustralianState.QLD;
                address2.AustralianAddress.PostCode        = "5555";
                address2.AustralianAddress.DeliveryPointId = 32568931;

                // Qualifications
                reportingPathologist.Participant.Qualifications = "FRACGP";
            }

            reportingPathologist.Participant.Person = person;

            return(reportingPathologist);
        }
        /// <summary>
        /// This sample populates both the mandatory and optional Sections / Entries depending on the
        /// mandatorySectionsOnly Boolean
        /// </summary>
        internal static PathologyResultReport PopulatedPathologyResultReport(Boolean mandatorySectionsOnly)
        {
            var pathologyResultReport = PathologyResultReport.CreatePathologyResultReport();

            // Include Logo
            pathologyResultReport.IncludeLogo = true;
            pathologyResultReport.LogoPath    = OutputFolderPath;

            // Set Creation Time
            pathologyResultReport.DocumentCreationTime = new ISO8601DateTime(DateTime.Now);

            #region Setup and populate the CDA context model

            // Setup and populate the CDA context model
            var cdaContext = PathologyResultReport.CreateCDAContext();
            // Document Id
            cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid(), null);
            // Set Id
            cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid(), null);
            // CDA Context Version
            cdaContext.Version = "1";
            // Custodian
            cdaContext.Custodian = BaseCDAModel.CreateCustodian();
            GenericObjectReuseSample.HydrateCustodian(cdaContext.Custodian, "Pathology Queensland", mandatorySectionsOnly);
            // Legal Authenticator
            cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator();
            GenericObjectReuseSample.HydrateAuthenticator(cdaContext.LegalAuthenticator, mandatorySectionsOnly);

            pathologyResultReport.CDAContext = cdaContext;

            #endregion

            // Setup and Populate the SCS Context model
            #region Setup and Populate the SCS Context model

            pathologyResultReport.SCSContext = PathologyResultReport.CreateSCSContext();

            // Author Health Care Provider
            pathologyResultReport.SCSContext.Author = BaseCDAModel.CreateAuthorHealthcareProvider();
            GenericObjectReuseSample.HydrateAuthorHealthcareProvider(pathologyResultReport.SCSContext.Author, "Pathology Queensland", mandatorySectionsOnly);

            // The Reporting Pathologist
            pathologyResultReport.SCSContext.ReportingPathologist = CreateReportingPathologist(mandatorySectionsOnly);

            // Order Details
            pathologyResultReport.SCSContext.OrderDetails = CreateOrderDetails(mandatorySectionsOnly);

            // Subject Of Care
            pathologyResultReport.SCSContext.SubjectOfCare = BaseCDAModel.CreateSubjectOfCare();
            GenericObjectReuseSample.HydrateSubjectofCare(pathologyResultReport.SCSContext.SubjectOfCare, mandatorySectionsOnly);

            #endregion

            #region Setup and populate the SCS Content model
            // Setup and populate the SCS Content model
            pathologyResultReport.SCSContent = PathologyResultReport.CreateSCSContent();

            // Pathology Test Result
            pathologyResultReport.SCSContent.PathologyTestResult = new List <PathologyTestResult>
            {
                CreatePathologyTestResult(mandatorySectionsOnly ? null : "DR Arreza Araceli"),
                CreatePathologyTestResult(mandatorySectionsOnly ?  null : "DR Arshi Lakdawala")
            };

            // Related Document
            pathologyResultReport.SCSContent.RelatedDocument = CreateRelatedDocument(mandatorySectionsOnly);

            #endregion

            return(pathologyResultReport);
        }
        /// <summary>
        /// This sample populates both the mandatory and optional Sections / Entries depending on the
        /// mandatorySectionsOnly Boolean
        /// </summary>
        internal static DiagnosticImagingReport PopulatedDiagnosticImagingReport(Boolean mandatorySectionsOnly)
        {
            var diagnosticImagingReport = DiagnosticImagingReport.CreateDiagnosticImagingReport();

            // Include Logo
            diagnosticImagingReport.IncludeLogo = true;
            diagnosticImagingReport.LogoPath    = OutputFolderPath;

            // Set Creation Time
            diagnosticImagingReport.DocumentCreationTime = new ISO8601DateTime(DateTime.Now);

            #region Setup and populate the CDA context model

            // Setup and populate the CDA context model
            var cdaContext = DiagnosticImagingReport.CreateCDAContext();
            // Document Id
            cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid());
            // Set Id
            cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid());
            // CDA Context Version
            cdaContext.Version = "1";

            // Custodian
            cdaContext.Custodian = BaseCDAModel.CreateCustodian();
            GenericObjectReuseSample.HydrateCustodian(cdaContext.Custodian, "Queensland Diagnostic Services", mandatorySectionsOnly);

            // Legal Authenticator
            cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator();
            GenericObjectReuseSample.HydrateAuthenticator(cdaContext.LegalAuthenticator, mandatorySectionsOnly);

            diagnosticImagingReport.CDAContext = cdaContext;

            #endregion

            #region Setup and Populate the SCS Context model
            // Setup and Populate the SCS Context model

            diagnosticImagingReport.SCSContext = DiagnosticImagingReport.CreateSCSContext();

            // Reporting Radiologist
            diagnosticImagingReport.SCSContext.ReportingRadiologist = CreateReportingRadiologist(mandatorySectionsOnly);

            // Order Details
            diagnosticImagingReport.SCSContext.OrderDetails = CreateOrderDetails(mandatorySectionsOnly);

            // Author Health Care Provider
            diagnosticImagingReport.SCSContext.Author = BaseCDAModel.CreateAuthorHealthcareProvider();
            GenericObjectReuseSample.HydrateAuthorHealthcareProvider(diagnosticImagingReport.SCSContext.Author, "Queensland Diagnostic Services", mandatorySectionsOnly);

            // Subject Of Care
            diagnosticImagingReport.SCSContext.SubjectOfCare = BaseCDAModel.CreateSubjectOfCare();
            GenericObjectReuseSample.HydrateSubjectofCare(diagnosticImagingReport.SCSContext.SubjectOfCare, mandatorySectionsOnly);

            #endregion

            #region Setup and populate the SCS Content model

            // Setup and populate the SCS Content model
            diagnosticImagingReport.SCSContent = DiagnosticImagingReport.CreateSCSContent();

            // Imaging Examination Results
            diagnosticImagingReport.SCSContent.ImagingExaminationResults = new List <IDiagnosticImagingExaminationResult>
            {
                CreateDiagnosticImagingResults(mandatorySectionsOnly, true),
                CreateDiagnosticImagingResults(mandatorySectionsOnly, false)
            };

            // Related Information
            diagnosticImagingReport.SCSContent.RelatedDocument = CreateRelatedDocument(mandatorySectionsOnly);

            #endregion

            return(diagnosticImagingReport);
        }
        /// <summary>
        /// Creates and Hydrates an SubjectofCare
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Hydrated SubjectofCare</returns>
        public static void HydrateSubjectofCare(IParticipationSubjectOfCare subjectOfCare, bool mandatoryOnly)
        {
            var participant = BaseCDAModel.CreateParticipantForSubjectOfCare();

            // Subject of Care > Participant > Person or Organisation or Device > Person
            var person = BaseCDAModel.CreatePersonForSubjectOfCare();

            participant.UniqueIdentifier = Guid.NewGuid();

            // Subject of Care > Participant > Person or Organisation or Device > Person > Person Name
            var name1 = BaseCDAModel.CreatePersonName();

            name1.FamilyName = "Grant";
            name1.GivenNames = new List <string> {
                "Sally", "Wally"
            };
            name1.Titles = new List <string> {
                "Miss"
            };
            name1.NameUsages = new List <NameUsage> {
                NameUsage.Legal
            };

            person.PersonNames = new List <IPersonName> {
                name1
            };

            // Subject of Care > Participant > Person or Organisation or Device > Person > Demographic Data > Sex
            person.Gender = Gender.Female;

            // Subject of Care > Participant > Person or Organisation or Device > Person > Demographic Data > Date of Birth Detail >
            // Date of Birth
            person.DateOfBirth = new ISO8601DateTime(DateTime.Now.AddYears(-57));

            // Subject of Care > Participant > Entity Identifier
            person.Identifiers = new List <Identifier>
            {
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.IHI, "8003604444567894"),
                BaseCDAModel.CreateMedicalRecordNumber("123456", "1.2.3.4", "Croydon GP Centre"),
                // NOTE : ONLY 11 digit Individual Medicare Card Number's is permitted in the Entity Identifier
                BaseCDAModel.CreateMedicareNumber(MedicareNumberType.IndividualMedicareCardNumber, "59501704511"),
                BaseCDAModel.CreateIdentifier
                (
                    "SampleAuthority",
                    HealthcareIdentifierGeographicArea.StateOrTerritoryIdentifier,
                    "457456",
                    "1.22.333.444.55555",
                    BaseCDAModel.CreateCodableText("1.1.1.1.1.1", CodingSystem.NCTIS, "DisplayName", "Original Text", null)
                )
            };

            if (!mandatoryOnly)
            {
                // Subject of Care > Participant > Address
                var address1 = BaseCDAModel.CreateAddress();

                address1.AddressPurpose    = AddressPurpose.Residential;
                address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();

                participant.Addresses = new List <IAddress> {
                    address1
                };

                // Subject of Care > Participant > Person or Organisation or Device > Person > Demographic Data > Indigenous Status
                person.IndigenousStatus = IndigenousStatus.NeitherAboriginalNorTorresStraitIslanderOrigin;

                // Subject of Care > Participant > Electronic Communication Detail
                var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "0345754566",
                    ElectronicCommunicationMedium.Telephone,
                    ElectronicCommunicationUsage.WorkPlace);
                var coms2 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "*****@*****.**",
                    ElectronicCommunicationMedium.Email,
                    ElectronicCommunicationUsage.WorkPlace);

                participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                    coms1, coms2
                };

                address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "1 Clinician Street"
                };
                address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address1.AustralianAddress.State           = AustralianState.NSW;
                address1.AustralianAddress.PostCode        = "5555";
                address1.AustralianAddress.DeliveryPointId = 32568931;

                person.DateOfBirthCalculatedFromAge = true;
                person.DateOfBirthAccuracyIndicator = new DateAccuracyIndicator(true, true, true);
                person.Age = 54;
                person.AgeUnitOfMeasure = AgeUnitOfMeasure.Year;

                person.AgeAccuracyIndicator = true;
                person.BirthPlurality       = 3;
                person.BirthOrder           = 2;

                // Subject of Care > Participant > Entitlement
                var entitlement1 = BaseCDAModel.CreateEntitlement();
                entitlement1.Id               = BaseCDAModel.CreateMedicareNumber(MedicareNumberType.MedicareCardNumber, "1234567881");
                entitlement1.Type             = EntitlementType.MedicareBenefits;
                entitlement1.ValidityDuration = BaseCDAModel.CreateInterval("1", TimeUnitOfMeasure.Year);

                var entitlement2 = BaseCDAModel.CreateEntitlement();
                entitlement2.Id               = BaseCDAModel.CreateMedicareNumber(MedicareNumberType.MedicareCardNumber, "2244567891");
                entitlement2.Type             = EntitlementType.MedicareBenefits;
                entitlement2.ValidityDuration = BaseCDAModel.CreateInterval("1", TimeUnitOfMeasure.Year);

                participant.Entitlements = new List <Entitlement> {
                    entitlement1, entitlement2
                };
            }

            participant.Person        = person;
            subjectOfCare.Participant = participant;
        }
Exemple #19
0
        public static void PopulateAuthor(IParticipationConsumerAuthor author, bool mandatoryOnly)
        {
            var person = BaseCDAModel.CreatePerson();

            // Document Author > Participation Period
            author.AuthorParticipationPeriodOrDateTimeAuthored = new ISO8601DateTime(DateTime.Now);

            // Document Author > Role
            author.Role = BaseCDAModel.CreateRole(Occupation.MedicalOncologist);

            // Document Author > Participant
            author.Participant = ConsumerEnteredHealthSummary.CreateParticipantForAuthor();

            // Document Author > Participant > Entity Identifier

            person.Identifiers = new List <Identifier>();

            if (!mandatoryOnly)
            {
                // IHI
                person.Identifiers.Add(BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.IHI, "8003604444567894"));
            }
            else
            {
                // Care Agency Employee Identifier
                person.Identifiers.Add(
                    BaseCDAModel.CreateIdentifier(
                        "Care Agency Employee Identifier",
                        HealthcareIdentifierGeographicArea.LocalClientIdentifier,
                        null,
                        "1.2.36.1.2001.1007.4.9123453453453458",
                        null));
            }

            // Document Author > Participant > Per-son or Organisation or Device > Person > Person Name
            var name1 = BaseCDAModel.CreatePersonName();

            name1.FamilyName = "Doctor";

            var name2 = BaseCDAModel.CreatePersonName();

            name2.FamilyName = "Wong";

            person.PersonNames = new List <IPersonName>()
            {
                name1, name2
            };

            if (!mandatoryOnly)
            {
                author.Participant.RelationshipToSubjectOfCare = BaseCDAModel.CreateRole(Occupation.MedicalOncologist);

                name1.GivenNames = new List <string> {
                    "Good"
                };
                name1.Titles = new List <string> {
                    "Doctor"
                };
                name1.NameUsages = new List <NameUsage> {
                    NameUsage.Legal
                };

                name2.GivenNames = new List <string> {
                    "Davey"
                };
                name2.Titles = new List <string> {
                    "Brother"
                };
                name2.NameUsages = new List <NameUsage> {
                    NameUsage.NewbornName
                };

                // Document Author > Participant > Address
                var address1 = BaseCDAModel.CreateAddress();
                address1.AddressPurpose    = AddressPurpose.Residential;
                address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();

                var address2 = BaseCDAModel.CreateAddress();
                address2.AddressPurpose    = AddressPurpose.TemporaryAccommodation;
                address2.AustralianAddress = BaseCDAModel.CreateAustralianAddress();

                var addressList = new List <IAddress> {
                    address1, address2
                };

                author.Participant.Addresses = addressList;

                address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "1 Clinician Street"
                };
                address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address1.AustralianAddress.State           = AustralianState.QLD;
                address1.AustralianAddress.PostCode        = "5555";
                address1.AustralianAddress.DeliveryPointId = 32568931;

                address2.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "2 Clinician Street"
                };
                address2.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address2.AustralianAddress.State           = AustralianState.QLD;
                address2.AustralianAddress.PostCode        = "5555";
                address2.AustralianAddress.DeliveryPointId = 32568931;

                // Document Author > Participant > Electronic Communication Detail
                var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "0345754566",
                    ElectronicCommunicationMedium.Telephone,
                    ElectronicCommunicationUsage.WorkPlace);

                var coms2 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "*****@*****.**",
                    ElectronicCommunicationMedium.Email,
                    ElectronicCommunicationUsage.WorkPlace);

                author.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                    coms1, coms2
                };
            }

            author.Participant.Person = person;
        }
        /// <summary>
        /// Creates and Hydrates the Participation Author Non Healthcare Provider
        ///
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Hydrated IParticipationAuthorNonHealthcareProvider object</returns>
        public static IParticipationAuthorPerson HydrateAuthorNonHealthcareProvider(IParticipationAuthorPerson author, bool mandatoryIdentifier, bool mandatoryOnly)
        {
            var person = BaseCDAModel.CreatePersonNonHealthcareProvider();

            // Document Author > Participant
            author.Participant = BaseCDAModel.CreateParticipantForAuthorPerson();

            // Author Role
            author.Role = BaseCDAModel.CreateRole(RoleCodeAndRoleClassCodes.Self);

            // Document Author > Participation Period
            author.AuthorParticipationPeriodOrDateTimeAuthored = BaseCDAModel.CreateParticipationPeriod(new ISO8601DateTime(DateTime.Now));

            // Document Author > Participant > Person or Organisation or Device > Person > Person Name
            var name1 = BaseCDAModel.CreatePersonName();

            name1.FamilyName = "Doctor";

            var name2 = BaseCDAModel.CreatePersonName();

            name2.FamilyName = "Wong";

            person.PersonNames = new List <IPersonName> {
                name1, name2
            };

            if (mandatoryIdentifier || !mandatoryOnly)
            {
                // Document Author > Participant > Entity Identifier
                person.Identifiers = new List <Identifier> {
                    BaseCDAModel.CreateIdentifier("AuthorNonHealthcareProvider", null, null, "1.2.3.4.5.66666", null),
                    BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, "8003615833334118"),
                };
            }

            if (!mandatoryOnly)
            {
                name1.GivenNames = new List <string> {
                    "Good"
                };
                name1.Titles = new List <string> {
                    "Doctor"
                };
                name1.NameUsages = new List <NameUsage> {
                    NameUsage.Legal
                };

                name2.GivenNames = new List <string> {
                    "Davey"
                };
                name2.Titles = new List <string> {
                    "Brother"
                };
                name2.NameUsages = new List <NameUsage> {
                    NameUsage.NewbornName
                };

                // Document Author > Participant > Address
                var address1 = BaseCDAModel.CreateAddress();
                address1.AddressPurpose    = AddressPurpose.Residential;
                address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();

                var address2 = BaseCDAModel.CreateAddress();
                address2.AddressPurpose    = AddressPurpose.TemporaryAccommodation;
                address2.AustralianAddress = BaseCDAModel.CreateAustralianAddress();

                var addressList = new List <IAddress> {
                    address1, address2
                };

                author.Participant.Addresses = addressList;

                address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "1 Clinician Street"
                };
                address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address1.AustralianAddress.State           = AustralianState.QLD;
                address1.AustralianAddress.PostCode        = "5555";
                address1.AustralianAddress.DeliveryPointId = 32568931;

                address2.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "2 Clinician Street"
                };
                address2.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address2.AustralianAddress.State           = AustralianState.QLD;
                address2.AustralianAddress.PostCode        = "5555";
                address2.AustralianAddress.DeliveryPointId = 32568931;

                // Document Author > Participant > Elec-tronic Communication Detail
                var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "0345754566",
                    ElectronicCommunicationMedium.Telephone,
                    ElectronicCommunicationUsage.WorkPlace);
                var coms2 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "*****@*****.**",
                    ElectronicCommunicationMedium.Email,
                    ElectronicCommunicationUsage.WorkPlace);

                author.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                    coms1, coms2
                };
            }

            author.Participant.Person = person;

            return(author);
        }
        /// <summary>
        /// Creates and Hydrates an Authenticator
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Hydrated authenticator</returns>
        public static void HydrateAuthenticator(IParticipationLegalAuthenticator authenticator, bool mandatoryOnly)
        {
            // LegalAuthenticator/assignedEntity
            authenticator.Participant = BaseCDAModel.CreateParticipantForLegalAuthenticator();

            // LegalAuthenticator/time/@value
            authenticator.Participant.DateTimeAuthenticated = new ISO8601DateTime(DateTime.Now, ISO8601DateTime.Precision.Minute);

            // LegalAuthenticator/assignedEntity/assignedPerson
            authenticator.Participant.Person = BaseCDAModel.CreatePerson();

            var localAuthorityCode = BaseCDAModel.CreateCodableText("EI", CodingSystem.HL7IdentifierType, null, null, null);

            // LegalAuthenticator/assignedEntity/<Entity Identifier>
            authenticator.Participant.Person.Identifiers = new List <Identifier>
            {
                BaseCDAModel.CreateIdentifier("LocalAuthority", null, "66666", "1.2.3.4.5", localAuthorityCode),
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, "8003615833334118")
            };

            //LegalAuthenticator/assignedEntity/assignedPerson/<Person Name>
            var name1 = BaseCDAModel.CreatePersonName();

            name1.GivenNames = new List <string> {
                "Good"
            };
            name1.FamilyName = "Doctor";
            name1.Titles     = new List <string> {
                "Doctor"
            };
            name1.NameUsages = new List <NameUsage> {
                NameUsage.Legal
            };

            authenticator.Participant.Person.PersonNames = new List <IPersonName> {
                name1
            };

            if (!mandatoryOnly)
            {
                // LegalAuthenticator/assignedEntity/code
                authenticator.Role = BaseCDAModel.CreateRole(Occupation.GeneralMedicalPractitioner);

                // LegalAuthenticator/assignedEntity/<Address>
                var address1 = BaseCDAModel.CreateAddress();
                address1.AddressPurpose    = AddressPurpose.Residential;
                address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();
                address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "1 Clinician Street"
                };
                address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address1.AustralianAddress.State           = AustralianState.QLD;
                address1.AustralianAddress.PostCode        = "5555";
                address1.AustralianAddress.DeliveryPointId = 32568931;

                var address2 = BaseCDAModel.CreateAddress();
                address2.AddressPurpose                   = AddressPurpose.TemporaryAccommodation;
                address2.InternationalAddress             = BaseCDAModel.CreateInternationalAddress();
                address2.InternationalAddress.AddressLine = new List <string> {
                    "1 Overseas Street"
                };
                address2.InternationalAddress.Country       = Country.Albania;
                address2.InternationalAddress.PostCode      = "12345";
                address2.InternationalAddress.StateProvince = "Foreign Land";

                var addressList = new List <IAddress> {
                    address1, address2
                };

                authenticator.Participant.Addresses = addressList;

                // LegalAuthenticator/assignedEntity/<Electronic Communication Detail>
                var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "0345754566",
                    ElectronicCommunicationMedium.Telephone,
                    ElectronicCommunicationUsage.WorkPlace);
                var coms2 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "*****@*****.**",
                    ElectronicCommunicationMedium.Email,
                    ElectronicCommunicationUsage.WorkPlace);
                authenticator.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                    coms1, coms2
                };

                // LegalAuthenticator/assignedEntity/representedOrganization
                authenticator.Participant.Organisation = BaseCDAModel.CreateOrganisationName();

                // LegalAuthenticator/assignedEntity/representedOrganization/name
                authenticator.Participant.Organisation.Name = "Oz Health Clinic";

                // LegalAuthenticator/assignedEntity/representedOrganization/<Entity Identifier>
                authenticator.Participant.Organisation.Identifiers = new List <Identifier>
                {
                    BaseCDAModel.CreateIdentifier("SampleAuthority", null, null, "1.2.3.4.55555", null),
                    BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, "8003620000001144")
                };
            }
        }
        /// <summary>
        /// This method populates a specialistLetter
        /// </summary>
        /// <param name="mandatorySectionsOnly">mandatorySectionsOnly</param>
        /// <returns>SpecialistLetter</returns>
        internal static SpecialistLetter PopulateSpecialistLetter(Boolean mandatorySectionsOnly)
        {
            var specialistLetter = SpecialistLetter.CreateSpecialistLetter();

            // Set Creation Time
            specialistLetter.DocumentCreationTime = new ISO8601DateTime(DateTime.Now);

            // Include Logo
            specialistLetter.IncludeLogo = true;

            #region Setup and populate the CDA context model

            // Setup and populate the CDA context model
            var cdaContext = SpecialistLetter.CreateCDAContext();
            // Document Id
            cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid(), null);
            // Set Id
            cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid(), null);
            // CDA Context Version
            cdaContext.Version = "1";

            // Custodian
            cdaContext.Custodian = BaseCDAModel.CreateCustodian();
            GenericObjectReuseSample.HydrateCustodian(cdaContext.Custodian, mandatorySectionsOnly);

            // Legal authenticator
            if (!mandatorySectionsOnly)
            {
                cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator();
                GenericObjectReuseSample.HydrateAuthenticator(cdaContext.LegalAuthenticator, mandatorySectionsOnly);
            }

            // Create information recipient
            if (!mandatorySectionsOnly)
            {
                var recipient1 = BaseCDAModel.CreateInformationRecipient();
                var recipient2 = BaseCDAModel.CreateInformationRecipient();
                GenericObjectReuseSample.HydrateRecipient(recipient1, RecipientType.Primary, mandatorySectionsOnly);
                GenericObjectReuseSample.HydrateRecipient(recipient2, RecipientType.Secondary, mandatorySectionsOnly);
                cdaContext.InformationRecipients = new List <IParticipationInformationRecipient> {
                    recipient1, recipient2
                };
            }

            specialistLetter.CDAContext = cdaContext;

            #endregion

            #region Setup and Populate the SCS Context model

            specialistLetter.SCSContext = SpecialistLetter.CreateSCSContext();

            specialistLetter.SCSContext.Author = BaseCDAModel.CreateAuthor();
            GenericObjectReuseSample.HydrateAuthor(specialistLetter.SCSContext.Author, mandatorySectionsOnly);

            specialistLetter.SCSContext.SubjectOfCare = BaseCDAModel.CreateSubjectOfCare();
            GenericObjectReuseSample.HydrateSubjectofCare(specialistLetter.SCSContext.SubjectOfCare, mandatorySectionsOnly);

            specialistLetter.SCSContext.DateTimeSubjectSeen = new ISO8601DateTime(DateTime.Now);

            if (!mandatorySectionsOnly)
            {
                specialistLetter.SCSContext.Referrer = CreateReferrer(mandatorySectionsOnly);
                specialistLetter.SCSContext.UsualGP  = CreateUsualGPPerson(mandatorySectionsOnly);
            }
            #endregion

            #region Setup and populate the SCS Content model

            specialistLetter.SCSContent = SpecialistLetter.CreateSCSContent();

            // Response details
            specialistLetter.SCSContent.ResponseDetails = CreateResponseDetails(mandatorySectionsOnly);

            // Recommendations
            specialistLetter.SCSContent.Recommendations = CreateRecommendations(mandatorySectionsOnly);

            // Medications
            specialistLetter.SCSContent.Medications = CreateMedications(mandatorySectionsOnly);

            if (!mandatorySectionsOnly)
            {
                // Adverse reactions
                specialistLetter.SCSContent.AdverseReactions = CreateAdverseReactions();

                // Diagnostic Investigations
                specialistLetter.SCSContent.DiagnosticInvestigations = CreateDiagnosticInvestigations(mandatorySectionsOnly);
            }

            #endregion

            return(specialistLetter);
        }
        /// <summary>
        /// Creates and Hydrates an Prescriber Organisation(IParticipationPrescriberOrganisation).
        /// </summary>
        /// <returns>A Hydrated Prescriber Organisation</returns>
        internal static IParticipationPrescriberOrganisation CreatePrescriberOrganisation(Boolean mandatorySectionsOnly, Guid prescriberOrganisationId)
        {
            IParticipationPrescriberOrganisation participation = BaseCDAModel.CreatePrescriberOrganisation();

            participation.Role        = BaseCDAModel.CreateRole(HealthcareFacilityTypeCodes.ChildCareServices);
            participation.Participant = BaseCDAModel.CreateParticipantForPrescriberOrganisation();

            // Prescriber Organisation Identifier
            participation.Participant.UniqueIdentifier = prescriberOrganisationId;

            participation.Participant.Organisation = BaseCDAModel.CreateOrganisation();

            // Prescribe rOrganisation > Participant > Entity Identifier
            participation.Participant.Organisation.Identifiers = new List <Identifier> {
                BaseCDAModel.CreateIdentifier("Test Authority", null, null, "2.999.1234567890", null),
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, "8003620833333789")
            };

            // Organisation Name
            participation.Participant.Organisation.Name = "West End Healthiness";

            if (!mandatorySectionsOnly)
            {
                // Prescriber Organisation > Address
                var address1 = BaseCDAModel.CreateAddress();
                address1.AddressPurpose    = AddressPurpose.Business;
                address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();
                address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "1 Clinician Street"
                };
                address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address1.AustralianAddress.State    = AustralianState.QLD;
                address1.AustralianAddress.PostCode = "5555";

                participation.Participant.Addresses = new List <IAddress> {
                    address1
                };

                participation.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail>()
                {
                    BaseCDAModel.CreateElectronicCommunicationDetail("0712341234", ElectronicCommunicationMedium.Telephone, ElectronicCommunicationUsage.WorkPlace)
                };

                var identifier = BaseCDAModel.CreateIdentifier
                                 (
                    "Test Authority",
                    HealthcareIdentifierGeographicArea.StateOrTerritoryIdentifier,
                    "455458",
                    "1.22.333.444.55575",
                    BaseCDAModel.CreateCodableText("1.1.1.1.1.1", CodingSystem.NCTIS, "DisplayName", "Original Text", null)
                                 );

                // Subject of Care > Participant > Entitlement
                var entitlement1 = BaseCDAModel.CreateEntitlement();
                entitlement1.Id               = identifier;
                entitlement1.Type             = EntitlementType.MedicareBenefits;
                entitlement1.ValidityDuration = BaseCDAModel.CreateInterval("1", TimeUnitOfMeasure.Year);

                var entitlement2 = BaseCDAModel.CreateEntitlement();
                entitlement2.Id               = identifier;
                entitlement2.Type             = EntitlementType.MedicareBenefits;
                entitlement2.ValidityDuration = BaseCDAModel.CreateInterval("1", TimeUnitOfMeasure.Year);

                participation.Participant.Entitlements = new List <Entitlement> {
                    entitlement1, entitlement2
                };
            }

            return(participation);
        }
Exemple #24
0
        /// <summary>
        /// This method populates an PCML model with either the mandatory sections only, or both
        /// the mandatory and optional sections
        /// </summary>
        /// <param name="mandatorySectionsOnly">mandatorySectionsOnly</param>
        /// <returns>PCML</returns>
        public static Nehta.VendorLibrary.CDA.Common.PCML PopulatePCML_1B(Boolean mandatorySectionsOnly)
        {
            var pharmacyCuratedMedsList = Nehta.VendorLibrary.CDA.Common.PCML.CreatePCML();

            // Include Logo
            pharmacyCuratedMedsList.IncludeLogo = false;

            // Set Creation Time
            pharmacyCuratedMedsList.DocumentCreationTime = new ISO8601DateTime(DateTime.Now);

            #region Setup and populate the CDA context model

            // Setup and populate the CDA context model
            var cdaContext = Nehta.VendorLibrary.CDA.Common.PCML.CreateCDAContext();
            // Document Id
            cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid(), null);

            // Custodian
            cdaContext.Custodian = BaseCDAModel.CreateCustodian();
            GenericObjectReuseSample.HydrateCustodian(cdaContext.Custodian, mandatorySectionsOnly);


            //Optional sections
            // Legal authenticator
            if (!mandatorySectionsOnly)
            {
                // Set Id
                cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid(), null);
                // CDA Context Version
                cdaContext.Version = "1";

                cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator();
                GenericObjectReuseSample.HydrateAuthenticator(cdaContext.LegalAuthenticator, mandatorySectionsOnly);
            }

            pharmacyCuratedMedsList.CDAContext = cdaContext;
            #endregion

            #region Setup and Populate the SCS Context model
            // Setup and Populate the SCS Context model

            pharmacyCuratedMedsList.SCSContext = Nehta.VendorLibrary.CDA.Common.PCML.CreateSCSContext();

            var authorHealthcareProvider = BaseCDAModel.CreateAuthorHealthcareProvider();
            GenericObjectReuseSample.HydrateAuthorHealthcareProvider(authorHealthcareProvider, mandatorySectionsOnly);
            pharmacyCuratedMedsList.SCSContext.Author = authorHealthcareProvider;

            //Cannot use as a device : prohibited by CORE Level One
            //healthCheckAssessment.SCSContext.Author = GenericObjectReuseSample.CreateAuthorDevice();

            pharmacyCuratedMedsList.SCSContext.Encounter = new Encounter
            {
                HealthcareFacility = PopulateHealthcareFacility(mandatorySectionsOnly)
            };

            pharmacyCuratedMedsList.SCSContext.SubjectOfCare = BaseCDAModel.CreateSubjectOfCare();
            GenericObjectReuseSample.HydrateSubjectofCare(pharmacyCuratedMedsList.SCSContext.SubjectOfCare, mandatorySectionsOnly);



            IParticipationPersonOrOrganisation person = Nehta.VendorLibrary.CDA.Common.PCML.CreateParticipationPersonOrOrganisation();
            person.Participant        = Nehta.VendorLibrary.CDA.Common.PCML.CreateParticipantPersonOrOrganisation();
            person.Role               = BaseCDAModel.CreateRole(HealthcareFacilityTypeCodes.AgedCareResidentialServices);
            person.Participant.Person = BaseCDAModel.CreatePersonWithOrganisation();



            var name1 = BaseCDAModel.CreatePersonName();
            name1.FamilyName = "Grant";
            name1.GivenNames = new List <string> {
                "Sally", "Wally"
            };
            name1.Titles = new List <string> {
                "Miss"
            };
            name1.NameUsages = new List <NameUsage> {
                NameUsage.Legal
            };

            person.Participant.Person.PersonNames = new List <IPersonName> {
                name1
            };

            // Subject of Care > Participant > Person or Organisation or Device > Person > Demographic Data > Sex

            var address1 = BaseCDAModel.CreateAddress();

            address1.AddressPurpose    = AddressPurpose.Residential;
            address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();

            address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                "1 Clinician Street"
            };
            address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
            address1.AustralianAddress.State           = AustralianState.NSW;
            address1.AustralianAddress.PostCode        = "5555";
            address1.AustralianAddress.DeliveryPointId = 32568931;

            person.Participant.Addresses = new List <IAddress> {
                address1
            };


            person.Participant.Person.Organisation = BaseCDAModel.CreateEmploymentOrganisation();


            person.Participant.Person.Organisation           = BaseCDAModel.CreateEmploymentOrganisation();
            person.Participant.Person.Organisation.Name      = "Hay Bill Hospital";
            person.Participant.Person.Organisation.NameUsage = OrganisationNameUsage.Other;

            person.Participant.Person.Organisation.Identifiers = new List <Identifier> {
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, "8003620833333789"),
                //BaseCDAModel.CreateIdentifier("SampleAuthority", null, null, "1.2.3.4.5.66666", null)
            };

            if (!mandatorySectionsOnly)
            {
                //populate with full person details

                // Subject of Care > Participant > Address


                // Subject of Care > Participant > Person or Organisation or Device > Person > Demographic Data > Indigenous Status


                // Subject of Care > Participant > Electronic Communication Detail
                var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "0345754566",
                    ElectronicCommunicationMedium.Telephone,
                    ElectronicCommunicationUsage.WorkPlace);
                var coms2 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "*****@*****.**",
                    ElectronicCommunicationMedium.Email,
                    ElectronicCommunicationUsage.WorkPlace);

                person.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                    coms1, coms2
                };


                // Subject of Care > Participant > Entitlement
                var entitlement1 = BaseCDAModel.CreateEntitlement();
                entitlement1.Id               = BaseCDAModel.CreateMedicareNumber(MedicareNumberType.MedicareCardNumber, "1234567881");
                entitlement1.Type             = EntitlementType.MedicareBenefits;
                entitlement1.ValidityDuration = BaseCDAModel.CreateInterval("1", TimeUnitOfMeasure.Year);

                var entitlement2 = BaseCDAModel.CreateEntitlement();
                entitlement2.Id               = BaseCDAModel.CreateMedicareNumber(MedicareNumberType.MedicareCardNumber, "1234567881");
                entitlement2.Type             = EntitlementType.MedicareBenefits;
                entitlement2.ValidityDuration = BaseCDAModel.CreateInterval("1", TimeUnitOfMeasure.Year);

                person.Participant.Entitlements = new List <Entitlement> {
                    entitlement1, entitlement2
                };
            }


            pharmacyCuratedMedsList.SCSContext.Participant = new List <IParticipationPersonOrOrganisation>();
            pharmacyCuratedMedsList.SCSContext.Participant.Add(person);

            #endregion

            #region Setup and populate the SCS Content model
            // Setup and populate the SCS Content model
            pharmacyCuratedMedsList.SCSContent = Nehta.VendorLibrary.CDA.Common.PCML.CreateSCSContent();

            pharmacyCuratedMedsList.SCSContent.EncapsulatedData = BaseCDAModel.CreateEncapsulatedData();

            ExternalData report1 = EventSummary.CreateExternalData();
            //report1.ExternalDataMediaType = MediaType.PDF;
            //report1.Path = StructuredFileAttachment;
            //report1.Caption = "Attachment One";



            //healthCheckAssessment.SCSContent.EncapsulatedData.ExternalData = report1;
            #endregion

            return(pharmacyCuratedMedsList);
        }
        /// <summary>
        /// Creates and Hydrates a list of recipients
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Hydrated list of recipients</returns>
        public static void HydrateRecipient(IParticipationInformationRecipient recipient, RecipientType recipientType, bool mandatoryOnly)
        {
            recipient.Participant = BaseCDAModel.CreateParticipantForInformationRecipient();

            // informationRecipient/@typeCode
            recipient.Participant.RecipientType = recipientType;

            // informationRecipient/intendedRecipient
            recipient.Participant.Person = BaseCDAModel.CreatePerson();

            if (!mandatoryOnly)
            {
                // informationRecipient/intendedRecipient/informationRecipient/<Entity Identifier>
                recipient.Participant.Person.Identifiers = new List <Identifier> {
                    BaseCDAModel.CreateIdentifier("SampleAuthority", null, null, "1.2.3.4.5.6677", null),
                    BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, "8003614444567893")
                };

                // informationRecipient/intendedRecipient/<Address>
                var address1 = BaseCDAModel.CreateAddress();
                address1.AddressPurpose    = AddressPurpose.Residential;
                address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();
                address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "1 Clinician Street"
                };
                address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address1.AustralianAddress.State           = AustralianState.QLD;
                address1.AustralianAddress.PostCode        = "5555";
                address1.AustralianAddress.DeliveryPointId = 32568931;

                var address2 = BaseCDAModel.CreateAddress();
                address2.AddressPurpose                   = AddressPurpose.TemporaryAccommodation;
                address2.InternationalAddress             = BaseCDAModel.CreateInternationalAddress();
                address2.InternationalAddress.AddressLine = new List <string> {
                    "1 Overseas Street"
                };
                address2.InternationalAddress.Country       = Country.Albania;
                address2.InternationalAddress.PostCode      = "12345";
                address2.InternationalAddress.StateProvince = "Foreign Land";

                var addressList = new List <IAddress> {
                    address1, address2
                };

                recipient.Participant.Addresses = addressList;

                // informationRecipient/intendedRecipient/<Electronic Communication Detail>
                var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "0345754566",
                    ElectronicCommunicationMedium.Telephone,
                    ElectronicCommunicationUsage.WorkPlace);

                var coms2 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "*****@*****.**",
                    ElectronicCommunicationMedium.Email,
                    ElectronicCommunicationUsage.WorkPlace);

                recipient.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                    coms1, coms2
                };

                // informationRecipient/intendedRecipient/informationRecipient/<Person Name>

                var name1 = BaseCDAModel.CreatePersonName();
                name1.GivenNames = new List <string> {
                    "Information"
                };
                name1.FamilyName = "Recipient";
                name1.Titles     = new List <string> {
                    "Doctor"
                };
                name1.NameUsages = new List <NameUsage> {
                    NameUsage.Legal
                };

                var name2 = BaseCDAModel.CreatePersonName();
                name2.GivenNames = new List <string> {
                    "Information"
                };
                name2.FamilyName = "Recipient";
                name2.Titles     = new List <string> {
                    "Mr"
                };
                name2.NameUsages = new List <NameUsage> {
                    NameUsage.NewbornName
                };

                recipient.Participant.Person.PersonNames = new List <IPersonName> {
                    name1, name2
                };

                // informationRecipient/intendedRecipient/receivedOrganization
                recipient.Participant.Organisation = BaseCDAModel.CreateOrganisationName();

                // informationRecipient/intendedRecipient/receivedOrganization/name
                recipient.Participant.Organisation.Name = "Specialist Clinics";

                recipient.Participant.Organisation.Identifiers = new List <Identifier> {
                    BaseCDAModel.CreateIdentifier("SampleAuthority", null, null, "1.2.3.4.5.6677", null),
                    BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, "8003621231167886")
                };
            }
        }
        /// <summary>
        /// Creates and Hydrates an author
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>An Hydrated author</returns>
        public static IParticipationAuthorPerson CreateDocumentAuthor(bool mandatoryOnly)
        {
            // Create IParticipationAuthorPerson
            var author = BaseCDAModel.CreateAuthorPerson();

            // Document Author > Participant
            author.Participant = BaseCDAModel.CreateParticipantForAuthorPerson();

            // Create Person
            var person = BaseCDAModel.CreatePerson();

            // Document Author > Participation Period
            // This element will hold the same value as target Shared Health Summary > Date- Time Attested (ClinicalDocument/ legalAuthenticator/ time)
            author.AuthorParticipationPeriodOrDateTimeAuthored = BaseCDAModel.CreateParticipationPeriod(new ISO8601DateTime(DateTime.Now, ISO8601DateTime.Precision.Second));

            // Document Author > Role
            author.Role = BaseCDAModel.CreateCodableText(NullFlavour.NotApplicable);

            // Document Author > Participant > Person or Organisation or Device > Person > Person Name
            var name = BaseCDAModel.CreatePersonName();

            name.FamilyName = "Smith";

            // Document Author > Person Names
            person.PersonNames = new List <IPersonName> {
                name, name
            };

            var electronicCommunicationDetailPhone = BaseCDAModel.CreateElectronicCommunicationDetail(
                "0345754566",
                ElectronicCommunicationMedium.Telephone,
                ElectronicCommunicationUsage.WorkPlace);

            var electronicCommunicationDetailEmail = BaseCDAModel.CreateElectronicCommunicationDetail(
                "*****@*****.**",
                ElectronicCommunicationMedium.Email,
                ElectronicCommunicationUsage.WorkPlace);

            author.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail>
            {
                electronicCommunicationDetailPhone, electronicCommunicationDetailEmail
            };

            if (!mandatoryOnly)
            {
                // Document Author > Participant > Entity Identifier
                person.Identifiers = new List <Identifier> {
                    BaseCDAModel.CreateIdentifier("Test Authority", null, null, "2.999.1234567890", null),
                    BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, "8003615833334118")
                };

                // Document Author > Participant > Address
                var address = BaseCDAModel.CreateAddress();
                address.AddressAbsentIndicator = AddressAbsentIndicator.NoFixedAddressIndicator;
                address.AddressPurpose         = AddressPurpose.Residential;
                address.AustralianAddress      = BaseCDAModel.CreateAustralianAddress();

                var addressList = new List <IAddress> {
                    address, address
                };

                author.Participant.Addresses = addressList;

                name.GivenNames = new List <string> {
                    "Fitun"
                };
                name.Titles = new List <string> {
                    "Dr"
                };
                name.NameUsages = new List <NameUsage> {
                    NameUsage.Legal
                };

                address.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "1 Clinician Street"
                };
                address.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address.AustralianAddress.State    = AustralianState.QLD;
                address.AustralianAddress.PostCode = "5555";
                address.AddressAbsentIndicator     = null;
            }

            author.Participant.Person = person;

            return(author);
        }
        /// <summary>
        /// Creates and Hydrates the Participation Author Healthcare Provider
        ///
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Hydrated IParticipationAuthorHealthcareProvider object</returns>
        public static void HydrateAuthorHealthcareProvider(IParticipationAuthorHealthcareProvider author, bool mandatoryOnly)
        {
            // Document Author > Participation Period
            author.AuthorParticipationPeriodOrDateTimeAuthored = BaseCDAModel.CreateParticipationPeriod(new ISO8601DateTime(DateTime.Now));

            // Document Author > Role
            author.Role = BaseCDAModel.CreateRole(Occupation.MedicalLaboratoryScientist);

            // Document Author > Participant
            author.Participant = BaseCDAModel.CreateParticipantForAuthorHealthcareProvider();

            var person = BaseCDAModel.CreatePersonHealthcareProvider();

            // Document Author > Participant > Person or Organisation or Device > Person > Person Name
            var name1 = BaseCDAModel.CreatePersonName();

            name1.FamilyName = "Doctor";

            var name2 = BaseCDAModel.CreatePersonName();

            name2.FamilyName = "Wong";

            person.PersonNames = new List <IPersonName> {
                name1, name2
            };

            // Document Author > Participant > Address
            var address1 = BaseCDAModel.CreateAddress();

            address1.AddressPurpose    = AddressPurpose.Residential;
            address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();

            var address2 = BaseCDAModel.CreateAddress();

            address2.AddressPurpose    = AddressPurpose.Business;
            address2.AustralianAddress = BaseCDAModel.CreateAustralianAddress();

            var addressList = new List <IAddress> {
                address1, address2
            };

            address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                "1 Clinician Street"
            };
            address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
            address1.AustralianAddress.State           = AustralianState.QLD;
            address1.AustralianAddress.PostCode        = "5555";
            address1.AustralianAddress.DeliveryPointId = 32568931;

            address2.AustralianAddress.UnstructuredAddressLines = new List <string> {
                "2 Clinician Street"
            };
            address2.AustralianAddress.SuburbTownLocality = "Nehtaville";
            address2.AustralianAddress.State           = AustralianState.QLD;
            address2.AustralianAddress.PostCode        = "5555";
            address2.AustralianAddress.DeliveryPointId = 32568931;

            author.Participant.Addresses = addressList;


            // Document Author > Participant > Entity Identifier
            person.Identifiers = new List <Identifier> {
                //BaseCDAModel.CreateIdentifier("AuthorHealthcareProvider", null, null, "1.2.3.4.5.66666", null),
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, "8003615833334118"),
            };


            person.Organisation           = BaseCDAModel.CreateEmploymentOrganisation();
            person.Organisation.Name      = "Hay Bill Hospital";
            person.Organisation.NameUsage = OrganisationNameUsage.Other;

            person.Organisation.Identifiers = new List <Identifier> {
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, "8003620833333789"),
                //BaseCDAModel.CreateIdentifier("SampleAuthority", null, null, "1.2.3.4.5.66666", null)
            };

            person.Organisation.Department             = "Some department service provider";
            person.Organisation.EmploymentType         = BaseCDAModel.CreateCodableText(null, null, null, "Casual", null);
            person.Organisation.Occupation             = BaseCDAModel.CreateRole(Occupation.GeneralMedicalPractitioner);
            person.Organisation.PositionInOrganisation = BaseCDAModel.CreateCodableText(null, null, null, "Manager", null);

            if (!mandatoryOnly)
            {
                name1.GivenNames = new List <string> {
                    "Good"
                };
                name1.Titles = new List <string> {
                    "Doctor"
                };
                name1.NameUsages = new List <NameUsage> {
                    NameUsage.Legal
                };

                name2.GivenNames = new List <string> {
                    "Davey"
                };
                name2.Titles = new List <string> {
                    "Brother"
                };
                name2.NameUsages = new List <NameUsage> {
                    NameUsage.NewbornName
                };



                // Document Author > Participant > Elec-tronic Communication Detail
                var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "0345754566",
                    ElectronicCommunicationMedium.Telephone,
                    ElectronicCommunicationUsage.WorkPlace);
                var coms2 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "*****@*****.**",
                    ElectronicCommunicationMedium.Email,
                    ElectronicCommunicationUsage.WorkPlace);

                author.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                    coms1, coms2
                };


                // Prescriber > Participant > Entitlement
                var entitlement1 = BaseCDAModel.CreateEntitlement();

                var code = BaseCDAModel.CreateCodableText("11", CodingSystem.NCTISEntitlementTypeValues, "Medicare Pharmacy Approval Number", null, null);

                entitlement1.Id = BaseCDAModel.CreateIdentifier("pharmacy",
                                                                null,
                                                                "1234567892",
                                                                "1.2.36.174030967.1.3.2.1",
                                                                code);

                entitlement1.Type             = EntitlementType.MedicarePharmacyApprovalNumber;
                entitlement1.ValidityDuration = BaseCDAModel.CreateInterval("1", TimeUnitOfMeasure.Year);

                person.Entitlements = new List <Entitlement> {
                    entitlement1, entitlement1
                };

                // Qualifications
                person.Qualifications = "M.B.B.S., F.R.A.C.S.";
            }

            author.Participant.Person = person;
        }
Exemple #28
0
        /// <summary>
        /// This method populates an consumerEnteredHealthSummary model with either the mandatory sections only, or both
        /// the mandatory and optional sections
        /// </summary>
        /// <param name="mandatorySectionsOnly">mandatorySectionsOnly</param>
        /// <returns>ConsumerEnteredHealthSummary</returns>
        public static ConsumerEnteredHealthSummary PopulateConsumerEnteredHealthSummary(Boolean mandatorySectionsOnly)
        {
            var consumerEnteredHealthSummary = ConsumerEnteredHealthSummary.CreateConsumerEnteredHealthSummary();

            // Include Logo
            consumerEnteredHealthSummary.IncludeLogo = true;

            // Set Creation Time
            consumerEnteredHealthSummary.DocumentCreationTime = new ISO8601DateTime(DateTime.Now);

            #region Setup and populate the CDA context model

            // Setup and populate the CDA context model
            var cdaContext = ConsumerEnteredHealthSummary.CreateCDAContext();
            // Document Id
            cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid(), null);
            // Set Id
            cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid(), null);
            // CDA Context Version
            cdaContext.Version = "1";

            // Custodian
            cdaContext.Custodian = BaseCDAModel.CreateCustodian();
            GenericObjectReuseSample.HydrateCustodian(cdaContext.Custodian, mandatorySectionsOnly);

            // Legal authenticator
            if (!mandatorySectionsOnly)
            {
                cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator();
                GenericObjectReuseSample.HydrateAuthenticator(cdaContext.LegalAuthenticator, mandatorySectionsOnly);
            }

            consumerEnteredHealthSummary.CDAContext = cdaContext;
            #endregion

            #region Setup and Populate the SCS Context model
            // Setup and Populate the SCS Context model

            consumerEnteredHealthSummary.SCSContext = ConsumerEnteredHealthSummary.CreateSCSContext();

            consumerEnteredHealthSummary.SCSContext.Author = ConsumerEnteredHealthSummary.CreateAuthor();
            PopulateAuthor(consumerEnteredHealthSummary.SCSContext.Author, mandatorySectionsOnly);

            consumerEnteredHealthSummary.SCSContext.SubjectOfCare = BaseCDAModel.CreateSubjectOfCare();
            GenericObjectReuseSample.HydrateSubjectofCare(consumerEnteredHealthSummary.SCSContext.SubjectOfCare, mandatorySectionsOnly);

            #endregion

            #region Setup and populate the SCS Content model
            // Setup and populate the SCS Content model
            consumerEnteredHealthSummary.SCSContent = ConsumerEnteredHealthSummary.CreateSCSContent();

            // Allergies And Adverse Reactions
            consumerEnteredHealthSummary.SCSContent.AllergiesAndAdverseReactions = CreateAllergiesAndAdverseReactions(mandatorySectionsOnly);

            // Medications
            consumerEnteredHealthSummary.SCSContent.Medications = CreateMedications(mandatorySectionsOnly);

            #endregion

            return(consumerEnteredHealthSummary);
        }
        /// <summary>
        /// This sample populates both the mandatory and optional Sections / Entries depending on the
        /// mandatorySectionsOnly Boolean
        /// </summary>
        internal static AdvanceCareInformation PopulatedAdvanceCareInformation(Boolean mandatorySectionsOnly, AuthorType authorType)
        {
            var advanceCareInformation = AdvanceCareInformation.CreateAdvanceCareInformation();

            // Include Logo
            advanceCareInformation.IncludeLogo = true;
            advanceCareInformation.LogoPath    = OutputFolderPath;

            // Set Creation Time
            advanceCareInformation.DocumentCreationTime = new ISO8601DateTime(DateTime.Now);

            #region Setup and populate the CDA context model

            // Setup and populate the CDA context model
            var cdaContext = AdvanceCareInformation.CreateCDAContext();

            // Document Id
            cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid());

            // Set Id
            cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid());

            // CDA Context Version
            cdaContext.Version = "1";

            // Custodian
            cdaContext.Custodian = BaseCDAModel.CreateCustodian();
            GenericObjectReuseSample.HydrateCustodian(cdaContext.Custodian, "Organisation Name", mandatorySectionsOnly);

            // Legal Authenticator
            cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator();
            GenericObjectReuseSample.HydrateAuthenticator(cdaContext.LegalAuthenticator, mandatorySectionsOnly);

            advanceCareInformation.CDAContext = cdaContext;

            #endregion

            #region Setup and Populate the SCS Context model
            // Setup and Populate the SCS Context model

            advanceCareInformation.SCSContext = AdvanceCareInformation.CreateSCSContext();

            // Switch on the author enumerator.
            switch (authorType)
            {
            case AuthorType.AuthorHealthcareProvider:
                // Create Author Healthcare Provider
                var authorHealthcareProvider = BaseCDAModel.CreateAuthorHealthcareProvider();
                GenericObjectReuseSample.HydrateAuthorHealthcareProvider(authorHealthcareProvider, "Organisation Name", mandatorySectionsOnly);
                advanceCareInformation.SCSContext.Author = authorHealthcareProvider;
                break;

            case AuthorType.AuthorNonHealthcareProvider:
                // Create Author Non Healthcare Provider
                var authorNonHealthcareProvider = BaseCDAModel.CreateAuthorPerson();
                GenericObjectReuseSample.HydrateAuthorNonHealthcareProvider(authorNonHealthcareProvider, mandatorySectionsOnly);
                advanceCareInformation.SCSContext.Author = authorNonHealthcareProvider;
                break;
            }

            advanceCareInformation.SCSContext.SubjectOfCare = BaseCDAModel.CreateSubjectOfCare();
            GenericObjectReuseSample.HydrateSubjectofCare(advanceCareInformation.SCSContext.SubjectOfCare, mandatorySectionsOnly);

            // REMOVE THESE FIELDS AS NOT ALLOWED IN ACI
            advanceCareInformation.SCSContext.SubjectOfCare.Participant.Person.DateOfDeath = null;
            advanceCareInformation.SCSContext.SubjectOfCare.Participant.Person.DateOfDeathAccuracyIndicator = null;
            advanceCareInformation.SCSContext.SubjectOfCare.Participant.Person.SourceOfDeathNotification    = null;

            #endregion

            #region Setup and populate the SCS Content model
            // Setup and populate the SCS Content model
            advanceCareInformation.SCSContent = AdvanceCareInformation.CreateSCSContent();

            // Related Information
            advanceCareInformation.SCSContent.DocumentDetails = CreateRelatedDocument(mandatorySectionsOnly);

            #endregion

            return(advanceCareInformation);
        }
        /// <summary>
        /// Creates and Hydrates an Authenticator
        /// Note: the data used within this method is intended as a guide and should be replaced.
        /// </summary>
        /// <returns>A Hydrated authenticator</returns>
        internal static IParticipationLegalAuthenticator CreateLegalAuthenticator(Boolean mandatorySectionsOnly, Guid legalAuthenticatorId)
        {
            var authenticator = BaseCDAModel.CreateLegalAuthenticator();

            // LegalAuthenticator/assignedEntity
            authenticator.Participant = BaseCDAModel.CreateParticipantForLegalAuthenticator();

            // set the identifier for the Legal Authenticator
            authenticator.Participant.UniqueIdentifier = legalAuthenticatorId;

            // LegalAuthenticator/time/@value
            authenticator.Participant.DateTimeAuthenticated = new ISO8601DateTime(DateTime.Now, ISO8601DateTime.Precision.Minute);

            // LegalAuthenticator/assignedEntity/assignedPerson
            authenticator.Participant.Person = BaseCDAModel.CreatePerson();

            var localAuthorityCode = BaseCDAModel.CreateCodableText("EI", CodingSystem.HL7IdentifierType, null, null, null);

            // LegalAuthenticator/assignedEntity/<Entity Identifier>
            authenticator.Participant.Person.Identifiers = new List <Identifier>
            {
                BaseCDAModel.CreateIdentifier("Test Authority", null, "66666", "2.999.1234567890", localAuthorityCode),
                BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, "8003615833334118")
            };

            //LegalAuthenticator/assignedEntity/assignedPerson/<Person Name>
            var name1 = BaseCDAModel.CreatePersonName();

            name1.GivenNames = new List <string> {
                "Fitun"
            };
            name1.FamilyName = "Healthy";
            name1.Titles     = new List <string> {
                "Dr"
            };
            name1.NameUsages = new List <NameUsage> {
                NameUsage.Legal
            };

            authenticator.Participant.Person.PersonNames = new List <IPersonName> {
                name1
            };

            if (!mandatorySectionsOnly)
            {
                // LegalAuthenticator/assignedEntity/code
                authenticator.Role = BaseCDAModel.CreateRole(Occupation.GeneralMedicalPractitioner);

                // LegalAuthenticator/assignedEntity/<Address>
                var address1 = BaseCDAModel.CreateAddress();
                address1.AddressPurpose    = AddressPurpose.Residential;
                address1.AustralianAddress = BaseCDAModel.CreateAustralianAddress();
                address1.AustralianAddress.UnstructuredAddressLines = new List <string> {
                    "1 Clinician Street"
                };
                address1.AustralianAddress.SuburbTownLocality = "Nehtaville";
                address1.AustralianAddress.State    = AustralianState.QLD;
                address1.AustralianAddress.PostCode = "5555";

                var addressList = new List <IAddress> {
                    address1
                };

                authenticator.Participant.Addresses = addressList;

                // LegalAuthenticator/assignedEntity/<Electronic Communication Detail>
                var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "0345754566",
                    ElectronicCommunicationMedium.Telephone,
                    ElectronicCommunicationUsage.WorkPlace);

                var coms2 = BaseCDAModel.CreateElectronicCommunicationDetail(
                    "*****@*****.**",
                    ElectronicCommunicationMedium.Email,
                    ElectronicCommunicationUsage.WorkPlace);
                authenticator.Participant.ElectronicCommunicationDetails = new List <ElectronicCommunicationDetail> {
                    coms1, coms2
                };

                // LegalAuthenticator/assignedEntity/representedOrganization
                authenticator.Participant.Organisation = BaseCDAModel.CreateOrganisationName();

                // LegalAuthenticator/assignedEntity/representedOrganization/name
                authenticator.Participant.Organisation.Name = "West End Healthiness";

                // LegalAuthenticator/assignedEntity/representedOrganization/<Entity Identifier>
                authenticator.Participant.Organisation.Identifiers = new List <Identifier>
                {
                    BaseCDAModel.CreateIdentifier("Test Authority", null, null, "2.999.1234567890", null),
                    BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, "8003620833333789")
                };
            }

            return(authenticator);
        }