procurei em inúmeros sites e por vários dias a solução para o erro que estou tento, mas não encontrei em lugar algum.
O retorno de erro, e único, que tenho é: 531 - [Simulacao] Rejeicao: Total da BC ICMS difere do somatorio dos itens
Em anexo, deixo o XML que está sendo gerado, caso ajude. Deixo tbm o código que estou usando para criar ele.
Como é possível ver, está bem básico, quase nada foi alterado do arquivo de exemplo.
Se alguém puder ajudar eu agradeceria muito.
<?php
//error_reporting(E_ALL);
ini_set('display_errors', 'On');
require_once '../../bootstrap.php';
use NFePHP\NFe\MakeNFe;
use NFePHP\NFe\ToolsNFe;
$nfe = new MakeNFe();
$nfeTools = new ToolsNFe('../../config/config.json');
//Dados da NFe - infNFe
$cUF = '43'; //codigo numerico do estado
$cNF = '00000010'; //numero aleatório da NF
$natOp = 'Venda de Produto2'; //natureza da operação
$indPag = '0'; //0=Pagamento à vista; 1=Pagamento a prazo; 2=Outros
$mod = '55'; //modelo da NFe 55 ou 65 essa última NFCe
$serie = '1'; //serie da NFe
$nNF = '10'; // numero da NFe
$dhEmi = date("Y-m-d\TH:i:sP");//Formato: “AAAA-MM-DDThh:mm:ssTZD” (UTC - Universal Coordinated Time).
$dhSaiEnt = date("Y-m-d\TH:i:sP");//Não informar este campo para a NFC-e.
$tpNF = '1';
$idDest = '1'; //1=Operação interna; 2=Operação interestadual; 3=Operação com exterior.
$cMunFG = '4323002';
$tpImp = '1'; //0=Sem geração de DANFE; 1=DANFE normal, Retrato; 2=DANFE normal, Paisagem;
//3=DANFE Simplificado; 4=DANFE NFC-e; 5=DANFE NFC-e em mensagem eletrônica
//(o envio de mensagem eletrônica pode ser feita de forma simultânea com a impressão do DANFE;
//usar o tpImp=5 quando esta for a única forma de disponibilização do DANFE).
$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);
//Nota: Para a NFC-e somente estão disponíveis e são válidas as opções de contingência 5 e 9.
$tpAmb = '2'; //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=Normal; 1=Consumidor final;
$indPres = '1'; //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;
//9=Operação não presencial, outros.
$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;
//3=Emissão NF-e pelo contribuinte com aplicativo fornecido pelo Fisco.
$verProc = '4.0.43'; //versão do aplicativo emissor
$dhCont = ''; //entrada em contingência AAAA-MM-DDThh:mm:ssTZD
$xJust = ''; //Justificativa da entrada em contingência
//Numero e versão da NFe (infNFe)
$ano = date('y', strtotime($dhEmi));
$mes = date('m', strtotime($dhEmi));
$cnpj = $nfeTools->aConfig['cnpj'];
$chave = $nfe->montaChave($cUF, $ano, $mes, $cnpj, $mod, $serie, $nNF, $tpEmis, $cNF);
$versao = '3.10';
$resp = $nfe->taginfNFe($chave, $versao);
$cDV = substr($chave, -1); //Digito Verificador da Chave de Acesso da NF-e, o DV é calculado com a aplicação do algoritmo módulo 11 (base 2,9) da Chave de Acesso.
//tag IDE
$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 - (Importando dados do config.json)
$CNPJ = $nfeTools->aConfig['cnpj'];
$CPF = ''; // Utilizado para CPF na nota
$xNome = $nfeTools->aConfig['razaosocial'];
$xFant = $nfeTools->aConfig['nomefantasia'];
$IE = $nfeTools->aConfig['ie']; //
$IEST = $nfeTools->aConfig['iest'];
$IM = $nfeTools->aConfig['im'];
$CNAE = $nfeTools->aConfig['cnae'];
$CRT = $nfeTools->aConfig['regime'];
$resp = $nfe->tagemit($CNPJ, $CPF, $xNome, $xFant, $IE, $IEST, $IM, $CNAE, $CRT);
//endereço do emitente
$xLgr = 'Endereco registrado';
$nro = 's/n';
$xCpl = 'Qd. 38 Lt. 4,5 e 34';
$xBairro = 'Jardim Pinheiros I';
$cMun = '4323002';
$xMun = 'Viamao';
$UF = 'RS';
$CEP = '94480500';
$cPais = '1058';
$xPais = 'Brasil';
$resp = $nfe->tagenderEmit($xLgr, $nro, $xCpl, $xBairro, $cMun, $xMun, $UF, $CEP, $cPais, $xPais, $fone);
//destinatário
$CNPJ = '23401454000170';
$CPF = '';
$idEstrangeiro = '';
$xNome = 'Chinnon Santos - Tecnologia e Assessoria em Softwares';
$indIEDest = '1';
$IE = '';
$ISUF = '';
$IM = '4128095';
$resp = $nfe->tagdest($CNPJ, $CPF, $idEstrangeiro, $xNome, $indIEDest, $IE, $ISUF, $IM, $email);
//Endereço do destinatário
$xLgr = 'Av. Vila Alpes';
$nro = 's/n';
$xCpl = '';
$xBairro = 'Vila Alpes';
$cMun = '4323002';
$xMun = 'Viamao';
$UF = 'RS';
$CEP = '94480500';
$cPais = '1058';
$xPais = 'Brasil';
$resp = $nfe->tagenderDest($xLgr, $nro, $xCpl, $xBairro, $cMun, $xMun, $UF, $CEP, $cPais, $xPais, $fone);
//produtos 1 (Limite da API é de 56 itens por Nota)
$aP[] = array(
'nItem' => 1,
'cProd' => '15',
'cEAN' => '',//97899072659522
'xProd' => 'Chopp-Pilsen - Barril 30 Lts',
'NCM' => '22030000',
'EXTIPI' => '',
'CFOP' => '5101',
'uCom' => 'Un',
'qCom' => '1',//QUANTIDADE DE PRODUTOS
'vUnCom' => '100.00',
'vProd' => '100.00',
'cEANTrib' => '',
'uTrib' => 'Un',
'qTrib' => '1',
'vUnTrib' => '100.00',
'vFrete' => '',
'vSeg' => '',
'vDesc' => '',
'vOutro' => '',
'indTot' => '1',
'xPed' => '16',
'nItemPed' => '1',
'nFCI' => '');
foreach ($aP as $prod) {
$nItem = $prod['nItem'];
$cProd = $prod['cProd'];
$cEAN = $prod['cEAN'];
$xProd = $prod['xProd'];
$NCM = $prod['NCM'];
$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, $EXTIPI, $CFOP, $uCom, $qCom, $vUnCom, $vProd, $cEANTrib, $uTrib, $qTrib, $vUnTrib, $vFrete, $vSeg, $vDesc, $vOutro, $indTot, $xPed, $nItemPed, $nFCI);
}
// Informações adicionais na linha do Produto
$nItem = 1; //produtos 1
$vDesc = 'Barril 30 Litros Chopp Tipo Pilsen - Pedido Nº15';
$resp = $nfe->taginfAdProd($nItem, $vDesc);
//Impostos
$nItem = 1; //produtos 1
$vTotTrib = '0.00'; // 226.80 ICMS + 51.50 ICMSST + 50.40 IPI + 39.36 PIS + 81.84 CONFIS
$resp = $nfe->tagimposto($nItem, $vTotTrib);
$nItem = 1;
$orig = '0'; // 0 = Nacional, exceto as indicadas nos codigos 3, 4, 5 e 8
$csosn = '102';
$modBC = '3';
$vBC = '100.00';
$pRedBC = '';
$pICMS = '10.00';
$vICMS = '1.00';
$pCredSN = '0';
$vCredICMSSN= '0';
$modBCST = '';
$pMVAST = '';
$pRedBCST = '';
$vBCST = '';
$pICMSST = '';
$vICMSST = '';
$vBCSTRet = '';
$vICMSSTRet = '';
$resp = $nfe->tagICMSSN($nItem, $orig, $csosn, $modBC, $vBC, $pRedBC, $pICMS, $vICMS, $pCredSN, $vCredICMSSN, $modBCST, $pMVAST, $pRedBCST, $vBCST, $pICMSST, $vICMSST, $vBCSTRet, $vICMSSTRet);
$vST = $vICMSST; // Total de ICMS ST
//IPI - Imposto sobre Produto Industrializado
$nItem = 1; //produtos 1
$cst = '50'; // 50 - Saída Tributada (Código da Situação Tributária)
$clEnq = '';
$cnpjProd = '';
$cSelo = '';
$qSelo = '';
$cEnq = '999';
$vBC = '100.00';
$pIPI = '0.00'; //Calculo por alíquota - 6% Alíquota GO.
$qUnid = '';
$vUnid = '';
$vIPI = '0.00'; // = $vBC * ( $pIPI / 100 )
$resp = $nfe->tagIPI($nItem, $cst, $clEnq, $cnpjProd, $cSelo, $qSelo, $cEnq, $vBC, $pIPI, $qUnid, $vUnid, $vIPI);
//PIS - Programa de Integração Social
$nItem = 1; //produtos 1
$cst = '03'; //Operação Tributável (base de cálculo = quantidade vendida x alíquota por unidade de produto)
$vBC = '100.00';
$pPIS = '';
$vPIS = '0.00';
$qBCProd = '0.00';
$vAliqProd = '0.00';
$resp = $nfe->tagPIS($nItem, $cst, $vBC, $pPIS, $vPIS, $qBCProd, $vAliqProd);
//COFINS - Contribuição para o Financiamento da Seguridade Social
$nItem = 1; //produtos 1
$cst = '03'; //Operação Tributável (base de cálculo = quantidade vendida x alíquota por unidade de produto)
$vBC = '100.00';
$pCOFINS = '0.00';
$vCOFINS = '0.00';
$qBCProd = '0.00';
$vAliqProd = '0.00';
$resp = $nfe->tagCOFINS($nItem, $cst, $vBC, $pCOFINS, $vCOFINS, $qBCProd, $vAliqProd);
//Inicialização de váriaveis não declaradas...
$vII = isset($vII) ? $vII : 0;
$vIPI = isset($vIPI) ? $vIPI : 0;
$vIOF = isset($vIOF) ? $vIOF : 0;
$vPIS = isset($vPIS) ? $vPIS : 0;
$vCOFINS = isset($vCOFINS) ? $vCOFINS : 0;
$vICMS = isset($vICMS) ? $vICMS : 0;
$vBCST = isset($vBCST) ? $vBCST : 0;
$vST = isset($vST) ? $vST : 0;
$vISS = isset($vISS) ? $vISS : 0;
//total
$vBC = '100.00';
$vICMS = '0.00';
$vICMSDeson = '0.00';
$vBCST = '0.00';
$vST = '0.00';
$vProd = '100.00';
$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 = number_format($vProd-$vDesc-$vICMSDeson+$vST+$vFrete+$vSeg+$vOutro+$vII+$vIPI, 2, '.', '');
$vTotTrib = number_format($vICMS+$vST+$vII+$vIPI+$vPIS+$vCOFINS+$vIOF+$vISS, 2, '.', '');
//$vTotTrib = '100.00';
$resp = $nfe->tagICMSTot($vBC, $vICMS, $vICMSDeson, $vBCST, $vST, $vProd, $vFrete, $vSeg, $vDesc, $vII, $vIPI, $vPIS, $vCOFINS, $vOutro, $vNF, $vTotTrib);
//frete
$modFrete = '9'; //0=Por conta do emitente; 1=Por conta do destinatário/remetente; 2=Por conta de terceiros; 9=Sem Frete;
$resp = $nfe->tagtransp($modFrete);
//dados da fatura
$nFat = '000035342';
$vOrig = '100.00';
$vDesc = '';
$vLiq = '100.00';
$resp = $nfe->tagfat($nFat, $vOrig, $vDesc, $vLiq);
//dados das duplicatas (Pagamentos)
$aDup = array(
array('35342-1','2016-06-20','300.00'),
array('35342-2','2016-07-20','300.00'),
array('35342-3','2016-08-20','300.00'),
array('35342-4','2016-09-20','300.00')
);
foreach ($aDup as $dup) {
$nDup = $dup[0]; //Código da Duplicata
$dVenc = $dup[1]; //Vencimento
$vDup = $dup[2]; // Valor
$resp = $nfe->tagdup($nDup, $dVenc, $vDup);
}
//*************************************************************
//Grupo obrigatório para a NFC-e. Não informar para a NF-e.
//$tPag = '03'; //01=Dinheiro 02=Cheque 03=Cartão de Crédito 04=Cartão de Débito 05=Crédito Loja 10=Vale Alimentação 11=Vale Refeição 12=Vale Presente 13=Vale Combustível 99=Outros
//$vPag = '1452,33';
//$resp = $nfe->tagpag($tPag, $vPag);
//se a operação for com cartão de crédito essa informação é obrigatória
//$CNPJ = '31551765000143'; //CNPJ da operadora de cartão
//$tBand = '01'; //01=Visa 02=Mastercard 03=American Express 04=Sorocred 99=Outros
//$cAut = 'AB254FC79001'; //número da autorização da tranzação
//$resp = $nfe->tagcard($CNPJ, $tBand, $cAut);
//**************************************************************
// Calculo de carga tributária similar ao IBPT - Lei 12.741/12
$federal = number_format($vII+$vIPI+$vIOF+$vPIS+$vCOFINS, 2, ',', '.');
$estadual = number_format($vICMS+$vST, 2, ',', '.');
$municipal = number_format($vISS, 2, ',', '.');
$totalT = number_format($federal+$estadual+$municipal, 2, ',', '.');
$textoIBPT = "Valor Aprox. Tributos R$ {$totalT} - {$federal} Federal, {$estadual} Estadual e {$municipal} Municipal.";
//Informações Adicionais
//$infAdFisco = "SAIDA COM SUSPENSAO DO IPI CONFORME ART 29 DA LEI 10.637";
$infAdFisco = "";
$infCpl = "Pedido Nº16 - {$textoIBPT} ";
$resp = $nfe->taginfAdic($infAdFisco, $infCpl);
//observações emitente
//$aObsC = array(
//foreach ($aObsC as $obs) {
// $xCampo = $obs[0];
// $xTexto = $obs[1];
// $resp = $nfe->tagobsCont($xCampo, $xTexto);
//}
//observações fisco
//$aObsF = array(
//foreach ($aObsF as $obs) {
// $xCampo = $obs[0];
// $xTexto = $obs[1];
// //$resp = $nfe->tagobsFisco($xCampo, $xTexto);
//}
//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);
//}
//dados exportação
//$UFSaidaPais = 'SP';
//$xLocExporta = 'Maritimo';
//$xLocDespacho = 'Porto Santos';
//$resp = $nfe->tagexporta($UFSaidaPais, $xLocExporta, $xLocDespacho);
//dados de compras
//$xNEmp = '';
//$xPed = '12345';
//$xCont = 'A342212';
//$resp = $nfe->tagcompra($xNEmp, $xPed, $xCont);
//dados da colheita de cana
//$safra = '2014';
//$ref = '01/2014';
//$resp = $nfe->tagcana($safra, $ref);
//$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', '1400', '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);
//}
//monta a NFe e retorna na tela
$resp = $nfe->montaNFe();
if ($resp) {
//header('Content-type: text/xml; charset=UTF-8');
$xml = $nfe->getXML();
// $filename = "/var/www/nfe/homologacao/entradas/{$chave}-nfe.xml"; // Ambiente Linux
$filename = "../xml/homologacao/{$chave}-nfe.xml"; // Ambiente Windows
file_put_contents($filename, $xml);
chmod($filename, 0777);
echo $xml;
} else {
header('Content-type: text/html; charset=UTF-8');
foreach ($nfe->erros as $err) {
echo 'tag: <'.$err['tag'].'> ---- '.$err['desc'].'<br>';
}
}