Documentação SDK Java

Desenvolvemos uma poderasa SDK para facilitar a integração de nossa plataforma com nossos clientes.
Em poucos passos você podera usufluir de todos nossos servicos. Adicione a dependencia da uniquedata-client-sdk
em seu projeto e navegue ate "Documentação de código fonte em Java".
Para maior duvidas solicite ao seu representante comercial um horario com nosso setor de desenvolimento.




Dependency POW MAVEN <dependencies> <dependency> <groupId>com.uniquedata.client.sdk</groupId> <artifactId>uniquedata-client-sdk</artifactId> <version>1.0.0</version> </dependency> <dependencies>

Adicione isso ao nível superior do seu pom.xml

<repositories> <repository> <id>uniquedata-uniquedata-client-sdk</id> <url>https://packagecloud.io/uniquedata/uniquedata-client-sdk/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>

Dependency Leiningen
[com.uniquedata.client.sdk/uniquedata-client-sqk-api "0.0.1-SNAPSHOT"]

Adicione esta entrada ao nível superior do seu arquivo project.clj

:repositories [["snapshots" "https://packagecloud.io/uniquedata/uniquedata-client-sdk/maven2"] ["releases" "https://packagecloud.io/uniquedata/uniquedata-client-sdk/maven2"]]

Dependency sbt
libraryDependencies += "com.uniquedata.client.sdk" % "uniquedata-client-sqk-api" % "0.0.1-SNAPSHOT"

Para suporte a SNAPSHOT (precisa de SBT 0.13.8 ou superior), crie ou anexe o seguinte a um arquivo project/maven.sbt em seu projeto:

addMavenResolverPlugin

Em seguida, adicione esta entrada em qualquer lugar em seu arquivo build.sbt:

resolvers += "uniquedata-uniquedata-client-sdk" at "https://packagecloud.io/uniquedata/uniquedata-client-sdk/maven2"

Dependency Gradle
compile 'com.uniquedata.client.sdk:uniquedata-client-sqk-api:0.0.1-SNAPSHOT'

Adicione esta entrada em qualquer lugar em seu arquivo build.gradle

repositories { maven { url "https://packagecloud.io/uniquedata/uniquedata-client-sdk/maven2" } }

Dependency Grape
@Grapes( @Grab(group='com.uniquedata.client.sdk', module='uniquedata-client-sqk-api', version='0.0.1-SNAPSHOT') )

Crie um arquivo ~/.groovy/grapeConfig.xml

<ivysettings> <settings defaultResolver="downloadGrapes"/> <resolvers> <chain name="downloadGrapes" returnFirst="true"> <filesystem name="cachedGrapes"> <ivy pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/> <artifact pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision](-[classifier]).[ext]"/> </filesystem> <ibiblio name="localm2" root="file:${user.home}/.m2/repository/" checkmodified="true" changingPattern=".*" changingMatcher="regexp" m2compatible="true"/> <!-- todo add 'endorsed groovy extensions' resolver here --> <ibiblio name="uniquedata-uniquedata-client-sdk" root="https://packagecloud.io/uniquedata/uniquedata-client-sdk/maven2" m2compatible="true"/> <ibiblio name="ibiblio" m2compatible="true"/> </chain> </resolvers> </ivysettings>

Dependency Ivy <dependency org="com.uniquedata.client.sdk" name="uniquedata-client-sqk-api" rev="0.0.1-SNAPSHOT" />

Crie um arquivo ivysettings.xml

<ivysettings> <settings defaultResolver="chain"/> <resolvers> <chain name="chain"> <ibiblio name="central" m2compatible="true"/> <ibiblio name="uniquedata-uniquedata-client-sdk" m2compatible="true" root="https://packagecloud.io/uniquedata/uniquedata-client-sdk/maven2"/> </chain> </resolvers> </ivysettings>

Documentação de código fonte em Java


Autenticação

A Unique Data SDK realiza a autenticação automaticamente quando adiconado nas variaveis de ambiente UNIQUEDATA_USER e UNIQUEDATA_PASSOWORD referente seu usuario e senha. Porem para desenvolvimento e testes você pode adicionar System.setProperty("UNIQUEDATA_USER", "teste"), System.setProperty("UNIQUEDATA_PASSOWORD", "123"). Para aplicação em produção sempre utilize via variavel de ambiente para melhor segurança!

Linux e Mac

                
  export UNIQUEDATA_USER=teste   
  export UNIQUEDATA_PASSOWORD=123 
                
              

Windows

                
  set UNIQUEDATA_USER=teste   
  set UNIQUEDATA_PASSOWORD=123 
                
              

Em modo de desenvolvimento ou testes

                
  System.setProperty("UNIQUEDATA_USER", "teste")  
  System.setProperty("UNIQUEDATA_PASSOWORD", "123") 
                
              

Search Empresa

Com o Search empresa você pode obter vários tipos de serviço, search cnpj para consultas rápidas, search result para consultas com muitos filtros e resultados em massa, encontrando assim o perfil ideal para o seu mercado, search count para descobrir o quantitativo de seu filtro, dica importante sempre realize o search count antes do search result para evitar bilhetagens e débitos importunos do seu saldo. Temos também o search stats para análise e estatística, search clone para identificar potenciais clientes automaticamente. Para o result, count e stats será necessário enviar no body uma query predefinida com filtros escolhidos, tipo de ordernação e um array de metadata para respostas. Essa query permitirá uma filtragem de empresas de acordo com o seu interesse.


Search CNPJ

