undatum 1.0.17__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- undatum/__init__.py +9 -0
- undatum/__main__.py +25 -0
- undatum/ai/__init__.py +145 -0
- undatum/ai/base.py +85 -0
- undatum/ai/config.py +184 -0
- undatum/ai/perplexity.py +79 -0
- undatum/ai/providers.py +1002 -0
- undatum/ai/schemas.py +42 -0
- undatum/cmds/__init__.py +6 -0
- undatum/cmds/analyzer.py +697 -0
- undatum/cmds/converter.py +646 -0
- undatum/cmds/ingester.py +116 -0
- undatum/cmds/query.py +68 -0
- undatum/cmds/schemer.py +328 -0
- undatum/cmds/selector.py +437 -0
- undatum/cmds/statistics.py +158 -0
- undatum/cmds/textproc.py +59 -0
- undatum/cmds/transformer.py +81 -0
- undatum/cmds/validator.py +137 -0
- undatum/common/__init__.py +6 -0
- undatum/common/functions.py +81 -0
- undatum/common/iterable.py +222 -0
- undatum/common/scheme.py +261 -0
- undatum/constants.py +21 -0
- undatum/core.py +616 -0
- undatum/formats/__init__.py +6 -0
- undatum/formats/docx.py +160 -0
- undatum/utils.py +298 -0
- undatum/validate/__init__.py +11 -0
- undatum/validate/commonrules.py +15 -0
- undatum/validate/ruscodes.py +202 -0
- undatum-1.0.17.dist-info/METADATA +610 -0
- undatum-1.0.17.dist-info/RECORD +37 -0
- undatum-1.0.17.dist-info/WHEEL +6 -0
- undatum-1.0.17.dist-info/entry_points.txt +3 -0
- undatum-1.0.17.dist-info/licenses/LICENSE +21 -0
- undatum-1.0.17.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""Russian tax and registration code validation constants and functions."""
|
|
3
|
+
KPP_CODE = {
|
|
4
|
+
'01': ('Постановка на учет в налоговом органе российской организации '
|
|
5
|
+
'в качестве налогоплательщика по месту ее нахождения'),
|
|
6
|
+
'02': ('Постановка на учет налогоплательщика - российской организации '
|
|
7
|
+
'по месту нахождения ее обособленного подразделения в зависимости '
|
|
8
|
+
'от вида подразделения'),
|
|
9
|
+
'03': ('Постановка на учет налогоплательщика – российской организации '
|
|
10
|
+
'по месту нахождения ее филиала, не исполняющего обязанности '
|
|
11
|
+
'организации по уплате налогов и сборов'),
|
|
12
|
+
'04': ('Постановка на учет налогоплательщика - российской организации '
|
|
13
|
+
'по месту нахождения ее обособленного подразделения в зависимости '
|
|
14
|
+
'от вида подразделения'),
|
|
15
|
+
'05': ('Постановка на учет налогоплательщика - российской организации '
|
|
16
|
+
'по месту нахождения ее обособленного подразделения в зависимости '
|
|
17
|
+
'от вида подразделения'),
|
|
18
|
+
'06': ('Постановка на учет налогоплательщика - российской организации '
|
|
19
|
+
'по месту нахождения принадлежащего ей недвижимого имущества '
|
|
20
|
+
'(за исключением транспортных средств) - в зависимости от вида '
|
|
21
|
+
'имущества'),
|
|
22
|
+
'07': ('Постановка на учет налогоплательщика - российской организации '
|
|
23
|
+
'по месту нахождения принадлежащего ей недвижимого имущества '
|
|
24
|
+
'(за исключением транспортных средств) - в зависимости от вида '
|
|
25
|
+
'имущества'),
|
|
26
|
+
'08': ('Постановка на учет налогоплательщика - российской организации '
|
|
27
|
+
'по месту нахождения принадлежащего ей недвижимого имущества '
|
|
28
|
+
'(за исключением транспортных средств) - в зависимости от вида '
|
|
29
|
+
'имущества'),
|
|
30
|
+
'30': ('Российская организация - налоговый агент, не учтенная в качестве '
|
|
31
|
+
'налогоплательщика'),
|
|
32
|
+
'31': ('Постановка на учет налогоплательщика - российской организации '
|
|
33
|
+
'по месту нахождения обособленного подразделения, в отношении '
|
|
34
|
+
'которого не проведена процедура оформления в соответствии с '
|
|
35
|
+
'пунктом 3 статьи 55 Гражданского кодекса Российской Федерации, '
|
|
36
|
+
'исполняющего обязанности организации по уплате налогов и сборов'),
|
|
37
|
+
'32': ('Постановка на учет налогоплательщика - российской организации '
|
|
38
|
+
'по месту нахождения обособленного подразделения, в отношении '
|
|
39
|
+
'которого не проведена процедура оформления в соответствии с '
|
|
40
|
+
'пунктом 3 статьи 55 Гражданского кодекса Российской Федерации, '
|
|
41
|
+
'не исполняющего обязанности организации по уплате налогов и '
|
|
42
|
+
'сборов'),
|
|
43
|
+
'51': 'Постановка на учет отделений иностранных организаций',
|
|
44
|
+
'52': ('Постановка на учет отделений иностранных организаций в '
|
|
45
|
+
'Российской Федерации, созданных филиалом этой иностранной '
|
|
46
|
+
'организации в иностранном государстве'),
|
|
47
|
+
'53': 'резервный код',
|
|
48
|
+
'54': 'резервный код',
|
|
49
|
+
'55': 'резервный код',
|
|
50
|
+
'56': 'резервный код',
|
|
51
|
+
'57': 'резервный код',
|
|
52
|
+
'58': 'резервный код',
|
|
53
|
+
'59': 'резервный код',
|
|
54
|
+
'60': 'Постановка на учет посольств иностранных государств',
|
|
55
|
+
'61': 'Постановка на учет консульств иностранных государств',
|
|
56
|
+
'62': ('Постановка на учет представительств, приравненных к '
|
|
57
|
+
'дипломатическим'),
|
|
58
|
+
'63': 'Постановка на учет международных организаций',
|
|
59
|
+
'64': 'резервный код',
|
|
60
|
+
'65': 'резервный код',
|
|
61
|
+
'66': 'резервный код',
|
|
62
|
+
'67': 'резервный код',
|
|
63
|
+
'68': 'резервный код',
|
|
64
|
+
'69': 'резервный код',
|
|
65
|
+
'70': ('Постановка на учет иностранных и международных организаций, '
|
|
66
|
+
'имеющих недвижимое имущество в Российской Федерации, за '
|
|
67
|
+
'исключением транспортных средств, относящихся к недвижимому '
|
|
68
|
+
'имуществу'),
|
|
69
|
+
'71': ('Постановка на учет иностранных и международных организаций, '
|
|
70
|
+
'имеющих транспортные средства в Российской Федерации, не '
|
|
71
|
+
'относящиеся к недвижимому имуществу'),
|
|
72
|
+
'72': ('Постановка на учет иностранных и международных организаций, '
|
|
73
|
+
'имеющих морские транспортные средства в Российской Федерации'),
|
|
74
|
+
'73': ('Постановка на учет иностранных и международных организаций, '
|
|
75
|
+
'имеющих речные транспортные средства в Российской Федерации'),
|
|
76
|
+
'74': ('Постановка на учет иностранных и международных организаций, '
|
|
77
|
+
'имеющих воздушные транспортные средства в Российской Федерации'),
|
|
78
|
+
'75': ('Постановка на учет иностранных и международных организаций, '
|
|
79
|
+
'имеющих космические объекты в Российской Федерации'),
|
|
80
|
+
'76': 'резервный код',
|
|
81
|
+
'77': 'резервный код',
|
|
82
|
+
'78': 'резервный код',
|
|
83
|
+
'79': 'резервный код',
|
|
84
|
+
'80': ('Учет иностранных и международных организаций в связи с '
|
|
85
|
+
'открытием в банках рублевых счетов типа "Т" (текущие)'),
|
|
86
|
+
'81': ('Учет иностранных и международных организаций в связи с '
|
|
87
|
+
'открытием счетов в банках типа "И" (инвестиционные)'),
|
|
88
|
+
'82': ('учет иностранных и международных организаций в связи с '
|
|
89
|
+
'открытием счетов в банках типа "С" (специальные)'),
|
|
90
|
+
'83': ('Учет иностранных и международных организаций в связи с '
|
|
91
|
+
'открытием в банках счетов типа "Т" (текущие) в иностранной '
|
|
92
|
+
'валюте'),
|
|
93
|
+
'84': ('Учет иностранных и международных организаций в связи с '
|
|
94
|
+
'открытием корреспондентских счетов в банка'),
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
OGRN_CODES = {
|
|
99
|
+
'1': 'юридическое лицо',
|
|
100
|
+
'5': 'юридическое лицо',
|
|
101
|
+
'3': 'индивидуальный предприниматель',
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
SOUN_SCHEMA = {'1': {'name': 'kod', 'type': 'string'},
|
|
106
|
+
'2': {'name': 'vid', 'type': 'string'},
|
|
107
|
+
'3': {'name': 'kodp', 'type': 'string'},
|
|
108
|
+
'4': {'name': 'kodv', 'type': 'string'},
|
|
109
|
+
'5': {'name': 'naimk', 'type': 'string'},
|
|
110
|
+
'6': {'name': 'naim', 'type': 'string'},
|
|
111
|
+
'7': {'name': 'psono', 'type': 'int'},
|
|
112
|
+
'8': {'name': 'puch', 'type': 'int'},
|
|
113
|
+
'9': {'name': 'potchdok', 'type': 'int'},
|
|
114
|
+
'10': {'name': 'potch', 'type': 'int'},
|
|
115
|
+
'11': {'name': 'spro_u', 'type': 'string'},
|
|
116
|
+
'12': {'name': 'spro_f', 'type': 'string'},
|
|
117
|
+
'13': {'name': 'inn', 'type': 'string'},
|
|
118
|
+
'14': {'name': 'kpp', 'type': 'string'},
|
|
119
|
+
'15': {'name': 'adres', 'type': 'string'},
|
|
120
|
+
'16': {'name': 'tel', 'type': 'string'},
|
|
121
|
+
'17': {'name': 'email', 'type': 'string'},
|
|
122
|
+
'18': {'name': 'cite', 'type': 'string'},
|
|
123
|
+
'19': {'name': 'dokum', 'type': 'string'},
|
|
124
|
+
'20': {'name': 'nomdok', 'type': 'string'},
|
|
125
|
+
'21': {'name': 'datadok', 'type': 'date'},
|
|
126
|
+
'22': {'name': 'datan', 'type': 'date'},
|
|
127
|
+
'23': {'name': 'datak', 'type': 'date'},
|
|
128
|
+
'24': {'name': 'coment', 'type': 'string'},
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
SSRF_SCHEMA = {'1': {'name': 'code', 'type': 'string'},
|
|
132
|
+
'2': {'name': 'name', 'type': 'string'},
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
OKV_SCHEMA = {'1': {'name': 'id', 'type': 'int'},
|
|
136
|
+
'2': {'name': 'ncode', 'type': 'string'},
|
|
137
|
+
'3': {'name': 'ccode', 'type': 'string'},
|
|
138
|
+
'4': {'name': 'name', 'type': 'string'},
|
|
139
|
+
'5': {'name': 'countries', 'type': 'string'},
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
PLANSCHET_SCHEMA = {'1': {'name': 'id', 'type': 'int'},
|
|
143
|
+
'2': {'name': 'code', 'type': 'string'},
|
|
144
|
+
'3': {'name': 'name', 'type': 'string'},
|
|
145
|
+
'4': {'name': 'stype', 'type': 'int'},
|
|
146
|
+
'5': {'name': 'parent_id', 'type': 'int'},
|
|
147
|
+
'6': {'name': 'level', 'type': 'int'},
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
RUS_INN_FACTOR = (2, 4, 10, 3, 5, 9, 4, 6, 8)
|
|
152
|
+
|
|
153
|
+
RUS_ACCOUNT_MASK = [7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3,
|
|
154
|
+
7, 1, 3, 7, 1]
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def calc_personal_check_digits(number):
|
|
158
|
+
"""Calculate the check digits for the 12-digit personal ИНН."""
|
|
159
|
+
weights = (7, 2, 4, 10, 3, 5, 9, 4, 6, 8)
|
|
160
|
+
d1 = str(sum(w * int(n) for w, n in zip(weights, number)) % 11 % 10)
|
|
161
|
+
weights = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8)
|
|
162
|
+
d2 = str(sum(w * int(n) for w, n in zip(weights, number[:10] + d1)) %
|
|
163
|
+
11 % 10)
|
|
164
|
+
return d1 + d2
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def _check_inn(code):
|
|
168
|
+
"""Validates INN code."""
|
|
169
|
+
if code is not None and code.isdigit():
|
|
170
|
+
if len(code) == 10:
|
|
171
|
+
asum = 0
|
|
172
|
+
for i in range(0, 9):
|
|
173
|
+
asum += int(code[i]) * RUS_INN_FACTOR[i]
|
|
174
|
+
asum = (asum % 11) % 10
|
|
175
|
+
return int(code[9]) == asum
|
|
176
|
+
if len(code) == 12:
|
|
177
|
+
weights = (7, 2, 4, 10, 3, 5, 9, 4, 6, 8)
|
|
178
|
+
d1 = str(sum(w * int(n) for w, n in zip(weights, code)) % 11 %
|
|
179
|
+
10)
|
|
180
|
+
weights = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8)
|
|
181
|
+
d2 = str(sum(w * int(n) for w, n in zip(weights,
|
|
182
|
+
code[:10] + d1)) % 11 %
|
|
183
|
+
10)
|
|
184
|
+
chsum = d1 + d2
|
|
185
|
+
return chsum == code[-2:]
|
|
186
|
+
return False
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _check_ogrn(ogrn):
|
|
190
|
+
"""Validates OGRN code."""
|
|
191
|
+
if not ogrn:
|
|
192
|
+
return False
|
|
193
|
+
if len(ogrn) == 13:
|
|
194
|
+
delimeter = 11
|
|
195
|
+
elif len(ogrn) == 15:
|
|
196
|
+
delimeter = 13
|
|
197
|
+
else:
|
|
198
|
+
return False
|
|
199
|
+
main_part = int(ogrn[:-1]) % delimeter % 10
|
|
200
|
+
checksum = int(ogrn[-1])
|
|
201
|
+
|
|
202
|
+
return main_part == checksum
|