Document   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 169
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 86
c 1
b 0
f 0
dl 0
loc 169
rs 10
wmc 6

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getFnFactoryNumber() 0 3 1
A getNumber() 0 3 1
A getPropertyInitMap() 0 18 1
A getFpd() 0 3 1
A getCreatAt() 0 3 1
A getRuleList() 0 34 1
1
<?php
2
3
namespace alekciy\ofd\providers\yandex\Model;
4
5
use alekciy\ofd\BaseModel;
6
use alekciy\ofd\Converter;
7
use alekciy\ofd\interfaces\DocumentInterface;
8
9
class Document extends BaseModel implements DocumentInterface
10
{
11
	use Converter;
12
13
	/** @var int Номер смены */
14
	public $shiftNumber = 0;
15
16
	/** @var string Время создания */
17
	public $dateTime = '';
18
19
	/** @var int Полная сумма по чеку, копейки */
20
	public $totalSum = 0;
21
22
	/** @var int Сумма по чеку безнал, копейки */
23
	public $electronicSum = 0;
24
25
	/** @var int Сумма по чеку наличными, копейки */
26
	public $cashSum = 0;
27
28
	/** @var int Сумма по чеку с постоплатой (кредит), копейки */
29
	public $creditSum = 0;
30
31
	/** @var int Сумма по чеку с предоплатой (зачет аванса и или других платежей), копейки */
32
	public $prepaidSum = 0;
33
34
	/** @var int Сумма по чеку с оплатой встречным представлением (другой способ оплаты), копейки */
35
	public $provisionSum = 0;
36
37
	/** @var integer Номер за смену */
38
	public $numberInShift = 0;
39
40
	/** @var string Тип операции */
41
	public $accountingType = '';
42
43
	/** @var integer Номер фискального документа (ФД) */
44
	public $fdNumber = 0;
45
46
	/** @var string Заводской номер ФН */
47
	public $fnFactoryNumber;
48
49
	/** @var integer Тип документа */
50
	public $documentType = 0;
51
52
	/** @var string Регистрационный номер */
53
	public $kktRegNumber;
54
55
	/** @var integer Фискальный признак документа (ФПД) */
56
	public $fpd = '';
57
58
	// Типы
59
	const TYPE_OPEN                = 'openShift';              // отчет об открытии смены
60
	const TYPE_CLOSE               = 'closeShift';             // отчет о закрытии смены
61
	const TYPE_STATE               = 'currentStateReport';     // отчет о текущем состоянии расчетов
62
	const TYPE_CHECK               = 'receipt';                // кассовый чек
63
	const TYPE_CHECK_CORRECT       = 'receiptCorrection';      // кассовый чек коррекции
64
	const TYPE_STRICT              = 'bso';                    // бланк строгой отчетности (БСО)
65
	const TYPE_STRICT_CORRECT      = 'bsoCorrection';          // бланк строгой отчетности (БСО) коррекции
66
	const TYPE_REGISTRATION        = 'fiscalReport';           // отчет о регистрации
67
	const TYPE_REGISTRATION_CHANGE = 'fiscalReportCorrection'; // отчет об изменении параметров регистрации
68
	const TYPE_FN_CLOSE            = 'closeArchive';           // закрытие фискального накопителя (ФН)
69
70
	// Признак расчета
71
	const OPERATION_INCOME         = 'income';         // приход
72
	const OPERATION_INCOME_RETURN  = 'income_return';  // возврат прихода
73
	const OPERATION_OUTCOME        = 'outcome';        // расход
74
	const OPERATION_OUTCOME_RETURN = 'outcome_return'; // возврат расхода
75
76
	// Система налогообложения
77
	const TAX_OSN                    = 'osn';                       // общая система налогообложения (ОСН)
78
	const TAX_USN_INCOME             = 'usn_income';                // упрощенная система налогообложения (УСН), доход
79
	const TAX_USN_INCOME_EXPENDITURE = 'usn_income_wo_expenditure'; // упрощенная система налогообложения (УСН), доход-расход
80
	const TAX_AGRICULTURAL           = 'esn_agricultural';          // единый сельскохозяйственный (ЕСХН)
81
	const TAX_PATENT                 = 'psn';                       // патент
82
83
	/**
84
	 * @inheritDoc
85
	 */
86
	protected function getPropertyInitMap(): array
87
	{
88
		return [
89
			'shift'         => 'shiftNumber',
90
			'real_date'     => 'dateTime',
91
			'totalSum'      => ['totalSum', 'conv' => 'RubToKop'],
92
			'number'        => 'numberInShift',
93
			'operation'     => 'accountingType',
94
			'ecashTotalSum' => ['electronicSum', 'conv' => 'RubToKop'],
95
			'fn'            => 'fnFactoryNumber',
96
			'cashTotalSum'  => ['cashSum', 'conv' => 'RubToKop'],
97
			'creditSum'     => ['creditSum', 'conv' => 'RubToKop'],
98
			'code_name'     => 'documentType',
99
			'rn'            => 'kktRegNumber',
100
			'fiscalSign'    => 'fpd',
101
			'doc_number'    => 'fdNumber',
102
			'provisionSum'  => ['provisionSum', 'conv' => 'RubToKop'],
103
			'prepaidSum'    => ['prepaidSum', 'conv' => 'RubToKop'],
104
		];
105
	}
106
107
	/**
108
	 * @inheritDoc
109
	 */
110
	protected function getRuleList(): array
111
	{
112
		return [
113
			'fnFactoryNumber' => ['required', ['lengthMin', 1], ['lengthMax', 16]],
114
			'dateTime'        => ['required', ['dateFormat', 'Y-m-d H:i:s']],
115
			'fdNumber'        => ['required', 'integer'],
116
			'shiftNumber'     => ['required', 'integer', ['min', 0]],
117
			'numberInShift'   => ['required', 'integer', ['min', 0]],
118
			'fpd'             => ['required', ['regex', '~^[0-9]{9}$~u']],
119
			'kktRegNumber'    => ['required', ['lengthMin', 1], ['lengthMax', 16]],
120
			'documentType'    => ['required', ['in', [
121
				self::TYPE_OPEN,
122
				self::TYPE_CLOSE,
123
				self::TYPE_STATE,
124
				self::TYPE_CHECK,
125
				self::TYPE_CHECK_CORRECT,
126
				self::TYPE_STRICT,
127
				self::TYPE_STRICT_CORRECT,
128
				self::TYPE_REGISTRATION,
129
				self::TYPE_REGISTRATION_CHANGE,
130
				self::TYPE_FN_CLOSE,
131
			]]],
132
133
			'totalSum'       => ['integer', ['min', 0], ['max', PHP_INT_MAX]],
134
			'cashSum'        => ['integer', ['min', 0], ['max', PHP_INT_MAX]],
135
			'creditSum'      => ['integer', ['min', 0], ['max', PHP_INT_MAX]],
136
			'provisionSum'   => ['integer', ['min', 0], ['max', PHP_INT_MAX]],
137
			'prepaidSum'     => ['integer', ['min', 0], ['max', PHP_INT_MAX]],
138
			'electronicSum'  => ['integer', ['min', 0], ['max', PHP_INT_MAX]],
139
			'accountingType' => [['in', [
140
				self::OPERATION_INCOME,
141
				self::OPERATION_INCOME_RETURN,
142
				self::OPERATION_OUTCOME,
143
				self::OPERATION_OUTCOME_RETURN,
144
			]]],
145
		];
146
	}
147
148
	/**
149
	 * @inheritDoc
150
	 */
151
	public function getFnFactoryNumber(): string
152
	{
153
		return $this->fnFactoryNumber;
154
	}
155
156
	/**
157
	 * @inheritDoc
158
	 */
159
	public function getNumber(): int
160
	{
161
		return $this->fdNumber;
162
	}
163
164
	/**
165
	 * @inheritDoc
166
	 */
167
	public function getCreatAt(): string
168
	{
169
		return $this->dateTime;
170
	}
171
172
	/**
173
	 * @inheritDoc
174
	 */
175
	public function getFpd(): string
176
	{
177
		return $this->fpd;
178
	}
179
}