Segue Abaixo um exemplo do search cnpj, percebe-se que 2 parametros são necessários, o CNPJ da empresa na qual deseja filtrar, e um Array com tipo de Metadata de retorno que deseja receber, no exemplo abaixo adicionamos Arrays.asList(Metadado.ALL_RESPONSE) Esse metadado contempla todos os tipos, porem o cliente tem que estar com plano Ouro ou nivel maior, caso contrario você recebera uma exceção de falta de permissão.

Em nossa documentação API REST temos descritos oque significa cada tipo de metadata, para maiores informações segue link já direcionado ao conteúdo específico clique aqui


Código Fonte Exemplo


  public static void main(String[] args) throws IOException {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");	
    
    final EmpresaSearchBuilder empresaSearchBuilder = EmpresaSearchBuilder.builder()
      .addFilterBuilder(FilterEmpresaBuilder.builder());
    
    final String cnpj = "09313141022027"; 
    ResponseEntity<EmpresaProfileDto> responseEntity = empresaSearchBuilder.get(cnpj, Arrays.asList(Metadado.ALL_RESPONSE));
    
    System.out.println(JacksonUtils.toJsonPrettyPrinting(responseEntity.getBody()));
  }  
              

Search Count

Para search count é necessário enviar um FilterEmpresaBuilder aplicando o .addFilter(). Para implementar o FilterEmpresaBuilder você precisa de informações predefinidas em alguns filtros, exemplo disso as faixas de funcionario e faturamento, necessita carregalas primeiro e selecionar o desejado.

Ao construir um final FilterEmpresaBuilder builder = FilterEmpresaBuilder.builder(); você pode invocar builder.getFaixaFuncionario() para carregar os dados do filtro de funcionario.

Segue Abaixo um exemplo de retorno do System.out.println(JacksonUtils.toJsonPrettyPrinting(builder.getFaixaFuncionario()));

  [ {
    "codigo" : 0,
    "descricao" : "NENHUM FUNCIONÁRIO"
  }, {
    "codigo" : 1,
    "descricao" : "MAIS DE 1 FUNCIONÁRIO"
  }, {
    "codigo" : 5,
    "descricao" : "DE 1 A 5 FUNCIONÁRIOS"
  }, {
    "codigo" : 10,
    "descricao" : "DE 6 A 10 FUNCIONÁRIOS"
  }]
  // Para afim de visualização não mostramos todo o array
              

Em nossa documentação API REST temos descritos oque significa cada campo do filtro, para maiores informações segue link já direcionado ao conteúdo específico clique aqui

Código Fonte Exemplo

  public static void main(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");	
    
    final FilterEmpresaBuilder builder = FilterEmpresaBuilder.builder();
    
    //Todos os tipos de situacao cadastral
    final List<SituacaoCadastralDto> situacoesCadastrais = builder.getSituacaoCadastral();
    System.out.println(JacksonUtils.toJsonPrettyPrinting(situacoesCadastrais));
    
    //Todos os tipos de faixas de porte
    final List<FaixaPorteDto> faixasPortes = builder.getFaixaPorte();
    System.out.println(JacksonUtils.toJsonPrettyPrinting(faixasPortes));
    
    //Todos os tipos de faixa de funcionario
    final List<FaixaFuncionarioDto> faixasFuncionarios = builder.getFaixaFuncionario();
    System.out.println(JacksonUtils.toJsonPrettyPrinting(faixasFuncionarios));
    
    //Todos os tipos de faixa de faturamento
    final List<FaixaFaturamentoDto> faixasFaturamento = builder.getFaixaFaturamento();
    System.out.println(JacksonUtils.toJsonPrettyPrinting(faixasFaturamento));
    
	builder.addFilter("SC", FilterEmpresaBuilderType.ESTADO)
		.addFilter(situacoesCadastrais.get(0), FilterEmpresaBuilderType.SITUACAO_CADASTRAL)
		.addFilter(faixasPortes.get(1), FilterEmpresaBuilderType.FAIXA_PORTE)
		.addFilter(faixasPortes.get(2), FilterEmpresaBuilderType.FAIXA_PORTE)
		.addFilter(faixasPortes.get(3), FilterEmpresaBuilderType.FAIXA_PORTE)
		.addFilter(faixasPortes.get(4), FilterEmpresaBuilderType.FAIXA_PORTE)
		.addFilter(faixasFuncionarios.get(1), FilterEmpresaBuilderType.FAIXA_FUNCIONARIO)
		.addFilter(faixasFuncionarios.get(2), FilterEmpresaBuilderType.FAIXA_FUNCIONARIO)
		.addFilter(faixasFuncionarios.get(3), FilterEmpresaBuilderType.FAIXA_FUNCIONARIO)
		.addFilter(faixasFuncionarios.get(4), FilterEmpresaBuilderType.FAIXA_FUNCIONARIO)
		.addFilter(faixasFaturamento.get(0), FilterEmpresaBuilderType.FAIXA_FATURAMENTO)
		.addFilter(faixasFaturamento.get(1), FilterEmpresaBuilderType.FAIXA_FATURAMENTO)
		.addFilter(faixasFaturamento.get(2), FilterEmpresaBuilderType.FAIXA_FATURAMENTO)
		.addFilter(faixasFaturamento.get(3), FilterEmpresaBuilderType.FAIXA_FATURAMENTO)
		.addFilter(new FilterDoubleRangeDto(1000d, 100_000d), FilterEmpresaBuilderType.CAPITAL_SOCIAL);
    
    final EmpresaSearchBuilder empresaSearchBuilder = EmpresaSearchBuilder.builder().addFilterBuilder(builder);
    
    final ResultCountDto resultCount = empresaSearchBuilder.getFilterCount().getBody();
    System.out.println(resultCount.toStringJson());
  }
              

