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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba3bcedb39497e51ece3556b54004a8876c21a66f908421cc838a75ac0fb4556
4
- data.tar.gz: 43edebb7b0afa263af5fc73b964fd2e72c0b55fc8e95048e66d3afc99032c20f
3
+ metadata.gz: 24d97c1e067049b4e767c7ca1579e623fa68753c5f486299d1a507d4bc68d66b
4
+ data.tar.gz: a97d04fd012da815eaccc8ceffba7e437ab606b4b636aef0576cf2d98f18702b
5
5
  SHA512:
6
- metadata.gz: c82f3c489b2465bb5d94c2170e0d8ca192ce0819db7884c22961c928f4f532eba48954186bdf1c5f3a5bb6b2e548dbe4feba69c5294957696ab09a6009b41624
7
- data.tar.gz: 7b2e202b628d4dbcec2f61327254fa602f067258b229b0962be8615b67286107e63d7748d163688550807331c2288e45d75724a1d5d138e61885fd7650643946
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
@@ -5,4 +5,4 @@ source "https://rubygems.org"
5
5
  git_source(:github){|repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
7
  # All dependencies are in orangedata.gemspec
8
- gemspec
8
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- orangedata (0.1.0)
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.2)
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.2.3)
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), названия маппинга и некоторые коментарии есть [в схеме данных](lib/orange_data/schema_definitions.yml) (метасхема расширений [тут](spec/lib/extensions_metaschema.yml)).
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` принимает значения: `:vat_18`, `:vat_10`, `:vat_18_118`, `:vat_10_110`, `:vat_0`, `:vat_not_charged`.
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
- vat_18: 1.34, vat_10: 2.34, vat_0: 3.34,
105
- vat_not_charged: 4.34, vat_18_118: 5.34, vat_10_110: 6.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
- OpenSSL::PKey::RSA.new.tap do |key|
54
- if key.respond_to?(:set_key)
55
- # ruby 2.5+
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: Сумма НДС чека по ставке 18%
751
+ title: Сумма НДС чека по ставке 20%
746
752
  x-comment: осторожно, номера в названии поля не соответствуют значениям в CheckPosition.tax
747
753
  x-tag-id: 1102
748
- x-alias: vat_18
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: Сумма НДС чека по расч. ставке 18/118
777
+ title: Сумма НДС чека по расч. ставке 20/120
772
778
  x-tag-id: 1106
773
- x-alias: vat_18_118
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
-
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OrangeData
4
4
 
5
- VERSION = "0.1.0"
5
+ VERSION = "1.0.0"
6
6
 
7
7
  end
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: 0.1.0
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: 2022-10-17 00:00:00.000000000 Z
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.3.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