kaleu62/notafiscalsp

Integração com o WebService da Prefeitura de São Paulo para emissão de NFS e NTFS utilizando a API da nota do milhão

v1.0.10 2022-07-11 15:59 UTC

This package is auto-updated.

Last update: 2024-03-29 04:11:45 UTC


README

Latest Stable Version Total Downloads License

O Projeto se trata de um módulo de integração com o sistema de notas da Prefeitura de São Paulo (Nota do Milhão), possibilitando a automatização de serviços como emissão e consulta de Notas e outros serviços relacionados.

Extensões Necessárias

  • Soap
  • openssl

Referências úteis

Instanciando a Classe

Para instanciar a classe é necessário informar o CNPJ, o Certificado do Emissor e a senha do mesmo. No caso do caminho do Certificado pode ser utilizado o arquivo '.pfx' ou '.pem'

  // Instanciando a Classe
  $nfSP = new NotaFiscalSP([
      'cnpj' => '00000000000000',
      'certificate' => 'path/to/certificate.pfx',
      'certificatePass' => '000000'
  ]);

Ao instanciar a Lib ela faz uma requisiçao para obter a Inscrição Municipal(IM), porém a mesma pode ser passada como parametro.

  // Instanciando a Classe
  $nfSP = new NotaFiscalSP([
      'cnpj' => '00000000000000',
      'certificate' => 'path/to/certificate.pfx',
      'certificatePass' => '000000',
      'im' => '1225'
  ]);

Nota Fiscal (NFs NFe)

Obtendo Informações Base do CNPJ

Esse método retorna a Inscrição Municipal relacionada ao CNPJ e um booleano indicando se o mesmo pode emitir NFe

// Consulta seu próprio CNPJ para verificar a Inscrição Municipal
$response = $nfSP->cnpjInfo(); 
// Consulta um CNPJ para verificar a inscrição municipal e a situação referente a emissão
$response = $nfSP->cnpjInfo('111.222.333-44'); 

Obtendo Informações Basicas do Lote

Retorna apeas informações básicas como horário de envio do lote

$response = $nfSP->informacaoLote();

Consultando Nota Fiscal

Retorna Informaçes detalhadas de uma ou mais Notas (Limite 50 Notas por Requisição)

// Utilize o numero da nota
$response = $nfSP->consultarNf('00056');

*Para maiores detalhes sobre a consulta de várias notas simultaneamente veja o Wiki

Consultando Notas Fiscais Recebidas por Periodo

Retorna Notas recebidas em um periodo especifico (50 Notas por Pagina)

$period = new Period();
$period->setDtInicio('2019-08-05');
$period->setDtFim('2019-08-10');
$period->setPagina(2);

$response = $nfSP->notasRecebidas($period);

- Caso não insira a data Final, serão retornados somente registros da data inicial

- Caso não seja informado o numero da página o valor padrão é 1

Consultando Notas Fiscais Emitidas por Periodo

Retorna Notas emitidas em um periodo especifico (50 Notas por Pagina)

$period = new Period();
$period->setDtInicio('2019-08-05');
$period->setDtFim('2019-08-10');
$period->setPagina(2);

$response = $nfSP->notasEmitidas($period);

- Caso não insira a data Final, serão retornados somente registros da data inicial

- Caso não seja informado o numero da página o valor padrão é 1

Consultando Lote

Retorna Informações detalhadas de um lote especifico

// Utilize o numero do Lote
$response = $nfSP->consultarLote(356);

*Para mais detalhes da utilizaço acesse o Wiki

Cancelando Nota Fiscal

Cancela uma ou mais Notas (Limite 50 Notas por Requisição)

$response = $nfSP->cancelarNota('00568');

Emitindo uma Nota

$rps = new Rps();
$rps->setNumeroRps('00000000');
$rps->setTipoRps(RPSType::RECIBO_PROVENIENTE_DE_NOTA_CONJUGADA);
$rps->setValorServicos(30.80);
$rps->setCodigoServico(2881);
$rps->setAliquotaServicos( 0.029);
$rps->setCnpj('10000000000001');
$rps->setRazaoSocialTomador('RAZAO SOCIAL TOMADOR LTDA');
$rps->setTipoLogradouro('R');
$rps->setLogradouro('NOME DA RUA');
$rps->setNumeroEndereco(001);
$rps->setBairro('VILA TESTE');
$rps->setCidade('3550308'); // São Paulo
$rps->setUf('SP');
$rps->setCep('00000000');
$rps->setEmailTomador('teste@teste.com.br');
$rps->setDiscriminacao('Teste Emissão de Notas pela API');

$response =  $nfSP->enviarNota($rps);

Enviando Lote

O Lote envia diversos objetos do tipo RPS em uma unica requisição

$lote = new Lot();
$lote->setRpsList([$rps1, $rps2, $rps3]);
$response =  $nfSP->enviarLote($lote);

Enviando um Lote Async

O Lote ASYNC utiliza um outro Endpoint e pode ser útil caso o sistema de Notas esteja com alguma instabilidade ou em manutenção, é utilizada a mesma request porém é retornado um número de protocolo que pode ser consultado posteriormente

