/// <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 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.Agent);

            // 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 = "Healthy";

            var name2 = BaseCDAModel.CreatePersonName();

            name2.FamilyName = "Wong";

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

            // 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 > 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
            };

            if (!mandatoryOnly)
            {
                name1.GivenNames = new List <string> {
                    "Fitun"
                };
                name1.Titles = new List <string> {
                    "Dr"
                };
                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";

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

            author.Participant.Person = person;

            return(author);
        }