E210   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 201
Duplicated Lines 12.44 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 1
dl 25
loc 201
ccs 0
cts 55
cp 0
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
C postValidation() 25 80 10

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

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
class E210 extends Element implements ElementInterface
10
{
11
    const REG = 'E210';
12
    const LEVEL = 3;
13
    const PARENT = 'E200';
14
15
    protected $parameters = [
16
        'IND_MOV_ST' => [
17
            'type'     => 'integer',
18
            'regex'    => '^[0-1]{1}$',
19
            'required' => true,
20
            'info'     => 'Indicador de movimento: 0 – Sem operações com ST 1 – Com operações de ST',
21
            'format'   => ''
22
        ],
23
        'VL_SLD_CRED_ANT_ST' => [
24
            'type'     => 'numeric',
25
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
26
            'required' => true,
27
            'info'     => 'Valor do "Saldo credor de período anterior – Substituição Tributária"',
28
            'format'   => '15v2'
29
        ],
30
        'VL_DEVOL_ST' => [
31
            'type'     => 'numeric',
32
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
33
            'required' => true,
34
            'info'     => 'Valor total do ICMS ST de devolução de mercadorias',
35
            'format'   => '15v2'
36
        ],
37
        'VL_RESSARC_ST' => [
38
            'type'     => 'numeric',
39
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
40
            'required' => true,
41
            'info'     => 'Valor total do ICMS ST de ressarcimentos',
42
            'format'   => '15v2'
43
        ],
44
        'VL_OUT_CRED_ST' => [
45
            'type'     => 'numeric',
46
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
47
            'required' => true,
48
            'info'     => 'Valor total de Ajustes "Outros créditos ST" e “Estorno de débitos ST”',
49
            'format'   => '15v2'
50
        ],
51
        'VL_AJ_CREDITOS_ST' => [
52
            'type'     => 'numeric',
53
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
54
            'required' => true,
55
            'info'     => 'Valor total dos ajustes a crédito de ICMS ST, provenientes de ajustes do documento fiscal.',
56
            'format'   => '15v2'
57
        ],
58
        'VL_RETENCAO_ST' => [
59
            'type'     => 'numeric',
60
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
61
            'required' => true,
62
            'info'     => 'Valor Total do ICMS retido por Substituição Tributária',
63
            'format'   => '15v2'
64
        ],
65
        'VL_OUT_DEB_ST' => [
66
            'type'     => 'numeric',
67
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
68
            'required' => true,
69
            'info'     => 'Valor Total dos ajustes "Outros débitos ST" " e “Estorno de créditos ST”',
70
            'format'   => '15v2'
71
        ],
72
        'VL_AJ_DEBITOS_ST' => [
73
            'type'     => 'numeric',
74
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
75
            'required' => true,
76
            'info'     => 'Valor total dos ajustes a débito de ICMS ST, provenientes de ajustes do documento fiscal.',
77
            'format'   => '15v2'
78
        ],
79
        'VL_SLD_DEV_ANT_ST' => [
80
            'type'     => 'numeric',
81
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
82
            'required' => true,
83
            'info'     => 'Valor total de Saldo devedor antes das deduções',
84
            'format'   => '15v2'
85
        ],
86
        'VL_DEDUCOES_ST' => [
87
            'type'     => 'numeric',
88
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
89
            'required' => true,
90
            'info'     => 'Valor total dos ajustes "Deduções ST"',
91
            'format'   => '15v2'
92
        ],
93
        'VL_ICMS_RECOL_ST' => [
94
            'type'     => 'numeric',
95
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
96
            'required' => true,
97
            'info'     => 'Imposto a recolher ST (11-12)',
98
            'format'   => '15v2'
99
        ],
100
        'VL_SLD_CRED_ST_TRANSPORTAR' => [
101
            'type'     => 'numeric',
102
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
103
            'required' => true,
104
            'info'     => 'Saldo credor de ST a transportar para o período '
105
            .'seguinte [(03+04+05+06+07+12)– (08+09+10)].',
106
            'format'   => '15v2'
107
        ],
108
        'DEB_ESP_ST' => [
109
            'type'     => 'numeric',
110
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
111
            'required' => true,
112
            'info'     => 'Valores recolhidos ou a recolher, extra- apuração.',
113
            'format'   => '15v2'
114
        ]
115
    ];
116
117
    /**
118
     * Constructor
119
     * @param \stdClass $std
120
     */
121
    public function __construct(\stdClass $std)
122
    {
123
        parent::__construct(self::REG);
124
        $this->std = $this->standarize($std);
125
        //TODO: essa validação posterior está incorreta
126
        //$this->postValidation();
127
    }
128
129
    public function postValidation()
130
    {
131
        /*
132
         * Campo 11 (VL_SLD_DEV_ANT_ST) Validação: o valor informado deve ser preenchido com base na
133
         * expressão: soma do total de retenção por ST, campo VL_RETENCAO_ST, com total de outros
134
         * débitos por ST, campo VL_OUT_DEB_ST, com total de ajustes de débito por ST, campo
135
         * VL_AJ_DEBITOS_ST, menos a soma do saldo credor do período anterior por ST, campo
136
         * VL_SLD_CRED_ANT_ST, com total de devolução por ST, campo VL_DEVOL_ST, com total de
137
         * ressarcimento por ST, campo VL_RESSARC_ST, com o total de outros créditos por ST, campo
138
         * VL_OUT_CRED_ST, com o total de ajustes de crédito por ST, campo VL_AJ_CREDITOS_ST. Se o
139
         * valor da expressão for maior ou igual a “0” (zero), então este valor deve ser informado
140
         * neste campo. Se o valor da expressão for menor que “0” (zero), então este campo deve ser
141
         * preenchido com “0” (zero).
142
         */
143
        $somatorio = $this->values->vl_retencao_st
144
                    + $this->values->vl_out_deb_st
145
                    + $this->values->vl_aj_debitos_st
146
                    - $this->values->vl_sld_cred_ant_st
147
                    - $this->values->vl_devol_st
148
                    - $this->values->vl_ressarc_st
149
                    - $this->values->vl_out_cred_st
150
                    - $this->values->vl_aj_creditos_st;
151
                    
152 View Code Duplication
        if (($somatorio >= 0 && $this->values->vl_sld_dev_ant_st == 0)
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...
153
        || ($somatorio < 0 && $this->values->vl_sld_dev_ant_st != 0)) {
154
            throw new \InvalidArgumentException("[" . self::REG . "] O valor informado deve ser preenchido com base na "
155
            ."expressão: soma do total de retenção por ST, campo VL_RETENCAO_ST, com total de outros "
156
            ."débitos por ST, campo VL_OUT_DEB_ST, com total de ajustes de débito por ST, campo "
157
            ."VL_AJ_DEBITOS_ST, menos a soma do saldo credor do período anterior por ST, campo "
158
            ."VL_SLD_CRED_ANT_ST, com total de devolução por ST, campo VL_DEVOL_ST, com total de "
159
            ."ressarcimento por ST, campo VL_RESSARC_ST, com o total de outros créditos por ST, campo "
160
            ."VL_OUT_CRED_ST, com o total de ajustes de crédito por ST, campo VL_AJ_CREDITOS_ST. Se o "
161
            ."valor da expressão for maior ou igual a “0” (zero), então este valor deve ser informado "
162
            ."neste campo. Se o valor da expressão for menor que “0” (zero), então este campo deve ser "
163
            ."preenchido com “0” (zero).");
164
        }
165
166
        /*
167
         * Campo 13 (VL_ICMS_RECOL_ST) Validação: o valor informado deve corresponder à diferença entre
168
         * o campo VL_SLD_DEV_ANT_ST e o campo VL_DEDUCOES_ST.
169
         */
170
        $diferenca = $this->values->vl_sld_dev_ant_st - $this->values->vl_deducoes_st;
171
        if (number_format($this->values->vl_icms_recol_st, 2, ',', '') != number_format($diferenca, 2, ',', '')) {
172
            throw new \InvalidArgumentException("[" . self::REG . "] O valor informado no campo VL_ICMS_RECOL_ST deve "
173
            ."corresponder à diferença entre o campo VL_SLD_DEV_ANT_ST e o campo VL_DEDUCOES_ST.");
174
        }
175
176
        /*
177
         * Campo 14 (VL_SLD_CRED_ST_TRANSPORTAR) Validação: se o valor da expressão: soma do total de retenção
178
         * por ST, campo VL_RETENCAO_ST, com total de outros débitos por ST, campo VL_OUT_DEB_ST, com total de
179
         * ajustes de débito por ST, campo VL_AJ_DEBITOS_ST, menos a soma do saldo credor do período anterior
180
         * por ST, campo VL_SLD_CRED_ANT_ST, com total de devolução por ST, campo VL_DEVOL_ST, com total de
181
         * ressarcimento por ST, campo VL_RESSARC_ST, com o total de outros créditos por ST, campo VL_OUT_CRED_ST,
182
         * com o total de ajustes de crédito por ST, campo VL_AJ_CREDITOS_ST, com o total dos ajustes de deduções
183
         * ST, campo VL_DEDUÇÕES_ST, for maior ou igual a “0” (zero), este campo deve ser preenchido com “0” (zero).
184
         * Se for menor que “0” (zero), o valor absoluto do resultado deve ser informado.
185
         */
186
        $somatorio = $this->values->vl_retencao_st
187
                    + $this->values->vl_out_deb_st
188
                    + $this->values->vl_aj_debitos_st
189
                    - $this->values->vl_sld_cred_ant_st
190
                    - $this->values->vl_devol_st
191
                    - $this->values->vl_ressarc_st
192
                    - $this->values->vl_out_cred_st
193
                    - $this->values->vl_aj_creditos_st
194
                    - $this->values->vl_deducoes_st;
195
196 View Code Duplication
        if (($somatorio >= 0 && $this->values->vl_sld_cred_st_transportar != 0)
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...
197
        || ($somatorio < 0 && $this->values->vl_sld_cred_st_transportar == 0)) {
198
            throw new \InvalidArgumentException("[" . self::REG . "] Se o valor da expressão: soma do total "
199
            ."de retenção por ST, campo VL_RETENCAO_ST, com total de outros débitos por ST, campo VL_OUT_DEB_ST, "
200
            ."com total de ajustes de débito por ST, campo VL_AJ_DEBITOS_ST, menos a soma do saldo credor do "
201
            ."período anterior por ST, campo VL_SLD_CRED_ANT_ST, com total de devolução por ST, campo VL_DEVOL_ST, "
202
            ."com total de ressarcimento por ST, campo VL_RESSARC_ST, com o total de outros créditos por ST, "
203
            ."campo VL_OUT_CRED_ST, com o total de ajustes de crédito por ST, campo VL_AJ_CREDITOS_ST, com o "
204
            ."total dos ajustes de deduções ST, campo VL_DEDUÇÕES_ST, for maior ou igual a “0” (zero), este "
205
            ."campo deve ser preenchido com “0” (zero). Se for menor que “0” (zero), o valor absoluto do "
206
            ."resultado deve ser informado.");
207
        }
208
    }
209
}
210