// Enviar Lote Async
$makeProtocol = $nfSP->enviarLoteAsync($lot);

// Consultar se o lote foi emitido
$lotResult = $nfSP->consultarLoteAsync('1223589');

NFTS

Consultando uma NFTS

    $nfSP->consultarNfts('454565')

Emitindo uma NFTS

// Montando o objeto da NFTS
$nfts = new Nfts();
$nfts->setNumeroDocumento('000000000000');
$nfts->setSerieNFTS('A');
$nfts->setCodigoServico('7099');
$nfts->setValorServicos('150.30');
$nfts->setCnpjPrestador('00000000000100');
$nfts->setDiscriminacao('xxx');
$nfts->setDataPrestacao('2019-09-10');
$nfts->setTipoDocumento('01');
$nfts->setRazaoSocialPrestador('XXXX');
$nfts->setLogradouroPrestador('Avenida x x x');
$nfts->setCidadePrestador('x');
$nfts->setNumeroEnderecoPrestador('250');
$nfts->setBairroPrestador('Vila x');
$nfts->setUfPrestador('SP');
$nfts->setCepPrestador('06000000');

// Emitindo a NFTS
$nfSP->enviarNfts($nfts);

Cancelando uma NFTS

$response = $nfSP->cancelarNfts('00568');

Métodos Básicos do Response

getResponse

Retorna uma array com as informaçes da resposta da API

  $response->getResponse();

getXmlInput

Retorna o XML enviado para API (REQUEST)

  $response->getXmlInput();

getXmlOutput

Retorna o XML Recebido da API (RESPONSE)

  $response->getXmlOutput();

getSuccess

Verifica o sucesso da operação realizada

  $response->getSuccess();

Classe NfSearch (NotaFiscalSP\Entities\Requests\NF\NfSearch)

É a classe utilizada para referenciar uma Nota Fiscal já Existente, não é necessário preencher todas propriedades, apenas o NumeroNfe é o suficiente.

Propriedade Método Tipo
InscricaoPrestador setInscricaoPrestador() int
NumeroNfe setNumeroNfe() int
CodigoVerificacao setCodigoVerificacao() string
NumeroRPS setNumeroRPS() int
SerieRPS setSerieRPS() string

Classe Period (NotaFiscalSP\Entities\Requests\NF\Period)

Utilizada na realização de consultas por periodo nas notas Emitidas e Recebidas, caso não altere nenhuma das propriedades retorna uma busca com os valores Padrões para data Atual

Propriedade Método Tipo ** Observações**
CPF setCpf() string
CNPJ setCnpj() string
InscricaoMunicipal setInscricaoMunicipal() int
DtInicio setDtInicio() string format(YYYY-MM-DD)
DtFim setDtFim() string format(YYYY-MM-DD)
Pagina setPagina() int
Transacao setTransacao() boolean

Classe Rps (NotaFiscalSP\Entities\Requests\NF\Rps)

Objeto utilizado para emissão de novas notas

Propriedade Método Tipo ** Observações**
InscricaoPrestador setInscricaoPrestador() int
SerieRps setSerieRps() string
NumeroRps setNumeroRps() int
TipoRps setTipoRps() string
DataEmissao setDataEmissao() string format(YYYY-MM-DD)
StatusRps setStatusRps() string
TributacaoRps setTributacaoRps() string
ValorServicos setValorServicos() float
ValorDeducoes setValorDeducoes() int default: 0
ValorPIS setValorPIS() float
ValorCOFINS setValorCOFINS() float
ValorINSS setValorINSS() float
ValorIR setValorIR() float
ValorCSLL setValorCSLL() float
CodigoServico setCodigoServico() int
AliquotaServicos setAliquotaServicos() float
IssRetido setIssRetido() boolean default: false
InscricaoMunicipalTomador setInscricaoMunicipalTomador() int
InscricaoEstadualTomador setInscricaoEstadualTomador() int
RazaoSocialTomador setRazaoSocialTomador() string
EmailTomador setEmailTomador() string
CpfCnpjTomador setCpfCnpjTomador() string
TipoLogradouro setTipoLogradouro() string
Logradouro setLogradouro() string
NumeroEndereco setNumeroEndereco() int
ComplementoEndereco setComplementoEndereco() string
Bairro setBairro() string
Cidade setCidade() string default: 3550308 (São Paulo)
UF setUF() string
Cep setCep() string
Cpf setCpf() string
Cnpj setCnpj() string
Discriminacao setDiscriminacao() string
cpfIntermediario setcpfIntermediario() string
cnpjIntermediario setcnpjIntermediario() string
InscricaoMunicipalIntermediario setInscricaoMunicipalIntermediario() int
IssRetidoIntermediario setIssRetidoIntermediario() boolean
EmailIntermediario setEmailIntermediario() string
ValorCargaTributaria setValorCargaTributaria() float
PercentualCargaTributaria setPercentualCargaTributaria() float
FonteCargaTributaria setFonteCargaTributaria() string
CodigoCEI setCodigoCEI() string
MatriculaObra setMatriculaObra() string
MunicipioPrestacao setMunicipioPrestacao() string
ValortotalRecebido setValortotalRecebido() float
NumeroEncapsulamento setNumeroEncapsulamento() int