DocumentaçãoDocumentationDocumentaciónOne Conecta
ÍndiceIndexÍndice
Baixar .mdDownload .mdBajar .md
Você está vendo esta documentação online. No topo você também pode baixar o PDF (mesmo conteúdo desta página, no idioma e modo atuais) e o Markdown (Funcional ou Técnica).You are viewing this documentation online. At the top you can also download the PDF (same content as this page, in the current language and mode) and the Markdown (Functional or Technical).Está viendo esta documentación en línea. Arriba también puede bajar el PDF (mismo contenido de esta página, en el idioma y modo actuales) y el Markdown (Funcional o Técnica).
Transação gRPC · DispatchergRPC transaction · DispatcherTransacción gRPC · Dispatcher

Ação de solicitação Conecta VocêConecta Você request actionAcción de solicitud Conecta Você

A transação de escrita que aprova ou rejeita uma solicitação pendente do programa Conecta Você (cadastro/edição de balconista). Quando o representante de vendas decide sobre uma solicitação, o app muda o status dela no backend por esta transação. O payload é enxuto — só o id da solicitação, o novo status e, na rejeição, o motivo. The write transaction that approves or rejects a pending Conecta Você request (clerk registration/edit). When the sales rep decides on a request, the app changes its status in the backend through this transaction. The payload is lean — just the request id, the new status and, on rejection, the reason. La transacción de escritura que aprueba o rechaza una solicitud pendiente del programa Conecta Você (alta/edición de dependiente). Cuando el representante de ventas decide sobre una solicitud, la app cambia su estado en el backend por esta transacción. El payload es escueto — solo el id de la solicitud, el nuevo estado y, en el rechazo, el motivo.

PúblicoAudiencePúblico
QA · Suporte · Produto · DevQA · Support · Product · DevQA · Soporte · Producto · Dev
CamadaLayerCapa
Escrita · DispatcherWrite · DispatcherEscritura · Dispatcher
RelacionadoRelatedRelacionado
AtualizadoUpdatedActualizado
17/08/20262026-08-17
Disponível emAvailable inDisponible en BR
01

O que é e quando aconteceWhat it is and when it happensQué es y cuándo ocurre

No programa Conecta Você, balconistas de um varejo entram para um programa de fidelidade. Cadastros e edições de balconista ficam pendentes de aprovação, e cabe ao representante de vendas aprovar ou rejeitar cada solicitação. Ao decidir, o app envia essa decisão ao backend por esta transação — é o momento em que a solicitação sai da fila de pendências e passa a ter um status definitivo. In the Conecta Você program, a retail's clerks join a loyalty program. Clerk registrations and edits stay pending approval, and it's up to the sales rep to approve or reject each request. When they decide, the app sends that decision to the backend through this transaction — the moment the request leaves the pending queue and gets a final status. En el programa Conecta Você, los dependientes de un punto de venta entran a un programa de fidelidad. Las altas y ediciones de dependiente quedan pendientes de aprobación, y le toca al representante de ventas aprobar o rechazar cada solicitud. Al decidir, la app envía esa decisión al backend por esta transacción — el momento en que la solicitud sale de la cola de pendientes y obtiene un estado definitivo.

AprovarApproveAprobar

A solicitação é aceita e o status vira approved. Não precisa de motivo.The request is accepted and the status becomes approved. No reason needed.La solicitud se acepta y el estado pasa a approved. No requiere motivo.

RejeitarRejectRechazar

A solicitação é recusada e o status vira rejected. Exige um motivo, escolhido numa lista pré-definida.The request is refused and the status becomes rejected. Requires a reason, chosen from a predefined list.La solicitud se rechaza y el estado pasa a rejected. Exige un motivo, elegido de una lista predefinida.

