orangedata 0.1.0 → 1.0.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +3 -3
- data/README.md +5 -5
- data/lib/orange_data/credentials.rb +15 -34
- data/lib/orange_data/schema_definitions.yml +12 -7
- data/lib/orange_data/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24d97c1e067049b4e767c7ca1579e623fa68753c5f486299d1a507d4bc68d66b
|
4
|
+
data.tar.gz: a97d04fd012da815eaccc8ceffba7e437ab606b4b636aef0576cf2d98f18702b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 735c83060727e2985bf290924ffc03ef7f8455013aa7cc41d602a3c2fae6adc1e151e693ef5b72caa320947da3884cc6af0bf264915f3bdc5252203271464385
|
7
|
+
data.tar.gz: ed6c5f041c686f1acdb1f50f42b625ba6b0384123a0cc23e7681939c2694969091fbf019cb30cee24e999e77aa7e53da42175d27d66984b1873a0a43ada7aaeb
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.0.0
|
4
|
+
|
5
|
+
- breaking: drop support for EOL versions of ruby (< 2.7)
|
6
|
+
- possibly breaking: added vat20 to match current protocol
|
7
|
+
|
3
8
|
## 0.1.0
|
4
9
|
|
5
10
|
- Deprecated support for EOL ruby versions < 2.6 - gem may continue to work, but will not be tested against
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
orangedata (
|
4
|
+
orangedata (1.0.0)
|
5
5
|
faraday (>= 0.15)
|
6
6
|
faraday_middleware
|
7
7
|
|
@@ -15,7 +15,7 @@ GEM
|
|
15
15
|
rexml
|
16
16
|
diff-lcs (1.5.0)
|
17
17
|
docile (1.4.0)
|
18
|
-
faraday (1.10.
|
18
|
+
faraday (1.10.3)
|
19
19
|
faraday-em_http (~> 1.0)
|
20
20
|
faraday-em_synchrony (~> 1.0)
|
21
21
|
faraday-excon (~> 1.1)
|
@@ -44,7 +44,7 @@ GEM
|
|
44
44
|
json (2.6.2)
|
45
45
|
json-schema (3.0.0)
|
46
46
|
addressable (>= 2.8)
|
47
|
-
multipart-post (2.
|
47
|
+
multipart-post (2.3.0)
|
48
48
|
parallel (1.22.1)
|
49
49
|
parser (3.1.2.1)
|
50
50
|
ast (~> 2.4.1)
|
data/README.md
CHANGED
@@ -35,9 +35,9 @@ gem 'orangedata'
|
|
35
35
|
|
36
36
|
### Пробитие чека
|
37
37
|
|
38
|
-
Описание полей смотреть в [официальной документации](https://github.com/orangedata-official/API), названия маппинга и некоторые
|
38
|
+
Описание полей смотреть в [официальной документации](https://github.com/orangedata-official/API), названия маппинга и некоторые комментарии есть [в схеме данных](lib/orange_data/schema_definitions.yml) (метасхема расширений [тут](spec/lib/extensions_metaschema.yml)).
|
39
39
|
|
40
|
-
Для `enum`-полей есть маппинг, например `content.positions[0].tax` принимает значения: `:
|
40
|
+
Для `enum`-полей есть маппинг, например `content.positions[0].tax` принимает значения: `:vat_20`, `:vat_10`, `:vat_20_120`, `:vat_10_110`, `:vat_0`, `:vat_not_charged`.
|
41
41
|
|
42
42
|
Простейший чек в тестовом окружении:
|
43
43
|
|
@@ -101,8 +101,8 @@ correction = OrangeData::Correction.income(inn:"123456789012", id:"12345678990")
|
|
101
101
|
sum_cash: 1.23, sum_card: 2.34,
|
102
102
|
sum_prepaid: 5.67, sum_credit: 4.56, sum_counterclaim: 3.45,
|
103
103
|
|
104
|
-
|
105
|
-
vat_not_charged: 4.34,
|
104
|
+
vat_20: 1.34, vat_10: 2.34, vat_0: 3.34,
|
105
|
+
vat_not_charged: 4.34, vat_20_120: 5.34, vat_10_110: 6.34,
|
106
106
|
taxation_system: :simplified,
|
107
107
|
|
108
108
|
automat_number: "123456789",
|
@@ -135,7 +135,7 @@ res = transport.get_correction(correction.inn, correction.id)
|
|
135
135
|
|
136
136
|
Если все прошло гладко - теперь у вас есть файлик `my_production.yml` со всеми реквизитами доступа к продакшн-кассе. Обращаться с ним стоит как и с любой другой очень чувствительной информацией, например не стоит коммитить его (ну или как минимум, убрать из него поля `signature_key_pass` и `certificate_key_pass` и хранить отдельно)
|
137
137
|
|
138
|
-
Дальше публичный ключ с предыдущего шага отправляется в ЛК, там его
|
138
|
+
Дальше публичный ключ с предыдущего шага отправляется в ЛК, там его сохраняем, "подключаем интеграцию", и пользуемся:
|
139
139
|
|
140
140
|
```ruby
|
141
141
|
transport = OrangeData::Transport.new(OrangeData::Transport::DEFAULT_PRODUCTION_API_URL, OrangeData::Credentials.from_hash(YAML.load_file('my_production.yml')))
|
@@ -50,41 +50,22 @@ module OrangeData
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def from_hash(hash)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
# a bit ugly - simulating with_indifferent_access
|
57
|
-
if hash['n'] || hash[:n]
|
58
|
-
# public key only has n and e (without them - there's no key actually)
|
59
|
-
key.set_key(
|
60
|
-
OpenSSL::BN.new(Base64.decode64(hash['n'] || hash[:n]), 2),
|
61
|
-
OpenSSL::BN.new(Base64.decode64(hash['e'] || hash[:e]), 2),
|
62
|
-
(hash['d'] || hash[:d]) && OpenSSL::BN.new(Base64.decode64(hash['d'] || hash[:d]), 2)
|
63
|
-
)
|
64
|
-
end
|
65
|
-
|
66
|
-
if hash['p'] || hash[:p]
|
67
|
-
key.set_factors(
|
68
|
-
OpenSSL::BN.new(Base64.decode64(hash['p'] || hash[:p]), 2),
|
69
|
-
OpenSSL::BN.new(Base64.decode64(hash['q'] || hash[:q]), 2)
|
70
|
-
)
|
71
|
-
if hash['dmp1'] || hash[:dmp1]
|
72
|
-
key.set_crt_params(
|
73
|
-
OpenSSL::BN.new(Base64.decode64(hash['dmp1'] || hash[:dmp1]), 2),
|
74
|
-
OpenSSL::BN.new(Base64.decode64(hash['dmq1'] || hash[:dmq1]), 2),
|
75
|
-
OpenSSL::BN.new(Base64.decode64(hash['iqmp'] || hash[:iqmp]), 2)
|
76
|
-
)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
else
|
80
|
-
# ruby 2.3 and may be older
|
81
|
-
key.params.each_key do |param|
|
82
|
-
if (v = hash[param] || hash[param.to_sym])
|
83
|
-
key.send(:"#{param}=", OpenSSL::BN.new(Base64.decode64(v), 2))
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
53
|
+
factors = %i[n e d p q dmp1 dmq1 iqmp] # order is important
|
54
|
+
hash = hash.transform_keys(&:to_sym).slice(*factors).compact.transform_values do |value|
|
55
|
+
OpenSSL::ASN1::Integer(OpenSSL::BN.new(Base64.decode64(value), 2))
|
87
56
|
end
|
57
|
+
|
58
|
+
raise 'Need at least n and e key params' unless hash.key?(:n) && hash.key?(:e)
|
59
|
+
|
60
|
+
data_sequence = if hash.keys == factors
|
61
|
+
# all factors present => have private key
|
62
|
+
OpenSSL::ASN1::Sequence([OpenSSL::ASN1::Integer(0)] + hash.values)
|
63
|
+
else
|
64
|
+
# only public key
|
65
|
+
OpenSSL::ASN1::Sequence(hash.slice(:n, :e).values)
|
66
|
+
end
|
67
|
+
|
68
|
+
OpenSSL::PKey::RSA.new(OpenSSL::ASN1::Sequence(data_sequence).to_der)
|
88
69
|
end
|
89
70
|
|
90
71
|
def load_from(val, key_pass=nil)
|
@@ -273,13 +273,19 @@ definitions:
|
|
273
273
|
x-enum:
|
274
274
|
vat_18:
|
275
275
|
val: 1
|
276
|
-
title: ставка НДС 18%
|
276
|
+
title: ставка НДС 18% (старая, теперь 20)
|
277
|
+
vat_20:
|
278
|
+
val: 1
|
279
|
+
title: ставка НДС 20%
|
277
280
|
vat_10:
|
278
281
|
val: 2
|
279
282
|
title: ставка НДС 10%
|
280
283
|
vat_18_118:
|
281
284
|
val: 3
|
282
|
-
title: ставка НДС расч. 18/118
|
285
|
+
title: ставка НДС расч. 18/118 (старая)
|
286
|
+
vat_20_120:
|
287
|
+
val: 3
|
288
|
+
title: ставка НДС расч. 20/120
|
283
289
|
vat_10_110:
|
284
290
|
val: 4
|
285
291
|
title: ставка НДС расч. 10/110
|
@@ -742,10 +748,10 @@ definitions:
|
|
742
748
|
type: number
|
743
749
|
|
744
750
|
tax1Sum:
|
745
|
-
title: Сумма НДС чека по ставке
|
751
|
+
title: Сумма НДС чека по ставке 20%
|
746
752
|
x-comment: осторожно, номера в названии поля не соответствуют значениям в CheckPosition.tax
|
747
753
|
x-tag-id: 1102
|
748
|
-
x-alias:
|
754
|
+
x-alias: vat_20
|
749
755
|
type: number
|
750
756
|
format: double
|
751
757
|
tax2Sum:
|
@@ -768,9 +774,9 @@ definitions:
|
|
768
774
|
type: number
|
769
775
|
tax5Sum:
|
770
776
|
format: double
|
771
|
-
title: Сумма НДС чека по расч. ставке
|
777
|
+
title: Сумма НДС чека по расч. ставке 20/120
|
772
778
|
x-tag-id: 1106
|
773
|
-
x-alias:
|
779
|
+
x-alias: vat_20_120
|
774
780
|
type: number
|
775
781
|
tax6Sum:
|
776
782
|
format: double
|
@@ -949,4 +955,3 @@ definitions:
|
|
949
955
|
description: URL для отправки результатов обработки чека POST запросом
|
950
956
|
type: [string, "null"]
|
951
957
|
maxLength: 1024
|
952
|
-
|
data/lib/orange_data/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: orangedata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vasily Fedoseyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -194,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
194
|
- !ruby/object:Gem::Version
|
195
195
|
version: '0'
|
196
196
|
requirements: []
|
197
|
-
rubygems_version: 3.
|
197
|
+
rubygems_version: 3.4.1
|
198
198
|
signing_key:
|
199
199
|
specification_version: 4
|
200
200
|
summary: Ruby client for orangedata.ru service
|