bfocus 0.2.4__tar.gz → 0.2.5__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.
- {bfocus-0.2.4 → bfocus-0.2.5}/PKG-INFO +32 -5
- {bfocus-0.2.4 → bfocus-0.2.5}/README.md +31 -4
- {bfocus-0.2.4 → bfocus-0.2.5}/bfocus/_resources.py +10 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/bfocus/_version.py +1 -1
- {bfocus-0.2.4 → bfocus-0.2.5}/bfocus/types.py +5 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/pyproject.toml +1 -1
- {bfocus-0.2.4 → bfocus-0.2.5}/tests/fixtures/cases.json +317 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/.gitignore +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/LICENSE +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/bfocus/__init__.py +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/bfocus/_client.py +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/bfocus/_transport.py +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/bfocus/errors.py +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/bfocus/py.typed +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/bfocus/widget.py +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/examples/quickstart.py +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/tests/_support.py +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/tests/test_conformance.py +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/tests/test_unit.py +0 -0
- {bfocus-0.2.4 → bfocus-0.2.5}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: bfocus
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: SDK oficial em Python da API pública do bFocus: clientes, produtos, release notes, base de conhecimento e agentes de IA.
|
|
5
5
|
Project-URL: Homepage, https://bfocus.com.br
|
|
6
6
|
Project-URL: Repository, https://github.com/bernisoftware/bfocus-python
|
|
@@ -256,6 +256,30 @@ Três regras que parecem contraintuitivas e são de propósito:
|
|
|
256
256
|
|
|
257
257
|
Vale no `people.upsert` e no `people.batch` (`{"clear": ["phone"]}` no item).
|
|
258
258
|
|
|
259
|
+
### CPF: a pessoa é única
|
|
260
|
+
|
|
261
|
+
`document` é o CPF da pessoa. É por ele que dois sistemas que conhecem a mesma pessoa por ids
|
|
262
|
+
diferentes chegam ao MESMO cadastro.
|
|
263
|
+
|
|
264
|
+
```python
|
|
265
|
+
p = bf.people.upsert("erp-1042", "app-91", name="Paula Reis", document="529.982.247-25")
|
|
266
|
+
print(p["document"]) # "52998224725"
|
|
267
|
+
print(p["merged_into"]) # "app-77" se o CPF já era de outra ficha; None se não
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Regras (valem no upsert e no lote):
|
|
271
|
+
|
|
272
|
+
- **A pessoa é única.** O mesmo CPF é sempre o mesmo cadastro, em qualquer produto e cliente. Mande
|
|
273
|
+
com ou sem máscara; a resposta traz só os 11 dígitos em `document`.
|
|
274
|
+
- **Id desconhecido + CPF que já existe** → a API acha a ficha, o seu id vira identificador extra
|
|
275
|
+
dela e a resposta vem com `merged_into` = o id principal. Guarde esse id do seu lado.
|
|
276
|
+
- **Id de uma ficha + CPF de OUTRA** → as duas são mescladas na hora; `merged_into` = a que tinha o CPF.
|
|
277
|
+
- **`document=None` NÃO apaga** o CPF (e `document` não é campo do `clear`). Omitir é o mesmo que "não mexe".
|
|
278
|
+
- Erros: 422 `PERSON_DOCUMENT_INVALID` (CPF inválido, `ValidationError`) e 409 `PERSON_DOCUMENT_CONFLICT` (a
|
|
279
|
+
ficha já tem OUTRO CPF — a API nunca troca sozinho; `ConflictError`).
|
|
280
|
+
|
|
281
|
+
No lote: `{"document": "529.982.247-25"}` no item.
|
|
282
|
+
|
|
259
283
|
### Contato já usado: um 409 que você consegue resolver
|
|
260
284
|
|
|
261
285
|
`PERSON_EMAIL_TAKEN` e `PERSON_PHONE_TAKEN` (409) não são "tente de novo": o e-mail (ou o
|
|
@@ -295,10 +319,13 @@ except ConflictError as err:
|
|
|
295
319
|
avisar_cadastro(err.code, dono)
|
|
296
320
|
```
|
|
297
321
|
|
|
298
|
-
`PERSON_CONTACT_OTHER_CUSTOMER` (409) é o mesmo assunto pelo outro lado
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
322
|
+
`PERSON_CONTACT_OTHER_CUSTOMER` (409) é o mesmo assunto pelo outro lado: o e-mail (ou o telefone) é
|
|
323
|
+
de uma pessoa de **outro cliente**. A API **não liga duas fichas sozinha** só porque o contato casou
|
|
324
|
+
— dois cadastros podem dividir um e-mail ou um telefone, e ligar por palpite já destruiu fichas.
|
|
325
|
+
Repetir a chamada não resolve. Se for **mesmo a mesma pessoa** (confirme antes), o erro traz o dono
|
|
326
|
+
nos dados, como os outros dois conflitos: registre o seu id como identificador extra da ficha dele
|
|
327
|
+
(`owner_external_id`) e o próximo envio **liga** a pessoa ao seu cliente (`linked: true`), sem
|
|
328
|
+
sobrescrever os dados da outra ficha.
|
|
302
329
|
|
|
303
330
|
## Lotes
|
|
304
331
|
|
|
@@ -229,6 +229,30 @@ Três regras que parecem contraintuitivas e são de propósito:
|
|
|
229
229
|
|
|
230
230
|
Vale no `people.upsert` e no `people.batch` (`{"clear": ["phone"]}` no item).
|
|
231
231
|
|
|
232
|
+
### CPF: a pessoa é única
|
|
233
|
+
|
|
234
|
+
`document` é o CPF da pessoa. É por ele que dois sistemas que conhecem a mesma pessoa por ids
|
|
235
|
+
diferentes chegam ao MESMO cadastro.
|
|
236
|
+
|
|
237
|
+
```python
|
|
238
|
+
p = bf.people.upsert("erp-1042", "app-91", name="Paula Reis", document="529.982.247-25")
|
|
239
|
+
print(p["document"]) # "52998224725"
|
|
240
|
+
print(p["merged_into"]) # "app-77" se o CPF já era de outra ficha; None se não
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Regras (valem no upsert e no lote):
|
|
244
|
+
|
|
245
|
+
- **A pessoa é única.** O mesmo CPF é sempre o mesmo cadastro, em qualquer produto e cliente. Mande
|
|
246
|
+
com ou sem máscara; a resposta traz só os 11 dígitos em `document`.
|
|
247
|
+
- **Id desconhecido + CPF que já existe** → a API acha a ficha, o seu id vira identificador extra
|
|
248
|
+
dela e a resposta vem com `merged_into` = o id principal. Guarde esse id do seu lado.
|
|
249
|
+
- **Id de uma ficha + CPF de OUTRA** → as duas são mescladas na hora; `merged_into` = a que tinha o CPF.
|
|
250
|
+
- **`document=None` NÃO apaga** o CPF (e `document` não é campo do `clear`). Omitir é o mesmo que "não mexe".
|
|
251
|
+
- Erros: 422 `PERSON_DOCUMENT_INVALID` (CPF inválido, `ValidationError`) e 409 `PERSON_DOCUMENT_CONFLICT` (a
|
|
252
|
+
ficha já tem OUTRO CPF — a API nunca troca sozinho; `ConflictError`).
|
|
253
|
+
|
|
254
|
+
No lote: `{"document": "529.982.247-25"}` no item.
|
|
255
|
+
|
|
232
256
|
### Contato já usado: um 409 que você consegue resolver
|
|
233
257
|
|
|
234
258
|
`PERSON_EMAIL_TAKEN` e `PERSON_PHONE_TAKEN` (409) não são "tente de novo": o e-mail (ou o
|
|
@@ -268,10 +292,13 @@ except ConflictError as err:
|
|
|
268
292
|
avisar_cadastro(err.code, dono)
|
|
269
293
|
```
|
|
270
294
|
|
|
271
|
-
`PERSON_CONTACT_OTHER_CUSTOMER` (409) é o mesmo assunto pelo outro lado
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
295
|
+
`PERSON_CONTACT_OTHER_CUSTOMER` (409) é o mesmo assunto pelo outro lado: o e-mail (ou o telefone) é
|
|
296
|
+
de uma pessoa de **outro cliente**. A API **não liga duas fichas sozinha** só porque o contato casou
|
|
297
|
+
— dois cadastros podem dividir um e-mail ou um telefone, e ligar por palpite já destruiu fichas.
|
|
298
|
+
Repetir a chamada não resolve. Se for **mesmo a mesma pessoa** (confirme antes), o erro traz o dono
|
|
299
|
+
nos dados, como os outros dois conflitos: registre o seu id como identificador extra da ficha dele
|
|
300
|
+
(`owner_external_id`) e o próximo envio **liga** a pessoa ao seu cliente (`linked: true`), sem
|
|
301
|
+
sobrescrever os dados da outra ficha.
|
|
275
302
|
|
|
276
303
|
## Lotes
|
|
277
304
|
|
|
@@ -655,6 +655,7 @@ class People(_Resource):
|
|
|
655
655
|
name: MaybeUnset[Optional[str]] = UNSET,
|
|
656
656
|
email: MaybeUnset[Optional[str]] = UNSET,
|
|
657
657
|
phone: MaybeUnset[Optional[str]] = UNSET,
|
|
658
|
+
document: MaybeUnset[Optional[str]] = UNSET,
|
|
658
659
|
role: MaybeUnset[Optional[str]] = UNSET,
|
|
659
660
|
access: MaybeUnset[Optional[bool]] = UNSET,
|
|
660
661
|
is_primary: MaybeUnset[Optional[bool]] = UNSET,
|
|
@@ -675,6 +676,14 @@ class People(_Resource):
|
|
|
675
676
|
|
|
676
677
|
Args:
|
|
677
678
|
name: Obrigatório ao criar.
|
|
679
|
+
document: CPF da pessoa, com ou sem máscara (a resposta traz só os 11 dígitos).
|
|
680
|
+
A PESSOA É ÚNICA: o mesmo CPF é sempre o mesmo cadastro, em qualquer produto.
|
|
681
|
+
Id desconhecido + CPF de uma ficha existente → a resposta vem com
|
|
682
|
+
``merged_into`` = id principal dela (o seu id vira identificador extra). Id de
|
|
683
|
+
uma ficha + CPF de OUTRA → as duas são mescladas na hora (``merged_into`` = a
|
|
684
|
+
que tinha o CPF). ``None``/vazio NÃO apaga (não é campo do ``clear``). Erros:
|
|
685
|
+
422 ``PERSON_DOCUMENT_INVALID`` (CPF inválido) e 409
|
|
686
|
+
``PERSON_DOCUMENT_CONFLICT`` (a ficha já tem OUTRO CPF — nunca troca sozinho).
|
|
678
687
|
access: Acesso ao widget/portal (padrão ao criar: ``True``). ``True`` devolve o
|
|
679
688
|
acesso retirado por :meth:`delete`.
|
|
680
689
|
extra_emails: E-mails adicionais (somam aos que já existem).
|
|
@@ -700,6 +709,7 @@ class People(_Resource):
|
|
|
700
709
|
"name": name,
|
|
701
710
|
"email": email,
|
|
702
711
|
"phone": phone,
|
|
712
|
+
"document": document,
|
|
703
713
|
"role": role,
|
|
704
714
|
"access": access,
|
|
705
715
|
"is_primary": is_primary,
|
|
@@ -194,6 +194,9 @@ class PersonBatchItem(_PersonBatchItemRequired, total=False):
|
|
|
194
194
|
name: Optional[str]
|
|
195
195
|
email: Optional[str]
|
|
196
196
|
phone: Optional[str]
|
|
197
|
+
#: CPF da pessoa (com ou sem máscara). A pessoa é ÚNICA: o mesmo CPF é sempre o mesmo
|
|
198
|
+
#: cadastro. ``None``/vazio não apaga. Ver ``people.upsert``.
|
|
199
|
+
document: Optional[str]
|
|
197
200
|
role: Optional[str]
|
|
198
201
|
access: Optional[bool]
|
|
199
202
|
is_primary: Optional[bool]
|
|
@@ -402,6 +405,8 @@ class Person(TypedDict):
|
|
|
402
405
|
name: str
|
|
403
406
|
email: Optional[str]
|
|
404
407
|
phone: Optional[str]
|
|
408
|
+
#: CPF da pessoa, só os 11 dígitos (``None`` = não informado).
|
|
409
|
+
document: Optional[str]
|
|
405
410
|
role: Optional[str]
|
|
406
411
|
access: bool
|
|
407
412
|
is_primary: bool
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "bfocus"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.5"
|
|
8
8
|
description = "SDK oficial em Python da API pública do bFocus: clientes, produtos, release notes, base de conhecimento e agentes de IA."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -1295,6 +1295,7 @@
|
|
|
1295
1295
|
"name": "Paula Reis",
|
|
1296
1296
|
"email": "paula@padaria.example",
|
|
1297
1297
|
"phone": null,
|
|
1298
|
+
"document": null,
|
|
1298
1299
|
"role": "Financeiro",
|
|
1299
1300
|
"access": true,
|
|
1300
1301
|
"is_primary": true,
|
|
@@ -1323,6 +1324,7 @@
|
|
|
1323
1324
|
"name": "Paula Reis",
|
|
1324
1325
|
"email": "paula@padaria.example",
|
|
1325
1326
|
"phone": null,
|
|
1327
|
+
"document": null,
|
|
1326
1328
|
"role": "Financeiro",
|
|
1327
1329
|
"access": true,
|
|
1328
1330
|
"is_primary": true,
|
|
@@ -1381,6 +1383,7 @@
|
|
|
1381
1383
|
"name": "Paula Reis",
|
|
1382
1384
|
"email": "paula@padaria.example",
|
|
1383
1385
|
"phone": null,
|
|
1386
|
+
"document": null,
|
|
1384
1387
|
"role": "Financeiro",
|
|
1385
1388
|
"access": false,
|
|
1386
1389
|
"is_primary": true,
|
|
@@ -1409,6 +1412,7 @@
|
|
|
1409
1412
|
"name": "Paula Reis",
|
|
1410
1413
|
"email": "paula@padaria.example",
|
|
1411
1414
|
"phone": null,
|
|
1415
|
+
"document": null,
|
|
1412
1416
|
"role": "Financeiro",
|
|
1413
1417
|
"access": false,
|
|
1414
1418
|
"is_primary": true,
|
|
@@ -1474,6 +1478,199 @@
|
|
|
1474
1478
|
}
|
|
1475
1479
|
}
|
|
1476
1480
|
},
|
|
1481
|
+
{
|
|
1482
|
+
"id": "people.upsert/document_merged",
|
|
1483
|
+
"op": "people.upsert",
|
|
1484
|
+
"args": {
|
|
1485
|
+
"customer_external_id": "ERP 1042",
|
|
1486
|
+
"person_external_id": "app-91",
|
|
1487
|
+
"name": "Paula Reis",
|
|
1488
|
+
"document": "529.982.247-25"
|
|
1489
|
+
},
|
|
1490
|
+
"exchanges": [
|
|
1491
|
+
{
|
|
1492
|
+
"retry": false,
|
|
1493
|
+
"request": {
|
|
1494
|
+
"method": "PUT",
|
|
1495
|
+
"path": "/api/v1/integration/customers/ERP%201042/people/app-91",
|
|
1496
|
+
"query": {},
|
|
1497
|
+
"body": {
|
|
1498
|
+
"person": {
|
|
1499
|
+
"name": "Paula Reis",
|
|
1500
|
+
"document": "529.982.247-25"
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
},
|
|
1504
|
+
"response": {
|
|
1505
|
+
"status": 200,
|
|
1506
|
+
"headers": {},
|
|
1507
|
+
"body": {
|
|
1508
|
+
"code": 200,
|
|
1509
|
+
"data": {
|
|
1510
|
+
"external_id": "app-77",
|
|
1511
|
+
"name": "Paula Reis",
|
|
1512
|
+
"email": "paula@padaria.example",
|
|
1513
|
+
"phone": null,
|
|
1514
|
+
"document": "52998224725",
|
|
1515
|
+
"role": "Financeiro",
|
|
1516
|
+
"access": true,
|
|
1517
|
+
"is_primary": true,
|
|
1518
|
+
"customer_external_id": "ERP 1042",
|
|
1519
|
+
"custom_fields": [
|
|
1520
|
+
{
|
|
1521
|
+
"key": "matricula",
|
|
1522
|
+
"label": "Matrícula",
|
|
1523
|
+
"value": "4471",
|
|
1524
|
+
"visibility": "interno"
|
|
1525
|
+
}
|
|
1526
|
+
],
|
|
1527
|
+
"identifiers": [
|
|
1528
|
+
{
|
|
1529
|
+
"external_id": "app-91",
|
|
1530
|
+
"label": null,
|
|
1531
|
+
"source": "api"
|
|
1532
|
+
}
|
|
1533
|
+
],
|
|
1534
|
+
"linked": false,
|
|
1535
|
+
"merged_into": "app-77",
|
|
1536
|
+
"status": "updated"
|
|
1537
|
+
},
|
|
1538
|
+
"message": "Executado com sucesso"
|
|
1539
|
+
}
|
|
1540
|
+
}
|
|
1541
|
+
}
|
|
1542
|
+
],
|
|
1543
|
+
"expect": {
|
|
1544
|
+
"result": {
|
|
1545
|
+
"external_id": "app-77",
|
|
1546
|
+
"name": "Paula Reis",
|
|
1547
|
+
"email": "paula@padaria.example",
|
|
1548
|
+
"phone": null,
|
|
1549
|
+
"document": "52998224725",
|
|
1550
|
+
"role": "Financeiro",
|
|
1551
|
+
"access": true,
|
|
1552
|
+
"is_primary": true,
|
|
1553
|
+
"customer_external_id": "ERP 1042",
|
|
1554
|
+
"custom_fields": [
|
|
1555
|
+
{
|
|
1556
|
+
"key": "matricula",
|
|
1557
|
+
"label": "Matrícula",
|
|
1558
|
+
"value": "4471",
|
|
1559
|
+
"visibility": "interno"
|
|
1560
|
+
}
|
|
1561
|
+
],
|
|
1562
|
+
"identifiers": [
|
|
1563
|
+
{
|
|
1564
|
+
"external_id": "app-91",
|
|
1565
|
+
"label": null,
|
|
1566
|
+
"source": "api"
|
|
1567
|
+
}
|
|
1568
|
+
],
|
|
1569
|
+
"linked": false,
|
|
1570
|
+
"merged_into": "app-77",
|
|
1571
|
+
"status": "updated"
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
},
|
|
1575
|
+
{
|
|
1576
|
+
"id": "people.upsert/document_conflict",
|
|
1577
|
+
"op": "people.upsert",
|
|
1578
|
+
"args": {
|
|
1579
|
+
"customer_external_id": "ERP 1042",
|
|
1580
|
+
"person_external_id": "app-77",
|
|
1581
|
+
"document": "111.444.777-35"
|
|
1582
|
+
},
|
|
1583
|
+
"exchanges": [
|
|
1584
|
+
{
|
|
1585
|
+
"retry": false,
|
|
1586
|
+
"request": {
|
|
1587
|
+
"method": "PUT",
|
|
1588
|
+
"path": "/api/v1/integration/customers/ERP%201042/people/app-77",
|
|
1589
|
+
"query": {},
|
|
1590
|
+
"body": {
|
|
1591
|
+
"person": {
|
|
1592
|
+
"document": "111.444.777-35"
|
|
1593
|
+
}
|
|
1594
|
+
}
|
|
1595
|
+
},
|
|
1596
|
+
"response": {
|
|
1597
|
+
"status": 409,
|
|
1598
|
+
"headers": {},
|
|
1599
|
+
"body": {
|
|
1600
|
+
"code": 409,
|
|
1601
|
+
"data": {
|
|
1602
|
+
"field": "document"
|
|
1603
|
+
},
|
|
1604
|
+
"message": "PERSON_DOCUMENT_CONFLICT",
|
|
1605
|
+
"error": "PERSON_DOCUMENT_CONFLICT",
|
|
1606
|
+
"validation": {
|
|
1607
|
+
"field": "document"
|
|
1608
|
+
},
|
|
1609
|
+
"request_id": "req-conformance-01"
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1613
|
+
],
|
|
1614
|
+
"expect": {
|
|
1615
|
+
"error": {
|
|
1616
|
+
"type": "conflict",
|
|
1617
|
+
"code": "PERSON_DOCUMENT_CONFLICT",
|
|
1618
|
+
"status": 409,
|
|
1619
|
+
"request_id": "req-conformance-01"
|
|
1620
|
+
}
|
|
1621
|
+
}
|
|
1622
|
+
},
|
|
1623
|
+
{
|
|
1624
|
+
"id": "people.upsert/document_invalid",
|
|
1625
|
+
"op": "people.upsert",
|
|
1626
|
+
"args": {
|
|
1627
|
+
"customer_external_id": "ERP 1042",
|
|
1628
|
+
"person_external_id": "app-77",
|
|
1629
|
+
"document": "123.456.789-00"
|
|
1630
|
+
},
|
|
1631
|
+
"exchanges": [
|
|
1632
|
+
{
|
|
1633
|
+
"retry": false,
|
|
1634
|
+
"request": {
|
|
1635
|
+
"method": "PUT",
|
|
1636
|
+
"path": "/api/v1/integration/customers/ERP%201042/people/app-77",
|
|
1637
|
+
"query": {},
|
|
1638
|
+
"body": {
|
|
1639
|
+
"person": {
|
|
1640
|
+
"document": "123.456.789-00"
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1643
|
+
},
|
|
1644
|
+
"response": {
|
|
1645
|
+
"status": 422,
|
|
1646
|
+
"headers": {},
|
|
1647
|
+
"body": {
|
|
1648
|
+
"code": 422,
|
|
1649
|
+
"data": {
|
|
1650
|
+
"field": "document"
|
|
1651
|
+
},
|
|
1652
|
+
"message": "PERSON_DOCUMENT_INVALID",
|
|
1653
|
+
"error": "PERSON_DOCUMENT_INVALID",
|
|
1654
|
+
"validation": {
|
|
1655
|
+
"field": "document"
|
|
1656
|
+
},
|
|
1657
|
+
"request_id": "req-conformance-01"
|
|
1658
|
+
}
|
|
1659
|
+
}
|
|
1660
|
+
}
|
|
1661
|
+
],
|
|
1662
|
+
"expect": {
|
|
1663
|
+
"error": {
|
|
1664
|
+
"type": "validation",
|
|
1665
|
+
"code": "PERSON_DOCUMENT_INVALID",
|
|
1666
|
+
"status": 422,
|
|
1667
|
+
"request_id": "req-conformance-01",
|
|
1668
|
+
"validation": {
|
|
1669
|
+
"field": "document"
|
|
1670
|
+
}
|
|
1671
|
+
}
|
|
1672
|
+
}
|
|
1673
|
+
},
|
|
1477
1674
|
{
|
|
1478
1675
|
"id": "people.list/ok",
|
|
1479
1676
|
"op": "people.list",
|
|
@@ -1500,6 +1697,7 @@
|
|
|
1500
1697
|
"name": "Paula Reis",
|
|
1501
1698
|
"email": "paula@padaria.example",
|
|
1502
1699
|
"phone": null,
|
|
1700
|
+
"document": null,
|
|
1503
1701
|
"role": "Financeiro",
|
|
1504
1702
|
"access": true,
|
|
1505
1703
|
"is_primary": true,
|
|
@@ -1519,6 +1717,7 @@
|
|
|
1519
1717
|
"name": "Rui Lima",
|
|
1520
1718
|
"email": null,
|
|
1521
1719
|
"phone": "+5511999990000",
|
|
1720
|
+
"document": null,
|
|
1522
1721
|
"role": "Compras",
|
|
1523
1722
|
"access": false,
|
|
1524
1723
|
"is_primary": false,
|
|
@@ -1539,6 +1738,7 @@
|
|
|
1539
1738
|
"name": "Paula Reis",
|
|
1540
1739
|
"email": "paula@padaria.example",
|
|
1541
1740
|
"phone": null,
|
|
1741
|
+
"document": null,
|
|
1542
1742
|
"role": "Financeiro",
|
|
1543
1743
|
"access": true,
|
|
1544
1744
|
"is_primary": true,
|
|
@@ -1558,6 +1758,7 @@
|
|
|
1558
1758
|
"name": "Rui Lima",
|
|
1559
1759
|
"email": null,
|
|
1560
1760
|
"phone": "+5511999990000",
|
|
1761
|
+
"document": null,
|
|
1561
1762
|
"role": "Compras",
|
|
1562
1763
|
"access": false,
|
|
1563
1764
|
"is_primary": false,
|
|
@@ -1594,6 +1795,7 @@
|
|
|
1594
1795
|
"name": "Paula Reis",
|
|
1595
1796
|
"email": "paula@padaria.example",
|
|
1596
1797
|
"phone": null,
|
|
1798
|
+
"document": null,
|
|
1597
1799
|
"role": "Financeiro",
|
|
1598
1800
|
"access": false,
|
|
1599
1801
|
"is_primary": true,
|
|
@@ -1620,6 +1822,7 @@
|
|
|
1620
1822
|
"name": "Paula Reis",
|
|
1621
1823
|
"email": "paula@padaria.example",
|
|
1622
1824
|
"phone": null,
|
|
1825
|
+
"document": null,
|
|
1623
1826
|
"role": "Financeiro",
|
|
1624
1827
|
"access": false,
|
|
1625
1828
|
"is_primary": true,
|
|
@@ -2050,6 +2253,120 @@
|
|
|
2050
2253
|
}
|
|
2051
2254
|
}
|
|
2052
2255
|
},
|
|
2256
|
+
{
|
|
2257
|
+
"id": "people.batch/document",
|
|
2258
|
+
"op": "people.batch",
|
|
2259
|
+
"args": {
|
|
2260
|
+
"items": [
|
|
2261
|
+
{
|
|
2262
|
+
"customer_external_id": "ERP 1042",
|
|
2263
|
+
"external_id": "app-77",
|
|
2264
|
+
"document": "529.982.247-25"
|
|
2265
|
+
},
|
|
2266
|
+
{
|
|
2267
|
+
"customer_external_id": "ERP 1042",
|
|
2268
|
+
"external_id": "app-91",
|
|
2269
|
+
"name": "Paula Reis",
|
|
2270
|
+
"document": "52998224725"
|
|
2271
|
+
}
|
|
2272
|
+
]
|
|
2273
|
+
},
|
|
2274
|
+
"exchanges": [
|
|
2275
|
+
{
|
|
2276
|
+
"retry": false,
|
|
2277
|
+
"request": {
|
|
2278
|
+
"method": "POST",
|
|
2279
|
+
"path": "/api/v1/integration/people/batch",
|
|
2280
|
+
"query": {},
|
|
2281
|
+
"body": {
|
|
2282
|
+
"items": [
|
|
2283
|
+
{
|
|
2284
|
+
"customer_external_id": "ERP 1042",
|
|
2285
|
+
"person": {
|
|
2286
|
+
"external_id": "app-77",
|
|
2287
|
+
"document": "529.982.247-25"
|
|
2288
|
+
}
|
|
2289
|
+
},
|
|
2290
|
+
{
|
|
2291
|
+
"customer_external_id": "ERP 1042",
|
|
2292
|
+
"person": {
|
|
2293
|
+
"external_id": "app-91",
|
|
2294
|
+
"name": "Paula Reis",
|
|
2295
|
+
"document": "52998224725"
|
|
2296
|
+
}
|
|
2297
|
+
}
|
|
2298
|
+
]
|
|
2299
|
+
}
|
|
2300
|
+
},
|
|
2301
|
+
"response": {
|
|
2302
|
+
"status": 200,
|
|
2303
|
+
"headers": {},
|
|
2304
|
+
"body": {
|
|
2305
|
+
"code": 200,
|
|
2306
|
+
"data": {
|
|
2307
|
+
"results": [
|
|
2308
|
+
{
|
|
2309
|
+
"index": 0,
|
|
2310
|
+
"status": "updated",
|
|
2311
|
+
"external_id": "app-77",
|
|
2312
|
+
"merged_into": null,
|
|
2313
|
+
"linked": false,
|
|
2314
|
+
"error": null,
|
|
2315
|
+
"code": null
|
|
2316
|
+
},
|
|
2317
|
+
{
|
|
2318
|
+
"index": 1,
|
|
2319
|
+
"status": "updated",
|
|
2320
|
+
"external_id": "app-77",
|
|
2321
|
+
"merged_into": "app-77",
|
|
2322
|
+
"linked": false,
|
|
2323
|
+
"error": null,
|
|
2324
|
+
"code": null
|
|
2325
|
+
}
|
|
2326
|
+
],
|
|
2327
|
+
"summary": {
|
|
2328
|
+
"created": 0,
|
|
2329
|
+
"updated": 2,
|
|
2330
|
+
"unchanged": 0,
|
|
2331
|
+
"error": 0
|
|
2332
|
+
}
|
|
2333
|
+
},
|
|
2334
|
+
"message": "Executado com sucesso"
|
|
2335
|
+
}
|
|
2336
|
+
}
|
|
2337
|
+
}
|
|
2338
|
+
],
|
|
2339
|
+
"expect": {
|
|
2340
|
+
"result": {
|
|
2341
|
+
"results": [
|
|
2342
|
+
{
|
|
2343
|
+
"index": 0,
|
|
2344
|
+
"status": "updated",
|
|
2345
|
+
"external_id": "app-77",
|
|
2346
|
+
"merged_into": null,
|
|
2347
|
+
"linked": false,
|
|
2348
|
+
"error": null,
|
|
2349
|
+
"code": null
|
|
2350
|
+
},
|
|
2351
|
+
{
|
|
2352
|
+
"index": 1,
|
|
2353
|
+
"status": "updated",
|
|
2354
|
+
"external_id": "app-77",
|
|
2355
|
+
"merged_into": "app-77",
|
|
2356
|
+
"linked": false,
|
|
2357
|
+
"error": null,
|
|
2358
|
+
"code": null
|
|
2359
|
+
}
|
|
2360
|
+
],
|
|
2361
|
+
"summary": {
|
|
2362
|
+
"created": 0,
|
|
2363
|
+
"updated": 2,
|
|
2364
|
+
"unchanged": 0,
|
|
2365
|
+
"error": 0
|
|
2366
|
+
}
|
|
2367
|
+
}
|
|
2368
|
+
}
|
|
2369
|
+
},
|
|
2053
2370
|
{
|
|
2054
2371
|
"id": "customers.identifiers.add/with_label",
|
|
2055
2372
|
"op": "customers.identifiers.add",
|
|
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
|