Search Result

Para search result é necessário enviar um FilterEmpresaBuilder, igualmente o search count, porem no search result você precisa especifica os metadados de retorno .addMetadata, e a quantidade que deseja exportar .addSort(new SortDto(0, 100)), segue abaixo exemplo do código fonte completo.

Em nossa documentação API REST temos descritos oque significa cada tipo de metadata, para maiores informações segue link já direcionado ao conteúdo específico clique aqui

Em nossa documentação API REST temos descritos oque significa cada campo de filtro, para maiores informações segue link já direcionado ao conteúdo específico clique aqui

Código Fonte Exemplo 1

    public static void main(String[] args) {
      System.setProperty("UNIQUEDATA_USER", "teste");
      System.setProperty("UNIQUEDATA_PASSOWORD", "123");	
      
      final FilterEmpresaBuilder builder = FilterEmpresaBuilder.builder();
      
      //Todos os tipos de situacao cadastral
      final List<SituacaoCadastralDto> situacoesCadastrais = builder.getSituacaoCadastral();
      System.out.println(JacksonUtils.toJsonPrettyPrinting(situacoesCadastrais));
      
      //Todos os tipos de faixas de porte
      final List<FaixaPorteDto> faixasPortes = builder.getFaixaPorte();
      System.out.println(JacksonUtils.toJsonPrettyPrinting(faixasPortes));
      
      //Todos os tipos de faixa de funcionario
      final List<FaixaFuncionarioDto> faixasFuncionarios = builder.getFaixaFuncionario();
      System.out.println(JacksonUtils.toJsonPrettyPrinting(faixasFuncionarios));
      
      //Todos os tipos de faixa de faturamento
      final List<FaixaFaturamentoDto> faixasFaturamento = builder.getFaixaFaturamento();
      System.out.println(JacksonUtils.toJsonPrettyPrinting(faixasFaturamento));
      
      builder.addFilter("SC", FilterEmpresaBuilderType.ESTADO)
        .addFilter(situacoesCadastrais.get(0), FilterEmpresaBuilderType.SITUACAO_CADASTRAL)
        .addFilter(faixasPortes.get(1), FilterEmpresaBuilderType.FAIXA_PORTE)
        .addFilter(faixasPortes.get(2), FilterEmpresaBuilderType.FAIXA_PORTE)
        .addFilter(faixasPortes.get(3), FilterEmpresaBuilderType.FAIXA_PORTE)
        .addFilter(faixasPortes.get(4), FilterEmpresaBuilderType.FAIXA_PORTE)
        .addFilter(faixasFuncionarios.get(1), FilterEmpresaBuilderType.FAIXA_FUNCIONARIO)
        .addFilter(faixasFuncionarios.get(2), FilterEmpresaBuilderType.FAIXA_FUNCIONARIO)
        .addFilter(faixasFuncionarios.get(3), FilterEmpresaBuilderType.FAIXA_FUNCIONARIO)
        .addFilter(faixasFuncionarios.get(4), FilterEmpresaBuilderType.FAIXA_FUNCIONARIO)
        .addFilter(faixasFaturamento.get(0), FilterEmpresaBuilderType.FAIXA_FATURAMENTO)
        .addFilter(faixasFaturamento.get(1), FilterEmpresaBuilderType.FAIXA_FATURAMENTO)
        .addFilter(faixasFaturamento.get(2), FilterEmpresaBuilderType.FAIXA_FATURAMENTO)
        .addFilter(faixasFaturamento.get(3), FilterEmpresaBuilderType.FAIXA_FATURAMENTO)
        .addFilter(new FilterDoubleRangeDto(1000d, 100_000d), FilterEmpresaBuilderType.CAPITAL_SOCIAL);
      
      final EmpresaSearchBuilder empresaSearchBuilder = EmpresaSearchBuilder.builder()
        .addFilterBuilder(builder)
        .addMetadata(Arrays.asList(Metadado.ATIVIDADES_CNAES, Metadado.CADASTRAIS, Metadado.CONTATO, 
            Metadado.CONTATO_HOT, Metadado.FATURAMENTO, Metadado.FUNCIONARIOS, Metadado.LOCALIZACAO, 
            Metadado.SOCIOS,Metadado.REGIME_TRIBUTARIO, Metadado.REDES_SOCIAIS, Metadado.FILIAL_CNPJ_INFO))
        .addSort(new SortDto(0, 100));
      
        //Para invocar o method getFilterResult() você tera um limite de resultados de 1000 registros!
        //Para exportar mais de 1000 registro sera necessários ultilizar o empresaSearchBuilder.doPooling
        // onde executara o servico paginado
        final ResponseEntity<EmpresaProfilesDtos> filterResult = empresaSearchBuilder.getFilterResult();
        
        System.out.println(filterResult.getBody().toStringJson());
    }   
              

Notase que o metodo getFilterResult() exporta ate 1000 registro, além desse limite ele ira disparar uma exceção FilterRuntimeException("Sort Size Limit is 1_000 Per Page. Use method doPooling for more item").
Para exportar mais de 1000 registro é necessario fazer paginação dos registos, porem com nossa SDK você tem um metodo chamado doPooling onde exporta os dados paginados. Segue um exemploa abaixo:

