G110::postValidation()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 0
cts 8
cp 0
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 0
crap 6
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
 * REGISTRO G110: ICMS – ATIVO PERMANENTE – CIAP
11
 *
12
 * Este registro tem o objetivo de prestar informações sobre o CIAP:
13
 *
14
 * a) saldo de ICMS do CIAP,  composto pelo valor do ICMS de bens
15
 *    ou componentes (somente componentes cujo crédito de ICMS já foi
16
 *    apropriado) que entraram anteriormente ao período de apuração. (campo 4);
17
 * b) o somatório das parcelas de ICMS passíveis de apropriação de cada bem ou
18
 *    componente, inclusive aqueles que foram escriturados no CIAP em período
19
 *    anterior (campo 5);
20
 * c) o valor do índice de participação do somatório do valor das saídas
21
 *    tributadas e saídas para exportação no valor total das saídas (campo 8) -
22
 *    (o valor é sempre igual ou menor que 1 (um);
23
 * d) o valor de ICMS a ser apropriado como crédito. Esse valor (campo 9) será
24
 *    apropriado diretamente no Registro de Apuração do ICMS, como ajuste de
25
 *    apuração, salvo se a legislação obrigar à emissão de documento fiscal;
26
 * e) o valor de outras parcelas de ICMS a ser apropriado. Esse valor
27
 *    (campo 10) será apropriado diretamente no Registro de Apuração do ICMS,
28
 *    como ajuste de apuração, salvo se a legislação obrigar à emissão
29
 *    de documento fiscal.
30
 *
31
 * Não podem ser informados dois ou mais registros com a mesma combinação de
32
 * conteúdo nos campos DT_INI e DT_FIN e esta combinação deve ser igual à
33
 * informada em um registro E100.
34
 */
35
class G110 extends Element implements ElementInterface
36
{
37
    const REG = 'G110';
38
    const LEVEL = 2;
39
    const PARENT = 'G001';
40
41
    protected $parameters = [
42
        'DT_INI'     => [
43
            'type'     => 'string',
44
            'regex'    => '^(0[1-9]|[1-2][0-9]|31(?!(?:0[2469]|11))|30(?!02))(0[1-9]|1[0-2])([12]\d{3})$',
45
            'required' => true,
46
            'info'     => 'Data inicial a que a apuração se refere.',
47
            'format'   => ''
48
        ],
49
        'DT_FIN'     => [
50
            'type'     => 'string',
51
            'regex'    => '^(0[1-9]|[1-2][0-9]|31(?!(?:0[2469]|11))|30(?!02))(0[1-9]|1[0-2])([12]\d{3})$',
52
            'required' => true,
53
            'info'     => 'Data inicial a que a apuração se refere.',
54
            'format'   => ''
55
        ],
56
        'SALDO_IN_ICMS' => [
57
            'type'     => 'numeric',
58
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
59
            'required' => true,
60
            'info'     => 'Saldo inicial de ICMS do CIAP, composto por ICMS  de  bens  que  entraram'
61
                . ' anteriormente  ao período de apuração (somatório dos campos 05 a 08'
62
                . ' (VL_IMOB_ICMS_OP + VL_IMOB_ICMS_ST + VL_IMOB_ICMS_FRT + VL_IMOB_ICMS_DIF) '
63
                .' dos registros G125)',
64
            'format'   => '15v2'
65
        ],
66
        'SOM_PARC' => [
67
            'type'     => 'numeric',
68
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
69
            'required' => true,
70
            'info'     => 'Somatório  das  parcelas  de  ICMS  passível  de'
71
                . ' apropriação de cada bem (campo 10 (VL_PARC_PASS) do G125)',
72
            'format'   => '15v2'
73
        ],
74
        'VL_TRIB_EXP' => [
75
            'type'     => 'numeric',
76
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
77
            'required' => true,
78
            'info'     => 'Valor do somatório das saídas tributadas e'
79
                . 'saídas para exportação',
80
            'format'   => '15v2'
81
        ],
82
        'VL_TOTAL' => [
83
            'type'     => 'numeric',
84
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
85
            'required' => true,
86
            'info'     => 'Valor total de saídas',
87
            'format'   => '15v2'
88
        ],
89
        'IND_PER_SAI' => [
90
            'type'     => 'numeric',
91
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
92
            'required' => true,
93
            'info'     => 'Índice de participação do valor do somatório das '
94
                . 'saídas  tributadas  e  saídas  para  exportação  no '
95
                . 'valor  total  de  saídas  (Campo  06 VL_TRIB_EXP dividido  pelo campo 07 VL_TOTAL)',
96
            'format'   => '15v8'
97
        ],
98
        'ICMS_APROP' => [
99
            'type'     => 'numeric',
100
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
101
            'required' => true,
102
            'info'     => 'Valor de ICMS a ser apropriado na apuração do ICMS, '
103
                . 'correspondente á  multiplicação do campo 05 (SOM_PARC) pelo campo 08 (IND_PER_SAI).',
104
            'format'   => '15v2'
105
        ],
106
        'SOM_ICMS_OC' => [
107
            'type'     => 'numeric',
108
            'regex'    => '^\d+(\.\d*)?|\.\d+$',
109
            'required' => true,
110
            'info'     => 'Valor de outros créditos a ser apropriado na Apuração do ICMS,'
111
                . ' correspondente ao somatório do campo 09 (VL_PARC_APROP) do registro G126.',
112
            'format'   => '15v2'
113
        ]
114
    ];
115
116
    /**
117
     * Constructor
118
     * @param \stdClass $std
119
     */
120
    public function __construct(\stdClass $std)
121
    {
122
        parent::__construct(self::REG);
123
        $this->std = $this->standarize($std);
124
        $this->postValidation();
125
    }
126
127
    /**
128
     * Aqui são colocadas validações adicionais que requerem mais logica
129
     * e processamento
130
     * Deve ser usado apenas quando necessário
131
     * @throws \InvalidArgumentException
132
     */
133
    public function postValidation()
134
    {
135
        if ($this->values->vl_trib_exp > $this->values->vl_total) {
136
            throw new \InvalidArgumentException("[" . self::REG . "] O valor "
137
                . "informado no campo VL_TRIB_EXP deve ser menor ou igual ao informado "
138
                . "no campo VL_TOTAL.");
139
        }
140
    }
141
}
142