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
Adicione isso ao nível superior do seu pom.xml
Dependency Leiningen
Adicione esta entrada ao nível superior do seu arquivo project.clj
Dependency sbt
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:
Em seguida, adicione esta entrada em qualquer lugar em seu arquivo build.sbt:
Dependency Gradle
Adicione esta entrada em qualquer lugar em seu arquivo build.gradle
Dependency Grape
Crie um arquivo ~/.groovy/grapeConfig.xml
Dependency Ivy
Crie um arquivo ivysettings.xml
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:
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 Listcnpjs = 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 ListexpurgoCnpjs = 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 Listcnpjs = 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()); } }