bfocus 0.2.4 → 0.2.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/README.md +34 -6
- data/lib/bfocus/resources/people.rb +10 -2
- data/lib/bfocus/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a1002f7169bb429c47c8e0b664f24498fca553c8dbe00a694a5f73269b125169
|
|
4
|
+
data.tar.gz: cfa713f8914a6071c813f3a2bfd6dbd4093421570c36895897a6d151582d4075
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c26cd338fb79a94dadab4d5d1d045efc6fd36c0c149e4dd819c95aff74ff6e651e0ddf2b17e59e85ad56d41dcc1adc87fb3b0290dad9347c07b506874c8773be
|
|
7
|
+
data.tar.gz: 8da928fb019d68836af2d6fef305a2b898054d6975773a4c7974324c2f79529543c2eb0a98876f81c7674814ab3dcbd52c5f9d58354af5f6dd831f3394106f4b
|
data/README.md
CHANGED
|
@@ -195,11 +195,12 @@ client.people.upsert("erp-1042", "app-77", access: true) # devolve o acesso
|
|
|
195
195
|
- **O acesso é do vínculo.** `delete` (e `access: false`) tira o acesso dela NESTE cliente, não nos
|
|
196
196
|
outros: `"unlinked" => true` na resposta quer dizer que ela segue ativa em algum outro.
|
|
197
197
|
- Como no resto da SDK, só o que você passa muda; `nil` limpa (`phone: nil`).
|
|
198
|
-
- Campos: `name`, `email`, `phone`, `role`, `access` (pode usar o atendimento), `is_primary`
|
|
198
|
+
- Campos: `name`, `email`, `phone`, `document` (CPF), `role`, `access` (pode usar o atendimento), `is_primary`
|
|
199
199
|
(contato principal), `extra_emails`, `extra_phones`, `custom_fields`, `clear`.
|
|
200
200
|
- Erros comuns (`code`): `CUSTOMER_NOT_FOUND`, `NAME_REQUIRED` (ao criar), `PERSON_EMAIL_TAKEN`,
|
|
201
201
|
`PERSON_PHONE_TAKEN`, `PERSON_CONTACT_OTHER_CUSTOMER`, `PERSON_EMAIL_STAFF`,
|
|
202
|
-
`PERSON_CLEAR_FIELD_INVALID`, `PERSON_CLEAR_NOT_OWN_RECORD
|
|
202
|
+
`PERSON_CLEAR_FIELD_INVALID`, `PERSON_CLEAR_NOT_OWN_RECORD`, `PERSON_DOCUMENT_INVALID`,
|
|
203
|
+
`PERSON_DOCUMENT_CONFLICT`.
|
|
203
204
|
|
|
204
205
|
### Campos personalizados da pessoa
|
|
205
206
|
|
|
@@ -252,6 +253,30 @@ Três regras que parecem contraintuitivas e são de propósito:
|
|
|
252
253
|
|
|
253
254
|
Vale no `people.upsert` e no `people.batch` (`"clear" => ["phone"]` no item).
|
|
254
255
|
|
|
256
|
+
### CPF: a pessoa é única
|
|
257
|
+
|
|
258
|
+
`document` é o CPF da pessoa. É por ele que dois sistemas que conhecem a mesma pessoa por ids
|
|
259
|
+
diferentes chegam ao MESMO cadastro.
|
|
260
|
+
|
|
261
|
+
```ruby
|
|
262
|
+
p = client.people.upsert("erp-1042", "app-91", name: "Paula Reis", document: "529.982.247-25")
|
|
263
|
+
p["document"] # "52998224725"
|
|
264
|
+
p["merged_into"] # "app-77" se o CPF já era de outra ficha; nil se não
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Regras (valem no upsert e no lote):
|
|
268
|
+
|
|
269
|
+
- **A pessoa é única.** O mesmo CPF é sempre o mesmo cadastro, em qualquer produto e cliente. Mande
|
|
270
|
+
com ou sem máscara; a resposta traz só os 11 dígitos em `document`.
|
|
271
|
+
- **Id desconhecido + CPF que já existe** → a API acha a ficha, o seu id vira identificador extra
|
|
272
|
+
dela e a resposta vem com `merged_into` = o id principal. Guarde esse id do seu lado.
|
|
273
|
+
- **Id de uma ficha + CPF de OUTRA** → as duas são mescladas na hora; `merged_into` = a que tinha o CPF.
|
|
274
|
+
- **`document: nil` NÃO apaga** o CPF (e `document` não é campo do `clear`). Omitir é o mesmo que "não mexe".
|
|
275
|
+
- Erros: 422 `PERSON_DOCUMENT_INVALID` (CPF inválido, `Bfocus::ValidationError`) e 409 `PERSON_DOCUMENT_CONFLICT` (a
|
|
276
|
+
ficha já tem OUTRO CPF — a API nunca troca sozinho; `Bfocus::ConflictError`).
|
|
277
|
+
|
|
278
|
+
No lote: `"document" => "529.982.247-25"` no item.
|
|
279
|
+
|
|
255
280
|
### Contato já usado: um 409 que você consegue resolver
|
|
256
281
|
|
|
257
282
|
`PERSON_EMAIL_TAKEN` e `PERSON_PHONE_TAKEN` (409) não são "tente de novo": o e-mail (ou o
|
|
@@ -291,10 +316,13 @@ rescue Bfocus::ConflictError => e
|
|
|
291
316
|
end
|
|
292
317
|
```
|
|
293
318
|
|
|
294
|
-
`PERSON_CONTACT_OTHER_CUSTOMER` (409) é o mesmo assunto pelo outro lado
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
319
|
+
`PERSON_CONTACT_OTHER_CUSTOMER` (409) é o mesmo assunto pelo outro lado: o e-mail (ou o telefone) é
|
|
320
|
+
de uma pessoa de **outro cliente**. A API **não liga duas fichas sozinha** só porque o contato casou
|
|
321
|
+
— dois cadastros podem dividir um e-mail ou um telefone, e ligar por palpite já destruiu fichas.
|
|
322
|
+
Repetir a chamada não resolve. Se for **mesmo a mesma pessoa** (confirme antes), o erro traz o dono
|
|
323
|
+
nos dados, como os outros dois conflitos: registre o seu id como identificador extra da ficha dele
|
|
324
|
+
(`owner_external_id`) e o próximo envio **liga** a pessoa ao seu cliente (`linked: true`), sem
|
|
325
|
+
sobrescrever os dados da outra ficha.
|
|
298
326
|
|
|
299
327
|
## Lotes — `customers.batch` e `people.batch`
|
|
300
328
|
|
|
@@ -73,6 +73,13 @@ module Bfocus
|
|
|
73
73
|
# transferida: fica ligada também a este (cadastro único, `"linked" => true` na resposta).
|
|
74
74
|
# `access: true` devolve o acesso retirado por {#delete}.
|
|
75
75
|
#
|
|
76
|
+
# @param document [String] CPF da pessoa, com ou sem máscara (a resposta traz só os 11
|
|
77
|
+
# dígitos). A PESSOA É ÚNICA: o mesmo CPF é sempre o mesmo cadastro, em qualquer produto.
|
|
78
|
+
# Id desconhecido + CPF de uma ficha existente → `"merged_into"` = id principal dela (o
|
|
79
|
+
# seu id vira identificador extra). Id de uma ficha + CPF de OUTRA → as duas são mescladas
|
|
80
|
+
# na hora (`"merged_into"` = a que tinha o CPF). `nil`/vazio NÃO apaga (não é campo do
|
|
81
|
+
# `clear`). Erros: 422 `PERSON_DOCUMENT_INVALID` (CPF inválido) e 409
|
|
82
|
+
# `PERSON_DOCUMENT_CONFLICT` (a ficha já tem OUTRO CPF — nunca troca sozinho).
|
|
76
83
|
# @param access [Boolean] pode abrir chamados/usar o widget.
|
|
77
84
|
# @param is_primary [Boolean] contato principal do cliente.
|
|
78
85
|
# @param extra_emails [Array<String>] e-mails adicionais.
|
|
@@ -93,12 +100,13 @@ module Bfocus
|
|
|
93
100
|
# ligada a este também) e `"merged_into"` (o id que você mandou era um apelido; este é o
|
|
94
101
|
# principal do cadastro).
|
|
95
102
|
def upsert(customer_external_id, person_external_id, name: UNSET, email: UNSET, phone: UNSET,
|
|
96
|
-
role: UNSET, access: UNSET, is_primary: UNSET, extra_emails: UNSET, extra_phones: UNSET,
|
|
103
|
+
document: UNSET, role: UNSET, access: UNSET, is_primary: UNSET, extra_emails: UNSET, extra_phones: UNSET,
|
|
97
104
|
custom_fields: UNSET, clear: UNSET, idempotency_key: nil, timeout: nil)
|
|
98
105
|
cid = segment(customer_external_id, "customer_external_id")
|
|
99
106
|
pid = segment(person_external_id, "person_external_id")
|
|
100
107
|
person = compact(
|
|
101
|
-
"name" => name, "email" => email, "phone" => phone, "
|
|
108
|
+
"name" => name, "email" => email, "phone" => phone, "document" => document, "role" => role,
|
|
109
|
+
"access" => access,
|
|
102
110
|
"is_primary" => is_primary, "extra_emails" => extra_emails, "extra_phones" => extra_phones,
|
|
103
111
|
"custom_fields" => custom_fields, "clear" => clear
|
|
104
112
|
)
|
data/lib/bfocus/version.rb
CHANGED