Duas transações num gestoTwo transactions in one gestureDos transacciones en un gesto Uma única decisão do rep dispara duas transações em sequência: primeiro esta (muda o status), e — só se ela der certo — um relatório complementar com o perfil completo do balconista. Para o rep, o gesto é um só: aprovar ou rejeitar. A single rep decision fires two transactions in sequence: first this one (changes the status), and — only if it succeeds — a complementary report carrying the clerk's full profile. For the rep, it's one gesture: approve or reject. Una sola decisión del rep dispara dos transacciones en secuencia: primero esta (cambia el estado), y — solo si tiene éxito — un reporte complementario con el perfil completo del dependiente. Para el rep, es un solo gesto: aprobar o rechazar.

02

Fluxo de telas que disparaScreen flow that fires itFlujo de pantallas que lo dispara

A transação é o último passo da jornada de aprovação. As telas pertencem à feature Conecta Você (aprovações); aqui só situamos onde o envio acontece:The transaction is the last step of the approval journey. The screens belong to the Conecta Você (approvals) feature; here we only place where the send happens:La transacción es el último paso del recorrido de aprobación. Las pantallas pertenecen a la feature Conecta Você (aprobaciones); aquí solo situamos dónde ocurre el envío:

  1. Aprovações Conecta VocêConecta Você approvalsAprobaciones Conecta VocêO rep vê a lista de varejos com solicitações pendentes.The rep sees the list of retails with pending requests.El rep ve la lista de puntos de venta con solicitudes pendientes.
  2. Detalhe do varejoRetail detailDetalle del punto de ventaAbre um varejo e lista as solicitações pendentes (cadastro / edição de balconista).Opens a retail and lists its pending requests (clerk registration / edit).Abre un punto de venta y lista sus solicitudes pendientes (alta / edición de dependiente).
  3. Detalhe da solicitaçãoRequest detailDetalle de la solicitudAbre uma solicitação e mostra os dados do balconista, com os botões Aprovar e Rejeitar.Opens a request and shows the clerk's data, with the Approve and Reject buttons.Abre una solicitud y muestra los datos del dependiente, con los botones Aprobar y Rechazar.
  4. Confirmar decisãoConfirm decisionConfirmar decisiónAo aprovar, um modal pede confirmação. Ao rejeitar, um modal exige a escolha do motivo numa lista.On approve, a modal asks for confirmation. On reject, a modal requires choosing the reason from a list.Al aprobar, un modal pide confirmación. Al rechazar, un modal exige elegir el motivo de una lista.
  5. Enviar → esta transaçãoSend → this transactionEnviar → esta transacciónAo confirmar, o app dispara a Ação de solicitação. É esse toque que aciona a transação (e, na sequência, o relatório).On confirm, the app fires the Request action. This tap is what triggers the transaction (and, next, the report).Al confirmar, la app dispara la Acción de solicitud. Ese toque es lo que activa la transacción (y, a continuación, el reporte).

