protected override ExternalPractitionerData Export(ExternalPractitioner entity, IReadContext context)
        {
            var data = new ExternalPractitionerData
            {
                Deactivated      = entity.Deactivated,
                FamilyName       = entity.Name.FamilyName,
                GivenName        = entity.Name.GivenName,
                MiddleName       = entity.Name.MiddleName,
                LicenseNumber    = entity.LicenseNumber,
                BillingNumber    = entity.BillingNumber,
                IsVerified       = entity.IsVerified,
                LastVerifiedTime = entity.LastVerifiedTime,
                LastEditedTime   = entity.LastEditedTime,
                ContactPoints    = CollectionUtils.Map(entity.ContactPoints,
                                                       (ExternalPractitionerContactPoint cp) => new ExternalPractitionerContactPointData
                {
                    Name = cp.Name,
                    IsDefaultContactPoint            = cp.IsDefaultContactPoint,
                    PreferredResultCommunicationMode = cp.PreferredResultCommunicationMode.ToString(),
                    InformationAuthority             = cp.InformationAuthority == null ? null : cp.InformationAuthority.Code,
                    Description      = cp.Description,
                    Addresses        = CollectionUtils.Map(cp.Addresses, (Address a) => new AddressData(a)),
                    TelephoneNumbers = CollectionUtils.Map(cp.TelephoneNumbers, (TelephoneNumber tn) => new TelephoneNumberData(tn)),
                    EmailAddresses   = CollectionUtils.Map(cp.EmailAddresses, (EmailAddress a) => new EmailAddressData(a))
                }),
                ExtendedProperties = ExtendedPropertyUtils.Copy(entity.ExtendedProperties)
            };

            return(data);
        }
        protected override void Import(ExternalPractitionerData data, IUpdateContext context)
        {
            var prac = LoadExternalPractitioner(
                data.LicenseNumber,
                data.BillingNumber,
                context);

            var name = new PersonName(data.FamilyName, data.GivenName, data.MiddleName, null, null, null);

            if (prac == null)
            {
                // Creating a new practitioenr:  Import
                prac = new ExternalPractitioner(name,
                                                data.LicenseNumber,
                                                data.BillingNumber,
                                                data.IsVerified,
                                                data.LastVerifiedTime,
                                                data.LastEditedTime,
                                                new HashedSet <ExternalPractitionerContactPoint>(),
                                                new Dictionary <string, string>(),
                                                null);
                context.Lock(prac, DirtyState.New);
            }
            else
            {
                prac.Name = name;
                prac.MarkEdited();
            }

            prac.MarkDeactivated(data.Deactivated);

            if (data.ContactPoints != null)
            {
                foreach (var cpData in data.ContactPoints)
                {
                    var cp = CollectionUtils.SelectFirst(prac.ContactPoints, p => p.Name == cpData.Name) ?? new ExternalPractitionerContactPoint(prac);
                    UpdateExternalPractitionerContactPoint(cpData, cp, context);
                }
            }

            ExtendedPropertyUtils.Update(prac.ExtendedProperties, data.ExtendedProperties);
        }