Parametro: background ira determinar se o processo ira rodar em segundo plano ou dentro do processo principal (main);

Código Fonte Exemplo 2

  final EmpresaSearchBuilder empresaSearchBuilder = EmpresaSearchBuilder.builder()
    .addFilterBuilder(builder)
    .addMetadata(Arrays.asList(Metadado.ATIVIDADES_CNAES, Metadado.CADASTRAIS, Metadado.CONTATO, 
        Metadado.CONTATO_HOT, Metadado.FATURAMENTO, Metadado.FUNCIONARIOS, Metadado.LOCALIZACAO, 
        Metadado.SOCIOS,Metadado.REGIME_TRIBUTARIO, Metadado.REDES_SOCIAIS, Metadado.FILIAL_CNPJ_INFO))
    .addSort(new SortDto(0, 2000));

  final boolean background = false;

  empresaSearchBuilder.doPooling(background, new CallBack<EmpresaProfilesDtos>() {
    @Override
    public void onSuccess(final EmpresaProfilesDtos empresaProfilesDtos) {
      System.out.println(empresaProfilesDtos.getEmpresaProfiles().size());
      System.out.println(empresaProfilesDtos.toStringJson());
    }

    @Override
    public void onError(final String message, final int httpCod) {
      System.out.println(message);
    }
  });
              

Código Fonte Exemplo 3
Adicionado filtro para buscar CNPJs especificos.

  public static void main(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");	
    
    final FilterEmpresaBuilder builder = FilterEmpresaBuilder.builder();
  
    //Minha lista de cnpjs
    final List cnpjs = Arrays.asList("05337875000105", "97764302000178", "97885107000104")

    //Filtrando somente os cnpjs especificos
    builder.addFilter(cnpjs, FilterEmpresaBuilderType.CNPJ);

    final EmpresaSearchBuilder empresaSearchBuilder1 = EmpresaSearchBuilder.builder()
      .addFilterBuilder(builder)
      .addMetadata(Arrays.asList(Metadado.ALL_RESPONSE))
      .addSort(new SortDto(0, 3));
  
    final ResponseEntity<EmpresaProfilesDtos> filterResult = empresaSearchBuilder.getFilterResult();

    System.out.println(filterResult.getBody().toStringJson())
  }  
              

Código Fonte Exemplo 4
Adicionado lista de expurgo.

  public static void main(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");	
    
    final FilterEmpresaBuilder builder = FilterEmpresaBuilder.builder();

    //Minha lista de expurgos
    final List expurgoCnpjs = Arrays.asList("05337875000105", "97764302000178", "97885107000104");

    //Expurgando somente os cnpjs especificos
    builder.addFilter(expurgoCnpjs, FilterEmpresaBuilderType.EXPURGO_CNPJ)
      .addFilter("SC", FilterEmpresaBuilderType.ESTADO)
      .addFilter(new FilterDoubleRangeDto(1000d, 100_000d), FilterEmpresaBuilderType.CAPITAL_SOCIAL);

    final EmpresaSearchBuilder empresaSearchBuilder1 = EmpresaSearchBuilder.builder()
      .addFilterBuilder(builder)
      .addMetadata(Arrays.asList(Metadado.ALL_RESPONSE))
      .addSort(new SortDto(0, 100));

    final ResponseEntity<EmpresaProfilesDtos> filterResult = empresaSearchBuilder.getFilterResult();

    System.out.println(filterResult.getBody().toStringJson())
  }  
              

Search Stats

Para search stats é necessário enviar um FilterEmpresaBuilder, igualmente o search count e search result, segue abaixo exemplo de condigo fonte.

Em nossa documentação API REST temos descritos oque significa cada campo de filtro, para maiores informações segue link já direcionado ao conteúdo específico clique aqui

Código Fonte Exemplo

  public static void main(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");	
    
    final FilterEmpresaBuilder builder = FilterEmpresaBuilder.builder();
    
    //Todos os tipos de situacao cadastral
    final List<SituacaoCadastralDto> situacoesCadastrais = builder.getSituacaoCadastral();
    System.out.println(JacksonUtils.toJsonPrettyPrinting(situacoesCadastrais));
    
    //Todos os tipos de faixas de porte
    final List<FaixaPorteDto> faixasPortes = builder.getFaixaPorte();
    System.out.println(JacksonUtils.toJsonPrettyPrinting(faixasPortes));
    
    //Todos os tipos de faixa de funcionario
    final List<FaixaFuncionarioDto> faixasFuncionarios = builder.getFaixaFuncionario();
    System.out.println(JacksonUtils.toJsonPrettyPrinting(faixasFuncionarios));
    
    //Todos os tipos de faixa de faturamento
    final List<FaixaFaturamentoDto> faixasFaturamento = builder.getFaixaFaturamento();
    System.out.println(JacksonUtils.toJsonPrettyPrinting(faixasFaturamento));
    
    builder.addFilter("SC", FilterEmpresaBuilderType.ESTADO)
      .addFilter(situacoesCadastrais.get(0), FilterEmpresaBuilderType.SITUACAO_CADASTRAL)
      .addFilter(faixasPortes.get(1), FilterEmpresaBuilderType.FAIXA_PORTE)
      .addFilter(faixasPortes.get(2), FilterEmpresaBuilderType.FAIXA_PORTE)
      .addFilter(faixasPortes.get(3), FilterEmpresaBuilderType.FAIXA_PORTE)
      .addFilter(faixasPortes.get(4), FilterEmpresaBuilderType.FAIXA_PORTE)
      .addFilter(faixasFuncionarios.get(1), FilterEmpresaBuilderType.FAIXA_FUNCIONARIO)
      .addFilter(faixasFuncionarios.get(4), FilterEmpresaBuilderType.FAIXA_FUNCIONARIO)
      .addFilter(faixasFaturamento.get(2), FilterEmpresaBuilderType.FAIXA_FATURAMENTO)
      .addFilter(faixasFaturamento.get(3), FilterEmpresaBuilderType.FAIXA_FATURAMENTO)
      .addFilter(new FilterDoubleRangeDto(1000d, 100_000d), FilterEmpresaBuilderType.CAPITAL_SOCIAL);
    
    final EmpresaSearchBuilder empresaSearchBuilder = EmpresaSearchBuilder.builder().addFilterBuilder(builder);
    
    final ResponseEntity<EmpresaSearchStatsResultsDto> filterStats = empresaSearchBuilder.getFilterStats();
    final EmpresaSearchStatsResultsDto empresaSearchStatsResults = filterStats.getBody();
    System.out.println(empresaSearchStatsResults.toStringJson());
      
  }  
              
