zaig 1.0.2 → 1.0.5
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/lib/locales/en.yml +1 -0
- data/lib/locales/pt-BR.yml +1 -0
- data/lib/zaig/entities/response.rb +29 -2
- data/lib/zaig/field_validation_error.rb +1 -0
- data/lib/zaig/registration.rb +11 -6
- data/lib/zaig/registration_payload.rb +88 -70
- data/lib/zaig/version.rb +1 -1
- data/lib/zaig.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d7e5e123adff444d932edaf15cf93f0d56c036e19a12391957736cdb5b3a0f1
|
4
|
+
data.tar.gz: 6dff02d64d11a052be1a9dc47f77b6a490d3208b1de8b84d487527259099e546
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06ea034e23aef7a39e5dd7fe35260746b31d8095ce9f524bb45f60b02b92d6285fe24bd305e43c1f24b49b3d0cb9e61777d6612430741bc49de0f384c88d6f7f
|
7
|
+
data.tar.gz: f637d5ab308c48793bda590598a41fdff30d8103f395c03cfaf38e87eba2446b4ef77cfe30d3020d174f397e10990802477865559610d80859d4f14f6382bad8
|
data/lib/locales/en.yml
CHANGED
data/lib/locales/pt-BR.yml
CHANGED
@@ -7,9 +7,18 @@ module Zaig
|
|
7
7
|
attr_reader :analysis_status, :credit_proposal_legal_person_key, :message,
|
8
8
|
:raw_data, :reason, :request, :status_code, :zaig_id
|
9
9
|
|
10
|
+
# Collection with all the approval statuses.
|
11
|
+
APPROVAL_STATUS = %i[automatically_approved manually_approved].freeze
|
12
|
+
|
13
|
+
# Collection with all the pending statuses.
|
14
|
+
PENDING_STATUS = %i[pending in_manual_analysis in_manual_analysis].freeze
|
15
|
+
|
16
|
+
# Colllection with all the reproval statuses.
|
17
|
+
REPROVAL_STATUS = %i[automatically_reproved manually_reproved].freeze
|
18
|
+
|
10
19
|
def initialize(analysis_status: nil, credit_proposal_legal_person_key: nil, message: nil,
|
11
20
|
raw_data: nil, reason: nil, request: nil, status_code: nil, zaig_id: nil)
|
12
|
-
@analysis_status = analysis_status
|
21
|
+
@analysis_status = analysis_status.nil? ? nil : analysis_status.to_s.strip.downcase.to_sym
|
13
22
|
@credit_proposal_legal_person_key = credit_proposal_legal_person_key
|
14
23
|
@message = message
|
15
24
|
@raw_data = raw_data
|
@@ -19,9 +28,27 @@ module Zaig
|
|
19
28
|
@zaig_id = zaig_id
|
20
29
|
end
|
21
30
|
|
31
|
+
# Retrieve all the available statuses.
|
32
|
+
def self.statuses
|
33
|
+
%i[automatically_approved automatically_reproved in_manual_analysis manually_approved manually_reproved waiting_for_data pending]
|
34
|
+
end
|
35
|
+
|
36
|
+
# Check if the registration is approved.
|
22
37
|
def approved?
|
23
|
-
analysis_status
|
38
|
+
APPROVAL_STATUS.include?(analysis_status)
|
24
39
|
end
|
40
|
+
|
41
|
+
# Check if the registration still not done.
|
42
|
+
def pending?
|
43
|
+
PENDING_STATUS.include?(analysis_status)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Check if the registration is reproved.
|
47
|
+
def rejected?
|
48
|
+
REPROVAL_STATUS.include?(analysis_status)
|
49
|
+
end
|
50
|
+
|
51
|
+
alias not_approved? rejected?
|
25
52
|
end
|
26
53
|
end
|
27
54
|
end
|
data/lib/zaig/registration.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "singleton"
|
4
|
-
|
5
3
|
module Zaig
|
6
4
|
# Class to request a registration to the remote server.
|
7
5
|
class Registration
|
@@ -45,11 +43,18 @@ module Zaig
|
|
45
43
|
def verify_response(res)
|
46
44
|
return if res.status.between?(200, 299)
|
47
45
|
|
48
|
-
raise ::Zaig::
|
46
|
+
raise ::Zaig::ServerError, I18n.t("zaig.errors.unexpected_error") if res.status.between?(500, 599)
|
49
47
|
|
50
48
|
parsed_res = JSON.parse(res.body, symbolize_names: true)
|
51
49
|
|
52
|
-
|
50
|
+
unless parsed_res.key?(:resposta_zaig)
|
51
|
+
detail = JSON.parse(res.body, symbolize_names: true)[:detail]
|
52
|
+
|
53
|
+
error = ::Zaig::FieldValidationError.new I18n.t("zaig.errors.validation_error", field_name: "resposta_zaig")
|
54
|
+
error.detail = JSON.parse(res.body, symbolize_names: true)[:detail]
|
55
|
+
|
56
|
+
raise error
|
57
|
+
end
|
53
58
|
|
54
59
|
zaig_msg = parsed_res[:resposta_zaig][:msg]
|
55
60
|
zaig_http_status = parsed_res[:resposta_zaig][:status]
|
@@ -59,12 +64,12 @@ module Zaig
|
|
59
64
|
|
60
65
|
def raise_error_by_zaig_status(msg, status)
|
61
66
|
case status
|
62
|
-
when 209
|
63
|
-
raise ::Zaig::AlreadyExistsError, msg
|
64
67
|
when 400
|
65
68
|
raise ::Zaig::FieldValidationError, msg
|
66
69
|
when 408
|
67
70
|
raise ::Zaig::ExternalTimeoutError, msg
|
71
|
+
when 409
|
72
|
+
raise ::Zaig::AlreadyExistsError, msg
|
68
73
|
when 422
|
69
74
|
raise ::Zaig::UnprocessableEntityError, msg
|
70
75
|
else
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "singleton"
|
4
|
-
|
5
3
|
module Zaig
|
6
4
|
# Service class to build a registration payload request.
|
7
5
|
class RegistrationPayload
|
@@ -9,48 +7,52 @@ module Zaig
|
|
9
7
|
|
10
8
|
def call(obj)
|
11
9
|
{
|
12
|
-
address: build_address(obj[
|
13
|
-
client_category: obj[
|
14
|
-
constitution_date: obj[
|
15
|
-
constitution_type: obj[
|
16
|
-
credit_request_date: obj[
|
17
|
-
credit_type: obj[
|
18
|
-
document_number: CNPJ.new(obj[
|
19
|
-
email: obj[
|
20
|
-
financial: obj.key?("financial") ? build_financial(obj[
|
21
|
-
guarantors: obj.key?("guarantors") ? build_shareholders(obj[
|
22
|
-
id: obj[
|
23
|
-
legal_name: obj[
|
24
|
-
monthly_revenue: obj[
|
25
|
-
phones: build_phones(obj[
|
26
|
-
shareholders: build_shareholders(obj[
|
27
|
-
source: obj.key?("source") ? build_source(obj[
|
28
|
-
scr_parameters: obj.key?("scr_parameters") ? build_scr_parameters(obj[
|
29
|
-
trading_name: obj[
|
30
|
-
warrants: obj.key?("warrants") ? build_warrants(obj[
|
10
|
+
address: build_address(obj[:address]),
|
11
|
+
client_category: obj[:client_category],
|
12
|
+
constitution_date: obj[:constitution_date],
|
13
|
+
constitution_type: obj[:constitution_type],
|
14
|
+
credit_request_date: obj[:credit_request_date],
|
15
|
+
credit_type: obj[:credit_type] || "clean",
|
16
|
+
document_number: CNPJ.new(obj[:document_number]).formatted,
|
17
|
+
email: obj[:email],
|
18
|
+
financial: obj.key?("financial") ? build_financial(obj[:financial]) : nil,
|
19
|
+
guarantors: obj.key?("guarantors") ? build_shareholders(obj[:guarantors]) : nil,
|
20
|
+
id: obj[:id],
|
21
|
+
legal_name: obj[:legal_name],
|
22
|
+
monthly_revenue: format_money(obj[:monthly_revenue], require_positive: true),
|
23
|
+
phones: build_phones(obj[:phones]),
|
24
|
+
shareholders: build_shareholders(obj[:shareholders]),
|
25
|
+
source: obj.key?("source") ? build_source(obj[:source]) : nil,
|
26
|
+
scr_parameters: obj.key?("scr_parameters") ? build_scr_parameters(obj[:scr_parameters]) : nil,
|
27
|
+
trading_name: obj[:trading_name],
|
28
|
+
warrants: obj.key?("warrants") ? build_warrants(obj[:warrants]) : nil
|
31
29
|
}
|
32
30
|
end
|
33
31
|
|
34
32
|
private
|
33
|
+
def format_money(value, require_positive: false)
|
34
|
+
require_positive && !value.to_f.positive? ? 1.0 : value.to_f
|
35
|
+
end
|
36
|
+
|
35
37
|
def build_address(obj_address)
|
36
38
|
{
|
37
|
-
city: obj_address[
|
38
|
-
complement: obj_address[
|
39
|
-
country: obj_address[
|
40
|
-
neighborhood: obj_address[
|
41
|
-
number: obj_address[
|
42
|
-
postal_code: obj_address[
|
43
|
-
street: obj_address[
|
44
|
-
uf: obj_address[
|
39
|
+
city: obj_address[:city],
|
40
|
+
complement: obj_address[:complement] || "",
|
41
|
+
country: obj_address[:country] || "BRA",
|
42
|
+
neighborhood: obj_address[:neighborhood],
|
43
|
+
number: obj_address[:number],
|
44
|
+
postal_code: format_cep(obj_address[:postal_code]),
|
45
|
+
street: obj_address[:street],
|
46
|
+
uf: obj_address[:uf]
|
45
47
|
}
|
46
48
|
end
|
47
49
|
|
48
50
|
def build_phone(obj)
|
49
51
|
{
|
50
|
-
area_code: obj[
|
51
|
-
international_dial_code: obj[
|
52
|
-
number: obj[
|
53
|
-
type: obj[
|
52
|
+
area_code: obj[:area_code],
|
53
|
+
international_dial_code: obj[:international_dial_code],
|
54
|
+
number: obj[:number],
|
55
|
+
type: obj[:type]
|
54
56
|
}
|
55
57
|
end
|
56
58
|
|
@@ -63,88 +65,104 @@ module Zaig
|
|
63
65
|
end
|
64
66
|
|
65
67
|
def build_shareholders(obj_shareholders)
|
68
|
+
return nil if obj_shareholders.nil?
|
69
|
+
|
66
70
|
shareholders = []
|
67
71
|
|
68
72
|
obj_shareholders.each do |s|
|
69
73
|
shareholders << {
|
70
|
-
address: build_address(s[
|
71
|
-
birthdate:
|
72
|
-
declared_assets: s[
|
73
|
-
document_number: CPF.new(s[
|
74
|
-
email: s[
|
75
|
-
father_name: s[
|
76
|
-
gender: s[
|
77
|
-
monthly_income: s[
|
78
|
-
mother_name: s[
|
79
|
-
name: s[
|
80
|
-
nationality: s[
|
81
|
-
occupation: s[
|
82
|
-
phones: build_phones(s[
|
74
|
+
address: build_address(s[:address]),
|
75
|
+
birthdate: s[:birthdate],
|
76
|
+
declared_assets: format_money(s[:declared_assets]),
|
77
|
+
document_number: CPF.new(s[:document_number]).formatted,
|
78
|
+
email: s[:email],
|
79
|
+
father_name: s[:father_name],
|
80
|
+
gender: s[:gender],
|
81
|
+
monthly_income: format_money(s[:monthly_income]),
|
82
|
+
mother_name: s[:mother_name],
|
83
|
+
name: s[:name],
|
84
|
+
nationality: s[:nationality],
|
85
|
+
occupation: s[:occupation],
|
86
|
+
phones: build_phones(s[:phones])
|
83
87
|
}
|
84
88
|
end
|
85
89
|
shareholders
|
86
90
|
end
|
87
91
|
|
88
92
|
def build_financial(fin)
|
93
|
+
return nil if fin.nil?
|
94
|
+
|
89
95
|
{
|
90
|
-
amount: fin[
|
91
|
-
annual_interest_rate: fin[
|
92
|
-
cdi_percentage: fin[
|
93
|
-
currency: fin[
|
94
|
-
interest_type: fin[
|
95
|
-
number_of_installments: fin.key?("number_of_installments") ? fin[
|
96
|
+
amount: fin[:amount],
|
97
|
+
annual_interest_rate: fin[:annual_interest_rate],
|
98
|
+
cdi_percentage: fin[:cdi_percentage],
|
99
|
+
currency: fin[:currency] || "BRL",
|
100
|
+
interest_type: fin[:interest_type],
|
101
|
+
number_of_installments: fin.key?("number_of_installments") ? fin[:number_of_installments].to_i : 0
|
96
102
|
}
|
97
103
|
end
|
98
104
|
|
99
105
|
def build_warrants(obj_warrants)
|
106
|
+
return nil if obj_warrants.nil?
|
107
|
+
|
100
108
|
warrants = []
|
101
109
|
|
102
110
|
obj_warrants.each do |w|
|
103
111
|
warrants << {
|
104
|
-
warrant_type: w[
|
105
|
-
address: build_address(w[
|
106
|
-
property_type: w[
|
107
|
-
estimated_value: w[
|
108
|
-
forced_selling_value: w[
|
112
|
+
warrant_type: w[:warrant_type],
|
113
|
+
address: build_address(w[:address]),
|
114
|
+
property_type: w[:property_type],
|
115
|
+
estimated_value: w[:estimated_value],
|
116
|
+
forced_selling_value: w[:forced_selling_value]
|
109
117
|
}
|
110
118
|
end
|
111
119
|
warrants
|
112
120
|
end
|
113
121
|
|
114
122
|
def build_source(obj_source)
|
123
|
+
return nil if obj_source.nil?
|
124
|
+
|
115
125
|
{
|
116
|
-
channel: obj_source[
|
117
|
-
ip: obj_source[
|
118
|
-
session_id: obj_source[
|
126
|
+
channel: obj_source[:channel],
|
127
|
+
ip: obj_source[:ip],
|
128
|
+
session_id: obj_source[:session_id]
|
119
129
|
}
|
120
130
|
end
|
121
131
|
|
122
132
|
def build_scr_parameters(obj_src)
|
133
|
+
return nil if obj_src.nil?
|
134
|
+
|
123
135
|
{
|
124
|
-
signers: build_signers(obj_src[
|
136
|
+
signers: build_signers(obj_src[:signers]),
|
125
137
|
signature_evidence: {
|
126
|
-
access_token: obj_src[
|
127
|
-
additional_data: obj_src[
|
128
|
-
ip_address: obj_src[
|
129
|
-
session_id: obj_src[
|
138
|
+
access_token: obj_src[:signature_evidence][:access_token],
|
139
|
+
additional_data: obj_src[:signature_evidence][:additional_data],
|
140
|
+
ip_address: obj_src[:signature_evidence][:ip_address],
|
141
|
+
session_id: obj_src[:signature_evidence][:session_id],
|
130
142
|
signed_term: {
|
131
|
-
raw_text: obj_src[
|
143
|
+
raw_text: obj_src[:signature_evidence][:signed_term][:raw_text]
|
132
144
|
}
|
133
145
|
}
|
134
146
|
}
|
135
147
|
end
|
136
148
|
|
137
149
|
def build_signers(obj_signers)
|
150
|
+
return nil if obj_signers.nil?
|
151
|
+
|
138
152
|
signers = []
|
139
153
|
obj_signers.each do |s|
|
140
154
|
signers << {
|
141
|
-
document_number: CNPJ.new(s[
|
142
|
-
name: s[
|
143
|
-
email: s[
|
144
|
-
phone: build_phone(s[
|
155
|
+
document_number: CNPJ.new(s[:document_number]).number,
|
156
|
+
name: s[:name],
|
157
|
+
email: s[:email],
|
158
|
+
phone: build_phone(s[:phone])
|
145
159
|
}
|
146
160
|
end
|
147
161
|
signers
|
148
162
|
end
|
163
|
+
|
164
|
+
def format_cep(cep)
|
165
|
+
cep.gsub(/[^0-9]/, "").insert(5, "-")
|
166
|
+
end
|
149
167
|
end
|
150
168
|
end
|
data/lib/zaig/version.rb
CHANGED
@@ -8,5 +8,5 @@ module Zaig
|
|
8
8
|
# Major - Incremented for incompatible changes with previous release (or big enough new features)
|
9
9
|
# Minor - Incremented for new backwards-compatible features + deprecations
|
10
10
|
# Patch - Incremented for backwards-compatible bug fixes
|
11
|
-
VERSION = "1.0.
|
11
|
+
VERSION = "1.0.5"
|
12
12
|
end
|
data/lib/zaig.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zaig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danilo Carolino
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-07-
|
11
|
+
date: 2022-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cpf_cnpj
|