Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Quando eu vou desenvolver um banco de dados de venda de produtos, que tipo de informações tributárias esses produtos vão ter, como que funciona?
Por exemplo o nome do tributo, valor, e como é agrupado esses tributos?
Esses tributos são ligados a apenas aos produtos ou a empresa?
>
Em 24/05/2017 at 14:02, Fmix disse:
Quando eu vou desenvolver um banco de dados de venda de produtos, que tipo de informações tributárias esses produtos vão ter, como que funciona?
Por exemplo o nome do tributo, valor, e como é agrupado esses tributos?
Esses tributos são ligados a apenas aos produtos ou a empresa?
Primeiro, você vai querer emitir nota ? se sim, só aí você vai precisar das informações tributárias do produto, como dispostas no manual da receita federal:
Respondendo a pergunta: os dados tributários são ligados tanto ao produto, como a empresa emitente, e também a empresa remetente.
Você consegue fazer isso sem muitos problemas, basta entender a documentação da receita, principalmente na montagem da XML, assinatura e transmissão, se você fizer algo errado pode vir a ter um problema bem sério.
Você não disse que linguagem pretende fazer isso, eu até hoje só fiz em php com a classe NF-e PHP.
Pra finalizar, tem uma 'gambiarra' que eu fiz pra um amigo emitir notas uma vez com essa classe, segue abaixo mais ou menos como funciona:
Primeiro você precisa de uma tabela com dados fiscais relacionados a determinada nota, dados de produto, emitente e de remetente, nesse caso eram produtos cosméticos:
CREATE TABLE config_nfe (
id int(11) AUTO_INCREMENT PRIMARY KEY,
codigo varchar(255),
tipo_de_documento varchar(255),
forma_de_pagamento varchar(255),
fora_de_emissao varchar(255),
tipo_de_impressao_DANFE varchar(255),
consumidor_final varchar(255),
destino_da_operacao varchar(255),
tipo_de_atendimento varchar(255),
natureza_da_operacao varchar(255),
uf_emissao varchar(255),
municipio_emissao varchar(255),
cnpj_emitente varchar(255),
razao_social_emitente varchar(255),
regime_tributario_emitente varchar(255),
logradouro_emitente varchar(255),
numero_emitente varchar(255),
bairro_emitente varchar(255),
cep_emitente varchar(255),
uf_emitente varchar(255),
municipio_emitente varchar(255),
tipo_de_documento_rementente varchar(255),
documento_rementente varchar(255),
razao_social_rementente varchar(255),
logradouro_rementente varchar(255),
numero_rementente varchar(255),
bairro_rementente varchar(255),
cep_rementente varchar(255),
uf_rementente varchar(255),
municipio_rementente varchar(255)
)
E tinha essa BELEZA (ironia) de código pra gerar o XML, que eu nem sei mais explicar como funcionava:
<?php
include 'conexao/conecta.php';
$pedido = $_GET['pedido'];
$sql = "SELECT * FROM pedidos WHERE codigo = '$pedido'";
$rs = mysql_query($sql);
while ($row = mysql_fetch_object($rs)) {
$emitente_codigo = $row->solicitatecodigo;
$remetente_codigo = $row->clientecodigo;
$programacao_codigo = $row->programacaocodigo;
$retirada_codigo = $row->retiradacodigo;
}
$sql = "SELECT * FROM retiradas WHERE codigo = '$retirada_codigo'";
$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs)) {
$produto = $row['produto'];
$quantidade = $row['produto'];
}
$sql = "SELECT * FROM dados_empresariais WHERE codigo = '$emitente_codigo' ";
$rs = mysql_query($sql);
while ($row = mysql_fetch_object($rs)) {
$cod_emitente = $row->codigo;
$cnpj_emitente = preg_replace("/[^0-9\s]/", "", $row->cnpj);
$razao_social_emitente = $row->razao_social;
$inscricao_estadual_emitente = preg_replace("/[^0-9\s]/", "", $row->inscricao_estadual);
;
$logradouro_emitente = $row->logradouro;
$numero_emitente = $row->numero;
$complemento_emitente = $row->complemento;
$bairro_emitente = $row->bairro;
$municipio_emitente = $row->cidade;
$uf_emitente = $row->uf;
$cep_emitente = $row->cep;
$telefone_emitente = preg_replace("/[^0-9\s]/", "", $row->telefone);
$email_emitente = $row->email;
}
$sql = "SELECT * FROM clientes WHERE codigo = '$remetente_codigo'";
$rs = mysql_query($sql);
while ($row = mysql_fetch_object($rs)) {
$cod_remetente = $row->codigo;
$cnpj_remetente = preg_replace("/[^0-9\s]/", "", $row->cnpj);
$razao_social_remetente = $row->razao_social;
$inscricao_estadual_remetente = preg_replace("/[^0-9\s]/", "", $row->inscricao_estadual);
$logradouro_remetente = $row->logradouro;
$numero_remetente = $row->numero;
$complemento_remetente = $row->complemento;
$bairro_remetente = $row->bairro;
$municipio_remetente = $row->cidade;
$municipio_remetente = preg_replace('/[`^~\'"]/', null, iconv('UTF-8', 'ASCII//TRANSLIT', $municipio_remetente));
$uf_remetente = $row->uf;
$cep_remetente = $row->cep;
$email_remetente = $row->email;
}
$sql = "SELECT * FROM municipios_ibge WHERE municipio = '$municipio_remetente'";
$rs = mysql_query($sql);
while ($row = mysql_fetch_object($rs)) {
$codigo_municipio_remetente = $row->codigo;
}
$sql = "SELECT * FROM estados_ibge WHERE sigla = '$uf_remetente'";
$rs = mysql_query($sql);
while ($row = mysql_fetch_object($rs)) {
$codigo_uf_remetente = $row->codigo_ibge;
}
require_once('nfephp/libs/NFe/MakeNFePHP.class.php');
// Instancia um objeto da classe "Tools" da API.
$nfe = new MakeNFe();
/ MONTA CHAVE /
$numero_nfe = rand(8888888, 99999999);
$cUF = "41"; //codigo do seu Estado
$ano_mes_emissao = date('ym'); //use date('ym');
$CNPJ = "$cnpj_emitente";$tpEmis = '1'; //1=Emissão normal (não em contingência);
//2=Contingência FS-IA, com impressão do DANFE em formulário de segurança;
//3=Contingência SCAN (Sistema de Contingência do Ambiente Nacional);
//4=Contingência DPEC (Declaração Prévia da Emissão em Contingência);
//5=Contingência FS-DA, com impressão do DANFE em formulário de segurança;
//6=Contingência SVC-AN (SEFAZ Virtual de Contingência do AN);
//7=Contingência SVC-RS (SEFAZ Virtual de Contingência do RS);
//9=Contingência off-line da NFC-e (as demais opções de contingência são válidas também para a NFC-e);$chave_sem_dv = $cUF . $ano_mes_emissao . $CNPJ . $mod . $serie . $nNF . $tpEmis . $cNF;
$chave = $chave_sem_dv; $chave[42] * $pesos[0];
$ponderacoes_soma = $ponderacoes;
$resto_ = (int) ($ponderacoes / 11);
$resto = $resto_ * 11;
$resto = $ponderacoes - $resto;
$cDV = (12 - $resto);
if ($cDV <= 1) {
$cDV = 0;
}
$chave_de_acesso = $chave . $cDV;
/*
$cUF = '41'; //Código da UF [02]
$aamm = date("ym"); //AAMM da emissão [4]
$cnpj = "$cnpj_emitente"; //CNPJ do Emitente [14]
$mod = '55'; //Modelo [02]
$serie = '001'; //Série [03]
$num = '7'; //Número da NF-e [09]
$tpEmis = '1'; //forma de emissão da NF-e [01] 1 – Normal – emissão normal; 2 – Contingência FS; 3 – Contingência SCAN; 4 – Contingência DPEC; 5 – Contingência FS-DA
$cn = ''; //Código Numérico [08]
$dv = ''; //DV [01]
//ajusta comprimento do numero
$num = str_pad($num, 9, '0', STR_PAD_LEFT);
//calcula codigo numérico aleatório
$cn = geraCN(8);
//monta a chave sem o digito verificador
$chave = "$cUF$aamm$cnpj$mod$serie$num$tpEmis$cn";
//calcula o digito verificador
$dv = calculaDV($chave);
$chave .= $dv;
$n = strlen($chave);
function geraCN($length = 8) {
$numero = '';
for ($x = 0; $x < $length; $x++) {
$numero .= rand(0, 9);
}
return $numero;
}
function calculaDV($chave43) {
$multiplicadores = array(2, 3, 4, 5, 6, 7, 8, 9);
$i = 42;
while ($i >= 0) {
for ($m = 0; $m < count($multiplicadores) && $i >= 0; $m++) {
$soma_ponderada+= $chave43[$i] * $multiplicadores[$m];
$i--;
}
}
$resto = $soma_ponderada % 11;
if ($resto == '0' || $resto == '1') {
return 0;
} else {
return (11 - $resto);
}
}
*/$chave = $chave_de_acesso;
$versao = '3.10';
$resp = $nfe->taginfNFe($chave, $versao);
//Dados da NFe (ide)
$uf_codigo = 41;
$cUF = "$uf_codigo"; //codigo numerico do estado
$numero_nf = rand(1000000, 9999999);
$cNF = "$numero_nf"; //numero aleatório da NF
$natOp = 'VENDA DE PRODUTO'; //natureza da operação
$tipo_pgto = $_POST['numero-de-parcelas'];
if ($tipo_pgto == '1') {
$tipo_pgto = '0'; $tipo_pgto = 2;
}$nNF = "$numero_nfe"; // numero da NFe
$data_emissao = '2015-09-09T15:34:00-03:00';
$dhEmi = "$data_emissao"; //para versão 3.00 '2014-02-03T13:22:42-3.00' não informar para NFCe
$data_sai_ent = date("Y-m-d") . "T" . date("H:i:s-3:00");
$dhSaiEnt = ''; //versão 2.00, 3.00 e 3.10
$tpNF = '1';
$idDest = '2'; //1=Operação interna; 2=Operação interestadual; 3=Operação com exterior.
$cMunFG = '4125506';
$tpImp = '1'; //0=Sem geração de DANFE; 1=DANFE normal, Retrato; 2=DANFE normal, Paisagem;$tpEmis = '1'; //1=Emissão normal (não em contingência);
//2=Contingência FS-IA, com impressão do DANFE em formulário de segurança;
//3=Contingência SCAN (Sistema de Contingência do Ambiente Nacional);
//4=Contingência DPEC (Declaração Prévia da Emissão em Contingência);
//5=Contingência FS-DA, com impressão do DANFE em formulário de segurança;
//6=Contingência SVC-AN (SEFAZ Virtual de Contingência do AN);
//7=Contingência SVC-RS (SEFAZ Virtual de Contingência do RS);
//9=Contingência off-line da NFC-e (as demais opções de contingência são válidas também para a NFC-e);$cDV = "$cDV"; //digito verificador
$tpAmb = '1'; //1=Produção; 2=Homologação
$finNFe = '1'; //1=NF-e normal; 2=NF-e complementar; 3=NF-e de ajuste; 4=Devolução/Retorno.
$indFinal = '0'; //0=Não; 1=Consumidor final;
$indPres = '9'; //0=Não se aplica (por exemplo, Nota Fiscal complementar ou de ajuste);
//1=Operação presencial;
//2=Operação não presencial, pela Internet;
//3=Operação não presencial, Teleatendimento;
//4=NFC-e em operação com entrega a domicílio;$procEmi = '0'; //0=Emissão de NF-e com aplicativo do contribuinte;
//1=Emissão de NF-e avulsa pelo Fisco;
//2=Emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site do Fisco;$resp = $nfe->tagide($cUF, $cNF, $natOp, $indPag, $mod, $serie, $nNF, $dhEmi, $dhSaiEnt, $tpNF, $idDest, $cMunFG, $tpImp, $tpEmis, $cDV, $tpAmb, $finNFe, $indFinal, $indPres, $procEmi, $verProc, $dhCont, $xJust);
//Dados do emitente
$CNPJ = "$cnpj_emitente";
$CPF = '';
$xNome = "$razao_social_emitente";
$xFant = '';
$IE = "$inscricao_estadual_emitente";
$IEST = '';
$IM = '';
$CNAE = '';
$CRT = '1';
$resp = $nfe->tagemit($CNPJ, $CPF, $xNome, $xFant, $IE, $IEST, $IM, $CNAE, $CRT);
//endereço do emitente
$xLgr = "$logradouro_emitente";
$nro = "$numero_emitente";
$xCpl = "$complemento_emitente";
$xBairro = "$bairro_emitente";
$cMun = '4125506';
$xMun = "$municipio_emitente";
$UF = "$uf_emitente";
$CEP = "$cep_emitente";
$cPais = '1058';
$xPais = 'BRASIL';
$fone = "";
$resp = $nfe->tagenderEmit($xLgr, $nro, $xCpl, $xBairro, $cMun, $xMun, $UF, $CEP, $cPais, $xPais, $fone);
//destinatário
$CNPJ = "$cnpj_remetente";
$CPF = '';
$idEstrangeiro = '';
$xNome = "$razao_social_remetente";
$indIEDest = '2';
$IE = "$inscricao_estadual_remetente";
$ISUF = '';
$IM = '';
$email = "$email_remetente";
$resp = $nfe->tagdest($CNPJ, $CPF, $idEstrangeiro, $xNome, $indIEDest, $IE, $ISUF, $IM, $email);
//Endereço do destinatário
$xLgr = "$logradouro_remetente";
$nro = "$numero_remetente";
$xCpl = "$complemento_remetente";
$xBairro = "$bairro_remetente";
$cMun = "5107958";
$xMun = "$municipio_remetente";
$UF = "$uf_remetente";
$CEP = "$cep_remetente";
$cPais = '1058';
$xPais = 'BRASIL';
$fone = "";
$resp = $nfe->tagenderDest($xLgr, $nro, $xCpl, $xBairro, $cMun, $xMun, $UF, $CEP, $cPais, $xPais, $fone);
for ($i = 1; $i < count($produto); $i++) {
for ($i = 1; $i < count($quantidade); $i++) {
$desconto_nfe = number_format($_POST['desconto-geral-nfe'], 2, '.', '');
//for ($i = 1; $i < count($desconto_nfe); $i++) {
$sql = "SELECT * FROM produtos WHERE codigo = '$produtos[$i]'";
$rs = mysql_query($sql);
while ($row = mysql_fetch_object($rs)) {
$cod_produto = $row->codigo;
$descricao_produto = $row->descricao;
$ncm = $row->NCM;
$cfop = $row->CFOP;
$un_comercial = $row->un_comercial;
$un_tributavel = $row->un_tributavel;
$un_tributavel = $row->un_tributavel;
$valor_produto = $row->precodistribuidor;
if ($desconto_nfe == '0' || $desconto_nfe == '' ) {
$valor_nfe = number_format($valor_produto[$i], 2, '.', '');
} else {
$valor_nfe = number_format($valor_produto[$i] - ($valor_produto[$i] * (100/ 100)), 2, '.', '');
}
$valor_nfe_total = number_format($valor_nfe * $quantidade[$i], 2, '.', '');
$soma_qntd_total += number_format($qntd_produtos[$i], 2, '.', '');
$num_item = array_keys($produto);
//produtos
$aP[] = array(
'nItem' => "$num_item[$i]",
'cProd' => "$cod_produto",
'cEAN' => '',
'xProd' => "$descricao_produto",
'NCM' => "$ncm",
'NVE' => '',
'EXTIPI' => '',
'CFOP' => "$cfop",
'uCom' => 'UNID',
'qCom' => "$quantidade[$i]",
'vUnCom' => "$valor_nfe",
'vProd' => "$valor_nfe_total",
'cEANTrib' => '',
'uTrib' => 'UNID',
'qTrib' => "$quantidade[$i]",
'vUnTrib' => "$valor_nfe",
'vFrete' => '',
'vSeg' => '',
'vDesc' => '',
'vOutro' => '',
'indTot' => '1',
'xPed' => '111',
'nItemPed' => '3',
'nFCI' => '');
//imposto
$nItem = "$num_item[$i]";
$vTotTrib = "$valor_nfe_total";
$resp = $nfe->tagimposto($nItem, $vTotTrib);
//ICMSSN
$nItem = "$num_item[$i]";
$orig = '0';
$csosn = '103';
$resp = $nfe->tagICMSSN($nItem, $orig, $csosn);
//IPI
$nItem = "$num_item[$i]";
$cst = '53';
$clEnq = '';
$cnpjProd = '';
$cSelo = '';
$qSelo = '';
$cEnq = '999';
$vBC = '0.00';
$pIPI = '0.00';
$vIPI = '0.00';
$resp = $nfe->tagIPI($nItem, $cst, $clEnq, $cnpjProd, $cSelo, $qSelo, $cEnq, $vBC, $pIPI, $vIPI);
//PIS
$nItem = "$num_item[$i]";
$cst = '49';
$vBC = '0.00';
$pPIS = '0.00';
$vPIS = '0.00';
$resp = $nfe->tagPIS($nItem, $cst, $vBC, $pPIS, $vPIS);
//COFINS
$nItem = "$num_item[$i]";
$cst = '49';
$vBC = '0.00';
$pCOFINS = '0.00';
$vCOFINS = '0.00';
$resp = $nfe->tagCOFINS($nItem, $cst, $vBC, $pCOFINS, $vCOFINS);
//}
//}
}
//}
}
}
foreach ($aP as $prod) {
$nItem = $prod['nItem'];
$cProd = $prod['cProd'];
$cEAN = $prod['cEAN'];
$xProd = $prod['xProd'];
$NCM = $prod['NCM'];
$NVE = $prod['NVE'];
$EXTIPI = $prod['EXTIPI'];
$CFOP = $prod['CFOP'];
$uCom = $prod['uCom'];
$qCom = $prod['qCom'];
$vUnCom = $prod['vUnCom'];
$vProd = $prod['vProd'];
$cEANTrib = $prod['cEANTrib'];
$uTrib = $prod['uTrib'];
$qTrib = $prod['qTrib'];
$vUnTrib = $prod['vUnTrib'];
$vFrete = $prod['vFrete'];
$vSeg = $prod['vSeg'];
$vDesc = $prod['vDesc'];
$vOutro = $prod['vOutro'];
$indTot = $prod['indTot'];
$xPed = $prod['xPed'];
$nItemPed = $prod['nItemPed'];
$nFCI = $prod['nFCI'];
$resp = $nfe->tagprod($nItem, $cProd, $cEAN, $xProd, $NCM, $NVE, $EXTIPI, $CFOP, $uCom, $qCom, $vUnCom, $vProd, $cEANTrib, $uTrib, $qTrib, $vUnTrib, $vFrete, $vSeg, $vDesc, $vOutro, $indTot, $xPed, $nItemPed, $nFCI);
}
for ($i = 1; $i < count($valor_nfe_total); $i++) {
$soma_valor_nfe_total = array_sum($valor_nfe_total);
}
$soma_valor_nfe_total = number_format($soma_valor_nfe_total, 2, '.', ',');
$vBC = '0.00';
$vICMS = '0.00';
$vICMSDeson = '0.00';
$vBCST = '0.00';
$vST = '0.00';
$vProd = "$soma_valor_nfe_total";
$vFrete = '0.00';
$vSeg = '0.00';
$vDesc = '0.00';
$vII = '0.00';
$vIPI = '0.00';
$vPIS = '0.00';
$vCOFINS = '0.00';
$vOutro = '0.00';
$vNF = "$soma_valor_nfe_total";
$vTotTrib = "";
$resp = $nfe->tagICMSTot($vBC, $vICMS, $vICMSDeson, $vBCST, $vST, $vProd, $vFrete, $vSeg, $vDesc, $vII, $vIPI, $vPIS, $vCOFINS, $vOutro, $vNF, $vTotTrib);
//frete
$modFrete = '0'; //0=Por conta do emitente; 1=Por conta do destinatário/remetente; 2=Por conta de terceiros;
$resp = $nfe->tagtransp($modFrete);
//Dados do processo
//0=SEFAZ; 1=Justiça Federal; 2=Justiça Estadual; 3=Secex/RFB; 9=Outros
$aProcRef = array(
array('nProc1', '0'),
array('nProc2', '1'),
array('nProc3', '2'),
array('nProc4', '3'),
array('nProc5', '9')
);
foreach ($aProcRef as $proc) {
$nProc = $proc[0];
$indProc = $proc[1];
//$resp = $nfe->tagprocRef($nProc, $indProc);
}
/*
$aForDia = array(
array('1', '100', '1400', '1000', '1400'),
array('2', '100', '1400', '1000', '1400'),
array('3', '100', '1400', '1000', '1400'),
array('4', '100', '1400', '1000', '1400'),
array('5', '100', '1400', '1000', '1400'),
array('6', '100', '1400', '1000', '1400'),
array('7', '100', '1400', '1000', '1400'),
array('8', '100', '1400', '1000', '1400'),
array('9', '100', '1400', '1000', '1400'),
array('10', '100', '1400', '1000', '1400'),
array('11', '100', '1400', '1000', '1400'),
array('12', '100', '14 00', '1000', '1400'),
array('13', '100', '1400', '1000', '1400'),
array('14', '100', '1400', '1000', '1400')
);
foreach ($aForDia as $forDia) {
$dia = $forDia[0];
$qtde = $forDia[1];
$qTotMes = $forDia[2];
$qTotAnt = $forDia[3];
$qTotGer = $forDia[4];
//$resp = $nfe->tagforDia($dia, $qtde, $qTotMes, $qTotAnt, $qTotGer);
}
*/$resp = $nfe->montaNFe();
if ($resp) {
header('Content-type: text/xml; charset=UTF-8');
//echo $nfe->getXML();
$xml = $nfe->getXML();
$fp = fopen("nf-e/$chave.xml", 'w+');
fwrite($fp, $xml);
fclose($fp); header('Content-type: text/html; charset=UTF-8');
foreach ($nfe->erros as $err) {
echo 'tag: <' . $err['tag'] . '> ---- ' . $err['desc'] . '<br>';
}
}
?>
Esse outro para assinar a XML:
<?php
require_once('../../nfephp/libs/NFe/ToolsNFePHP.class.php');
$arquivo = $_GET['chave'];
$nfe = new ToolsNFePHP;
$file = "../../nf-e/$arquivo.xml";
$arq = file_get_contents($file);
if ($xml = $nfe->signXML($arq, 'infNFe')) {
file_put_contents($file, $xml);
} else {
echo $nfe->errMsg;
}
?>
DETALHE IMPORTANTE: Isso foi mexido pela última vez na metade de 2015 não sei se funciona do mesmo jeito ainda, e não consegui achar como eu vazia a transmissão, mas pelo que me lembro acho que não fazia, eu gerava os XML assinados, ai ele importada no programa da sefaz pra transmitir.
O propósito é mais pra você ler a parte do código que gera a XML referente aos atributos fiscais de produto X nota.
PS.: Por favor não critiquem isso, eu não sabia o que eu fazia na época, só fazia kkk
E pra finalizar meu comentário, se você não entende de como fazer suas coisas ficarem totalmente seguras (como eu também não sei), simplesmente não faça isso.
Espero ter ajudado vlw!
Tributos são ligados ao produto, e tributos são ligados a empresa.
Isso depende o que é o produto, cada tipo de produto tem um imposto de valor diferente cobrado pelo governo.
e cada empresa tem um tributo diferente a pagar, isso depende de como a empresa foi cadastrada junto a Junta Comercial.
Qual é o imposto de cada tipo de empresa, qual é o imposto de cada tipo de produto, isso um contador ou um auditor de contabilidade é quem sabe o correto de valor que tem que ser tributado em um produto ou em um serviço.
https://guiatributario.net/2013/02/20/saiba-o-que-e-tributo-e-quais-suas-especies/
http://www.portaltributario.com.br/tributos.htm
Boa noite