Search Clone

Neste servico especial, que será demonstrada abaixo, onde será possível enviar CNPJs de empresas de sua carteira de cliente, informando tais dados, nossa plataforma irá estudar o perfil dessas empresas (por meio dos mais diversos dados, como CNAE, porte, faturamento presumido, etc) e fará uma filtragem elaborada para prospecção de clientes.

Ao enviar uma lista de CNPJs, como exemplificado na seção [REFERENCE], na requisição "Clonagem", você obterá o(s) seguinte(s) retorno(s) baseado obviamente na quantidade de CNPJs enviados. O exemplo a seguir mostra o retorno ao envio do CNPJ do Banco do Brasil e da Caixa Econômica Federal.

Código Fonte Exemplo

  public static void main(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");	
    
    final FilterEmpresaBuilder builder = FilterEmpresaBuilder.builder();
    final EmpresaSearchBuilder empresaSearchBuilder = EmpresaSearchBuilder.builder().addFilterBuilder(builder);

    final List<String> cnpjs = Arrays.asList("00000000000191", "00360305000104");
    
    final List<FilterClone> filterClone = empresaSearchBuilder.getFilterClone(cnpjs);
    System.out.println(JacksonUtils.toJsonPrettyPrinting(filterClone));
  }  
              

Empresa Search Contato Qualificado

No empresa search contato qualificada temos telefones e e-mails qualificados de diversas fontes.

O empresa search contato qualificada é diferente do search empresa onde você solicita e recebe a resposta com os dados em instantes, neste caso a mesma gera uma task para processamento e recebe um callback via WEBHOOK ou você pode checar em um X numero de tempo.

Percebe-se que no search contato empresa qualificado temos o empresaContatoQualificadoBuilder.check() onde verifica o status e caso estaja finalizada a mesma tambem retorna o dado solicitado.

Temos tambem o doPooling para gerenciar sua task porem o metodo mais seguro e mais confiavel seria aguardar o callback via webhook.

Para entender melhor como funciona o callback via webhook de nossa SDK, visualize o menu SDK Unique Data server embedded

Código Fonte Exemplo

                
  public static void empresaQualificada() {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "teste");
    
    final boolean webHook = true;
    final List cnpjs = Arrays.asList("30941863000124");
    
    final EmpresaContatoQualificadolBuilder empresaContatoQualificadoBuilder = EmpresaContatoQualificadolBuilder.builder(cnpjs);
    
    // Gera uma task pra processar a empresa contato qualificado
    final ResponseEntity generate = empresaContatoQualificadoBuilder.generate(webHook);
    System.out.println(generate.getStatusCode().value() + " : " + JacksonUtils.toJson(generate.getBody().getStatus()));
    
    // Checa os status da task e caso a mesma estaja finalizada 
    // você pode recuperar o objeto atraves do reponseCheck.getBody();
    final ResponseEntity check = empresaContatoQualificadoBuilder.check();
    System.out.println(check.getStatusCode().value() + " : " + JacksonUtils.toJson(check.getBody()));
    
    // No empresa search qualificado você pode ultilizar o doPooling para gerenciar sua task, porem o metodo mais 
    // seguro e mais confiavel seria aguardar o callback via webhook

    final boolean background = false;
    
    empresaContatoQualificadoBuilder.doPooling(background, new CallBack() {
      @Override
      public void onSuccess(final TaskEmpresContatoaQualificadoDto empresaContatoQualificado) {
        System.out.println(JacksonUtils.toJson(empresaContatoQualificado));
      }
      
      @Override
      public void onError(final String message, final int httpCod) {
        System.out.println(httpCod + " : " +message);
      }
    });
  }            
              

Ciclo Federal

No ciclo federal temos um conjunto de certidões POSITIVAS/NEGATIVAS e IDONIA/INIDONIA e uma análise estatística da saúde federal da empresa em si.

O ciclo federal é diferente do search empresa onde você solicita e recebe a resposta com os dados em instantes, neste caso a mesma gera uma task para processamento e recebe um callback via WEBHOOK ou você pode checar em um X numero de tempo.
Porem caso tenhamos as certidões atualizadas em cache com prazo de validade em dia a mesma então é retornada na propria requisição.

Percebe-se que no ciclo federal temos o cicloFederalBuilder.check() onde verifica o status e caso estaja finalizada a mesma tambem retorna o dado solicitado.

