Z0150::postValidation()   A
last analyzed

Complexity

Conditions 4
Paths 3

Size

Total Lines 8

Duplication

Lines 3
Ratio 37.5 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
dl 3
loc 8
ccs 0
cts 8
cp 0
rs 10
c 0
b 0
f 0
cc 4
nc 3
nop 0
crap 20
1
<?php
2
3
namespace NFePHP\EFD\Elements\ICMSIPI;
4
5
use NFePHP\EFD\Common\Element;
6
use NFePHP\EFD\Common\ElementInterface;
7
use \stdClass;
8
9
/**
10
 * Elemento 0150 do Bloco 0
11
 * REGISTRO 0150: TABELA DE CADASTRO DO PARTICIPANTE
12
 * Registro utilizado para informações cadastrais das pessoas físicas ou
13
 * jurídicas envolvidas nas transações comerciais com o estabelecimento,
14
 * no período. Participantes sem movimentação no período não devem ser
15
 * informados neste registro.
16
 * Obs.: Não  devem  ser  informados  como participantes  os CNPJ  e CPF apenas
17
 * citados  nos registros  C350 –  Nota Fiscal  de Venda  ao  Consumidor,
18
 * C460  –  Documento  Fiscal  emitido  por  ECF
19
 * e no  C100,  quando  se  tratar  de NFC-e -  Nota Fiscal Eletrônica ao
20
 * Consumidor Final - modelo 65.
21
 * O  código  a ser utilizado  é de livre  atribuição  pelo  contribuinte e
22
 * possui validade  para o  arquivo  informado.
23
 * Este código deve ser único para o participante, não havendo necessidade,
24
 * sempre que possível, de se criar um código para cada período.
25
 * Não podem ser informados dois ou mais registros com o mesmo Código de Participante.
26
 * Para o caso de participante pessoa física com mais de um endereço,
27
 * podem ser fornecidos mais de um registro, com o mesmo NOME e CPF.
28
 * Neste caso, deve ser usado um COD_PART para cada registro, alterando os demais dados.
29
 * As  informações  deste registro  representam  os  dados  atualizados  no  
30
 * último  evento  fiscal  (emissão/recebimento  de documento fiscal) da EFD-ICMS/IPI.
31
 *
32
 * NOTA: usada a letra Z no nome da Classe pois os nomes não podem ser exclusivamente
33
 * numeréricos e também para não confundir os com elementos do bloco B
34
 */
35
class Z0150 extends Element implements ElementInterface
36
{
37
    const REG = '0150';
38
    const LEVEL = 2;
39
    const PARENT = '0100';
40
    
41
    protected $parameters = [
42
        'COD_PART' => [
43
            'type'     => 'string',
44
            'regex'    => '^.{1,60}$',
45
            'required' => true,
46
            'info'     => 'Código de identificação do participante no arquivo.',
47
            'format'   => ''
48
        ],
49
        'NOME' => [
50
            'type'     => 'string',
51
            'regex'    => '^.{1,100}$',
52
            'required' => true,
53
            'info'     => 'Nome pessoal ou empresarial do participante.',
54
            'format'   => ''
55
        ],
56
        'COD_PAIS' => [
57
            'type'     => 'integer',
58
            'regex'    => '^[0-9]{4,5}$',
59
            'required' => true,
60
            'info'     => 'Código do país do participante, conforme a tabela '
61
            . 'indicada no item 3.2.1',
62
            'format'   => ''
63
        ],
64
        'CNPJ' => [
65
            'type'     => 'string',
66
            'regex'    => '^[0-9]{14}$',
67
            'required' => false,
68
            'info'     => 'CNPJ do participante.',
69
            'format'   => ''
70
        ],
71
        'CPF' => [
72
            'type'     => 'string',
73
            'regex'    => '^[0-9]{11}$',
74
            'required' => false,
75
            'info'     => 'CPF do participante.',
76
            'format'   => ''
77
        ],
78
        'IE' => [
79
            'type'     => 'string',
80
            'regex'    => '^[0-9]{2,14}$',
81
            'required' => false,
82
            'info'     => 'Inscrição Estadual do participante.',
83
            'format'   => ''
84
        ],
85
        'COD_MUN' => [
86
            'type'     => 'integer',
87
            'regex'    => '^[0-9]{7}$',
88
            'required' => false,
89
            'info'     => 'Código do município, conforme a tabela IBGE',
90
            'format'   => ''
91
        ],
92
        'SUFRAMA' => [
93
            'type'     => 'string',
94
            'regex'    => '^[0-9]{8,9}$',
95
            'required' => false,
96
            'info'     => 'Número de inscrição do participante na SUFRAMA.',
97
            'format'   => ''
98
        ],
99
        'END' => [
100
            'type'     => 'string',
101
            'regex'    => '^.{1,60}$',
102
            'required' => true,
103
            'info'     => 'Logradouro e endereço do imóvel',
104
            'format'   => ''
105
        ],
106
        'NUM' => [
107
            'type'     => 'string',
108
            'regex'    => '^.{1,10}$',
109
            'required' => false,
110
            'info'     => 'Número do imóvel',
111
            'format'   => ''
112
        ],
113
        'COMPL' => [
114
            'type'     => 'string',
115
            'regex'    => '^.{1,60}$',
116
            'required' => false,
117
            'info'     => 'Dados complementares do endereço',
118
            'format'   => ''
119
        ],
120
        'BAIRRO' => [
121
            'type'     => 'string',
122
            'regex'    => '^.{1,60}$',
123
            'required' => false,
124
            'info'     => 'Bairro em que o imóvel está situado',
125
            'format'   => ''
126
        ],
127
    ];
128
    
129
    /**
130
     * Constructor
131
     * @param \stdClass $std
132
     */
133
    public function __construct(\stdClass $std)
134
    {
135
        parent::__construct(self::REG);
136
        $this->std = $this->standarize($std);
137
        $this->postValidation();
138
    }
139
    
140
    /**
141
     * Aqui são colocadas validações adicionais que requerem mais logica
142
     * e processamento
143
     * Deve ser usado apenas quando necessário
144
     * @throws \InvalidArgumentException
145
     */
146
    public function postValidation()
147
    {
148
        if ($this->std->cod_pais == '1058' || $this->std->cod_pais == '01058') {
149 View Code Duplication
            if (!$this->std->cnpj xor $this->std->cpf) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
150
                throw new \InvalidArgumentException("[" . self::REG . "] Deve ser informado apenas o CNPJ ou o CPF");
151
            }
152
        }
153
    }
154
}
155