|
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 K220: OUTRAS MOVIMENTAÇÕES INTERNAS ENTRE MERCADORIAS |
|
11
|
|
|
* Este registro tem o objetivo de informar a movimentação interna entre |
|
12
|
|
|
* mercadorias de tipos: |
|
13
|
|
|
* 00 – Mercadoria para revenda; |
|
14
|
|
|
* 01 – Matéria-Prima; |
|
15
|
|
|
* 02 – Embalagem; |
|
16
|
|
|
* 03 – Produtos em Processo; |
|
17
|
|
|
* 04 – Produto Acabado; |
|
18
|
|
|
* 05 – Subproduto |
|
19
|
|
|
* e 10 – Outros Insumos – campo TIPO_ITEM do Registro 0200; que não se |
|
20
|
|
|
* enquadre nas movimentações internas já informadas nos demais tipos de |
|
21
|
|
|
* registros. |
|
22
|
|
|
* Exemplos: |
|
23
|
|
|
* 1) Reclassificação de um produto em outro código em função do cliente |
|
24
|
|
|
* a que se destina: o contribuinte aponta a quantidade produzida de |
|
25
|
|
|
* determinado produto, por exemplo, código 1. |
|
26
|
|
|
* Este produto, quando destinado a determinado cliente recebe uma outra |
|
27
|
|
|
* codificação, código 2. Neste caso há a necessidade de controle do |
|
28
|
|
|
* estoque por cliente. |
|
29
|
|
|
* Assim o contribuinte deverá fazer um registro K220 dando saída no estoque |
|
30
|
|
|
* do produto 1 e entrada no estoque do produto 2. |
|
31
|
|
|
* 2) Reclassificação de um produto em função do controle de qualidade: |
|
32
|
|
|
* quando o produto não conforme não permanecerá com o mesmo código,por exemplo: |
|
33
|
|
|
* venda como produto com defeito ou subproduto; |
|
34
|
|
|
* consumo em outra fase de produção. |
|
35
|
|
|
* Caso o produto não conforme tiver como destino o reprocessamento, onde o |
|
36
|
|
|
* produto reprocessado permanecerá com o mesmo código do produto a ser |
|
37
|
|
|
* reprocessado, deverá ser escriturado no Registro K260. |
|
38
|
|
|
* A quantidade movimentada deve ser expressa, obrigatoriamente, na unidade |
|
39
|
|
|
* de medida do item de origem e do item de destino constante no campo 06 do |
|
40
|
|
|
* registro 0200(UNID_INV). |
|
41
|
|
|
* Validação do Registro: A chave deste registro são os campos DT_MOV, |
|
42
|
|
|
* COD_ITEM_ORI e COD_ITEM_DEST |
|
43
|
|
|
*/ |
|
44
|
|
View Code Duplication |
class K220 extends Element implements ElementInterface |
|
|
|
|
|
|
45
|
|
|
{ |
|
46
|
|
|
const REG = 'K220'; |
|
47
|
|
|
const LEVEL = 3; |
|
48
|
|
|
const PARENT = 'K215|K210|K200|K100'; |
|
49
|
|
|
|
|
50
|
|
|
protected $parameters = [ |
|
51
|
|
|
'DT_MOV' => [ |
|
52
|
|
|
'type' => 'string', |
|
53
|
|
|
'regex' => '^(0[1-9]|[1-2][0-9]|31(?!(?:0[2469]|11))|30(?!02))(0[1-9]|1[0-2])([12]\d{3})$', |
|
54
|
|
|
'required' => true, |
|
55
|
|
|
'info' => 'Data da movimentação interna', |
|
56
|
|
|
'format' => '' |
|
57
|
|
|
], |
|
58
|
|
|
'COD_ITEM_ORI' => [ |
|
59
|
|
|
'type' => 'string', |
|
60
|
|
|
'regex' => '^.{1,60}$', |
|
61
|
|
|
'required' => true, |
|
62
|
|
|
'info' => 'Código do item de origem (campo 02 do Registro 0200)', |
|
63
|
|
|
'format' => '' |
|
64
|
|
|
], |
|
65
|
|
|
'COD_ITEM_DEST' => [ |
|
66
|
|
|
'type' => 'string', |
|
67
|
|
|
'regex' => '^.{1,60}$', |
|
68
|
|
|
'required' => true, |
|
69
|
|
|
'info' => 'Código do item de destino (campo 02 do Registro 0200)', |
|
70
|
|
|
'format' => '' |
|
71
|
|
|
], |
|
72
|
|
|
'QTD_ORI' => [ |
|
73
|
|
|
'type' => 'numeric', |
|
74
|
|
|
'regex' => '^\d+(\.\d*)?|\.\d+$', |
|
75
|
|
|
'required' => true, |
|
76
|
|
|
'info' => 'Quantidade movimentada do item de origem', |
|
77
|
|
|
'format' => '15v6' |
|
78
|
|
|
], |
|
79
|
|
|
'QTD_DEST' => [ |
|
80
|
|
|
'type' => 'numeric', |
|
81
|
|
|
'regex' => '^\d+(\.\d*)?|\.\d+$', |
|
82
|
|
|
'required' => true, |
|
83
|
|
|
'info' => 'Quantidade movimentada do item de destino', |
|
84
|
|
|
'format' => '15v6' |
|
85
|
|
|
], |
|
86
|
|
|
]; |
|
87
|
|
|
|
|
88
|
|
|
/** |
|
89
|
|
|
* Constructor |
|
90
|
|
|
* @param \stdClass $std |
|
91
|
|
|
*/ |
|
92
|
|
|
public function __construct(\stdClass $std) |
|
93
|
|
|
{ |
|
94
|
|
|
parent::__construct(self::REG); |
|
95
|
|
|
$this->std = $this->standarize($std); |
|
96
|
|
|
} |
|
97
|
|
|
} |
|
98
|
|
|
|
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.