Temos tambem o doPooling para gerenciar sua task porem o metodo mais seguro e mais confiavel seria aguardar o callback via webhook.

Para entender melhor como funciona o callback via webhook de nossa SDK, visualize o menu SDK Unique Data server embedded

Código Fonte Exemplo


    public static void main00(String[] args) {
      System.setProperty("UNIQUEDATA_USER", "teste");
      System.setProperty("UNIQUEDATA_PASSOWORD", "teste");
      
      final String cnpj = "00011397000117";
      final boolean webHook = true;
      
      final CicloFederalBuilder cicloFederalBuilder = CicloFederalBuilder.builder(cnpj);
      
      // Gera uma task pra processar o ciclo federal
      final ResponseEntity<CicloFederalTaskDto> response = cicloFederalBuilder.generate(webHook);
      System.out.println(response.getStatusCode().value() + " : " + JacksonUtils.toJson(response.getBody().getStatus()));
      
      // Checa os status da task e caso a mesma estaja finalizada,
      // você pode recuperar o objeto atraves do reponseCheck.getBody().getCicloFederal();
      final ResponseEntity<CicloFederalTaskDto> reponseCheck = cicloFederalBuilder.check();
      System.out.println(reponseCheck.getStatusCode().value() + " : " + JacksonUtils.toJson(reponseCheck.getBody()));
      
      // No Ciclo Federal você pode ultilizar o doPooling para gerenciar sua task, porem o metodo mais 
      // seguro e mais confiavel seria aguardar o callback via webhook

      final boolean background = false;

      cicloFederalBuilder.doPooling(background, new CallBack<CicloFederalDto>() {
        @Override
        public void onSuccess(final CicloFederalDto cicloFederal) {
          System.out.println(JacksonUtils.toJson(cicloFederal));
        }
        
        @Override
        public void onError(final String message, final int httpCod) {
          System.out.println(httpCod + " : " +message);
        }
      });

    }
              

Código Fonte Exemplo 2 - Multiplos Solicitações

  public static void main(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");	
    
    final boolean webHook = true;
    final List<String> cnpjs = new ArrayList<>(Arrays.asList("05337875000105", "97764302000178", "97885107000104"));
    
    final CicloFederalBuilder cicloFederalBuilder = CicloFederalBuilder.builder(null);
    
    for (final String cnpj : cnpjs) {
      final ResponseEntity<CicloFederalTaskDto> response = cicloFederalBuilder.putCnpj(cnpj).generate(webHook);
      System.out.println(response.getStatusCode().value() + " : " + JacksonUtils.toJson(response.getBody().getStatus()));
    }

  }  
              


Código Fonte Exemplo 3 - Multiplas Checagem

  public static void main(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");
    
    final List<String> myCnpjsInProcess = new ArrayList<>(Arrays.asList("05337875000105", "97764302000178", "97885107000104"));
    
    final CicloFederalBuilder cicloFederalBuilder = CicloFederalBuilder.builder(null);
    
    for (final String cnpj : myCnpjsInProcess) {
      final ResponseEntity<CicloFederalTaskDto> response = cicloFederalBuilder.putCnpj(cnpj).check();
      System.out.println(response.getStatusCode().value() + " : " + JacksonUtils.toJson(response.getBody().getStatus()));
    }

  }  
              


Cnds Federais Individual

Na certidão/cnd federal temos uma certidão especifica diferente do ciclo federal onde contempla um conjunto de certidão.

O certidão federal individual é diferente do search empresa onde você solicita e recebe a resposta com os dados em instantes, neste caso a mesma gera uma task para processamento e recebe um callback via WEBHOOK ou você pode checar em um X numero de tempo. Porem caso tenhamos as certidões atualizadas em cache com prazo de validade em dia a mesma então é retornada na propria requisição.

Percebe-se que no certidão federal individual temos o cndFederalBuilder.check(CndType.CND_DEBITOS_PGFN) onde verifica o status e caso estaja finalizada a mesma tambem retorna o dado solicitado.

Temos tambem o doPooling para gerenciar sua task porem o metodo mais seguro e mais confiavel seria aguardar o callback via webhook.

    - Para certidões unitária precisa-se do paramentro type, segue abaixo os tipos:

  • CND_DEBITOS_PGFN
  • CND_MTE_TRABALHISTA
  • CND_TST_TRIBUNAL_SUPERIOR_DO_TRABALHO
  • CND_FGTS
  • CND_CNJ
  • IDONEA_SICAF
  • IDONEA_CEIS
  • IDONEA_CEPIM

Para entender melhor como funciona o callback via webhook de nossa SDK, visualize o menu SDK Unique Data server embedded

Código Fonte Exemplo

  public static void main(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");
    
    final String cnpj = "40912119000155";
    final boolean webHook = true;

    final CndFederalBuilder cndFederalBuilder = CndFederalBuilder.builder(cnpj);
    
    final ResponseEntity<TaskDto> response = cndFederalBuilder.generate(CndType.CND_DEBITOS_PGFN, webHook);
    System.out.println(response.getStatusCode().value() + " : " + JacksonUtils.toJson(response.getBody()));
    
    final ResponseEntity<TaskDto> check = cndFederalBuilder.check(CndType.CND_DEBITOS_PGFN);
    System.out.println(check.getStatusCode().value() + " : " + JacksonUtils.toJson(check.getBody()));
    
    cndFederalBuilder.doPooling(false, new CallBack<TaskDto>() {
      @Override
      public void onSuccess(final TaskDto task) {
        System.out.println(JacksonUtils.toJson(task.getResultData(PgfnDto.class)));
      }

      @Override
      public void onError(final String message, final int httpCod) {
        System.out.println(httpCod + " : " + message);
      }
    });
  }
              

