public OrganizacaoModeloNegocio InserirFilha(OrganizacaoModeloNegocio organizacaoNegocio)
        {
            //Preenchimentos primeiro (pois não interagem com banco de dados nem fazem validações complexas)
            validacao.Preenchido(organizacaoNegocio);
            validacao.PaiPreenchido(organizacaoNegocio.OrganizacaoPai);
            contatoValidacao.Preenchido(organizacaoNegocio.Contatos);
            emailValidacao.Preenchido(organizacaoNegocio.Emails);
            enderecoValidacao.NaoNulo(organizacaoNegocio.Endereco);
            enderecoValidacao.Preenchido(organizacaoNegocio.Endereco);
            //esferaValidacao.IdPreenchido(organizacaoNegocio.Esfera);
            //poderValidacao.IdPreenchido(organizacaoNegocio.Poder);
            siteValidacao.Preenchido(organizacaoNegocio.Sites);
            tipoOrganizacaoValidacao.IdPreenchido(organizacaoNegocio.TipoOrganizacao);

            //Validações utilizam cálculos e/ou interagem com o banco de dados
            validacao.PaiValido(organizacaoNegocio.OrganizacaoPai);
            validacao.Valido(organizacaoNegocio);

            if (organizacaoNegocio.OrganizacaoPai != null)
            {
                validacao.UsuarioTemPermissao(_currentUser.UserGuidsOrganizacao, organizacaoNegocio.OrganizacaoPai.Guid);
            }

            contatoValidacao.Valido(organizacaoNegocio.Contatos);
            emailValidacao.Valido(organizacaoNegocio.Emails);
            enderecoValidacao.Valido(organizacaoNegocio.Endereco);
            //esferaValidacao.Existe(organizacaoNegocio.Esfera);
            //poderValidacao.Existe(organizacaoNegocio.Poder);
            siteValidacao.Valido(organizacaoNegocio.Sites);
            tipoOrganizacaoValidacao.Existe(organizacaoNegocio.TipoOrganizacao);


            Organizacao organizacao = PreparaInsercao(organizacaoNegocio);

            organizacao.InicioVigencia = DateTime.Now;

            repositorioOrganizacoes.Add(organizacao);
            unitOfWork.Attach(organizacao.TipoOrganizacao);
            unitOfWork.Attach(organizacao.Esfera);
            unitOfWork.Attach(organizacao.Poder);
            unitOfWork.Save();

            return(Mapper.Map <Organizacao, OrganizacaoModeloNegocio>(organizacao));
        }
        public UnidadeModeloNegocio Inserir(UnidadeModeloNegocio unidade)
        {
            #region Verificação de campos obrigatórios

            unidadeValidacao.NaoNula(unidade);
            unidadeValidacao.Preenchida(unidade);

            tipoUnidadeValidacao.NaoNulo(unidade.TipoUnidade);
            tipoUnidadeValidacao.IdPreenchido(unidade.TipoUnidade);

            organizacaoValidacao.NaoNulo(unidade.Organizacao);
            organizacaoValidacao.GuidPreenchido(unidade.Organizacao);

            unidadeValidacao.UnidadePaiPreenchida(unidade.UnidadePai);

            enderecoValidacao.Preenchido(unidade.Endereco);

            contatoValidacao.Preenchido(unidade.Contatos);

            emailValidacao.Preenchido(unidade.Emails);

            siteValidacao.Preenchido(unidade.Sites);

            #endregion

            #region Validação de Negócio

            unidadeValidacao.Valida(unidade);

            tipoUnidadeValidacao.Existe(unidade.TipoUnidade);

            organizacaoValidacao.GuidValido(unidade.Organizacao.Guid);
            organizacaoValidacao.ExistePorGuid(unidade.Organizacao);

            unidadeValidacao.UnidadePaiValida(unidade.UnidadePai);

            enderecoValidacao.Valido(unidade.Endereco);

            contatoValidacao.Valido(unidade.Contatos);

            emailValidacao.Valido(unidade.Emails);

            siteValidacao.Valido(unidade.Sites);

            #endregion
            Guid guidOrganziacao = new Guid(unidade.Organizacao.Guid);
            unidade.Organizacao.Id = repositorioOrganizcoes.Where(o => o.IdentificadorExterno.Guid.Equals(guidOrganziacao))
                                     .Select(o => o.Id)
                                     .Single();

            if (unidade.UnidadePai != null)
            {
                Guid guidUnidadePai = new Guid(unidade.UnidadePai.Guid);
                unidade.UnidadePai.Id = repositorioUnidades.Where(u => u.IdentificadorExterno.Guid.Equals(guidUnidadePai))
                                        .Select(u => u.Id)
                                        .Single();
            }

            if (unidade.Endereco != null)
            {
                Guid guidMunicipio = new Guid(unidade.Endereco.Municipio.Guid);
                unidade.Endereco.Municipio.Id = repositorioMunicipios.Where(m => m.IdentificadorExterno.Guid.Equals(guidMunicipio))
                                                .Select(m => m.Id)
                                                .Single();
            }

            unidade.Guid = Guid.NewGuid().ToString("D");

            var unid = Mapper.Map <UnidadeModeloNegocio, Unidade>(unidade);
            unid.InicioVigencia = DateTime.Now;

            repositorioUnidades.Add(unid);

            unitOfWork.Save();

            return(Mapper.Map <Unidade, UnidadeModeloNegocio>(unid));
        }