protected async Task <Guid> ProcessPerson(string lookupId, string forenames, string surname, DateTime?dateOfBirth, DateTime?dateOfDeath, Guid?countryGuid)
        {
            var lookupPerson = await Provider.GetLookupPerson(ImportSite, lookupId);

            if (lookupPerson != null)
            {
                return(lookupPerson.PersonGuid);
            }
            else
            {
                var personGuid = Guid.NewGuid();

                Provider.Add(new Person()
                {
                    PrimaryKey = personGuid
                });

                var personV = PersonV.CreateNew <PersonV>(User.GetUserId());
                personV.HeaderKey     = personGuid;
                personV.Forenames     = forenames;
                personV.Surname       = surname;
                personV.SearchText    = personV.SetSearchText();
                personV.DateOfBirth   = dateOfBirth;
                personV.DateOfDeath   = dateOfDeath;
                personV.CountryGuid   = countryGuid;
                personV.EffectiveFrom = Date.LowDate;
                personV.EffectiveTo   = Date.HighDate;

                Provider.Add(personV);

                Provider.Add(new LookupPerson()
                {
                    PrimaryKey = Guid.NewGuid(),
                    ImportSite = ImportSite,
                    PersonGuid = personGuid,
                    LookupId   = lookupId
                });

                Provider.SaveChanges();

                return(personGuid);
            }
        }