Código Fonte Exemplo 2 - Multiplos Solicitações

  public static void main(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");	
    
    final boolean webHook = true;
    final List<String> cnpjs = new ArrayList<>(Arrays.asList("05337875000105", "97764302000178", "97885107000104"));
    
    final CndFederalBuilder cndFederalBuilder = CndFederalBuilder.builder(null);
    
    for (final String cnpj : cnpjs) {
      final ResponseEntity<CicloFederalTaskDto> response = cndFederalBuilder.putCnpj(cnpj).generate(CndType.CND_DEBITOS_PGFN, webHook);
      System.out.println(response.getStatusCode().value() + " : " + JacksonUtils.toJson(response.getBody().getStatus()));
    }

  }  
              

Código Fonte Exemplo 3 - Multiplas Checagem

  public static void main(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "123");
    
    final List<String> myCnpjsInProcess = new ArrayList<>(Arrays.asList("05337875000105", "97764302000178", "97885107000104"));
    
    final CndFederalBuilder cndFederalBuilder = CndFederalBuilder.builder(null);
    
    for (final String cnpj : myCnpjsInProcess) {
      final ResponseEntity<CicloFederalTaskDto> response = cndFederalBuilder.putCnpj(cnpj).check(CndType.CND_DEBITOS_PGFN);
      System.out.println(response.getStatusCode().value() + " : " + JacksonUtils.toJson(response.getBody().getStatus()));
    }

  }  
              


Compliance & Analise de Risco

No módulo compliance com análise de risco temos uma compilação de dados do seach empresa (PJ), do ciclo federal, análise na saude fiscal da empresa, análise na situação tributaria e do desenvolvimento da empresa ao seu crescimento. Neste Módulo temos um termomitro de risco da empresa e uma credit score avaliando o crescimento da empresa ou mal desenvolvimento da mesma. Não somos um birô de credito nossa análise para nosso credit score é baseado na saude fiscal federal da empresa, no seu desenvolvimento exeterno. Em uma análise interna somente um birô de credito pois o mesmo analisa notas, falta de pagamentos, protestos que contenham dados sensiveis dentro da LGBD.


O compliance é diferente do search empresa onde você solicita e recebe a resposta mesmo instante, no caso da compliance, a mesma gera uma task para processamento e recebe um callback via WEBHOOK ou você pode checar em um X numero de tempo. Neste módulo não possibilidade de receber o compliance na resposta da propria requisição.

Segue Exemplo abaixo

Código Fonte Exemplo

  public static void main4(String[] args) {
    System.setProperty("UNIQUEDATA_USER", "teste");
    System.setProperty("UNIQUEDATA_PASSOWORD", "teste");
    
    final String cnpj = "00011397000117";
    final boolean webHook = true;
    
    final ComplianceBuilder complianceBuilder = ComplianceBuilder.builder(cnpj);
    
    final ResponseEntity<TaskEmpresaComplianceDto> response = complianceBuilder.generate(webHook);
    System.out.println(response.getStatusCode().value() + " : " + JacksonUtils.toJson(response.getBody()));
    
    final ResponseEntity<TaskEmpresaComplianceDto> check = complianceBuilder.check();
    System.out.println(check.getStatusCode().value() + " : " + JacksonUtils.toJson(check.getBody()));
    
    complianceBuilder.doPooling(true, new CallBack<TaskEmpresaComplianceDto>() {
      @Override
      public void onSuccess(final TaskEmpresaComplianceDto task) {
        final CicloFederalDto cicloFederalCached = task.getCicloFederalCached();
        final EmpresaProfileDto empresaProfileCached = task.getEmpresaProfileCached();
        final EmpresaComplianceDto empresaComplianceCached = task.getEmpresaComplianceCached();
        
        System.out.println(JacksonUtils.toJson(empresaComplianceCached));
      }

      @Override
      public void onError(final String message, final int httpCod) {
        System.out.println(httpCod + " : " + message);
      }
    });
  
  }
              


SDK Unique Data server embedded

Nossa SDK Java tambem contem um servidor embarcado chamado UniqueDataEmbeddedServer para receber as respontas da Unique Data API via webhook sem precisar implemantar um linha de código.

O UniqueDataEmbeddedServer realizar todo processo automaticamente de se autenticar e se comunicar com a Unique Data API.

Detalhes: O UniqueDataEmbeddedServer gera um token de autenticação e atualiza a Unique Data API para que a mesma tenha seguraça quando vier fazer um callback para UniqueDataEmbeddedServer.
A UniqueDataEmbeddedServer faz a leitura do ip da maquina em que esta rodando e atualiza a Unique Data API para que saiba o endereco de resposta.

Importante deixar liberado a porta da sua maquina em que a Unique Data API se comunicara com UniqueDataEmbeddedServer. A porta padrão é 6538 (Pode ser customizado)

Para recepcionar as informações que chegam atraves do UniqueDataEmbeddedServer, você pode usar nossa annotation @UniqueDataReciver(type = CallBackType.CICLO_FEDERAL). Abaixo você vera exemplo na pratica.

