E520::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 0
cts 6
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
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 E520 extends Element implements ElementInterface
10
{
11
    const REG = 'E520';
12
    const LEVEL = 3;
13
    const PARENT = 'E500';
14
15
    protected $parameters = [
16
        'VL_SD_ANT_IPI' => [
17
            'type'     => 'numeric',
18
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
19
            'required' => true,
20
            'info'     => 'Saldo credor do IPI transferido do período anterior',
21
            'format'   => '15v2'
22
        ],
23
        'VL_DEB_IPI' => [
24
            'type'     => 'numeric',
25
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
26
            'required' => true,
27
            'info'     => 'Valor total dos débitos por "Saídas com débito do imposto"',
28
            'format'   => '15v2'
29
        ],
30
        'VL_CRED_IPI' => [
31
            'type'     => 'numeric',
32
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
33
            'required' => true,
34
            'info'     => 'Valor total dos créditos por "Entradas e aquisições com crédito do imposto"',
35
            'format'   => '15v2'
36
        ],
37
        'VL_OD_IPI' => [
38
            'type'     => 'numeric',
39
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
40
            'required' => true,
41
            'info'     => 'Valor de "Outros débitos" do IPI (inclusive estornos de crédito)',
42
            'format'   => '15v2'
43
        ],
44
        'VL_OC_IPI' => [
45
            'type'     => 'numeric',
46
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
47
            'required' => true,
48
            'info'     => 'Valor de "Outros créditos" do IPI (inclusive estornos de débitos)',
49
            'format'   => '15v2'
50
        ],
51
        'VL_SC_IPI' => [
52
            'type'     => 'numeric',
53
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
54
            'required' => true,
55
            'info'     => 'Valor do saldo credor do IPI a transportar para o período seguinte',
56
            'format'   => '15v2'
57
        ],
58
        'VL_SD_IPI' => [
59
            'type'     => 'numeric',
60
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
61
            'required' => true,
62
            'info'     => 'Valor do saldo devedor do IPI a recolher',
63
            'format'   => '15v2'
64
        ]
65
    ];
66
67
    /**
68
     * Constructor
69
     * @param \stdClass $std
70
     */
71
    public function __construct(\stdClass $std)
72
    {
73
        parent::__construct(self::REG);
74
        $this->std = $this->standarize($std);
75
        $this->postValidation();
76
    }
77
78
    public function postValidation()
79
    {
80
        /*
81
         * Campo 07 (VL_SC_IPI) Validação: Se a soma dos campos VL_DEB_IPI e VL_OD_IPI menos a soma dos campos
82
         * VL_SD_ANT_IPI, VL_CRED_IPI e VL_OC_IPI for menor que “0” (zero), então o campo VL_SC_IPI deve ser
83
         * igual ao valor absoluto da expressão, e o valor do campo VL_SD_IPI deve ser igual a “0” (zero).
84
         */
85
        $somatorio = $this->values->vl_deb_ipi
86
                    + $this->values->vl_od_ipi
87
                    - $this->values->vl_sd_ant_ipi
88
                    - $this->values->vl_cred_ipi
89
                    - $this->values->vl_oc_ipi;
90 View Code Duplication
        if ($somatorio < 0 && $this->values->vl_sc_ipi == 0 && $this->values->vl_sd_ipi != 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...
91
            throw new \InvalidArgumentException("[" . self::REG . "] Se a soma dos campos VL_DEB_IPI e VL_OD_IPI "
92
            ."menos a soma dos campos VL_SD_ANT_IPI, VL_CRED_IPI e VL_OC_IPI for menor que “0” (zero), então o campo "
93
            ."VL_SC_IPI deve ser igual ao valor absoluto da expressão, e o valor do campo VL_SD_IPI deve ser igual a "
94
            ."“0” (zero).");
95
        }
96
97
        /*
98
         * Campo 08 (VL_SD_IPI) Validação: Se a soma dos campos VL_DEB_IPI e VL_OD_IPI menos a soma dos campos
99
         * VL_SD_ANT_IPI, VL_CRED_IPI e VL_OC_IPI for maior ou igual a “0” (zero), então o campo 08 (VL_SD_IPI)
100
         * deve ser igual ao resultado da expressão, e o valor do campo VL_SC_IPI deve ser igual a “0” (zero).
101
         */
102
        $somatorio = $this->values->vl_deb_ipi
103
                    + $this->values->vl_od_ipi
104
                    - $this->values->vl_sd_ant_ipi
105
                    - $this->values->vl_cred_ipi
106
                    - $this->values->vl_oc_ipi;
107 View Code Duplication
        if ($somatorio >= 0 && $this->values->vl_sd_ipi != $somatorio && $this->values->vl_sc_ipi != 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...
108
            throw new \InvalidArgumentException("[" . self::REG . "] Se a soma dos campos VL_DEB_IPI e VL_OD_IPI "
109
            ."menos a soma dos campos VL_SD_ANT_IPI, VL_CRED_IPI e VL_OC_IPI for maior ou igual a “0” (zero), então "
110
            ."o campo 08 (VL_SD_IPI) deve ser igual ao resultado da expressão, e o valor do campo VL_SC_IPI deve ser "
111
            ."igual a “0” (zero).");
112
        }
113
    }
114
}
115