Rejeição precisa de motivoReject needs a reasonRechazo necesita motivo O botão de confirmar da rejeição fica desabilitado até o rep escolher um motivo. A lista de motivos vem junto com os dados de aprovações (não é digitada à mão). The reject confirm button stays disabled until the rep picks a reason. The reason list arrives with the approvals data (it's not typed by hand). El botón de confirmar del rechazo queda deshabilitado hasta que el rep elija un motivo. La lista de motivos llega junto con los datos de aprobaciones (no se escribe a mano).

03

Depois do envioAfter sendingDespués del envío

Confirmação ao repConfirmation to the repConfirmación al rep
Quando o backend aceita, o app mostra "Solicitação enviada com sucesso" e a solicitação some da lista de pendências — a decisão já valeu.When the backend accepts it, the app shows "Request sent successfully" and the request disappears from the pending list — the decision is in effect.Cuando el backend lo acepta, la app muestra "Solicitud enviada con éxito" y la solicitud desaparece de la lista de pendientes — la decisión ya tuvo efecto.
Se der erroIf it failsSi falla
O app exibe uma mensagem de erro e a solicitação permanece pendente — nada é alterado. Diferente do pedido, esta transação não entra em fila offline: sem conexão, o envio simplesmente falha e o rep tenta de novo.The app shows an error message and the request stays pending — nothing changes. Unlike an order, this transaction is not queued offline: with no connection the send simply fails and the rep retries.La app muestra un mensaje de error y la solicitud permanece pendiente — nada cambia. A diferencia del pedido, esta transacción no entra en cola offline: sin conexión el envío simplemente falla y el rep reintenta.
Relatório complementarComplementary reportReporte complementario
Logo após o sucesso, o app envia um relatório com o perfil completo do balconista (nome, CPF, e-mail, papel). Ele só é enviado se esta transação der certo.Right after success, the app sends a report with the clerk's full profile (name, tax id, email, role). It's only sent if this transaction succeeds.Justo tras el éxito, la app envía un reporte con el perfil completo del dependiente (nombre, CPF, correo, rol). Solo se envía si esta transacción tiene éxito.
Acompanhar o envioTracking the sendSeguir el envío
O status técnico do despacho fica registrado no histórico de despachos (central de dados) — útil para suporte investigar um envio.The dispatch's technical status is recorded in the dispatch history (data center) — useful for support to investigate a send.El estado técnico del despacho queda registrado en el historial de despachos (centro de datos) — útil para que soporte investigue un envío.
04

Visão técnicaTechnical overviewVisión técnica

Ação de solicitação Conecta Você é a transação de saída que muda o status de uma solicitação pendente (aprovada/rejeitada). É disparada pelo detalhe de aprovação quando o representante de vendas aprova ou rejeita. O payload é minúsculo — um objeto data com quatro chaves. Não há variantes nem promoção. Conecta Você request action is the outbound transaction that changes a pending request's status (approved/rejected). It's fired by the approval detail when the sales rep approves or rejects. The payload is tiny — a data object with four keys. There are no variants and no promotion. Acción de solicitud Conecta Você es la transacción de salida que cambia el estado de una solicitud pendiente (aprobada/rechazada). Se dispara desde el detalle de aprobación cuando el representante de ventas aprueba o rechaza. El payload es minúsculo — un objeto data con cuatro claves. No hay variantes ni promoción.

Payload enxutoLean payloadPayload escueto

id, setStatusTo, reason e requestedBy — dentro de data. O builder é puro, sem joins nem cálculos.Just id, setStatusTo, reason and requestedBy — inside data. The builder is pure, with no joins or calculations.Solo id, setStatusTo, reason y requestedBy — dentro de data. El builder es puro, sin joins ni cálculos.

Duas pernasTwo legsDos piernas

O mesmo Submit…UseCase despacha esta transação e, na sequência (só em sucesso), o cvRequestActionReport.The same Submit…UseCase dispatches this transaction and, next (only on success), cvRequestActionReport.El mismo Submit…UseCase despacha esta transacción y, a continuación (solo en éxito), cvRequestActionReport.

RPC genéricoGeneric RPCRPC genérico

Passa pelo mesmo sendTransaction, com o JSON no campo message e serviceName = CVRequestAction como discriminador.Goes through the same sendTransaction, with the JSON in the message field and serviceName = CVRequestAction as the discriminator.Pasa por el mismo sendTransaction, con el JSON en el campo message y serviceName = CVRequestAction como discriminador.

FontesSourcesFuentes BuildConectaVoceRequestActionDispatcherPayloadUseCase + ConectaVoceRequestActionDispatcherPayloadInput + DispatcherType.cvRequestAction + DispatcherConectaRep.proto. O input carrega entities cruas de domínio (CLAUDE.md §36); o build() monta o payload. BuildConectaVoceRequestActionDispatcherPayloadUseCase + ConectaVoceRequestActionDispatcherPayloadInput + DispatcherType.cvRequestAction + DispatcherConectaRep.proto. The input carries raw domain entities (CLAUDE.md §36); build() assembles the payload. BuildConectaVoceRequestActionDispatcherPayloadUseCase + ConectaVoceRequestActionDispatcherPayloadInput + DispatcherType.cvRequestAction + DispatcherConectaRep.proto. El input lleva entities crudas de dominio (CLAUDE.md §36); build() arma el payload.

05

Transporte gRPCgRPC transportTransporte gRPC

DispatcherConectaRep.proto · proto3 · package mn.bat.conectarep.dispatcher. O serviço expõe um único RPC genérico — não existe mensagem por transação. TODA transação de escrita do app usa este mesmo sendTransaction; o que muda é o serviceName (discriminador) e o JSON dentro de message.The service exposes a single generic RPC — there's no per-transaction message. EVERY write transaction in the app uses this same sendTransaction; what changes is the serviceName (discriminator) and the JSON inside message.El servicio expone un único RPC genérico — no existe mensaje por transacción. TODA transacción de escritura de la app usa este mismo sendTransaction; lo que cambia es el serviceName (discriminador) y el JSON dentro de message.

sendTransactionunary
MétodoMethodMétodo

rpc sendTransaction(InboxTransactionRequest) returns (InboxTransactionReply)

path /mn.bat.conectarep.dispatcher.DispatcherConectaRepService/sendTransaction

Request · InboxTransactionRequest
endpoint
string · #1 · destination.value"" vazio aqui (DispatcherDestination.none); o roteamento fica por conta do serviceNamedestination.valueempty "" here (DispatcherDestination.none); routing relies on serviceNamedestination.valuevacío "" aquí (DispatcherDestination.none); el ruteo depende del serviceName
serviceName
string · #2 · discriminadorCVRequestAction (sem prefixo Promo_: hasPromotion é sempre false)discriminatorCVRequestAction (no Promo_ prefix: hasPromotion is always false)discriminadorCVRequestAction (sin prefijo Promo_: hasPromotion es siempre false)
dateReference
string · #3 · AAAA-MM-DD do envio (formatDate(submittedAt))YYYY-MM-DD of the submission (formatDate(submittedAt))AAAA-MM-DD del envío (formatDate(submittedAt))
transactionReference
string · #4 · o id da solicitação (pendingAction.id, correlação)the request id (pendingAction.id, correlation)el id de la solicitud (pendingAction.id, correlación)
username
string · #5
message
string · #6 · o payload JSON serializado (a tabela da seção 07)the JSON payload serialized (the table in section 07)el payload JSON serializado (la tabla de la sección 07)
manufacturer / model / deviceUuid / deviceVersion
string · #7–#10 · dados do dispositivo (preenchidos pelo gateway)device data (filled by the gateway)datos del dispositivo (completados por el gateway)
tid
int64 · #11 · id de transação para idempotência/replaytransaction id for idempotency/replayid de transacción para idempotencia/replay
Reply · InboxTransactionReply
status
int32 · #1 · status do ack (0 = sucesso)ack status (0 = success)status del ack (0 = éxito)
message
string · #2 · mensagem do backendbackend messagemensaje del backend
transactionId
int32 · #3 · id atribuído pelo backendbackend-assigned idid asignado por el backend

Envelope → Request O builder devolve um DispatcherEnvelope (type, serviceName, payload, transactionReference, dateReference) — sem account. O DispatcherGateway serializa payload em JSON para message, copia serviceName/dateReference/transactionReference, usa endpoint = destination.value (""), preenche os campos de dispositivo e o bearer token, e chama o RPC. The builder returns a DispatcherEnvelope (type, serviceName, payload, transactionReference, dateReference) — with no account. The DispatcherGateway serializes payload to JSON into message, copies serviceName/dateReference/transactionReference, uses endpoint = destination.value (""), fills in the device fields and the bearer token, and calls the RPC. El builder devuelve un DispatcherEnvelope (type, serviceName, payload, transactionReference, dateReference) — sin account. El DispatcherGateway serializa payload a JSON en message, copia serviceName/dateReference/transactionReference, usa endpoint = destination.value (""), completa los campos del dispositivo y el bearer token, y llama al RPC.

resendMayDuplicate == true para este tipo (não está no conjunto leve notificationRead/answerTask/priceCheck): um reenvio pode reprocessar a decisão; a idempotência via tid é o que mitiga. Ainda assim, esta transação não tem fila offline — só DispatcherType.visit é enfileirado quando offline.resendMayDuplicate == true for this type (not in the lightweight set notificationRead/answerTask/priceCheck): a resend may reprocess the decision; idempotency via tid mitigates it. Even so, this transaction has no offline queue — only DispatcherType.visit is queued when offline.resendMayDuplicate == true para este tipo (no está en el conjunto ligero notificationRead/answerTask/priceCheck): un reenvío puede reprocesar la decisión; la idempotencia vía tid lo mitiga. Aun así, esta transacción no tiene cola offline — solo DispatcherType.visit se encola cuando offline.

06

Como é disparadoHow it's firedCómo se dispara

A transação é orquestrada pelo detalhe de aprovação. O notifier reúne a entity crua da solicitação + username (do Resource) + submittedAt (DateTimeUtils.now()); o Submit…UseCase é o dono das duas pernas. A cascata:The transaction is orchestrated by the approval detail. The notifier gathers the raw request entity + username (from the Resource) + submittedAt (DateTimeUtils.now()); the Submit…UseCase owns the two legs. The cascade:La transacción se orquesta desde el detalle de aprobación. El notifier reúne la entity cruda de la solicitud + username (del Resource) + submittedAt (DateTimeUtils.now()); el Submit…UseCase es el dueño de las dos piernas. La cascada:

  • ConectaVoceApprovalDetailNotifierapprove() / reject() → _submit()
    • reúne entity crua + username + submittedAtgathers raw entity + username + submittedAtreúne entity cruda + username + submittedAtSubmitConectaVoceRequestActionUseCaseexecute()
      • perna 1 · build()leg 1 · build()pierna 1 · build()BuildConectaVoceRequestActionDispatcherPayloadUseCase
        • devolvereturnsdevuelveDispatcherEnvelopetype cvRequestAction
          • dispatch()DispatcherOrchestrator+ histórico de despacho+ dispatch history+ historial de despacho
            • sendDispatcherRepository → DispatcherGateway
              • sendTransactionBackendgRPC

Perna 2 (gated)Leg 2 (gated)Pierna 2 (gated) Se a perna 1 (dispatch de cvRequestAction) retorna Error, o execute() curto-circuita e a perna 2 nunca é enviada. Em sucesso, o mesmo execute() constrói e despacha o cvRequestActionReport (via BuildConectaVoceRequestActionReportDispatcherPayloadUseCase) — documentado em 11 · Report. As duas pernas não são atômicas: a perna 1 pode ter sucesso e a 2 falhar (status já mudou, relatório não saiu). If leg 1 (dispatch of cvRequestAction) returns Error, execute() short-circuits and leg 2 is never sent. On success, the same execute() builds and dispatches cvRequestActionReport (via BuildConectaVoceRequestActionReportDispatcherPayloadUseCase) — documented in 11 · Report. The two legs are not atomic: leg 1 may succeed and leg 2 fail (status already changed, report not sent). Si la pierna 1 (dispatch de cvRequestAction) retorna Error, execute() cortocircuita y la pierna 2 nunca se envía. En éxito, el mismo execute() construye y despacha cvRequestActionReport (vía BuildConectaVoceRequestActionReportDispatcherPayloadUseCase) — documentado en 11 · Report. Las dos piernas no son atómicas: la pierna 1 puede tener éxito y la 2 fallar (estado ya cambió, reporte no salió).

O input (entities cruas)The input (raw entities)El input (entities crudas)

ConectaVoceRequestActionDispatcherPayloadInput (Freezed). Carrega o dado como existe no domínio; nada de formato wire. O relógio chega como submittedAt (via DateTimeUtils.now()).ConectaVoceRequestActionDispatcherPayloadInput (Freezed). Carries data as it exists in the domain; no wire shaping. The clock arrives as submittedAt (via DateTimeUtils.now()).ConectaVoceRequestActionDispatcherPayloadInput (Freezed). Lleva el dato como existe en el dominio; nada de formato wire. El reloj llega como submittedAt (vía DateTimeUtils.now()).

CampoFieldCampoTipoTypeTipoPapelRoleRol
pendingActionConectaVocePendingActionEntitya solicitação (id, action, name, role, phone, email, taxId, birthdate); daqui o builder usa só idthe request (id, action, name, role, phone, email, taxId, birthdate); the builder uses only idla solicitud (id, action, name, role, phone, email, taxId, birthdate); el builder usa solo id
isApprovingbooltrue = aprovar, false = rejeitar → decide setStatusTo e reasontrue = approve, false = reject → decides setStatusTo and reasontrue = aprobar, false = rechazar → decide setStatusTo y reason
rejectReasonString?motivo da rejeição (do dropdown); ignorado quando aprovandorejection reason (from the dropdown); ignored when approvingmotivo del rechazo (del dropdown); ignorado al aprobar
submittedAtDateTimerelógio do envio → dateReferencesubmission clock → dateReferencereloj del envío → dateReference
07

Payload (message)

O JSON serializado no campo message do request. A tabela tem 4 colunasCampo JSON · Tipo · Origem do Dado · Regra — e lista toda chave que o build() emite (uma raiz data + 4 chaves internas). Campo, Tipo e Origem são código cru; só a Regra é prosa. Um exemplo completo está em transaction_example.json, ao lado deste doc.The JSON serialized into the request's message field. The table has 4 columnsJSON field · Type · Data source · Rule — and lists every key that build() emits (one data root + 4 inner keys). Field, Type and Source are raw code; only Rule is prose. A full example sits in transaction_example.json, next to this doc.El JSON serializado en el campo message del request. La tabla tiene 4 columnasCampo JSON · Tipo · Origen del Dato · Regla — y lista toda clave que build() emite (una raíz data + 4 claves internas). Campo, Tipo y Origen son código crudo; solo la Regla es prosa. Un ejemplo completo está en transaction_example.json, junto a este doc.

Campo JSONJSON fieldCampo JSON TipoTypeTipo Origem do DadoData sourceOrigen del Dato RegraRuleRegla
dataobjectobjeto envelope — única chave raiz do payload; contém as 4 chaves abaixo.envelope object — the payload's only root key; holds the 4 keys below.objeto envelope — única clave raíz del payload; contiene las 4 claves de abajo.
data.idint?pendingAction.idint.tryParse(pendingAction.id) — o id da solicitação (string numérica) convertido para inteiro; null se não for numérico.int.tryParse(pendingAction.id) — the request id (numeric string) parsed to int; null if not numeric.int.tryParse(pendingAction.id) — el id de la solicitud (string numérica) convertido a entero; null si no es numérico.
data.setStatusTostringisApprovingConectaVoceRequestStatus.wireValue: "approved" se isApproving, senão "rejected".ConectaVoceRequestStatus.wireValue: "approved" if isApproving, else "rejected".ConectaVoceRequestStatus.wireValue: "approved" si isApproving, si no "rejected".
data.reasonstring?rejectReasonnull quando aprovando; senão o motivo escolhido no dropdown de rejeição.null when approving; else the reason picked in the reject dropdown.null al aprobar; si no el motivo elegido en el dropdown de rechazo.
data.requestedBystringFixo: "CONECTA_REP"constante do builder (_requestedBy) — identifica a origem da decisão como o app do rep.builder constant (_requestedBy) — identifies the decision source as the rep app.constante del builder (_requestedBy) — identifica el origen de la decisión como la app del rep.

Chaves totais emitidas pelo build(): 4 (dentro de data) + o wrapper data. Chaves com valor null (reason ao aprovar, id se não-numérico) permanecem no JSON como null — o builder não as remove.Total keys emitted by build(): 4 (inside data) + the data wrapper. Keys with a null value (reason when approving, id if non-numeric) stay in the JSON as null — the builder does not strip them.Claves totales emitidas por build(): 4 (dentro de data) + el wrapper data. Las claves con valor null (reason al aprobar, id si no-numérico) permanecen en el JSON como null — el builder no las elimina.

08

Regras de negócioBusiness rulesReglas de negocio

Status e motivoStatus & reasonEstado y motivo setStatusTo · reason
  • O status é binário: ConectaVoceRequestStatus.approved ("approved") ou rejected ("rejected") — não há outro valor.The status is binary: ConectaVoceRequestStatus.approved ("approved") or rejected ("rejected") — no other value.El estado es binario: ConectaVoceRequestStatus.approved ("approved") o rejected ("rejected") — no hay otro valor.
  • reason só é enviado (não-null) na rejeição. A UI obriga escolher um motivo antes de habilitar o envio; o builder confia nisso e apenas repassa rejectReason.reason is only sent (non-null) on rejection. The UI forces picking a reason before enabling the send; the builder trusts that and just forwards rejectReason.reason solo se envía (no-null) en el rechazo. La UI obliga a elegir un motivo antes de habilitar el envío; el builder confía en eso y solo reenvía rejectReason.
Sem construção wireNo wire shapingSin construcción wire builder puro
  • O builder é puro e sem I/O: nenhum join, cálculo monetário, formatação de data no payload nem lookup. A única transformação é int.tryParse no id e o mapeamento bool → enum → wireValue.The builder is pure and I/O-free: no joins, monetary math, date formatting in the payload, or lookups. The only transformation is int.tryParse on id and the bool → enum → wireValue mapping.El builder es puro y sin I/O: ningún join, cálculo monetario, formateo de fecha en el payload ni lookup. La única transformación es int.tryParse en id y el mapeo bool → enum → wireValue.
  • hasPromotion é sempre false — nunca há prefixo Promo_. serviceName = "CVRequestAction" fixo.hasPromotion is always false — there's never a Promo_ prefix. serviceName = fixed "CVRequestAction".hasPromotion es siempre false — nunca hay prefijo Promo_. serviceName = "CVRequestAction" fijo.
  • dateReference do envelope = formatDate(submittedAt) no padrão yyyy-MM-dd (default do DateTimeUtils). O submittedAt não entra no payload — só no envelope.dateReference on the envelope = formatDate(submittedAt) in yyyy-MM-dd (the DateTimeUtils default). submittedAt does not enter the payload — only the envelope.dateReference del envelope = formatDate(submittedAt) en yyyy-MM-dd (default de DateTimeUtils). submittedAt no entra en el payload — solo en el envelope.
Efeito no cache localLocal cache effectEfecto en el cache local notifier · removePendingActionFromCache
  • Em sucesso, o notifier remove a solicitação do cache (removePendingActionFromCache) e recarrega — a pendência some da lista sem novo fetch remoto.On success, the notifier removes the request from cache (removePendingActionFromCache) and reloads — the pending item leaves the list with no new remote fetch.En éxito, el notifier elimina la solicitud del cache (removePendingActionFromCache) y recarga — el pendiente sale de la lista sin nuevo fetch remoto.
  • Em erro, nada muda no cache — a solicitação continua pendente e o rep pode tentar de novo.On error, nothing changes in cache — the request stays pending and the rep can retry.En error, nada cambia en el cache — la solicitud sigue pendiente y el rep puede reintentar.
09

Pendências / roadmapPending / roadmapPendientes / roadmap

Fragilidades e pontos abertos, documentados fiéis ao estado atual do código (nunca descritos como se já resolvidos):Fragilities and open points, documented faithfully to the current code state (never described as already solved):Fragilidades y puntos abiertos, documentados fieles al estado actual del código (nunca descritos como ya resueltos):

Aberto / atençãoOpen / watch outAbierto / atención

  • data.id depende de int.tryParse: se o backend um dia entregar um id não-numérico (ex.: SFID), o campo vira null silenciosamente. Hoje os ids do mock/proto são strings numéricas ("2864"), então funciona — mas é uma dependência implícita no formato do id.data.id relies on int.tryParse: if the backend ever delivers a non-numeric id (e.g. an SFID), the field silently becomes null. Today the mock/proto ids are numeric strings ("2864"), so it works — but it's an implicit dependency on the id format.data.id depende de int.tryParse: si el backend algún día entrega un id no-numérico (p. ej. un SFID), el campo pasa a null silenciosamente. Hoy los ids del mock/proto son strings numéricas ("2864"), así que funciona — pero es una dependencia implícita en el formato del id.
  • Duas pernas não-atômicas: a ação e o relatório são dois dispatch separados. Se a ação tem sucesso mas o relatório falha, o status já mudou no backend sem o relatório de auditoria correspondente. Não há retry/compensação para essa janela.Two non-atomic legs: the action and the report are two separate dispatch calls. If the action succeeds but the report fails, the status has already changed on the backend with no matching audit report. There's no retry/compensation for that window.Dos piernas no-atómicas: la acción y el reporte son dos dispatch separados. Si la acción tiene éxito pero el reporte falla, el estado ya cambió en el backend sin el reporte de auditoría correspondiente. No hay retry/compensación para esa ventana.
  • Sem fila offline: só DispatcherType.visit é enfileirado quando offline. Sem conexão, esta transação falha e depende de nova tentativa manual do rep.No offline queue: only DispatcherType.visit is queued when offline. With no connection, this transaction fails and depends on a manual retry by the rep.Sin cola offline: solo DispatcherType.visit se encola cuando offline. Sin conexión, esta transacción falla y depende de un reintento manual del rep.

Transação irmãSister transactionTransacción hermana A mesma decisão dispara o cvRequestActionReport (CVRequestActionReport) — um payload plano e mais rico (perfil completo do balconista + account por SAP), documentado em 11 · Relatório de ação Conecta Você. Esta transação é a mudança de status; a irmã é o registro de auditoria. The same decision fires cvRequestActionReport (CVRequestActionReport) — a flat, richer payload (full clerk profile + SAP account), documented in 11 · Conecta Você request action report. This transaction is the status change; the sister is the audit record. La misma decisión dispara cvRequestActionReport (CVRequestActionReport) — un payload plano y más rico (perfil completo del dependiente + account por SAP), documentado en 11 · Informe de acción Conecta Você. Esta transacción es el cambio de estado; la hermana es el registro de auditoría.

MercadosMarketsMercados

A disponibilidade vem do DispatcherType.cvRequestAction.enabledMarkets = [BR]. Conecta Você é um programa exclusivo do Brasil — não há dispatcher desta transação em nenhum outro mercado.Availability comes from DispatcherType.cvRequestAction.enabledMarkets = [BR]. Conecta Você is a Brazil-only program — there's no dispatcher of this transaction in any other market.La disponibilidad viene de DispatcherType.cvRequestAction.enabledMarkets = [BR]. Conecta Você es un programa exclusivo de Brasil — no hay dispatcher de esta transacción en ningún otro mercado.

BRx CL ZA AR PY PE
disponívelavailabledisponible presente, desligadopresent, offpresente, apagado ausenteabsentausente
BR

Só no BrasilBrazil onlySolo Brasil Conecta Você (fidelidade de balconistas) é um programa exclusivo do Brasil. A aprovação/rejeição de solicitações, esta transação e o relatório irmão (cvRequestActionReport) só existem em BR. O destination é none (endpoint vazio); o backend roteia pelo serviceName. Conecta Você (clerk loyalty) is a Brazil-only program. Request approval/rejection, this transaction and the sister report (cvRequestActionReport) exist only in BR. The destination is none (empty endpoint); the backend routes by serviceName. Conecta Você (fidelidad de dependientes) es un programa exclusivo de Brasil. La aprobación/rechazo de solicitudes, esta transacción y el reporte hermano (cvRequestActionReport) solo existen en BR. El destination es none (endpoint vacío); el backend rutea por el serviceName.

CL · ZA · AR · PY · PE Nenhum outro mercado lista cvRequestAction em enabledMarkets — a transação simplesmente não é disparada fora do Brasil. No other market lists cvRequestAction in enabledMarkets — the transaction is simply not fired outside Brazil. Ningún otro mercado lista cvRequestAction en enabledMarkets — la transacción simplemente no se dispara fuera de Brasil.