diff --git a/fake/fakeSefazCancela.php b/fake/fakeSefazCancela.php
index af11b591..e4b8811e 100755
--- a/fake/fakeSefazCancela.php
+++ b/fake/fakeSefazCancela.php
@@ -16,7 +16,7 @@
"tpAmb" => 2,
"razaosocial" => "SUA RAZAO SOCIAL LTDA",
"cnpj" => "99999999999999",
- "siglaUF" => "SP",
+ "siglaUF" => "AM",
"schemes" => "PL_009_V4",
"versao" => '4.00',
"tokenIBPT" => "AAAAAAA",
@@ -35,17 +35,17 @@
$content = file_get_contents('expired_certificate.pfx');
$tools = new Tools($configJson, Certificate::readPfx($content, 'associacao'));
- $tools->model('55');
+ $tools->model('65');
$tools->setVerAplic('5.1.34');
$tools->loadSoapClass($soap);
- $chave = '35345678901234567890123456789012345678901234';
+ $chave = '13345678901234567890123456789012345678901234';
$justificativa = 'nfe com erros de digitação';
$nProt = '123456789012345';
$response = $tools->sefazCancela($chave, $justificativa, $nProt);
-
+
echo FakePretty::prettyPrint($response);
-
+
} catch (\Exception $e) {
echo $e->getMessage();
-}
\ No newline at end of file
+}
diff --git a/fake/fakeSefazConcilicacao.php b/fake/fakeSefazConcilicacao.php
index 435b03b9..7bf8aa0a 100644
--- a/fake/fakeSefazConcilicacao.php
+++ b/fake/fakeSefazConcilicacao.php
@@ -15,7 +15,7 @@
"tpAmb" => 2,
"razaosocial" => "SUA RAZAO SOCIAL LTDA",
"cnpj" => "99999999999999",
- "siglaUF" => "SP",
+ "siglaUF" => "MG",
"schemes" => "PL_009_V4",
"versao" => '4.00',
"tokenIBPT" => "AAAAAAA",
@@ -70,13 +70,17 @@
$std->detPag[0]->dPag = '2024-07-30'; //Obrigatório data do pagamento
//grupo OPCIONAL de informações sobre envolvidos no pagamento
+
$std->detPag[0]->CNPJPag = '12345678901234'; //opcional, caso seja informado a UFPag também deverá ser informada
// CNPJ transacional do pagamento - Preencher informando o CNPJ do estabelecimento onde o pagamento foi
// processado/transacionado/recebido quando a emissão do documento fiscal ocorrer em estabelecimento distinto
+
$std->detPag[0]->UFPag = 'SP'; //opcional, caso seja informado a CNPJPag também deverá ser informada
// UF do CNPJ do estabelecimento onde o pagamento foi processado/transacionado/recebido
+
$std->detPag[0]->CNPJIF = '11111111111111'; //opcinal
//CNPJ da instituição financeira, de pagamento, adquirente ou subadquirente.
+
$std->detPag[0]->tBand = '20'; //opcional Bandeira da operadora de cartão
//01 Visa
//02 Mastercard
diff --git a/fake/fakeSefazDistDfe.php b/fake/fakeSefazDistDfe.php
index 3a9a2315..65940206 100755
--- a/fake/fakeSefazDistDfe.php
+++ b/fake/fakeSefazDistDfe.php
@@ -40,12 +40,12 @@
$tools->loadSoapClass($soap);
$ultNSU = 0;
- $numNSU = null;
+ $numNSU = 0;
$response = $tools->sefazDistDFe($ultNSU, $numNSU);
echo FakePretty::prettyPrint($response);
-
+
} catch (\Exception $e) {
echo $e->getMessage();
-}
\ No newline at end of file
+}
diff --git a/fake/fakeSefazManifesta.php b/fake/fakeSefazManifesta.php
index 4b4fb2b0..a4dc8101 100755
--- a/fake/fakeSefazManifesta.php
+++ b/fake/fakeSefazManifesta.php
@@ -38,14 +38,14 @@
$tools->model('55');
$tools->setVerAplic('5.1.34');
$tools->loadSoapClass($soap);
-
+
$chave = "35345678901234567890123456789012345678901234";
- $justificativa = null;
+ $justificativa = '';
$tipo = $tools::EVT_CIENCIA;
$response = $tools->sefazManifesta($chave, $tipo, $justificativa);
echo FakePretty::prettyPrint($response);
-
+
} catch (\Exception $e) {
echo $e->getMessage();
-}
\ No newline at end of file
+}
diff --git a/src/Common/Tools.php b/src/Common/Tools.php
index 3e3dd7bf..e7f37648 100755
--- a/src/Common/Tools.php
+++ b/src/Common/Tools.php
@@ -456,9 +456,14 @@ protected function servico(string $service, string $uf, $tpAmb, bool $ignoreCont
throw new \RuntimeException("Servico [$service] indisponivel UF [$uf] ou modelo [$this->modelo]");
}
}
- $this->urlcUF = $this->getcUF($uf); //recuperação do cUF
- if ($this->urlcUF > 91) {
- $this->urlcUF = $this->getcUF($this->config->siglaUF); //foi solicitado dado de SVCRS ou SVCAN
+ //NT 2024.002 1.00 Maio/2024, comentário P08 elemento cOrgao
+ if ($uf === 'SVRS') {
+ $this->urlcUF = 92;
+ } else {
+ $this->urlcUF = $this->getcUF($uf); //recuperação do cUF
+ if ($this->urlcUF > 91) {
+ $this->urlcUF = $this->getcUF($this->config->siglaUF); //foi solicitado dado de SVCRS ou SVCAN
+ }
}
$this->urlVersion = $stdServ->$service->version; //recuperação da versão
$this->urlService = $stdServ->$service->url; //recuperação da url do serviço
diff --git a/src/Common/Webservices.php b/src/Common/Webservices.php
index 91bae1d2..352e0e43 100755
--- a/src/Common/Webservices.php
+++ b/src/Common/Webservices.php
@@ -40,12 +40,7 @@ public function __construct(string $xml)
*/
public function get(string $sigla, $amb, int $modelo): \stdClass
{
- $autfile = realpath(__DIR__ . '/../../storage/autorizadores.json');
- $autorizadores = json_decode(file_get_contents($autfile), true);
- if (!key_exists($sigla, $autorizadores[$modelo])) {
- throw new \RuntimeException("Nao existe autorizador [$sigla] para os webservices do modelo [$modelo]");
- }
- $auto = $autorizadores[$modelo][$sigla];
+ $auto = self::getAuth($sigla, $modelo);
if (empty($auto) || empty($this->std)) {
throw new \RuntimeException('Falhou autorizador, parece vazio');
}
@@ -72,6 +67,22 @@ public function get(string $sigla, $amb, int $modelo): \stdClass
return $svw;
}
+ /**
+ * Obtem a sigla do autorizador para um estado origem e modelo de documento fiscal
+ * @param string $sigla
+ * @param int $modelo
+ * @return string
+ */
+ public static function getAuth(string $sigla, int $modelo): string
+ {
+ $autfile = realpath(__DIR__ . '/../../storage/autorizadores.json');
+ $autorizadores = json_decode(file_get_contents($autfile), true);
+ if (!key_exists($sigla, $autorizadores[$modelo])) {
+ throw new \RuntimeException("Nao existe autorizador [$sigla] para os webservices do modelo [$modelo]");
+ }
+ return $autorizadores[$modelo][$sigla];
+ }
+
/**
* Return WS parameters in a stdClass
*/
diff --git a/src/Tools.php b/src/Tools.php
index 96ab0d38..5b22d75a 100755
--- a/src/Tools.php
+++ b/src/Tools.php
@@ -21,6 +21,7 @@
use NFePHP\Common\Signer;
use NFePHP\Common\UFList;
use NFePHP\NFe\Common\Tools as ToolsCommon;
+use NFePHP\NFe\Common\Webservices;
use NFePHP\NFe\Traits\TraitEPECNfce;
use RuntimeException;
use InvalidArgumentException;
@@ -869,13 +870,24 @@ public function sefazConciliacao(
}
}
//cancela um evento anterior de conciliação financeira
- if ($std->cancela) {
+ if ($std->cancelar) {
$tpEvento = self::EVT_CANCELA_CONCILIACAO;
$tagAdic = "{$std->verAplic}"
. "{$std->protocolo}";
}
+ /*
+ NT 2024.002 1.00 Maio/2024, comentário P08 elemento cOrgao
+ Se for referente a uma NFe (mod 55) usar a SVRS
+ Se for referente a uma BFCe (mod 65) usar a URL normal
+ */
+ $uf = $this->config->siglaUF;
+ if ((int)$this->modelo === 55) {
+ $uf = 'SVRS';
+ } else {
+ $uf = Webservices::getAuth($uf, $this->modelo);
+ }
return $this->sefazEvento(
- 'AN',
+ $uf,
$std->chNFe,
$tpEvento,
$std->nSeqEvento,
@@ -1124,7 +1136,12 @@ public function sefazEvento(
}
$sSeqEvento = str_pad((string)$nSeqEvento, 2, "0", STR_PAD_LEFT);
$eventId = "ID" . $tpEvento . $chave . $sSeqEvento;
- $cOrgao = UFList::getCodeByUF($uf);
+ //NT 2024.002 versão 1.00 - Maio 2024, comentário P08 elemento cOrgao
+ if ($tpEvento === self::EVT_CONCILIACAO && $uf === 'SVRS') {
+ $cOrgao = 92;
+ } else {
+ $cOrgao = UFList::getCodeByUF($uf);
+ }
$request = "urlPortal\" versao=\"$this->urlVersion\">"
. ""
. "$cOrgao"
@@ -1139,7 +1156,6 @@ public function sefazEvento(
. "$tpEvento"
. "$nSeqEvento"
. "$verEvento"
- //em alguns casos haverá um verAplic nesta posição ??? ver xsd conciliação
. ""
. "$descEvento"
. "$tagAdic"
@@ -1170,7 +1186,6 @@ public function sefazEvento(
$this->isValid($this->urlVersion, $request, 'envEvento');
}
$this->lastRequest = $request;
- //return $request;
$parameters = ['nfeDadosMsg' => $request];
$body = "urlNamespace\">$request";
$this->lastResponse = $this->sendRequest($body, $parameters);