UniqueDataEmbeddedServer algumas configurações:

  • .handler(new App()): Classe responsavel para recepcionar as solictações
  • .addPort(9982): Caso queira configurar uma porta difente na sua maquina é só ultilizar esse camando para trocar no UniqueDataEmbeddedServer tambem.
  • .addServerPath("./override"): O server paath é resposanvel pelo mapeamento do endpoint em que a Unique Data API respondera para o UniqueDataEmbeddedServer, o ServerPath defatult: "/uniquedata/embedded/reciver"
  • .overwriteUrlAddress("http://minhaUrl.com.br"): Este recurso so sera necessario caso você esteja em modo de desenvolvimento ou teste, ou queira manipular o endereco de seu servidor ou adiconar HTTPs. A UrlAddress default é o ip da sua maquina

Para no modo de desenvolvimento e testes utilize o servico NGROK para servir de proxy com seu ip e gerar um url de acesso segura com sua maquina. Ngrok download: clique aqui.
Ou você podera configurar sua rede e seu ip pare receber requisições externas que em muitos casos é um risco que pode ser contornado facilemnte com ngrok, mas fica a acago do desenvolvedor que esta implementando escolher sua melhor forma de desenvolver e testar os serviços.

Comando bash para rodar ngrok ./ngrok http 6538

Abaixo você vera uma screenshot da tela que aparece após o comando.



Nota-se que ele fez um tunel entre sua maquina eo servidor ngrok e disponibila duas url para acesso, utilizaremos a url http como exemplo aqui http://39c7-189-4-100-191.ngrok.io essa url respondera http://localhost:6538 onde o UniqueDataEmbeddedServer esta rodando.

Exemplo de código fontes para modo desenvolimento e teste

  public class App {

    public static void main11(String[] args) {
      UniqueDataEmbeddedServer.handler(new App())
        .overwriteUrlAddress("http://9cfb-189-4-100-191.ngrok.io")
        .ignoreCheckWebHook()
        .startup();
    }

    @UniqueDataReciver(type = CallBackType.CICLO_FEDERAL)
    public void reciverCicloFederal(@CicloFederalTask CicloFederalTaskDto cicloFederalTask) {
      System.out.println(cicloFederalTask.toStringJson());
    }
    
    @UniqueDataReciver(type = CallBackType.CND)
    public void reciverCND(@CndTask TaskDto task) {
      System.out.println(task.toStringJson());
    }
    
    @UniqueDataReciver(type = CallBackType.COMPLIANCE)
    public void reciverCND(@ComplianceTask TaskEmpresaComplianceDto taskEmpresaCompliance) {
      System.out.println(taskEmpresaCompliance.toStringJson());
    }
    
  }
              

Exemplo de código fontes para modo produção deixando tudo automatico

  public class App {

      public static void main11(String[] args) {
        UniqueDataEmbeddedServer.handler(new App())
          .forceUpdateWebHookUrl()
          .startup();
      }
  
      @UniqueDataReciver(type = CallBackType.CICLO_FEDERAL)
      public void reciverCicloFederal(@CicloFederalTask CicloFederalTaskDto cicloFederalTask) {
        System.out.println(cicloFederalTask.toStringJson());
      }
      
      @UniqueDataReciver(type = CallBackType.CND)
      public void reciverCND(@CndTask TaskDto task) {
        System.out.println(task.toStringJson());
      }
      
      @UniqueDataReciver(type = CallBackType.COMPLIANCE)
      public void reciverCND(@ComplianceTask TaskEmpresaComplianceDto taskEmpresaCompliance) {
        System.out.println(taskEmpresaCompliance.toStringJson());
      }
      
  }  
              

Exemplo de código fontes para modo produção semi-customizado

  public class App {

      public static void main11(String[] args) {
        UniqueDataEmbeddedServer.handler(new App())
          .forceUpdateWebHookUrl()
          .addPort(8096)
          .addServerPath("./override")
          .startup();
      }
  
      @UniqueDataReciver(type = CallBackType.CICLO_FEDERAL)
      public void reciverCicloFederal(@CicloFederalTask CicloFederalTaskDto cicloFederalTask) {
        System.out.println(cicloFederalTask.toStringJson());
      }
      
      @UniqueDataReciver(type = CallBackType.CND)
      public void reciverCND(@CndTask TaskDto task) {
        System.out.println(task.toStringJson());
      }
      
      @UniqueDataReciver(type = CallBackType.COMPLIANCE)
      public void reciverCND(@ComplianceTask TaskEmpresaComplianceDto taskEmpresaCompliance) {
        System.out.println(taskEmpresaCompliance.toStringJson());
      }
      
  }  
              

Exemplo de código fontes para modo produção customizado

  public class App {

      public static void main11(String[] args) {
        UniqueDataEmbeddedServer.handler(new App())
          .overwriteUrlAddress("https://mydomain.com.br")
          .addServerPath("/myendpoint/reciver")
          .addPort(443)
          .ignoreCheckWebHook()
          .startup();
      }
  
      @UniqueDataReciver(type = CallBackType.CICLO_FEDERAL)
      public void reciverCicloFederal(@CicloFederalTask CicloFederalTaskDto cicloFederalTask) {
        System.out.println(cicloFederalTask.toStringJson());
      }
      
      @UniqueDataReciver(type = CallBackType.CND)
      public void reciverCND(@CndTask TaskDto task) {
        System.out.println(task.toStringJson());
      }
      
      @UniqueDataReciver(type = CallBackType.COMPLIANCE)
      public void reciverCND(@ComplianceTask TaskEmpresaComplianceDto taskEmpresaCompliance) {
        System.out.println(taskEmpresaCompliance.toStringJson());
      }
      
  }