Loading repository data…
Loading repository data…
Scemist / repository
Esta biblioteca é uma solução para calcular impostos e todos os valores relacionados sobre vendas no Brasil.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Esta biblioteca calcula tributos e gera o XML da NF-e 4.00 (padrão SEFAZ) para vendas de produtos no Brasil. O foco atual é o regime Simples Nacional.
Esta biblioteca não faz integrações com serviços externos e nem gera notas fiscais eletrônicas (NF-e) diretamente. Ela se concentra no cálculo de tributos e na estruturação dos dados necessários para a emissão de notas fiscais.
<?php
require_once 'vendor/autoload.php';
use Imposto\Catalogo\TipoPessoa\TipoPessoa;
use Imposto\Catalogo\UFs\UF;
use Imposto\Catalogo\Unidade\Unidade;
use Imposto\Domain\Destinatario\Destinatario;
use Imposto\Domain\Emitente\Emitente;
use Imposto\Domain\Endereco\Endereco;
use Imposto\Domain\Pedido\ItemPedido;
use Imposto\Domain\Pedido\Pedido;
use Imposto\Domain\ProdutoFiscal\NCM;
use Imposto\Fiscal\CFOP\CFOP;
use Imposto\Fiscal\CST\CSOSN;
use Imposto\Fiscal\RegimeTributario\SimplesNacional;
$emitente = new Emitente(
cnpj: '12345678900000',
razaoSocial: 'Scemist Tecnologia LTDA',
nomeFantasia: 'Scemist',
inscricaoEstadual: '000123456789',
codigoRegimeTributario: 1,
inscricaoMunicipal: '12345',
endereco: new Endereco(
logradouro: 'Rua Comendador Gomes',
numero: '505',
bairro: 'Vila Chica',
municipioCodigo: '3509502',
municipioNome: 'Campinas',
estado: UF::SP,
cep: '13069096',
),
);
$destinatario = new Destinatario(
tipoPessoa: TipoPessoa::PF,
documento: '12345678910',
nome: 'João Maria da Silva',
indicadorIE: IndicadorIE::NaoContribuinte,
endereco: new Endereco(
logradouro: 'Rua Michigan',
numero: '531',
bairro: 'Brooklin',
municipioCodigo: '3550308',
municipioNome: 'Sao Paulo',
estado: UF::SP,
cep: '04566000',
),
);
$pedido = new Pedido(
emitente: $emitente,
destinatario: $destinatario,
regimeTributario: new SimplesNacional(),
consumidorFinal: true,
presencial: false,
);
$pedido->addItem(new ItemPedido(
nome: 'Guitarra Stratocaster',
preco: 1099.0,
quantidade: 1,
unidade: Unidade::UNIDADE,
ncm: new NCM('9207.90.10'), // pontos aceitos; normalizado internamente
situacaoTributaria: CSOSN::TributadaSemPermissaoDeCredito,
cfop: new CFOP('5102'),
origemMercadoria: 0,
codigoInterno: 'GTR-001', // cProd — SKU interno da empresa
codigoBarras: 'SEM GTIN', // cEAN — GTIN ou 'SEM GTIN'
));
$pedido->addItem(new ItemPedido(
nome: 'Pedal de Efeito Overdrive',
preco: 399.0,
quantidade: 2,
unidade: Unidade::UNIDADE,
ncm: new NCM('9207.90.90'),
situacaoTributaria: CSOSN::NaoTributada,
cfop: new CFOP('5102'),
origemMercadoria: 0,
desconto: 39.90,
codigoInterno: 'PDL-002',
codigoBarras: 'SEM GTIN',
));
$notaFiscal = $pedido->getNotaFiscal();
echo 'Subtotal: ', $notaFiscal->getSubtotal(), PHP_EOL;
echo 'Desconto: ', $notaFiscal->getDesconto(), PHP_EOL;
echo 'Valor Liquido: ', $notaFiscal->getValorLiquido(), PHP_EOL;
echo 'ICMS: ', $notaFiscal->getICMS(), PHP_EOL;
echo 'IPI: ', $notaFiscal->getIPI(), PHP_EOL;
echo 'Total com Impostos: ', $notaFiscal->getTotalComImpostos(), PHP_EOL;
echo $notaFiscal->getXml(), PHP_EOL;
Subtotal: 1897
Desconto: 39.9
Valor Liquido: 1857.1
ICMS: 0
IPI: 0
Total com Impostos: 1857.1
getXml() retorna um XML NF-e 4.00 pronto para assinar e transmitir:
<?xml version="1.0" encoding="utf-8"?>
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe versao="4.00">
<ide>...</ide>
<emit>
<CNPJ>12345678900000</CNPJ>
<xNome>Scemist Tecnologia LTDA</xNome>
<CRT>1</CRT>
</emit>
<dest>
<CPF>12345678910</CPF>
<xNome>João Maria da Silva</xNome>
<indIEDest>9</indIEDest>
</dest>
<det nItem="1">
<prod>
<xProd>Guitarra Stratocaster</xProd>
<NCM>92079010</NCM>
<CFOP>5102</CFOP>
<vProd>1099.00</vProd>
</prod>
<imposto>
<ICMS><ICMSSN102><orig>0</orig><CSOSN>102</CSOSN></ICMSSN102></ICMS>
<IPI><IPINT><cEnq>001</cEnq><CST>53</CST></IPINT></IPI>
<PIS><PISNT><CST>07</CST></PISNT></PIS>
<COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS>
</imposto>
</det>
<det nItem="2">
<prod>
<xProd>Pedal de Efeito Overdrive</xProd>
<NCM>92079090</NCM>
<vProd>798.00</vProd>
<vDesc>39.90</vDesc>
</prod>
<imposto>
<ICMS><ICMSSN400><orig>0</orig><CSOSN>400</CSOSN></ICMSSN400></ICMS>
...
</imposto>
</det>
<total>
<ICMSTot>
<vICMS>0.00</vICMS> <!-- Simples Nacional: ICMS recolhido via DAS -->
<vNF>1857.10</vNF>
</ICMSTot>
</total>
</infNFe>
</NFe>
Informações da sua empresa:
Informações sobre o cliente:
IndicadorIE::ContribuinteICMS, IndicadorIE::ContribuinteIsento, IndicadorIE::NaoContribuinte (verificar aqui)<cProd> no XML)'SEM GTIN' se não tiver (vira <cEAN>)9207.90.10) ou sem (92079010)5102 para venda dentro do estado)0 = nacional, 1 = importado diretamente, 2 = importado de terceirosNa pasta examples/, há arquivos JSON com estrutura relacional (um arquivo por entidade, ligados por IDs) simulando como ficaria num banco de dados.
Em desenvolvimento Alpha. Não recomendada para produção.
| Funcionalidade | Status |
|---|---|
| Simples Nacional — cálculo de valores | ✅ |
| Simples Nacional — geração XML NF-e | ✅ |
| Lucro Presumido / Lucro Real | ❌ |
| DIFAL (EC 87/2015) | ❌ |
| Assinatura digital (certificado A1) | ❌ |
| Transmissão SEFAZ | ❌ |