home / skills / leonardo-picciani / senior-erp-agent-skills / senior-erp-cliente-upsert

senior-erp-cliente-upsert skill

/skills/senior-erp-cliente-upsert

This skill upserts a client in Senior ERP via Senior X Platform, handling deduplication, validation, and optional partial updates.

npx playbooks add skill leonardo-picciani/senior-erp-agent-skills --skill senior-erp-cliente-upsert

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
5.2 KB
---
name: senior-erp-cliente-upsert
description: Criar ou atualizar cadastro de cliente no ERP Senior via Senior X Platform (upsert). Use para "cadastro de cliente", "atualizar cliente", "criar cliente", "cliente PJ/PF", "CNPJ/CPF", "enderecos", "integracao Senior ERP", e fluxos que exigem deduplicacao e validacao antes de gravar.
license: MIT
metadata:
  author: Leonardo Picciani
  author_url: https://github.com/leonardo-picciani
  project: Senior Agent Skills (Experimental)
  generated_with: OpenCode (agent runtime); OpenAI GPT-5.2
  version: 0.1.0
  experimental: 'true'
  language: pt-BR
  docs: https://api.xplatform.com.br/api-portal/pt-br/node/1
compatibility: Integracao HTTP agnostica de linguagem. Requer acesso de rede ao tenant/ambiente da Senior X Platform; usa Bearer token e header client_id.
---
# Senior ERP - Cliente Upsert

## Quando aplicar

- "criar cliente" / "cadastrar cliente" / "cadastro de cliente"
- "atualizar dados do cliente" / "alterar cadastro"
- "upsert cliente" (criar se nao existe, atualizar se existe)
- "integrar clientes do e-commerce/CRM para o Senior"

## Contrato de integracao (agnostico de linguagem)

Leia `references/REFERENCE.md` para a referencia base (autenticacao, headers, seguranca, resiliencia, idempotencia).

## Passos

1) Confirmar o objetivo e o escopo do cadastro
   - PJ vs PF, campos obrigatorios, regra de negocio (ex.: cliente ativo/inativo, tipo de contribuinte).
   - Confirmar quais identificadores devem ser usados para deduplicacao (ex.: CNPJ/CPF + filial/empresa, ou codigo externo).

2) Coletar entradas minimas e validar
   - Identificador: CNPJ/CPF (quando aplicavel) e/ou codigo externo.
   - Razao social/nome, email/telefone, enderecos (cobranca/entrega), inscricoes (quando aplicavel).
   - Normalizar formatos (somente digitos para CNPJ/CPF/CEP; caixa/acentos conforme padrao do cliente).
   - Se houver PII, evitar ecoar dados completos em logs/saidas.

3) Descobrir o endpoint correto no Portal Senior APIs
   - Usar o API Browser/Portal para localizar o servico do modulo ERP relacionado a "clientes"/"cadastros".
   - Identificar o fluxo suportado:
     - consultar por identificador (para deduplicacao)
     - criar
     - atualizar

4) Executar deduplicacao antes de gravar
   - Consultar se o cliente ja existe usando o identificador acordado.
   - Se existir, planejar update parcial (patch) ou update total conforme o endpoint.
   - Se nao existir, planejar create.

5) Pedir confirmacao explicita antes de alterar dados (mutacao)
   - Mostrar um resumo compacto do que sera criado/atualizado (sem expor PII alem do necessario).

6) Executar chamada(s) de API
   - Incluir headers obrigatorios (Authorization Bearer, Content-type, client_id).
   - Aplicar timeout e retry/backoff para 429/5xx conforme `references/REFERENCE.md`.
   - Tratar erros de validacao retornando mensagens acionaveis (campo + motivo), sem vazar tokens.

7) Retornar resultado normalizado
   - Identificador do registro no Senior (quando retornado) e o identificador externo usado.
   - O que foi criado/atualizado (lista curta de campos), e qualquer aviso relevante.
   - Se falhar: status/erro + recomendacao do proximo passo (ex.: corrigir campo, tentar novamente, checar permissao).

## Checklist de entradas

- Contexto de integracao: `base_url`, `tenant` (se aplicavel), `client_id`, token (Bearer)
- Identificador de deduplicacao: CNPJ/CPF e/ou `external_id`
- Dados basicos: nome/razao social, tipo (PF/PJ)
- Contatos: email, telefone
- Enderecos: entrega/cobranca (logradouro, numero, bairro, cidade, UF, CEP)
- Preferencias: criar vs atualizar, update parcial vs total (se o endpoint exigir)

