ruby-experian 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/experian/client.rb +25 -3
- data/lib/experian/credit_report.rb +57 -0
- data/lib/experian/report.rb +11 -43
- data/lib/experian/trade_report.rb +55 -0
- data/lib/experian/version.rb +1 -1
- data/lib/experian.rb +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29b12fedd33ce8b9f2b1686ac1b2256477890e23fd08cd9d85fce514b6fea010
|
4
|
+
data.tar.gz: 496330fae0eb1cca5090dbe68c0759ddfd4b86e0451f0657fde0bb83f308ca11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9af32023b8b37a1aac6344e477b6dbc1121835d243bec35e269cb09216c341bdaf62691cfa1ce86ebf49730581ecd15a8ba08d80df33d772327e5583c0e7f9d2
|
7
|
+
data.tar.gz: eef00bbc5b09714183e62edcf4d52a45ad85145f7dcf689f37e0474531ebccc3444672ce8fc49d4fc56efb7993ac7377dbddaa50aeae399694f823827b876c0d
|
data/Gemfile.lock
CHANGED
data/lib/experian/client.rb
CHANGED
@@ -2,6 +2,9 @@ module Experian
|
|
2
2
|
class Client
|
3
3
|
include Experian::HTTP
|
4
4
|
|
5
|
+
TRADE_REPORT = 388
|
6
|
+
CREDIT_REPORT = 57
|
7
|
+
|
5
8
|
CONFIG_KEYS = %i[
|
6
9
|
user_code password request_timeout base_uri extra_headers
|
7
10
|
].freeze
|
@@ -16,10 +19,29 @@ module Experian
|
|
16
19
|
@faraday_middleware = faraday_middleware
|
17
20
|
end
|
18
21
|
|
19
|
-
def
|
20
|
-
response = get(
|
22
|
+
def credit_report(cif:, format: :xml, as_response: false)
|
23
|
+
response = get(
|
24
|
+
path: "/informe",
|
25
|
+
format:,
|
26
|
+
cif:,
|
27
|
+
cod_servicio: CREDIT_REPORT
|
28
|
+
)
|
29
|
+
|
30
|
+
return Experian::CreditReport.new(response) if format == :xml && !as_response
|
31
|
+
|
32
|
+
response
|
33
|
+
end
|
34
|
+
|
35
|
+
def trade_report(cif:, format: :xml, request_update: true, as_response: false)
|
36
|
+
response = get(
|
37
|
+
path: "/informe",
|
38
|
+
format:,
|
39
|
+
cif:,
|
40
|
+
garantizar_bajo_demanda: request_update ? 1 : 0,
|
41
|
+
cod_servicio: TRADE_REPORT,
|
42
|
+
)
|
21
43
|
|
22
|
-
return Experian::
|
44
|
+
return Experian::TradeReport.new(response) if format == :xml && !as_response
|
23
45
|
|
24
46
|
response
|
25
47
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require "multi_xml"
|
2
|
+
require "rexml"
|
3
|
+
|
4
|
+
module Experian
|
5
|
+
class CreditReport < Report
|
6
|
+
def id
|
7
|
+
if (id_xml = data["DatosIdentificativos"])
|
8
|
+
OpenStruct.new(
|
9
|
+
cif: id_xml["Cif"],
|
10
|
+
name: id_xml["Nombre"],
|
11
|
+
infotel_code: id_xml["CodigoInfotel"],
|
12
|
+
incorporation_date: Date.parse(id_xml["FechaFundacion"]),
|
13
|
+
social_form: id_xml["FormaSocial"]["__content__"],
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def address
|
19
|
+
if (address_xml = data["DomicilioComercial"])
|
20
|
+
OpenStruct.new(
|
21
|
+
line: address_xml["Domicilio"],
|
22
|
+
city: address_xml["Poblacion"],
|
23
|
+
province: address_xml["Provincia"],
|
24
|
+
postal_code: address_xml["CodigoPostal"],
|
25
|
+
municipality: address_xml["Municipio"],
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Number of employees in the last recorded excercise
|
31
|
+
def number_of_employees
|
32
|
+
data.dig("ListaAnualEmpleados", "Empleado")&.first&.dig("EmpleadoFijo")&.to_i
|
33
|
+
end
|
34
|
+
|
35
|
+
def rating
|
36
|
+
if (rating_xml = data["Rating"])
|
37
|
+
return unless rating_xml["RatingAxesorDef"]
|
38
|
+
|
39
|
+
OpenStruct.new(
|
40
|
+
score: rating_xml["RatingAxesorDef"]&.strip&.to_i,
|
41
|
+
default_probability: rating_xml["ProbImpago"]&.to_f,
|
42
|
+
risk: rating_xml["GrupoRiesgo"],
|
43
|
+
size: rating_xml["Tamaño"],
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def cnae
|
49
|
+
data.dig("ActividadComercial", "Cnae")&.first&.dig("Codigo")&.to_i
|
50
|
+
end
|
51
|
+
|
52
|
+
def constitution_date
|
53
|
+
date = data.dig("DatosConstitutivos", "FechaConstitucion")
|
54
|
+
date && Date.parse(date)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/experian/report.rb
CHANGED
@@ -12,59 +12,27 @@ module Experian
|
|
12
12
|
MultiXml.parser = :rexml
|
13
13
|
@xml = MultiXml.parse(@raw_xml)
|
14
14
|
|
15
|
-
raise
|
15
|
+
raise error, error_message if error
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
if (id_xml = data["DatosIdentificativos"])
|
20
|
-
OpenStruct.new(
|
21
|
-
cif: id_xml["Cif"],
|
22
|
-
name: id_xml["Nombre"],
|
23
|
-
infotel_code: id_xml["CodigoInfotel"],
|
24
|
-
incorporation_date: Date.parse(id_xml["FechaFundacion"]),
|
25
|
-
social_form: id_xml["FormaSocial"]["__content__"],
|
26
|
-
)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def address
|
31
|
-
if (address_xml = data["DomicilioComercial"])
|
32
|
-
OpenStruct.new(
|
33
|
-
line: address_xml["Domicilio"],
|
34
|
-
city: address_xml["Poblacion"],
|
35
|
-
province: address_xml["Provincia"],
|
36
|
-
postal_code: address_xml["CodigoPostal"],
|
37
|
-
municipality: address_xml["Municipio"],
|
38
|
-
)
|
39
|
-
end
|
40
|
-
end
|
18
|
+
protected
|
41
19
|
|
42
|
-
|
43
|
-
|
44
|
-
data.dig("ListaAnualEmpleados", "Empleado")&.first&.dig("EmpleadoFijo")&.to_i
|
20
|
+
def data
|
21
|
+
xml.dig("ServicioWebAxesor", "ListaPaquetesNegocio")
|
45
22
|
end
|
46
23
|
|
47
|
-
def
|
48
|
-
|
49
|
-
return unless rating_xml["RatingAxesorDef"]
|
24
|
+
def error
|
25
|
+
return Experian::AuthenticationError if authentication_error?
|
50
26
|
|
51
|
-
|
52
|
-
score: rating_xml["RatingAxesorDef"]&.strip&.to_i,
|
53
|
-
default_probability: rating_xml["ProbImpago"]&.to_f,
|
54
|
-
risk: rating_xml["GrupoRiesgo"],
|
55
|
-
size: rating_xml["Tamaño"],
|
56
|
-
)
|
57
|
-
end
|
27
|
+
Experian::Error if any_other_error?
|
58
28
|
end
|
59
29
|
|
60
|
-
def
|
61
|
-
|
30
|
+
def error_message
|
31
|
+
xml.dig("DatosError", "DesError")
|
62
32
|
end
|
63
33
|
|
64
|
-
|
65
|
-
|
66
|
-
def data
|
67
|
-
xml.dig("ServicioWebAxesor", "ListaPaquetesNegocio")
|
34
|
+
def any_other_error?
|
35
|
+
xml.dig("DatosError", "CodError")
|
68
36
|
end
|
69
37
|
|
70
38
|
def authentication_error?
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Experian
|
2
|
+
class TradeReport < Report
|
3
|
+
def model_200(period: last_submitted_year)
|
4
|
+
{
|
5
|
+
# Balance Sheet - Assets
|
6
|
+
"00101" => financial_data("Activo", "11000", period:), # ACTIVO NO CORRIENTE
|
7
|
+
"00102" => financial_data("Activo", "11100", period:), # Inmovilizado intangible
|
8
|
+
"00136" => financial_data("Activo", "12000", period:), # ACTIVO CORRIENTE
|
9
|
+
"00138" => financial_data("Activo", "12200", period:), # Existencias
|
10
|
+
"00149" => financial_data("Activo", "12300", period:), # Deudores comerciales y otras cuentas a cobrar
|
11
|
+
"00177" => financial_data("Activo", "12700", period:), # Efectivo y otros activos líquidos equivalentes
|
12
|
+
"00180" => financial_data("Activo", "10000", period:), # TOTAL ACTIVO
|
13
|
+
|
14
|
+
# Balance Sheet - Liabilities
|
15
|
+
"00185" => financial_data("Pasivo", "20000", period:), # PATRIMONIO NETO
|
16
|
+
"00210" => financial_data("Pasivo", "31000", period:), # PASIVO NO CORRIENTE
|
17
|
+
"00216" => financial_data("Pasivo", "31200", period:), # Deudas a largo plazo
|
18
|
+
"00228" => financial_data("Pasivo", "32000", period:), # PASIVO CORRIENTE
|
19
|
+
"00231" => financial_data("Pasivo", "32300", period:), # Deudas a corto plazo
|
20
|
+
"00239" => financial_data("Pasivo", "32500", period:), # Acreedores comerciales y otras cuentas a pagar
|
21
|
+
|
22
|
+
# P&L
|
23
|
+
"00255" => financial_data("PerdidasGanancias", "40100", period:), # Importe neto de la cifra de negocios
|
24
|
+
"00260" => financial_data("PerdidasGanancias", "40400", period:), # Aprovisionamientos
|
25
|
+
"00265" => financial_data("PerdidasGanancias", "40500", period:), # Otros ingresos de explotación
|
26
|
+
"00284" => financial_data("PerdidasGanancias", "40800", period:), # Amortización del inmovilizado
|
27
|
+
"00285" => financial_data("PerdidasGanancias", "40900", period:), # Imputación de subvenciones de inmovilizado no financiero y otras
|
28
|
+
"00286" => financial_data("PerdidasGanancias", "41000", period:), # Excesos de provisiones
|
29
|
+
"00287" => financial_data("PerdidasGanancias", "41100", period:), # Deterioro y resultado por enajenaciones del inmovilizad
|
30
|
+
"00296" => financial_data("PerdidasGanancias", "49100", period:), # Resultado de explotacion
|
31
|
+
"00305" => financial_data("PerdidasGanancias", "41500", period:), # Gastos Financieros
|
32
|
+
"00326" => financial_data("PerdidasGanancias", "41900", period:), # Impuestos Sobre Beneficios
|
33
|
+
"00327" => financial_data("PerdidasGanancias", "49500", period:), # RESULTADO DEL EJERCICIO PROCEDENTE DE OPERACIONES CONTINUADAS
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def last_submitted_year
|
40
|
+
(Date.today << 18).year
|
41
|
+
end
|
42
|
+
|
43
|
+
def financial_data(section_name, value_name, period:)
|
44
|
+
value_section = section(section_name)
|
45
|
+
|
46
|
+
if value_name
|
47
|
+
value_section&.find { |d| d["Tipo"] == value_name }&.dig("ListaValores", "Valor")&.find { |v| v["Periodo"] == period.to_s }&.dig("Individual")&.to_i
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def section(section_name)
|
52
|
+
data.dig("InformeEconomicoFinanciero")&.first&.dig("ListaGrupos", "Grupo").find { |d| d["Tipo"][section_name] }&.dig("ListaColumnas", "Columna", "ListaDatos", "Dato")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/experian/version.rb
CHANGED
data/lib/experian.rb
CHANGED
@@ -4,6 +4,8 @@ require_relative "experian/http"
|
|
4
4
|
require_relative "experian/client"
|
5
5
|
require_relative "experian/version"
|
6
6
|
require_relative "experian/report"
|
7
|
+
require_relative "experian/credit_report"
|
8
|
+
require_relative "experian/trade_report"
|
7
9
|
|
8
10
|
module Experian
|
9
11
|
class Error < StandardError; end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-experian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Mochetti
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -92,8 +92,10 @@ files:
|
|
92
92
|
- bin/setup
|
93
93
|
- lib/experian.rb
|
94
94
|
- lib/experian/client.rb
|
95
|
+
- lib/experian/credit_report.rb
|
95
96
|
- lib/experian/http.rb
|
96
97
|
- lib/experian/report.rb
|
98
|
+
- lib/experian/trade_report.rb
|
97
99
|
- lib/experian/version.rb
|
98
100
|
- lib/ruby/experian.rb
|
99
101
|
- ruby-experian.gemspec
|