nfephp-org / sped-common

Classes comuns usadas nas atividades e classes das API's de NFe, CTe e MDFe
Other
97 stars 121 forks source link

Substituição de caractere & #230

Closed olavocneto closed 4 years ago

olavocneto commented 4 years ago
olavocneto commented 4 years ago

Na issue #224 não foi fornecido o texto que está no XML na tag emitente conforme relatado mas pode ser que seja resolvida com esse PR.

Com

libxml_use_internal_errors(true);
libxml_clear_errors();
simplexml_load_string($this->xml);
$errors = libxml_get_errors();
libxml_clear_errors();

de NFePHP\Common\Validator

A mensagem que tenho é:

level: 3
code: 68
column: 1472
message: "xmlParseEntityRef: no name↵"
file: ""
line: 2
robmachado commented 4 years ago

Meu amigo Olavo, acho que estou ruim de leitura pois não entendi absolutamente NADA ! Pode me explicar um pouco melhor o motivo e a causa ?

olavocneto commented 4 years ago

Hehehe! Falha minha!

Motivo Exemplo montando a tag prod na NFe focando somente no elemento xProd

//...
$std->xProd = 'UNIAO PEAD 20MM.&&& DOAL';
//...
$makeNFe->tagprod($std);

O método replaceUnacceptableCharacters chamado pelo método equilizeParameters irá alterar o input de xProd para:

$std->xProd = 'UNIAO PEAD 20MM.&&& DOAL';

Somente o último & é substituído. O comportamento esperado é:

$std->xProd = 'UNIAO PEAD 20MM.&&& DOAL';

Causa Tem um espaço em branco logo após o & no 1º item do arranjo passado como argumento na função str_replace do replaceUnacceptableCharacters. Esse espaço em branco foi removido.

robmachado commented 4 years ago

Rapaz !!! que inhaca !! &&& na descrição do produto ??? que coisa é essa mano ? Em principio o & deveria ser usado APENAS na razão social e olhe lá.

olavocneto commented 4 years ago

Concordo!! É que era uma NFe de devolução e a descrição do produto deveria ser idêntica a NFe referenciada.

Se for informado:

// ...
$std->xNome = 'Industrial && machinery mechanic';
// ...
$makeNFe->tagemit($std);

Vamos cair no mesmo caso.

$std->xNome = 'Industrial && machinery mechanic';

Por curiosidade, por que esse espaço em branco logo após o &?

robmachado commented 4 years ago

É pela "definição original" do uso desse & na razão social em geral algo como:

"Fulano & Ciclano Associados"

Minha preocupação com a forma de fazer isso da forma proposta é alguém já passar um \& e o sistema converter novamente e isso já ocorreu, por isso o "& " (com espaço) para não tentar converter novamente.

olavocneto commented 4 years ago

Entendi! Vou enviar uma alteração para esperar o caso de a entrada já vir com & e não ocorrer a substituição novamente. Caso a aplicação deva tratar esses casos, me avise por favor que fechamos o pull request.

tonicospinelli commented 4 years ago

@olavocneto fico contente que esteja usando a biblioteca, sei que tenho estado ausente aqui.

a biblioteca já é complexa o suficiente para receber modificações. Esse tipo de alteração deveria estar a cargo da sua aplicação, já que sua aplicação detém conhecimento do dado.

Olhando pela perspectiva de responsabilidade, esta biblioteca deveria receber o dado já formatado para ser comunicado. Por isso, fecherei este PR, pois entendo que esta alteração pode oferecer alto risco para outros usuários. Bem colocado pelo @robmachado.

Lembrando que esta biblioteca deve tratar de funcionalidades pertinentes e exclusivas à comunicação com a SEFAZ e oferecer recursos para tal.

Os dados mapeados e conversões como esta, sua aplicação deve manusear. :blush:

Não exite em contribuir, assim todos aprendemos.

olavocneto commented 4 years ago

Concordo @tonicospinelli !!