O sistema Focus NFe é dividido em duas partes, o módulo Web e o Núcleo.
O núcleo é o responsável por toda a lógica puramente inerente à Nota Fiscal Eletrônica, ou seja, a geração dos arquivos XML e DANFe, a comunicação com a receita para autorização, cancelamento e outras operações, a escolha entre servidor normal ou SCAN (contingência) e por aí vai.
Já o Módulo Web é o responsável pela interação com o usuário do sistema, são telas desenhadas para funcionar dentro do navegador e destinadas aos cadastros básicos (pessoas, produtos, etc) e para o preenchimento da Nota Fiscal em si. É responsabilidade do módulo web também toda a lógica de cálculo automatizado de impostos, funcionalidade muito apreciada pelos nossos usuários pois evita a necessidade de preenchimento de dezenas de campos referentes aos vários tributos existentes no Brasil.
Além do uso comum do sistema, ou seja, o preenchimento da NFe nas telas web e envio das notas, existem hoje duas formas de integrar outros sistemas com o Focus NFe. A integração direta e a integração 2 (que nome dar?). Na integração direta é responsabilidade do sistema que está se integrando de preencher todos os dados da nota fiscal, enviar diretamente ao núcleo do Focus NFe e consultar o resultado um tempo depois. Esta integração é explicada aqui (link para um post que explique isso).
O Módulo Web também pode ser integrado com sistemas externos, desta forma o sistema que está se integrando não precisa fazer todos os cálculos de impostos, cadastrando via API os destinatários da nota, os produtos e a nota em si.
Conceitos básicos da API
A API se baseia em domínios e tokens de acesso. Ao contratar o Focus NFe na modalidade “Integração Módulo Web” o programador receberá um identificador de domínio e um token de acesso de nosso suporte técnico. Toda a comunicação deverá ser feita através da utilização destas informações. Veja o exemplo abaixo, ele faz uma busca por uma pessoa com cnpj 07.504.505/0001-32 no domínio 100.
https://app.acras.com.br/web_nfe/api/pessoas?domain=100&access_token=J8Lqxw81upY8m0oTyE30ubwh9Umin6wQ&cnpj=03693480614355
Veja que os dois primeiros parâmetros da URL são o domain e o access_token.
API de pessoas
Índice
sintaxe: [GET] /pessoas
parâmetros: cnpj ou cpf
retorno:
-quando encontrar uma pessoa retorna um xml representando a pessoa e status 200
-quando não encontrar uma pessoa retorna vazio e status 404
Não disponibilizamos uma listagem completa de todas as pessoas cadastradas para evitar solicitações que sobrecarreguem o serviço. Todo índice deverá conter filtragem por CNPJ ou CPF.
Criação
sintaxe: [POST] /pessoas
uso:
-Todos os parâmetros devem ser enviados como sub-parâmetros de pessoa,
ou seja pessoa['nome'], pessoa['cpf'], etc.
parâmetros:
-nome: o nome da pessoa com até 60 caracteres
-cpf ou cnpj: somente um dos dois sendo cpf com 11 ou cnpj com 14 caracteres
-inscricao_estadual ou isento_inscricao_estadual: inscricao_estadual com até
14 caracteres ou o isento_inscricao_estadual preenchido com o valor 1 para
indicar que é isento.
-telefone: 10 caracteres exatamente
-email: Endereço de e-mail da pessoa. Se for informado, o Focus NFe irá disparar
um e-mail para esta pessoa sempre que uma NFe seja autorizada para ela.
-habilita_emissao_nfe: 0 - Não, 1 - Sim. Se estiver desabilitado não será possível
emitir NFe para esta pessoa e algumas validações serão desligadas
-logradouro(obrigatório se habilita_nfe=1): nome do logradouro
-numero(obrigatório se habilita_nfe=1): número do endereço
-complemento: complemento do endereço
-bairro(obrigatório se habilita_nfe=1): bairro da pessoa
-municipio(obrigatório se habilita_nfe=1): verifique abaixo as duas formas de
preencher o município, se for preenchido codigo_municipio os outros dois
parâmetros serão ignorados
-codigo_municipio: Código IBGE do município
-nome_municipio e uf_municipio: Dois parâmetros, um contendo o nome e outro contendo a UF
-cep(obrigatório se habilita_nfe=1): cep do endereçamento da pessoa
-codigo_pais: Código de país conforme a tabela do
SISBACEN (http://www.mdic.gov.br/arquivos/dwnl_1211380426.pdf).
Se vazio será assumido código 1058 (Brasil)
retorno:
-quando a pessoa for criada retorna um xml representando a pessoa e status 201 (created)
-quando não criar a pessoa por alguma falha de validação são retornados os erros de
validação e o status 200 (OK)
Atualização
sintaxe: [PUT] /pessoas/{id}
parâmetros: são os mesmos parâmetros da criação, apenas repare como na URL utilizada
deve ser passado o id do registro, pois é uma atualização
API de Produtos
Índice
sintaxe: [GET] /produtos
parâmetros: codigo
retorno:
-quando encontrar um produto retorna um xml representando o produto e status 200
-quando não encontrar um produto retorna vazio e status 404
Criação
sintaxe: [POST] /produtos
uso:
-Todos os parâmetros devem ser enviados como sub-parâmetros de produto,
ou seja produto['codigo'], produto['descricao'], etc.
parâmetros:
-codio: código do produto contendo até 60 caracteres, para integração é obrigatório
-descricao: descrição do produto contendo até 120 caracteres
-codigo_ncm ou capitulo_ncm: um dos dois onde codigo deve conter exatamente 8 caracteres e capitulo exatamente 2.
Este parâmetro deve ser informado conforme a configuração
-unidade_comercial: Unidade em que o produto é comercializado. Se for vazio será assumido 'un'
-valor_unitario_comercial: Valor unitário do produto
Atualização
sintaxe: [PUT] /produtos/{id}
Aqui são aceitos os mesmos parâmetros da criação, observar que o método é o PUT e que deve ser passado o id do registro que está sendo atualizado.
API de Notas Fiscais
sintaxe: [POST] /notas_fiscais
parâmetros:
-natureza_operacao: Descritivo com até 60 caracteres da natureza da operação desta nota fiscal
-tipo_documento: ENTRADA | SAIDA
-data_emissao: Data de emissão deste documento fiscal no formato aaaa-mm-dd se vazio é assumido como hoje
-data_entrada_saida: Data de entrada ou saída das mercadorias no formato aaaa-mm-dd
-hora_entrada_saida: Hora de entrada ou saída das mercadorias no formato hh:mm:ss
-cnpj_emitente: CNPJ do emitente. Obrigatório somente para domínios que possuem mais de um emitente, se
houver apenas um o Focus NFe irá escolher automaticamente.
-destinatario_id: id do destinatario desta nota. Este id é adquirido quando se faz a criação ou busca de
uma pessoa pela API.
-enviar: se estiver com o valor 1 efetua o envio para a receita, senão somente grava a nota para envio manual. Este parâmetro deve ser enviado na raiz dos params, ou seja, não fica abaixo do nota_fiscal.