/// <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); }
/// <summary> /// Creates and Hydrates a custodian /// /// Note: the data used within this method is intended as a guide and should be replaced. /// </summary> /// <param name="mandatorySectionsOnly">Only show mandatory fields</param> /// <returns>A Hydrated IParticipationCustodian </returns> internal static IParticipationCustodian CreateCustodian(Boolean mandatorySectionsOnly, Guid custodianId) { var participationCustodian = BaseCDAModel.CreateCustodian(); var custodian = BaseCDAModel.CreateParticipantCustodian(); custodian.UniqueIdentifier = custodianId; // custodian/assignedCustodian participationCustodian.Participant = custodian; // custodian/assignedCustodian/representedCustodianOrganization custodian.Organisation = BaseCDAModel.CreateOrganisationName(); // custodian/assignedCustodian/representedCustodianOrganization/<Entity Identifier> custodian.Organisation.Identifiers = new List <Identifier> { BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPIO, "8003620833333789") }; // custodian/assignedCustodian/representedCustodianOrganization/name custodian.Organisation.Name = "West End Healthiness"; if (!mandatorySectionsOnly) { // custodian/assignedCustodian/representedCustodianOrganization/<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; custodian.Address = address1; // custodian/assignedCustodian/representedCustodianOrganization/<Electronic Communication Detail> var coms1 = BaseCDAModel.CreateElectronicCommunicationDetail("0712341234", ElectronicCommunicationMedium.Telephone, ElectronicCommunicationUsage.WorkPlace); custodian.ElectronicCommunicationDetail = coms1; } return(participationCustodian); }
/// <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> /// 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 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> /// 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> /// 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); }
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> /// This method populates a shared health summary model with either the mandatory sections only, or both /// the mandatory and optional sections /// </summary> /// <param name="mandatorySectionsOnly">mandatorySectionsOnly</param> /// <returns>SharedHealthSummary</returns> internal static SharedHealthSummary PopulateSharedHealthSummary(Boolean mandatorySectionsOnly) { var sharedHealthSummary = SharedHealthSummary.CreateSharedHealthSummary(DocumentStatus.Final); // Include Logo sharedHealthSummary.IncludeLogo = true; sharedHealthSummary.LogoPath = OutputFolderPath; // Set Creation Time sharedHealthSummary.DocumentCreationTime = new ISO8601DateTime(DateTime.Now, ISO8601DateTime.Precision.Second); #region Setup and populate the CDA context model // Setup and populate the CDA context model var cdaContext = SharedHealthSummary.CreateCDAContext(); // Document Id cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid()); // CDA Context Version if (!mandatorySectionsOnly) { // Version cdaContext.Version = "1"; // Set Id cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid()); } // Custodian cdaContext.Custodian = BaseCDAModel.CreateCustodian(); GenericObjectReuseSample.HydrateCustodian(cdaContext.Custodian, mandatorySectionsOnly); sharedHealthSummary.ShowAdministrativeObservationsSection = !mandatorySectionsOnly; cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator(); GenericObjectReuseSample.HydrateAuthenticator(cdaContext.LegalAuthenticator, mandatorySectionsOnly); sharedHealthSummary.CDAContext = cdaContext; #endregion #region Setup and Populate the SCS Context model // Setup and Populate the SCS Context model sharedHealthSummary.SCSContext = SharedHealthSummary.CreateSCSContext(); sharedHealthSummary.SCSContext.Author = BaseCDAModel.CreateAuthor(); GenericObjectReuseSample.HydrateAuthorV2(sharedHealthSummary.SCSContext.Author, mandatorySectionsOnly); // Subject of Care sharedHealthSummary.SCSContext.SubjectOfCare = BaseCDAModel.CreateSubjectOfCare(); GenericObjectReuseSample.HydrateSubjectofCare(sharedHealthSummary.SCSContext.SubjectOfCare, mandatorySectionsOnly, true); #endregion #region Setup and populate the SCS Content model // Setup and populate the SCS Content model sharedHealthSummary.SCSContent = SharedHealthSummary.CreateSCSContent(); // Adverse reactions sharedHealthSummary.SCSContent.AdverseReactions = CreateAdverseReactions(mandatorySectionsOnly); // Reviewed medications sharedHealthSummary.SCSContent.Medications = CreateMedications(mandatorySectionsOnly); // Reviewed medical history sharedHealthSummary.SCSContent.MedicalHistory = CreateMedicalHistory(mandatorySectionsOnly); // Reviewed Immunizations sharedHealthSummary.SCSContent.Immunisations = CreateImmunisations(mandatorySectionsOnly); #endregion return(sharedHealthSummary); }
/// <summary> /// This method populates an acdCustodianRecord model with either the mandatory sections only, or both /// the mandatory and optional sections /// </summary> /// <param name="mandatorySectionsOnly">mandatorySectionsOnly</param> /// <returns>AcdCustodianRecord</returns> public static AcdCustodianRecord PopulateAcdCustodianRecord(Boolean mandatorySectionsOnly) { var acdCustodianRecord = AcdCustodianRecord.CreateAcdCustodianRecord(); // Include Logo acdCustodianRecord.IncludeLogo = true; acdCustodianRecord.LogoPath = OutputFolderPath; // Set Creation Time acdCustodianRecord.DocumentCreationTime = new ISO8601DateTime(DateTime.Now); #region Setup and populate the CDA context model // Setup and populate the CDA context model var cdaContext = AcdCustodianRecord.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); } acdCustodianRecord.CDAContext = cdaContext; #endregion #region Setup and Populate the SCS Context model // Setup and Populate the SCS Context model acdCustodianRecord.SCSContext = AcdCustodianRecord.CreateSCSContext(); acdCustodianRecord.SCSContext.Author = BaseCDAModel.CreateAuthor(); GenericObjectReuseSample.HydrateAuthor(acdCustodianRecord.SCSContext.Author, mandatorySectionsOnly); // If only mandatory sections are required, then remove person employment if (mandatorySectionsOnly) { acdCustodianRecord.SCSContext.Author.Participant.Person.Organisation = null; } acdCustodianRecord.SCSContext.SubjectOfCare = BaseCDAModel.CreateSubjectOfCare(); GenericObjectReuseSample.HydrateSubjectofCare(acdCustodianRecord.SCSContext.SubjectOfCare, mandatorySectionsOnly, false); #endregion #region Setup and populate the SCS Content model // Setup and populate the SCS Content model acdCustodianRecord.SCSContent = AcdCustodianRecord.CreateSCSContent(); // ACD Custodian Record acdCustodianRecord.SCSContent.AcdCustodians = CreateAcdCustodians(mandatorySectionsOnly); #endregion return(acdCustodianRecord); }
/// <summary> /// Create a PathologyTransformResult instance (containing a PathologyResultReport and a ReportAttachment instance) from a HL7 V2 pathology message. /// The PathologyTransformResult instance is then used to generate a CDA document. /// </summary> /// <param name="hl7GenericMessage">The HL7 V2 message to transform.</param> /// <param name="metadata">Mandatory information to supplement the transform.</param> /// <param name="reportData">Report data.</param> /// <returns></returns> internal PathologyTransformResult Transform(HL7GenericMessage hl7GenericMessage, PathologyMetadata metadata, byte[] reportData = null) { PathologyResultReport pathologyResultReport = PathologyResultReport.CreatePathologyResultReport(); // Include Logo pathologyResultReport.IncludeLogo = false; // Set Creation Time pathologyResultReport.DocumentCreationTime = GetResultsReportStatusChange(hl7GenericMessage); // Document Status pathologyResultReport.DocumentStatus = GetReportStatus(hl7GenericMessage); #region Setup and populate the CDA context model // 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"; // Legal Authenticator cdaContext.LegalAuthenticator = CreateLegalAuthenticator(hl7GenericMessage); // Custodian cdaContext.Custodian = BaseCDAModel.CreateCustodian(); ICustodian custodian = BaseCDAModel.CreateParticipantCustodian(); cdaContext.Custodian.Participant = custodian; pathologyResultReport.CDAContext = cdaContext; #endregion #region Setup and Populate the SCS Context model // SCS Context model pathologyResultReport.SCSContext = PathologyResultReport.CreateSCSContext(); // Author Health Care Provider pathologyResultReport.SCSContext.Author = CreateAuthor(hl7GenericMessage); // The Reporting Pathologist pathologyResultReport.SCSContext.ReportingPathologist = CreateReportingPathologist(hl7GenericMessage); // Order Details pathologyResultReport.SCSContext.OrderDetails = CreateOrderDetails(hl7GenericMessage); // Subject Of Care pathologyResultReport.SCSContext.SubjectOfCare = CreateSubjectOfCare(hl7GenericMessage); #endregion #region Setup and populate the SCS Content model // SCS Content model pathologyResultReport.SCSContent = PathologyResultReport.CreateSCSContent(); ReportAttachment reportAttachment = GetReportAttachment(hl7GenericMessage, reportData); // Pathology Test Result pathologyResultReport.SCSContent.PathologyTestResult = CreatePathologyTestResults(hl7GenericMessage); // Related Document pathologyResultReport.SCSContent.RelatedDocument = CreateRelatedDocument(hl7GenericMessage, reportAttachment); #endregion FillInAdditionalMetadata(pathologyResultReport, metadata); return(new PathologyTransformResult { PathologyResultReport = pathologyResultReport, Attachment = reportAttachment }); }
/// <summary> /// This sample populates both the mandatory and optional Sections / Entries depending on the /// mandatorySectionsOnly Boolean /// </summary> internal static EventSummary PopulatedEventSummary(Boolean mandatorySectionsOnly) { var eventSummary = EventSummary.CreateEventSummary(); // Include Logo eventSummary.IncludeLogo = true; eventSummary.LogoPath = OutputFolderPath; // Set Creation Time eventSummary.DocumentCreationTime = new ISO8601DateTime(DateTime.Now); #region Setup and populate the CDA context model // Setup and populate the CDA context model var cdaContext = EventSummary.CreateCDAContext(); // Document Id cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid()); // Set Id if (!mandatorySectionsOnly) { cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid()); } // CDA Context Version if (!mandatorySectionsOnly) { cdaContext.Version = "1"; } // Custodian cdaContext.Custodian = BaseCDAModel.CreateCustodian(); GenericObjectReuseSample.HydrateCustodian(cdaContext.Custodian, mandatorySectionsOnly); cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator(); GenericObjectReuseSample.HydrateAuthenticator(cdaContext.LegalAuthenticator, mandatorySectionsOnly); eventSummary.CDAContext = cdaContext; #endregion #region Setup and Populate the SCS Context model // Setup and Populate the SCS Context model eventSummary.SCSContext = EventSummary.CreateSCSContext(); eventSummary.SCSContext.Author = BaseCDAModel.CreateAuthor(); GenericObjectReuseSample.HydrateAuthorV2(eventSummary.SCSContext.Author, mandatorySectionsOnly); eventSummary.SCSContext.SubjectOfCare = BaseCDAModel.CreateSubjectOfCare(); GenericObjectReuseSample.HydrateSubjectofCare(eventSummary.SCSContext.SubjectOfCare, mandatorySectionsOnly, false); // DateTime Health Event Started & DateTime Health Event Ended allowable combinations var dateTimeHealthEventEnded = new ISO8601DateTime(DateTime.Now); var dateTimeHealthEventStarted = new ISO8601DateTime(DateTime.Now.AddMonths(-12)); eventSummary.SCSContext.EncounterPeriod = !mandatorySectionsOnly? BaseCDAModel.CreateLowHigh(dateTimeHealthEventStarted, dateTimeHealthEventEnded) : BaseCDAModel.CreateHigh(dateTimeHealthEventEnded); #endregion #region Setup and populate the SCS Content model // Setup and populate the SCS Content model eventSummary.SCSContent = EventSummary.CreateSCSContent(); if (!mandatorySectionsOnly) { eventSummary.SCSContent.EventDetails = CreateEventDetails(); // Adverse reactions eventSummary.SCSContent.AdverseReactions = CreateAdverseReactions(); // Medications eventSummary.SCSContent.Medications = CreateMedications(); // Medical history eventSummary.SCSContent.DiagnosesIntervention = CreateDiagnosesIntervention(mandatorySectionsOnly); // Immunisations eventSummary.SCSContent.Immunisations = CreateImmunisations(); // Diagnostic Investigations eventSummary.SCSContent.DiagnosticInvestigations = CreateDiagnosticInvestigations(mandatorySectionsOnly); } #endregion return(eventSummary); }
/// <summary> /// Create a DiagnosticImagingTransformResult instance (containing a DiagnosticImagingReport and a ReportAttachment instance) from a /// HL7 V2 diagnostic imaging message. The DiagnosticImagingTransformResult instance is then used to generate a CDA document. /// </summary> /// <param name="hl7GenericMessage">The HL7 V2 message to transform.</param> /// <param name="metadata">Mandatory information to supplement the transform.</param> /// <param name="reportData">Report data.</param> /// <returns></returns> internal DiagnosticImagingTransformResult Transform(HL7GenericMessage hl7GenericMessage, DiagnosticImagingMetadata metadata, byte[] reportData = null) { DiagnosticImagingReport diagnosticImagingReport = DiagnosticImagingReport.CreateDiagnosticImagingReport(); // Include Logo diagnosticImagingReport.IncludeLogo = false; // Set Creation Time diagnosticImagingReport.DocumentCreationTime = GetResultsReportStatusChange(hl7GenericMessage); // Document Status diagnosticImagingReport.DocumentStatus = GetReportStatus(hl7GenericMessage); #region Setup and populate the CDA context model // CDA Context model var cdaContext = DiagnosticImagingReport.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"; // Legal Authenticator cdaContext.LegalAuthenticator = CreateLegalAuthenticator(hl7GenericMessage); // Custodian cdaContext.Custodian = BaseCDAModel.CreateCustodian(); ICustodian custodian = BaseCDAModel.CreateParticipantCustodian(); cdaContext.Custodian.Participant = custodian; diagnosticImagingReport.CDAContext = cdaContext; #endregion #region Setup and Populate the SCS Context model // SCS Context model diagnosticImagingReport.SCSContext = DiagnosticImagingReport.CreateSCSContext(); // Author Health Care Provider diagnosticImagingReport.SCSContext.Author = CreateAuthor(hl7GenericMessage); // The Reporting Radiologist diagnosticImagingReport.SCSContext.ReportingRadiologist = CreateReportingRadiologist(hl7GenericMessage); // Order Details diagnosticImagingReport.SCSContext.OrderDetails = CreateOrderDetails(hl7GenericMessage); // Subject Of Care diagnosticImagingReport.SCSContext.SubjectOfCare = CreateSubjectOfCare(hl7GenericMessage); #endregion #region Setup and populate the SCS Content model // SCS Content model diagnosticImagingReport.SCSContent = DiagnosticImagingReport.CreateSCSContent(); ReportAttachment reportAttachment = GetReportAttachment(hl7GenericMessage, reportData); // Imaging Examination Results diagnosticImagingReport.SCSContent.ImagingExaminationResults = CreateImagingExaminationResults(hl7GenericMessage); // Related Document diagnosticImagingReport.SCSContent.RelatedDocument = CreateRelatedDocument(hl7GenericMessage, reportAttachment); #endregion FillInAdditionalMetadata(diagnosticImagingReport, metadata); return(new DiagnosticImagingTransformResult { DiagnosticImagingReport = diagnosticImagingReport, Attachment = reportAttachment }); }
/// <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 PopulatePSML_1B(Boolean mandatorySectionsOnly) { var pharmacySharedMedsList = Nehta.VendorLibrary.CDA.Common.PCML.CreatePCML(); // Include Logo pharmacySharedMedsList.IncludeLogo = true; pharmacySharedMedsList.LogoPath = OutputFolderPath; // Set Creation Time pharmacySharedMedsList.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 if (!mandatorySectionsOnly) { // Set Id cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid(), null); // CDA Context Version cdaContext.Version = "1"; // Legal authenticator cdaContext.LegalAuthenticator = BaseCDAModel.CreateLegalAuthenticator(); GenericObjectReuseSample.HydrateAuthenticator(cdaContext.LegalAuthenticator, mandatorySectionsOnly); // Information Recipients cdaContext.InformationRecipients = new List <IParticipationInformationRecipient>(); var recipient1 = BaseCDAModel.CreateInformationRecipient(); GenericObjectReuseSample.HydrateRecipient(recipient1, RecipientType.Primary, mandatorySectionsOnly); var recipient2 = BaseCDAModel.CreateInformationRecipient(); GenericObjectReuseSample.HydrateRecipient(recipient2, RecipientType.Secondary, mandatorySectionsOnly); cdaContext.InformationRecipients.AddRange(new[] { recipient1, recipient2 }); } pharmacySharedMedsList.CDAContext = cdaContext; #endregion #region Setup and Populate the SCS Context model // Setup and Populate the SCS Context model pharmacySharedMedsList.SCSContext = Nehta.VendorLibrary.CDA.Common.PCML.CreateSCSContext(); var authorHealthcareProvider = BaseCDAModel.CreateAuthorHealthcareProvider(); GenericObjectReuseSample.HydrateAuthorHealthcareProvider(authorHealthcareProvider, mandatorySectionsOnly); pharmacySharedMedsList.SCSContext.Author = authorHealthcareProvider; //Cannot use as a device : prohibited by CORE Level One //pharmacyCuratedMedsList.SCSContext.Author = GenericObjectReuseSample.CreateAuthorDevice(); if (!mandatorySectionsOnly) { // Context>Encounter>HEALTHCARE FACILITY pharmacySharedMedsList.SCSContext.Encounter = new Encounter { HealthcareFacility = PopulateHealthcareFacility(mandatorySectionsOnly) }; } pharmacySharedMedsList.SCSContext.SubjectOfCare = BaseCDAModel.CreateSubjectOfCare(); GenericObjectReuseSample.HydrateSubjectofCare(pharmacySharedMedsList.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 > Identifier person.Participant.Person.Identifiers = new List <Identifier> { BaseCDAModel.CreateHealthIdentifier(HealthIdentifierType.HPII, "8003615833334118") }; // 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; // New requirement to make address mandatory person.Participant.Person.Organisation.Addresses = new List <IAddress> { address1 }; 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 }; // Optional Participants pharmacySharedMedsList.SCSContext.Participant = new List <IParticipationPersonOrOrganisation>(); pharmacySharedMedsList.SCSContext.Participant.Add(person); } #endregion #region Setup and populate the SCS Content model // Setup and populate the SCS Content model pharmacySharedMedsList.SCSContent = Nehta.VendorLibrary.CDA.Common.PCML.CreateSCSContent(); //Use Custom Narrative instead of Attachment - 1B //pharmacyCuratedMedsList.SCSContent.EncapsulatedData = BaseCDAModel.CreateEncapsulatedData(); pharmacySharedMedsList.ShowAdministrativeObservationsSection = false; pharmacySharedMedsList.ShowAdministrativeObservationsNarrativeAndTitle = false; // Build Narrative var sdt = new StrucDocText(); sdt.table = new[] { new StrucDocTable { caption = new StrucDocCaption { Text = new [] { "Patient History" } }, tbody = new [] { new StrucDocTbody { tr = new [] { new StrucDocTr { td = new [] { AddTd("Allergies"), AddTd("Nil Known") } }, new StrucDocTr { td = new [] { AddTd("Diagnosis"), AddTd("CVA, TIA, Hypertension") } } } } } }, new StrucDocTable { caption = new StrucDocCaption { Text = new [] { "Medications" } }, thead = new StrucDocThead { tr = new [] { new StrucDocTr { td = new [] { AddTd("Drug", "BoldxColWidthPx200"), AddTd("Direction", "BoldxColWidthPx200"), AddTd("B'fast", "BoldxColWidthPx20"), AddTd("Lunch", "BoldxColWidthPx20"), AddTd("Dinner", "BoldxColWidthPx20"), AddTd("B'time", "BoldxColWidthPx20"), AddTd("Indication", "BoldxColWidthPx200"), AddTd("Special Instructions", "BoldxColWidthPx220") } } } }, tbody = new [] { new StrucDocTbody { tr = new [] { new StrucDocTr { td = new [] { AddTd("LanoxnPG62.5mcgTb"), AddTd("One on alternate morning"), AddTd("1"), AddTd(""), AddTd(""), AddTd(""), AddTd("Heart rate"), AddTd("") } }, new StrucDocTr { td = new [] { AddTd("Paralgin500mgTb"), AddTd("One four times daily"), AddTd("1"), AddTd("1"), AddTd("1"), AddTd("1"), AddTd("Pain"), AddTd("") } }, new StrucDocTr { td = new [] { AddTd("CandesartanSZ16mg"), AddTd("One in the morning"), AddTd("1"), AddTd(""), AddTd(""), AddTd(""), AddTd("High Blood Pressume"), AddTd("") } }, new StrucDocTr { td = new [] { AddTd("Rispa 0.5mg Tab"), AddTd("One at bedtime"), AddTd(""), AddTd(""), AddTd(""), AddTd("1"), AddTd("Behavioural Disorder"), AddTd("") } }, new StrucDocTr { td = new [] { AddTd("Apo-Rabeprzle20mgTb"), AddTd("One in the morning"), AddTd("1"), AddTd(""), AddTd(""), AddTd(""), AddTd("Barrett's Oesaphagus"), AddTd("") } }, new StrucDocTr { td = new [] { AddTd("Sorbolene Cream"), AddTd("Apply twice daily for dry skin after bath"), AddTd("Ap"), AddTd(""), AddTd("Ap"), AddTd(""), AddTd("Dry Skin"), AddTd("") } }, new StrucDocTr { td = new [] { AddTd("Liquifilm TearsEyDrp"), AddTd("Instill one drop four times daily into both eyes"), AddTd("1"), AddTd("1"), AddTd("1"), AddTd(""), AddTd("Dry Eyes"), AddTd("") } }, new StrucDocTr { td = new [] { AddTd("Keflex 500mg Cap"), AddTd("One three times daily for seven days"), AddTd("1"), AddTd("1"), AddTd("1"), AddTd(""), AddTd(""), AddTd("") } }, new StrucDocTr { td = new [] { AddTd("Coloxyl/SennaTab"), AddTd("One at dinner when necessary if BNO 3/7"), AddTd("1"), AddTd("1"), AddTd("1"), AddTd("1"), AddTd("Constipation"), AddTd("") } }, new StrucDocTr { td = new [] { AddTd("Fosamax70mgTab"), AddTd("One on Thursday morning half an hour before food"), AddTd("1"), AddTd(""), AddTd(""), AddTd(""), AddTd("Asteoporosis"), AddTd("") } }, } } } } }; // Save Custom Text var narrativeOnlyDocument = BaseCDAModel.CreateNarrativeOnlyDocument(); narrativeOnlyDocument.Title = "Patient Medication Record"; narrativeOnlyDocument.Narrative = sdt; pharmacySharedMedsList.SCSContent.CustomNarrativePcmlRecord = new List <NarrativeOnlyDocument>(); pharmacySharedMedsList.SCSContent.CustomNarrativePcmlRecord.Add(narrativeOnlyDocument); #endregion return(pharmacySharedMedsList); }