## Exemplo (cURL)

```bash
curl -X POST "${SENIOR_BASE_URL}/<path-do-endpoint>/" \
  -H "Authorization: Bearer ${SENIOR_ACCESS_TOKEN}" \
  -H "Content-type: application/json" \
  -H "client_id: ${SENIOR_CLIENT_ID}" \
  -d '{
    "external_id": "<id-externo>",
    "cpf_cnpj": "<somente-digitos>",
    "nome": "<nome-ou-razao-social>",
    "enderecos": [
      {
        "tipo": "entrega",
        "cep": "<somente-digitos>",
        "logradouro": "<...>",
        "numero": "<...>",
        "cidade": "<...>",
        "uf": "<UF>"
      }
    ]
  }'
```

Notas:
- Substitua `<path-do-endpoint>` pelo caminho do servico encontrado no Portal Senior APIs.
- O shape do JSON depende do endpoint; use este exemplo apenas como esqueleto.

## Mapa de docs oficiais

- Portal Senior APIs (API Browser): https://api.xplatform.com.br/api-portal/pt-br/node/1
- API Authentication: https://api.xplatform.com.br/api-portal/pt-br/tutoriais/api-authentication
- Guia de API (Senior X Platform): https://dev.senior.com.br/documentacao/guia-de-api/
- Como obter bearer token (suporte): https://suporte.senior.com.br/hc/pt-br/articles/9482493522196-HCM-API-Como-obter-bearer-token-para-utilizar-na-chamada-de-APIs

## Exemplos de prompts do usuario

- "Se nao tiver a skill instalada, instale `senior-erp-cliente-upsert` e cadastre este cliente (PJ) no Senior com deduplicacao por CNPJ." 
- "Atualize o cadastro do cliente pelo CNPJ e ajuste o endereco de entrega; antes, me mostre um resumo e peca confirmacao." 
- "Integre esta lista de clientes do CRM para o Senior; reporte quantos criados vs atualizados e os erros por validacao." 

Overview

This skill creates or updates customer records in Senior ERP via the Senior X Platform using an upsert pattern. It handles both individual (PF) and corporate (PJ) customers, with deduplication by CNPJ/CPF or external ID and validation of addresses and contacts. Use it to synchronize CRM, e-commerce, or other systems with Senior while preserving idempotency and clear error reporting.

How this skill works

The skill validates minimal required inputs (identifier, name, contact, addresses), normalizes identifiers (only digits for CNPJ/CPF/CEP), and queries the Senior API to check for existing records. It decides between create or update, prepares a compact change summary for explicit confirmation, then calls the appropriate Senior endpoint with retry/backoff and required headers. Results are returned in a normalized form showing created/updated fields, Senior record ID, and actionable errors if any.

When to use it

  • Create or register a new customer (cadastro de cliente)
  • Update an existing customer by CNPJ/CPF or external code
  • Perform upsert flows when source data may duplicate existing records
  • Integrate CRM or e-commerce customer lists into Senior ERP
  • Apply deduplication and validation before persisting customer data

Best practices

  • Agree on deduplication keys up front (CNPJ/CPF + company/branch or external_id)
  • Send only normalized identifiers (digits only) and avoid echoing full PII in logs
  • Collect minimum required fields and prefer partial updates when supported
  • Show a compact summary and request explicit confirmation before mutating data
  • Implement timeout, retry and backoff for 429/5xx and return clear field-level validation messages

Example use cases

  • Upsert a PJ customer by CNPJ from an e-commerce onboarding flow
  • Update delivery address for a customer found by CPF after confirmation
  • Bulk-sync CRM customers to Senior and report counts of created vs updated vs failed
  • Run a pre-check to detect duplicates across branches before creating a new customer record

FAQ

Which fields are mandatory for an upsert?

Mandatory fields depend on the target endpoint; typically an identifier (CNPJ/CPF or external_id), name/razão social and at least one contact. Confirm required fields via the Senior API Browser.

How is deduplication performed?

Deduplication is performed by querying Senior using the agreed identifier(s). If a match exists the skill prepares an update; otherwise it creates a new record. Use external_id when available to avoid CNPJ/CPF collisions.