orangedata 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|