transdesk-importer-python-sdk 1.1.0__tar.gz → 1.2.1__tar.gz
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.
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/PKG-INFO +2 -2
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/README.md +1 -1
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/pyproject.toml +1 -1
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/models/internal.py +6 -1
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/shared/data_normalizer.py +8 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/canonical/apolice_builder.py +1 -4
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/internal/coverage_mapper.py +15 -9
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/internal/internal_mapper.py +1 -1
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk_importer_python_sdk.egg-info/PKG-INFO +2 -2
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/tests/test_importer.py +3 -1
- transdesk_importer_python_sdk-1.2.1/tests/test_vehicle_details.py +181 -0
- transdesk_importer_python_sdk-1.1.0/tests/test_vehicle_details.py +0 -87
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/LICENSE +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/setup.cfg +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/__init__.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/client.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/exporters/__init__.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/exporters/json_exporter.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/models/__init__.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/models/canonical.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/readers/__init__.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/readers/excel_reader.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/shared/__init__.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/__init__.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/canonical/__init__.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/canonical/cobertura_builder.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/canonical/item_classifier.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/internal/__init__.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/internal/rcf_parser.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/internal/towing_parser.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/validators/__init__.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/validators/internal_policy_validator.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk_importer_python_sdk.egg-info/SOURCES.txt +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk_importer_python_sdk.egg-info/dependency_links.txt +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk_importer_python_sdk.egg-info/requires.txt +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk_importer_python_sdk.egg-info/top_level.txt +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/tests/test_data_normalizer.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/tests/test_excel_reader.py +0 -0
- {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/tests/test_validator.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: transdesk-importer-python-sdk
|
|
3
|
-
Version: 1.1
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: SDK de leitura/transformacao de planilhas de apolices Transdesk para o formato interno 77seg
|
|
5
5
|
Author-email: FMConsult <contato@fmconsult.com.br>
|
|
6
6
|
License: MIT License
|
|
@@ -117,7 +117,7 @@ Campos adicionais de veiculo/reboque (colunas apos `CHAVE_PIX` na planilha):
|
|
|
117
117
|
| Coluna planilha | Campo `InternalItem` | Observacao |
|
|
118
118
|
| --------------- | -------------------- | ---------- |
|
|
119
119
|
| `EMPRESA_RASTREAMENTO` | `vehicle_tracker_company` | Somente quando `has_vehicle_tracker` |
|
|
120
|
-
| `CATEGORIA` | `vehicle_classification` | Classificacao do veiculo (
|
|
120
|
+
| `CATEGORIA` | `vehicle_classification` | Classificacao do veiculo (texto) |
|
|
121
121
|
| `MARCA` | `brand_name` / `brand` | Veiculo; reboque usa `MARCA_REBOQUE` |
|
|
122
122
|
| `MODELO` | `model_description` / `model` | Veiculo; reboque usa `MODELO_REBOQUE` |
|
|
123
123
|
| `RENAVAM` | `renavam` | |
|
|
@@ -74,7 +74,7 @@ Campos adicionais de veiculo/reboque (colunas apos `CHAVE_PIX` na planilha):
|
|
|
74
74
|
| Coluna planilha | Campo `InternalItem` | Observacao |
|
|
75
75
|
| --------------- | -------------------- | ---------- |
|
|
76
76
|
| `EMPRESA_RASTREAMENTO` | `vehicle_tracker_company` | Somente quando `has_vehicle_tracker` |
|
|
77
|
-
| `CATEGORIA` | `vehicle_classification` | Classificacao do veiculo (
|
|
77
|
+
| `CATEGORIA` | `vehicle_classification` | Classificacao do veiculo (texto) |
|
|
78
78
|
| `MARCA` | `brand_name` / `brand` | Veiculo; reboque usa `MARCA_REBOQUE` |
|
|
79
79
|
| `MODELO` | `model_description` / `model` | Veiculo; reboque usa `MODELO_REBOQUE` |
|
|
80
80
|
| `RENAVAM` | `renavam` | |
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "transdesk-importer-python-sdk"
|
|
7
|
-
version = "1.1
|
|
7
|
+
version = "1.2.1"
|
|
8
8
|
description = "SDK de leitura/transformacao de planilhas de apolices Transdesk para o formato interno 77seg"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -118,6 +118,11 @@ class InternalItem:
|
|
|
118
118
|
legal_assistance_value: float = 0
|
|
119
119
|
legal_assistance_premium: float = 0
|
|
120
120
|
|
|
121
|
+
# Suporte emergencial monitorado
|
|
122
|
+
has_monitored_emergency_support: bool = False
|
|
123
|
+
monitored_emergency_support_value: float = 0
|
|
124
|
+
monitored_emergency_support_premium: float = 0
|
|
125
|
+
|
|
121
126
|
# Combo
|
|
122
127
|
group_name: Optional[str] = None
|
|
123
128
|
|
|
@@ -130,7 +135,7 @@ class InternalItem:
|
|
|
130
135
|
model: Optional[str] = None
|
|
131
136
|
brand_name: Optional[str] = None
|
|
132
137
|
model_description: Optional[str] = None
|
|
133
|
-
vehicle_classification: Optional[
|
|
138
|
+
vehicle_classification: Optional[str] = None
|
|
134
139
|
renavam: Optional[str] = None
|
|
135
140
|
color: Optional[str] = None
|
|
136
141
|
model_year: Optional[int] = None
|
|
@@ -49,6 +49,14 @@ class DataNormalizer:
|
|
|
49
49
|
except Exception:
|
|
50
50
|
return None
|
|
51
51
|
|
|
52
|
+
@staticmethod
|
|
53
|
+
def to_str(value):
|
|
54
|
+
if value in (None, ""):
|
|
55
|
+
return None
|
|
56
|
+
|
|
57
|
+
normalized = str(value).strip()
|
|
58
|
+
return normalized or None
|
|
59
|
+
|
|
52
60
|
@staticmethod
|
|
53
61
|
def to_bool(value, na_values=("N/A", "n/a", "")):
|
|
54
62
|
if value is None:
|
|
@@ -278,7 +278,6 @@ class ApoliceBuilder:
|
|
|
278
278
|
|
|
279
279
|
def merge_complement_coverages(self, item):
|
|
280
280
|
casco_extra = 0
|
|
281
|
-
reparo_extra = 0
|
|
282
281
|
|
|
283
282
|
novas = []
|
|
284
283
|
|
|
@@ -290,7 +289,7 @@ class ApoliceBuilder:
|
|
|
290
289
|
continue
|
|
291
290
|
|
|
292
291
|
if nome == "Assistência a Reparos (COMPLEMENTO)":
|
|
293
|
-
|
|
292
|
+
casco_extra += (c.valor_mensalidade or 0)
|
|
294
293
|
continue
|
|
295
294
|
|
|
296
295
|
novas.append(c)
|
|
@@ -298,7 +297,5 @@ class ApoliceBuilder:
|
|
|
298
297
|
for c in novas:
|
|
299
298
|
if c.nome == "Casco PT (VEÍCULO)":
|
|
300
299
|
c.valor_mensalidade = ((c.valor_mensalidade or 0) + casco_extra)
|
|
301
|
-
elif c.nome == "Assistência a Reparos (VEÍCULO)":
|
|
302
|
-
c.valor_mensalidade = ((c.valor_mensalidade or 0) + reparo_extra)
|
|
303
300
|
|
|
304
301
|
item.coberturas = novas
|
|
@@ -33,11 +33,9 @@ class CoverageMapper:
|
|
|
33
33
|
elif name in (
|
|
34
34
|
"Assistência a Reparos (VEÍCULO)",
|
|
35
35
|
"Assistência a Reparos (R/SR)",
|
|
36
|
+
"Assistência a Reparos (COMPLEMENTO)",
|
|
36
37
|
):
|
|
37
|
-
self.
|
|
38
|
-
|
|
39
|
-
elif name == "Assistência a Reparos (COMPLEMENTO)":
|
|
40
|
-
self._apply_body(item, coverage)
|
|
38
|
+
self._apply_casco_premium_only(item, coverage)
|
|
41
39
|
|
|
42
40
|
elif name == "RCF":
|
|
43
41
|
self._apply_rcf(item, coverage)
|
|
@@ -57,10 +55,14 @@ class CoverageMapper:
|
|
|
57
55
|
elif name in (
|
|
58
56
|
"Rastreador p/ Veículo",
|
|
59
57
|
"Rastreador p/ Reboque",
|
|
60
|
-
"
|
|
58
|
+
"Rastreamento",
|
|
59
|
+
"Rastreamento Reboque/Semirreboque",
|
|
61
60
|
):
|
|
62
61
|
self._apply_tracker(item, coverage)
|
|
63
62
|
|
|
63
|
+
elif name == "SUPORTE EMERGENCIAL MONITORADO":
|
|
64
|
+
self._apply_monitored_emergency_support(item, coverage)
|
|
65
|
+
|
|
64
66
|
elif name == "Assistência Jurídica":
|
|
65
67
|
self._apply_legal_assistance(item, coverage)
|
|
66
68
|
|
|
@@ -69,10 +71,9 @@ class CoverageMapper:
|
|
|
69
71
|
item.hull_value += (coverage.importancia_segurada or 0)
|
|
70
72
|
item.hull_premium += (coverage.valor_mensalidade or 0)
|
|
71
73
|
|
|
72
|
-
def
|
|
73
|
-
item.
|
|
74
|
-
item.
|
|
75
|
-
item.repair_assistance_premium += (coverage.valor_mensalidade or 0)
|
|
74
|
+
def _apply_casco_premium_only(self, item, coverage):
|
|
75
|
+
item.has_casco_cir = True
|
|
76
|
+
item.hull_premium += (coverage.valor_mensalidade or 0)
|
|
76
77
|
|
|
77
78
|
def _apply_body(self, item, coverage):
|
|
78
79
|
item.body_value += (coverage.importancia_segurada or 0)
|
|
@@ -88,6 +89,11 @@ class CoverageMapper:
|
|
|
88
89
|
item.legal_assistance_value = 1
|
|
89
90
|
item.legal_assistance_premium += (coverage.valor_mensalidade or 0)
|
|
90
91
|
|
|
92
|
+
def _apply_monitored_emergency_support(self, item, coverage):
|
|
93
|
+
item.has_monitored_emergency_support = True
|
|
94
|
+
item.monitored_emergency_support_value = 1
|
|
95
|
+
item.monitored_emergency_support_premium += (coverage.valor_mensalidade or 0)
|
|
96
|
+
|
|
91
97
|
def _apply_tracker(self, item, coverage):
|
|
92
98
|
item.has_vehicle_tracker = True
|
|
93
99
|
item.vehicle_tracker_premium += (coverage.valor_mensalidade or 0)
|
|
@@ -207,7 +207,7 @@ class InternalMapper:
|
|
|
207
207
|
internal_item.brand_name = marca
|
|
208
208
|
internal_item.model_description = modelo
|
|
209
209
|
|
|
210
|
-
internal_item.vehicle_classification = DataNormalizer.
|
|
210
|
+
internal_item.vehicle_classification = DataNormalizer.to_str(
|
|
211
211
|
getattr(risco, "categoria", None)
|
|
212
212
|
)
|
|
213
213
|
internal_item.renavam = DataNormalizer.clean_doc(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: transdesk-importer-python-sdk
|
|
3
|
-
Version: 1.1
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: SDK de leitura/transformacao de planilhas de apolices Transdesk para o formato interno 77seg
|
|
5
5
|
Author-email: FMConsult <contato@fmconsult.com.br>
|
|
6
6
|
License: MIT License
|
|
@@ -117,7 +117,7 @@ Campos adicionais de veiculo/reboque (colunas apos `CHAVE_PIX` na planilha):
|
|
|
117
117
|
| Coluna planilha | Campo `InternalItem` | Observacao |
|
|
118
118
|
| --------------- | -------------------- | ---------- |
|
|
119
119
|
| `EMPRESA_RASTREAMENTO` | `vehicle_tracker_company` | Somente quando `has_vehicle_tracker` |
|
|
120
|
-
| `CATEGORIA` | `vehicle_classification` | Classificacao do veiculo (
|
|
120
|
+
| `CATEGORIA` | `vehicle_classification` | Classificacao do veiculo (texto) |
|
|
121
121
|
| `MARCA` | `brand_name` / `brand` | Veiculo; reboque usa `MARCA_REBOQUE` |
|
|
122
122
|
| `MODELO` | `model_description` / `model` | Veiculo; reboque usa `MODELO_REBOQUE` |
|
|
123
123
|
| `RENAVAM` | `renavam` | |
|
{transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/tests/test_importer.py
RENAMED
|
@@ -40,7 +40,9 @@ def test_policy_structure(apolices_bytes):
|
|
|
40
40
|
item = policy.data.items[0]
|
|
41
41
|
assert item.item_number == 1
|
|
42
42
|
assert item.item_type == "veiculo"
|
|
43
|
-
assert item.hull_premium ==
|
|
43
|
+
assert item.hull_premium == 687.12
|
|
44
|
+
assert item.repair_assistance_premium == 0
|
|
45
|
+
assert item.has_repair_assistance is False
|
|
44
46
|
assert item.group_name == "COMBO II"
|
|
45
47
|
|
|
46
48
|
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import pandas as pd
|
|
2
|
+
|
|
3
|
+
from transdesk.importer.transformers.canonical.apolice_builder import ApoliceBuilder
|
|
4
|
+
from transdesk.importer.transformers.internal.internal_mapper import InternalMapper
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def _base_row(**overrides):
|
|
8
|
+
row = {
|
|
9
|
+
"COD_AGRUPADOR_APOLICE": "99",
|
|
10
|
+
"DIA_VCTO": "10",
|
|
11
|
+
"ID_UNITY": "1",
|
|
12
|
+
"SUB_ESTIPULANTE_CNPJ": "12345678000199",
|
|
13
|
+
"SUB_ESTIPULANTE_FANTASIA": "CORRETORA TESTE",
|
|
14
|
+
"SUB_ESTIPULANTE_RAZAO_SOCIAL": "CORRETORA TESTE LTDA",
|
|
15
|
+
"PESSOA": "J",
|
|
16
|
+
"CNPJ_CPF_CLIENTE": "98765432000188",
|
|
17
|
+
"NOME_FANTASIA_CLIENTE": "CLIENTE TESTE",
|
|
18
|
+
"RAZAO_SOCIAL_CLIENTE": "CLIENTE TESTE LTDA",
|
|
19
|
+
"PLACA_VEICULO": "ABC1D23",
|
|
20
|
+
"CHASSI": "9BWZZZ377VT004251",
|
|
21
|
+
"CODE_FIPE": "005541-7",
|
|
22
|
+
"NME_BENEFICIO": "Casco PT (VEÍCULO)",
|
|
23
|
+
"VALOR_MENSALIDADE": "100.00",
|
|
24
|
+
"IMPORTANCIA_SEGURADA": "50000",
|
|
25
|
+
"EMPRESA_RASTREAMENTO": "TRACKERLOG",
|
|
26
|
+
"CATEGORIA": "PESADO - TRÊS QUARTOS",
|
|
27
|
+
"MODELO": "FH 540",
|
|
28
|
+
"RENAVAM": "12345678901",
|
|
29
|
+
"MARCA": "VOLVO",
|
|
30
|
+
"COR": "BRANCO",
|
|
31
|
+
"ANO": "2022",
|
|
32
|
+
"EIXOS": "3",
|
|
33
|
+
"CAMBIO": "AUTOMATICO",
|
|
34
|
+
"ALIENADO": "SIM",
|
|
35
|
+
}
|
|
36
|
+
row.update(overrides)
|
|
37
|
+
return row
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _build_item(rows):
|
|
41
|
+
df = pd.DataFrame(rows)
|
|
42
|
+
canonical = ApoliceBuilder().build(df)[0]
|
|
43
|
+
return InternalMapper().map(canonical).data.items[0]
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def test_vehicle_details_mapped_from_spreadsheet_columns():
|
|
47
|
+
item = _build_item([_base_row()])
|
|
48
|
+
|
|
49
|
+
assert item.item_type == "veiculo"
|
|
50
|
+
assert item.brand_name == "VOLVO"
|
|
51
|
+
assert item.model_description == "FH 540"
|
|
52
|
+
assert item.brand == "VOLVO"
|
|
53
|
+
assert item.model == "FH 540"
|
|
54
|
+
assert item.vehicle_classification == "PESADO - TRÊS QUARTOS"
|
|
55
|
+
assert item.renavam == "12345678901"
|
|
56
|
+
assert item.color == "BRANCO"
|
|
57
|
+
assert item.model_year == 2022
|
|
58
|
+
assert item.manufacture_year == 2022
|
|
59
|
+
assert item.axles == 3
|
|
60
|
+
assert item.transmission == "AUTOMATICO"
|
|
61
|
+
assert item.is_alienated is True
|
|
62
|
+
assert item.has_vehicle_tracker is False
|
|
63
|
+
assert item.vehicle_tracker_company is None
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_vehicle_tracker_company_only_when_has_tracker():
|
|
67
|
+
with_tracker = _build_item([
|
|
68
|
+
_base_row(NME_BENEFICIO="Casco PT (VEÍCULO)", VALOR_MENSALIDADE="100.00"),
|
|
69
|
+
_base_row(
|
|
70
|
+
NME_BENEFICIO="Rastreador p/ Veículo",
|
|
71
|
+
VALOR_MENSALIDADE="15.00",
|
|
72
|
+
EMPRESA_RASTREAMENTO="TRACKERLOG",
|
|
73
|
+
),
|
|
74
|
+
])
|
|
75
|
+
without_tracker = _build_item([_base_row()])
|
|
76
|
+
|
|
77
|
+
assert with_tracker.has_vehicle_tracker is True
|
|
78
|
+
assert with_tracker.vehicle_tracker_company == "TRACKERLOG"
|
|
79
|
+
|
|
80
|
+
assert without_tracker.has_vehicle_tracker is False
|
|
81
|
+
assert without_tracker.vehicle_tracker_company is None
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def test_alienado_na_is_false():
|
|
85
|
+
item = _build_item([_base_row(ALIENADO="N/A")])
|
|
86
|
+
|
|
87
|
+
assert item.is_alienated is False
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_rastreamento_maps_to_tracker():
|
|
91
|
+
item = _build_item([
|
|
92
|
+
_base_row(NME_BENEFICIO="Casco PT (VEÍCULO)", VALOR_MENSALIDADE="100.00"),
|
|
93
|
+
_base_row(
|
|
94
|
+
NME_BENEFICIO="Rastreamento",
|
|
95
|
+
VALOR_MENSALIDADE="12.50",
|
|
96
|
+
EMPRESA_RASTREAMENTO="TRACKERLOG",
|
|
97
|
+
),
|
|
98
|
+
])
|
|
99
|
+
|
|
100
|
+
assert item.has_vehicle_tracker is True
|
|
101
|
+
assert item.vehicle_tracker_premium == 12.50
|
|
102
|
+
assert item.vehicle_tracker_company == "TRACKERLOG"
|
|
103
|
+
assert item.has_monitored_emergency_support is False
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def test_rastreamento_reboque_maps_to_tracker():
|
|
107
|
+
rows = [
|
|
108
|
+
{
|
|
109
|
+
**_base_row(
|
|
110
|
+
PLACA_VEICULO="XYZ9A99",
|
|
111
|
+
CODE_FIPE=None,
|
|
112
|
+
NME_BENEFICIO="Casco PT (R/SR)",
|
|
113
|
+
VALOR_MENSALIDADE="50.00",
|
|
114
|
+
IMPORTANCIA_SEGURADA="50000",
|
|
115
|
+
),
|
|
116
|
+
"MARCA_REBOQUE": "RANDON",
|
|
117
|
+
"MODELO_REBOQUE": "SR BAU",
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
**_base_row(
|
|
121
|
+
PLACA_VEICULO="XYZ9A99",
|
|
122
|
+
CODE_FIPE=None,
|
|
123
|
+
NME_BENEFICIO="Rastreamento Reboque/Semirreboque",
|
|
124
|
+
VALOR_MENSALIDADE="8.00",
|
|
125
|
+
),
|
|
126
|
+
"MARCA_REBOQUE": "RANDON",
|
|
127
|
+
"MODELO_REBOQUE": "SR BAU",
|
|
128
|
+
},
|
|
129
|
+
]
|
|
130
|
+
item = _build_item(rows)
|
|
131
|
+
|
|
132
|
+
assert item.item_type == "reboque"
|
|
133
|
+
assert item.has_vehicle_tracker is True
|
|
134
|
+
assert item.vehicle_tracker_premium == 8.00
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def test_monitored_emergency_support_isolated_from_tracker():
|
|
138
|
+
item = _build_item([
|
|
139
|
+
_base_row(NME_BENEFICIO="Casco PT (VEÍCULO)", VALOR_MENSALIDADE="100.00"),
|
|
140
|
+
_base_row(
|
|
141
|
+
NME_BENEFICIO="SUPORTE EMERGENCIAL MONITORADO",
|
|
142
|
+
VALOR_MENSALIDADE="13.47",
|
|
143
|
+
EMPRESA_RASTREAMENTO="TRACKERLOG",
|
|
144
|
+
),
|
|
145
|
+
])
|
|
146
|
+
|
|
147
|
+
assert item.has_monitored_emergency_support is True
|
|
148
|
+
assert item.monitored_emergency_support_premium == 13.47
|
|
149
|
+
assert item.monitored_emergency_support_value == 1
|
|
150
|
+
assert item.has_vehicle_tracker is False
|
|
151
|
+
assert item.vehicle_tracker_company is None
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def test_repair_assistance_consolidates_into_hull_premium():
|
|
155
|
+
item = _build_item([
|
|
156
|
+
_base_row(
|
|
157
|
+
NME_BENEFICIO="Casco PT (VEÍCULO)",
|
|
158
|
+
VALOR_MENSALIDADE="372.24",
|
|
159
|
+
IMPORTANCIA_SEGURADA="308130",
|
|
160
|
+
),
|
|
161
|
+
_base_row(
|
|
162
|
+
NME_BENEFICIO="Assistência a Reparos (VEÍCULO)",
|
|
163
|
+
VALOR_MENSALIDADE="267.38",
|
|
164
|
+
IMPORTANCIA_SEGURADA="308130",
|
|
165
|
+
),
|
|
166
|
+
_base_row(
|
|
167
|
+
NME_BENEFICIO="Casco PT (COMPLEMENTO)",
|
|
168
|
+
VALOR_MENSALIDADE="25.64",
|
|
169
|
+
IMPORTANCIA_SEGURADA="27000",
|
|
170
|
+
),
|
|
171
|
+
_base_row(
|
|
172
|
+
NME_BENEFICIO="Assistência a Reparos (COMPLEMENTO)",
|
|
173
|
+
VALOR_MENSALIDADE="21.86",
|
|
174
|
+
IMPORTANCIA_SEGURADA="27000",
|
|
175
|
+
),
|
|
176
|
+
])
|
|
177
|
+
|
|
178
|
+
assert item.hull_premium == 687.12
|
|
179
|
+
assert item.hull_value == 308130
|
|
180
|
+
assert item.repair_assistance_premium == 0
|
|
181
|
+
assert item.has_repair_assistance is False
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import pandas as pd
|
|
2
|
-
|
|
3
|
-
from transdesk.importer.transformers.canonical.apolice_builder import ApoliceBuilder
|
|
4
|
-
from transdesk.importer.transformers.internal.internal_mapper import InternalMapper
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def _base_row(**overrides):
|
|
8
|
-
row = {
|
|
9
|
-
"COD_AGRUPADOR_APOLICE": "99",
|
|
10
|
-
"DIA_VCTO": "10",
|
|
11
|
-
"ID_UNITY": "1",
|
|
12
|
-
"SUB_ESTIPULANTE_CNPJ": "12345678000199",
|
|
13
|
-
"SUB_ESTIPULANTE_FANTASIA": "CORRETORA TESTE",
|
|
14
|
-
"SUB_ESTIPULANTE_RAZAO_SOCIAL": "CORRETORA TESTE LTDA",
|
|
15
|
-
"PESSOA": "J",
|
|
16
|
-
"CNPJ_CPF_CLIENTE": "98765432000188",
|
|
17
|
-
"NOME_FANTASIA_CLIENTE": "CLIENTE TESTE",
|
|
18
|
-
"RAZAO_SOCIAL_CLIENTE": "CLIENTE TESTE LTDA",
|
|
19
|
-
"PLACA_VEICULO": "ABC1D23",
|
|
20
|
-
"CHASSI": "9BWZZZ377VT004251",
|
|
21
|
-
"CODE_FIPE": "005541-7",
|
|
22
|
-
"NME_BENEFICIO": "Casco PT (VEÍCULO)",
|
|
23
|
-
"VALOR_MENSALIDADE": "100.00",
|
|
24
|
-
"IMPORTANCIA_SEGURADA": "50000",
|
|
25
|
-
"EMPRESA_RASTREAMENTO": "TRACKERLOG",
|
|
26
|
-
"CATEGORIA": "3",
|
|
27
|
-
"MODELO": "FH 540",
|
|
28
|
-
"RENAVAM": "12345678901",
|
|
29
|
-
"MARCA": "VOLVO",
|
|
30
|
-
"COR": "BRANCO",
|
|
31
|
-
"ANO": "2022",
|
|
32
|
-
"EIXOS": "3",
|
|
33
|
-
"CAMBIO": "AUTOMATICO",
|
|
34
|
-
"ALIENADO": "SIM",
|
|
35
|
-
}
|
|
36
|
-
row.update(overrides)
|
|
37
|
-
return row
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def _build_item(rows):
|
|
41
|
-
df = pd.DataFrame(rows)
|
|
42
|
-
canonical = ApoliceBuilder().build(df)[0]
|
|
43
|
-
return InternalMapper().map(canonical).data.items[0]
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def test_vehicle_details_mapped_from_spreadsheet_columns():
|
|
47
|
-
item = _build_item([_base_row()])
|
|
48
|
-
|
|
49
|
-
assert item.item_type == "veiculo"
|
|
50
|
-
assert item.brand_name == "VOLVO"
|
|
51
|
-
assert item.model_description == "FH 540"
|
|
52
|
-
assert item.brand == "VOLVO"
|
|
53
|
-
assert item.model == "FH 540"
|
|
54
|
-
assert item.vehicle_classification == 3
|
|
55
|
-
assert item.renavam == "12345678901"
|
|
56
|
-
assert item.color == "BRANCO"
|
|
57
|
-
assert item.model_year == 2022
|
|
58
|
-
assert item.manufacture_year == 2022
|
|
59
|
-
assert item.axles == 3
|
|
60
|
-
assert item.transmission == "AUTOMATICO"
|
|
61
|
-
assert item.is_alienated is True
|
|
62
|
-
assert item.has_vehicle_tracker is False
|
|
63
|
-
assert item.vehicle_tracker_company is None
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
def test_vehicle_tracker_company_only_when_has_tracker():
|
|
67
|
-
with_tracker = _build_item([
|
|
68
|
-
_base_row(NME_BENEFICIO="Casco PT (VEÍCULO)", VALOR_MENSALIDADE="100.00"),
|
|
69
|
-
_base_row(
|
|
70
|
-
NME_BENEFICIO="Rastreador p/ Veículo",
|
|
71
|
-
VALOR_MENSALIDADE="15.00",
|
|
72
|
-
EMPRESA_RASTREAMENTO="TRACKERLOG",
|
|
73
|
-
),
|
|
74
|
-
])
|
|
75
|
-
without_tracker = _build_item([_base_row()])
|
|
76
|
-
|
|
77
|
-
assert with_tracker.has_vehicle_tracker is True
|
|
78
|
-
assert with_tracker.vehicle_tracker_company == "TRACKERLOG"
|
|
79
|
-
|
|
80
|
-
assert without_tracker.has_vehicle_tracker is False
|
|
81
|
-
assert without_tracker.vehicle_tracker_company is None
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def test_alienado_na_is_false():
|
|
85
|
-
item = _build_item([_base_row(ALIENADO="N/A")])
|
|
86
|
-
|
|
87
|
-
assert item.is_alienated is False
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/tests/test_validator.py
RENAMED
|
File without changes
|