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.
Files changed (39) hide show
  1. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/PKG-INFO +2 -2
  2. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/README.md +1 -1
  3. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/pyproject.toml +1 -1
  4. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/models/internal.py +6 -1
  5. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/shared/data_normalizer.py +8 -0
  6. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/canonical/apolice_builder.py +1 -4
  7. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/internal/coverage_mapper.py +15 -9
  8. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/internal/internal_mapper.py +1 -1
  9. {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
  10. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/tests/test_importer.py +3 -1
  11. transdesk_importer_python_sdk-1.2.1/tests/test_vehicle_details.py +181 -0
  12. transdesk_importer_python_sdk-1.1.0/tests/test_vehicle_details.py +0 -87
  13. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/LICENSE +0 -0
  14. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/setup.cfg +0 -0
  15. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/__init__.py +0 -0
  16. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/client.py +0 -0
  17. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/exporters/__init__.py +0 -0
  18. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/exporters/json_exporter.py +0 -0
  19. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/models/__init__.py +0 -0
  20. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/models/canonical.py +0 -0
  21. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/readers/__init__.py +0 -0
  22. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/readers/excel_reader.py +0 -0
  23. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/shared/__init__.py +0 -0
  24. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/__init__.py +0 -0
  25. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/canonical/__init__.py +0 -0
  26. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/canonical/cobertura_builder.py +0 -0
  27. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/canonical/item_classifier.py +0 -0
  28. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/internal/__init__.py +0 -0
  29. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/internal/rcf_parser.py +0 -0
  30. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/transformers/internal/towing_parser.py +0 -0
  31. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/validators/__init__.py +0 -0
  32. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/src/transdesk/importer/validators/internal_policy_validator.py +0 -0
  33. {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
  34. {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
  35. {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
  36. {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
  37. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/tests/test_data_normalizer.py +0 -0
  38. {transdesk_importer_python_sdk-1.1.0 → transdesk_importer_python_sdk-1.2.1}/tests/test_excel_reader.py +0 -0
  39. {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.0
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 (int) |
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 (int) |
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.0"
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[int] = None
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
- reparo_extra += (c.valor_mensalidade or 0)
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._apply_repair(item, coverage)
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
- "SUPORTE EMERGENCIAL MONITORADO",
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 _apply_repair(self, item, coverage):
73
- item.has_repair_assistance = True
74
- item.repair_assistance_value += (coverage.importancia_segurada or 0)
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.to_int(
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.0
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 (int) |
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` | |
@@ -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 == 397.88
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