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 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