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

Resposta de smart investmentSmart investment answerRespuesta de smart investment

A transação de escrita que registra, no encerramento da visita, quais oportunidades de smart investment (oportunidades de share) o representante de vendas conseguiu concluir naquele varejo. É um payload enxuto: identifica a visita, o varejo e o representante, e leva uma lista de KPIs com um sim/não de conclusão. Toda a montagem do contrato wire vive no builder. The write transaction that records, at visit closing, which smart investment opportunities (share opportunities) the sales rep managed to complete at that retail. It's a lean payload: it identifies the visit, the retail and the rep, and carries a list of KPIs with a completed yes/no. All wire-contract assembly lives in the builder. La transacción de escritura que registra, en el cierre de la visita, qué oportunidades de smart investment (oportunidades de share) el representante de ventas logró concluir en ese punto de venta. Es un payload escueto: identifica la visita, el punto de venta y el representante, y lleva una lista de KPIs con un sí/no de conclusión. Todo el armado del contrato wire vive en el builder.

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

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

No encerramento de uma visita, o app pode apresentar ao representante de vendas uma lista de oportunidades de smart investment — as chamadas oportunidades de share daquele varejo (ex.: presença de produtos, execução de ponto de venda). O rep marca quais conseguiu concluir durante a visita. Quando ele finaliza a visita, essas respostas são enviadas ao backend por esta transação. At visit closing, the app may present the sales rep with a list of smart investment opportunities — the so-called share opportunities for that retail (e.g. product presence, point-of-sale execution). The rep marks which ones they managed to complete during the visit. When they finish the visit, those answers are sent to the backend through this transaction. En el cierre de una visita, la app puede presentar al representante de ventas una lista de oportunidades de smart investment — las llamadas oportunidades de share de ese punto de venta (p. ej. presencia de productos, ejecución del punto de venta). El rep marca cuáles logró concluir durante la visita. Cuando finaliza la visita, esas respuestas se envían al backend por esta transacción.

Um sim/não por oportunidadeOne yes/no per opportunityUn sí/no por oportunidad A transação não mede quantidade nem valor: para cada oportunidade listada na visita, ela apenas registra concluída ou não. As oportunidades disponíveis vêm da própria visita (o painel de smart investment); o rep não cria oportunidades, só responde. The transaction doesn't measure quantity or value: for each opportunity listed on the visit, it only records completed or not. The available opportunities come from the visit itself (its smart investment dashboard); the rep doesn't create opportunities, only answers them. La transacción no mide cantidad ni valor: para cada oportunidad listada en la visita, solo registra concluida o no. Las oportunidades disponibles vienen de la propia visita (su panel de smart investment); el rep no crea oportunidades, solo las responde.

02

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

A transação é disparada no encerramento da visita. As telas do caminho pertencem às features de Visitas e Detalhe da visita; aqui só situamos onde a resposta é registrada e enviada:The transaction is fired at visit closing. The screens along the way belong to the Visits and Visit detail features; here we only place where the answer is recorded and sent:La transacción se dispara en el cierre de la visita. Las pantallas del camino pertenecen a las features de Visitas y Detalle de la visita; aquí solo situamos dónde se registra y envía la respuesta:

  1. Detalhe da visitaVisit detailDetalle de la visitaDurante a visita, o rep vê as oportunidades de share do varejo.During the visit, the rep sees the retail's share opportunities.Durante la visita, el rep ve las oportunidades de share del punto de venta.
  2. Encerrar visitaClose visitCerrar visitaAo encerrar, a tela lista as pendências; entre elas, o item de smart investment.On closing, the screen lists the pending items; among them, the smart investment item.Al cerrar, la pantalla lista los pendientes; entre ellos, el ítem de smart investment.
  3. Responder oportunidadesAnswer opportunitiesResponder oportunidadesO rep abre a lista de oportunidades e marca quais concluiu.The rep opens the opportunity list and marks which ones were completed.El rep abre la lista de oportunidades y marca cuáles concluyó.
  4. Finalizar → esta transaçãoFinish → this transactionFinalizar → esta transacciónAo confirmar o encerramento, o app envia a resposta de smart investment e, em seguida, atualiza o status da visita.On confirming the closing, the app sends the smart investment answer and then updates the visit status.Al confirmar el cierre, la app envía la respuesta de smart investment y luego actualiza el estado de la visita.

Só se o rep responderOnly if the rep answersSolo si el rep responde Se o rep não abrir a lista de oportunidades no encerramento, nenhuma resposta é enviada — o encerramento da visita segue normalmente. A transação só ocorre quando há uma resposta registrada. If the rep doesn't open the opportunity list at closing, no answer is sent — the visit closing proceeds normally. The transaction only happens when an answer has been recorded. Si el rep no abre la lista de oportunidades en el cierre, no se envía respuesta alguna — el cierre de la visita continúa normalmente. La transacción solo ocurre cuando hay una respuesta registrada.

03

Depois do envioAfter sendingDespués del envío

Parte do encerramentoPart of closingParte del cierre
A resposta é enviada como parte do encerramento da visita, antes da atualização de status. Uma falha no envio da resposta não impede o encerramento da visita — o app segue com a atualização de status mesmo assim.The answer is sent as part of the visit closing, before the status update. A failure sending the answer doesn't block the visit closing — the app proceeds with the status update anyway.La respuesta se envía como parte del cierre de la visita, antes de la actualización de estado. Una falla al enviar la respuesta no impide el cierre de la visita — la app continúa con la actualización de estado igual.
Sem internetOfflineSin internet
O envio pode entrar em fila e ser reenviado quando a conexão volta. Um reenvio pode, em tese, duplicar; o sistema usa um identificador de transação para correlacionar.The send may be queued and retried when the connection returns. A retry could, in theory, duplicate; the system uses a transaction id to correlate.El envío puede quedar en cola y reintentarse cuando vuelve la conexión. Un reenvío podría, en teoría, duplicar; el sistema usa un identificador de transacción para correlacionar.
Acompanhar o envioTracking the sendSeguir el envío
O status técnico do despacho (enviado, em fila, com erro) pode ser acompanhado na central de dados / tracking de despachos do app.The dispatch's technical status (sent, queued, errored) can be followed in the app's data center / dispatch tracking.El estado técnico del despacho (enviado, en cola, con error) puede seguirse en el centro de datos / tracking de despachos de la app.
04

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

Resposta de smart investment é uma transação de saída disparada pelo fluxo de encerramento de visita (VisitEndNotifier). O builder é minimalista: um único objeto JSON com quatro identificadores planos e um array answer derivado dos KPIs de smart investment da própria visita. Não há variantes nem prefixo Promo_. Smart investment answer is an outbound transaction fired by the visit-closing flow (VisitEndNotifier). The builder is minimal: a single JSON object with four flat identifiers and an answer array derived from the visit's own smart investment KPIs. There are no variants and no Promo_ prefix. Respuesta de smart investment es una transacción de salida disparada por el flujo de cierre de visita (VisitEndNotifier). El builder es minimalista: un único objeto JSON con cuatro identificadores planos y un array answer derivado de los KPIs de smart investment de la propia visita. No hay variantes ni prefijo Promo_.

Payload enxutoLean payloadPayload escueto

Quatro chaves planas (visitSfid, visitDate, resourceSfid, accountSfid) + o array answer. Nenhum campo inerte de contrato.Four flat keys (visitSfid, visitDate, resourceSfid, accountSfid) + the answer array. No inert contract fields.Cuatro claves planas (visitSfid, visitDate, resourceSfid, accountSfid) + el array answer. Ningún campo inerte de contrato.

Uma resposta por KPIOne answer per KPIUna respuesta por KPI

O array answer tem uma entrada por KPI do painel de smart investment da visita, cada uma com kpi (nome) e isCompleted (booleano).The answer array has one entry per KPI of the visit's smart investment dashboard, each with kpi (name) and isCompleted (boolean).El array answer tiene una entrada por KPI del panel de smart investment de la visita, cada una con kpi (nombre) e isCompleted (booleano).

RPC genéricoGeneric RPCRPC genérico

Tudo passa pelo mesmo sendTransaction; o discriminador é serviceName = SmartInvestmentAnswer e o JSON vai no campo message.Everything goes through the same sendTransaction; the discriminator is serviceName = SmartInvestmentAnswer and the JSON goes in the message field.Todo pasa por el mismo sendTransaction; el discriminador es serviceName = SmartInvestmentAnswer y el JSON va en el campo message.

FontesSourcesFuentes BuildSmartInvestmentAnswerDispatcherPayloadUseCase + SmartInvestmentAnswerDispatcherPayloadInput + DispatcherType + DispatcherConectaRep.proto. O input carrega entities cruas de domínio (CLAUDE.md §36); o build() constrói todo o wire. BuildSmartInvestmentAnswerDispatcherPayloadUseCase + SmartInvestmentAnswerDispatcherPayloadInput + DispatcherType + DispatcherConectaRep.proto. The input carries raw domain entities (CLAUDE.md §36); build() constructs the entire wire. BuildSmartInvestmentAnswerDispatcherPayloadUseCase + SmartInvestmentAnswerDispatcherPayloadInput + DispatcherType + DispatcherConectaRep.proto. El input lleva entities crudas de dominio (CLAUDE.md §36); build() construye todo el wire.

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 · endpoint alvo (config de ambiente)target endpoint (environment config)endpoint destino (config de ambiente)
serviceName
string · #2 · discriminadorSmartInvestmentAnswer (sem prefixo Promo_, hasPromotion: false fixo)discriminatorSmartInvestmentAnswer (no Promo_ prefix, hasPromotion: false hardcoded)discriminadorSmartInvestmentAnswer (sin prefijo Promo_, hasPromotion: false fijo)
dateReference
string · #3 · visitDate (= submittedAt em yyyy-MM-dd)visitDate (= submittedAt as yyyy-MM-dd)visitDate (= submittedAt en yyyy-MM-dd)
transactionReference
string · #4 · o visit.sfid (correlação)the visit.sfid (correlation)el visit.sfid (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
string · #7 · dado do dispositivodevice datadato del dispositivo
model
string · #8 · dado do dispositivodevice datadato del dispositivo
deviceUuid
string · #9 · literal provisório hoje (ver Pendências)provisional literal today (see Pending)literal provisional hoy (ver Pendientes)
deviceVersion
string · #10
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 backend (correlação)backend-assigned id (correlation)id asignado por el backend (correlación)

Envelope → Request O builder devolve um DispatcherEnvelope (type, serviceName, payload, account, transactionReference, dateReference). O DispatcherGateway serializa payload em JSON para message, copia serviceName/dateReference/transactionReference, preenche os campos de dispositivo e o bearer token de auth, e chama o RPC. Aqui transactionReference e dateReference são, respectivamente, visit.sfid e visitDate. The builder returns a DispatcherEnvelope (type, serviceName, payload, account, transactionReference, dateReference). The DispatcherGateway serializes payload to JSON into message, copies serviceName/dateReference/transactionReference, fills in the device fields and the auth bearer token, and calls the RPC. Here transactionReference and dateReference are, respectively, visit.sfid and visitDate. El builder devuelve un DispatcherEnvelope (type, serviceName, payload, account, transactionReference, dateReference). El DispatcherGateway serializa payload a JSON en message, copia serviceName/dateReference/transactionReference, completa los campos del dispositivo y el bearer token de auth, y llama al RPC. Aquí transactionReference y dateReference son, respectivamente, visit.sfid y visitDate.

Para esta transação, resendMayDuplicate == true: ela não está no conjunto lightweight (notificationRead, answerTask, priceCheck), então um reenvío (ex.: recuperação de fila offline) pode duplicar a resposta no backend; a idempotência via tid é o que mitiga isso.For this transaction, resendMayDuplicate == true: it is not in the lightweight set (notificationRead, answerTask, priceCheck), so a resend (e.g. offline-queue recovery) may duplicate the answer on the backend; idempotency via tid is what mitigates it.Para esta transacción, resendMayDuplicate == true: no está en el conjunto lightweight (notificationRead, answerTask, priceCheck), por lo que un reenvío (p. ej. recuperación de cola offline) puede duplicar la respuesta en el backend; la idempotencia vía tid es lo que lo mitiga.

06

Como é disparadoHow it's firedCómo se dispara

A transação é orquestrada pelo VisitEndNotifier.finishVisit(). O notifier apenas reúne entities cruas e o relógio; o builder é o dono único da derivação do resourceSfid, da formatação da data e da montagem do array answer. A resposta é enviada antes da atualização de status da visita (visitContextProvider.endVisit()), e uma falha no envio não bloqueia o encerramento. A cascata:The transaction is orchestrated by VisitEndNotifier.finishVisit(). The notifier only gathers raw entities and the clock; the builder is the sole owner of deriving resourceSfid, formatting the date and assembling the answer array. The answer is sent before the visit status update (visitContextProvider.endVisit()), and a send failure doesn't block the closing. The cascade:La transacción se orquesta por VisitEndNotifier.finishVisit(). El notifier solo reúne entities crudas y el reloj; el builder es el dueño único de la derivación del resourceSfid, del formateo de la fecha y del armado del array answer. La respuesta se envía antes de la actualización de estado de la visita (visitContextProvider.endVisit()), y una falla en el envío no bloquea el cierre. La cascada:

  • VisitEndNotifierfinishVisit()
    • reúne entities cruas + relógiogathers raw entities + clockreúne entities crudas + relojSmartInvestmentAnswerDispatcherPayloadInput
      • build()BuildSmartInvestmentAnswerDispatcherPayloadUseCasemonta o wireassembles the wirearma el wire
        • devolvereturnsdevuelveDispatcherEnvelope
          • SubmitSmartInvestmentAnswerUseCaseDispatcherOrchestrator
            • serializa + authserialize + authserializa + authDispatcherGateway
              • sendTransactionBackendgRPC

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

SmartInvestmentAnswerDispatcherPayloadInput (Freezed). Carrega o dado como existe no domínio; nada de formato wire. O relógio chega como submittedAt (via DateTimeUtils.now()); o rep marca as conclusões em completedKpiIds.SmartInvestmentAnswerDispatcherPayloadInput (Freezed). Carries data as it exists in the domain; no wire shaping. The clock arrives as submittedAt (via DateTimeUtils.now()); the rep marks completions in completedKpiIds.SmartInvestmentAnswerDispatcherPayloadInput (Freezed). Lleva el dato como existe en el dominio; nada de formato wire. El reloj llega como submittedAt (vía DateTimeUtils.now()); el rep marca las conclusiones en completedKpiIds.

CampoFieldCampoTipoTypeTipoPapelRoleRol
resourceResourceEntityrepresentante de vendas (cru — o builder deriva resourceSfid primary/secondary)sales rep (raw — the builder derives resourceSfid primary/secondary)representante de ventas (crudo — el builder deriva resourceSfid primary/secondary)
visitVisitEntityfonte de sfid, accountData e dos KPIs (dashboards.smartInvestment.kpis)source of sfid, accountData and the KPIs (dashboards.smartInvestment.kpis)fuente de sfid, accountData y los KPIs (dashboards.smartInvestment.kpis)
submittedAtDateTimerelógio do envio (DateTimeUtils.now()) → visitDatesend clock (DateTimeUtils.now()) → visitDatereloj del envío (DateTimeUtils.now()) → visitDate
completedKpiIdsList<String> · []ids dos KPIs que o rep marcou como concluídos (alimenta isCompleted)ids of the KPIs the rep marked as completed (feeds isCompleted)ids de los KPIs que el rep marcó como concluidos (alimenta isCompleted)
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 (5 no raiz + 2 por item de answer). Campo, Tipo e Origem são código cru; só a Regra é prosa. Um exemplo completo (BR) 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 (5 at the root + 2 per answer item). Field, Type and Source are raw code; only Rule is prose. A full example (BR) 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 (5 en la raíz + 2 por ítem de answer). Campo, Tipo y Origen son código crudo; solo la Regla es prosa. Un ejemplo completo (BR) está en transaction_example.json, junto a este doc.

Raiz do payloadPayload rootRaíz del payload

Campo JSONTipoTypeTipoOrigem do DadoData sourceOrigen del DatoRegraRuleRegla
visitSfidstringvisit.sfid
visitDatestringDateTimeUtils.formatDate(input.submittedAt)formato yyyy-MM-dd (isoDate, default)yyyy-MM-dd format (isoDate, default)formato yyyy-MM-dd (isoDate, default)
resourceSfidstringCalculadoresource.isPrimaryResource ? primaryResourceSfid : secondaryResourceSfid (derivado no builder, §36)resource.isPrimaryResource ? primaryResourceSfid : secondaryResourceSfid (derived in the builder, §36)resource.isPrimaryResource ? primaryResourceSfid : secondaryResourceSfid (derivado en el builder, §36)
accountSfidstringvisit.accountData.sfid
answerarrayvisit.dashboards?.smartInvestment?.kpisuma entrada por KPI; [] se a visita não tem painel de smart investmentone entry per KPI; [] if the visit has no smart investment dashboarduna entrada por KPI; [] si la visita no tiene panel de smart investment
  • answer[] um objeto por KPIone object per KPIun objeto por KPI 2 camposfieldscampos
    Campo JSONTipoTypeTipoOrigem do DadoData sourceOrigen del DatoRegraRuleRegla
    kpistringkpi.kpiNamenome de exibição do KPI (rótulo do backend) — não o idthe KPI's display name (backend label) — not the idel nombre de visualización del KPI (etiqueta del backend) — no el id
    isCompletedboolinput.completedKpiIds.contains(kpi.id)true se o rep marcou o KPI (por id) como concluído; senão falsetrue if the rep marked the KPI (by id) as completed; else falsetrue si el rep marcó el KPI (por id) como concluido; si no false
08

Regras de negócioBusiness rulesReglas de negocio

serviceName
Sempre SmartInvestmentAnswertype.resolveServiceName(hasPromotion: false) é chamado com false fixo, então nunca há prefixo Promo_.Always SmartInvestmentAnswertype.resolveServiceName(hasPromotion: false) is called with a hardcoded false, so there's never a Promo_ prefix.Siempre SmartInvestmentAnswertype.resolveServiceName(hasPromotion: false) se llama con false fijo, así que nunca hay prefijo Promo_.
resourceSfid
Derivado no builder: primaryResourceSfid quando resource.isPrimaryResource, senão secondaryResourceSfid — identifica quem fez o registro (§25/§36).Derived in the builder: primaryResourceSfid when resource.isPrimaryResource, else secondaryResourceSfid — identifies who made the record (§25/§36).Derivado en el builder: primaryResourceSfid cuando resource.isPrimaryResource, si no secondaryResourceSfid — identifica quién hizo el registro (§25/§36).
answer
O array espelha todos os KPIs do painel de smart investment da visita — inclusive os não concluídos (isCompleted: false). Se a visita não tem painel, o array é [].The array mirrors all KPIs of the visit's smart investment dashboard — including the incomplete ones (isCompleted: false). If the visit has no dashboard, the array is [].El array refleja todos los KPIs del panel de smart investment de la visita — incluidos los no concluidos (isCompleted: false). Si la visita no tiene panel, el array es [].
Gate de disparoFire gateGate de disparo
No VisitEndNotifier, o envio só ocorre quando completedKpiIds != null (o rep interagiu com a lista). Se o rep nunca abre a lista, _sendSmartInvestmentAnswer retorna sem despachar.In VisitEndNotifier, the send only happens when completedKpiIds != null (the rep interacted with the list). If the rep never opens the list, _sendSmartInvestmentAnswer returns without dispatching.En VisitEndNotifier, el envío solo ocurre cuando completedKpiIds != null (el rep interactuó con la lista). Si el rep nunca abre la lista, _sendSmartInvestmentAnswer retorna sin despachar.
Falha não bloqueiaFailure doesn't blockFalla no bloquea
A resposta é enviada antes de endVisit(). Se falhar, o Failure é guardado no state (smartInvestmentFailure) mas o encerramento da visita segue mesmo assim.The answer is sent before endVisit(). On failure, the Failure is stored in state (smartInvestmentFailure) but the visit closing proceeds anyway.La respuesta se envía antes de endVisit(). Si falla, el Failure se guarda en el state (smartInvestmentFailure) pero el cierre de la visita continúa igual.
09

Pendências / roadmapPending / roadmapPendientes / roadmap

O que fica de fora ou merece atenção, documentado fiel ao estado atual do código (nunca descrito como se já existisse):What's left out or worth noting, documented faithfully to the current code state (never described as already existing):Lo que queda afuera o merece atención, documentado fiel al estado actual del código (nunca descrito como si ya existiera):

Notas / pendenteNotes / pendingNotas / pendiente

  • O payload é totalmente derivado do dado real: não há campos inertes de contrato nem placeholders fixos (diferente do Envio de pedido).The payload is entirely derived from real data: there are no inert contract fields or fixed placeholders (unlike Order placement).El payload está totalmente derivado del dato real: no hay campos inertes de contrato ni placeholders fijos (a diferencia del Envío de pedido).
  • O campo kpi envia o nome do KPI (kpiName), não o id; o id só é usado localmente para casar a conclusão. Correlação por nome depende da estabilidade do rótulo no backend.The kpi field sends the KPI's name (kpiName), not the id; the id is only used locally to match completion. Correlation by name depends on label stability in the backend.El campo kpi envía el nombre del KPI (kpiName), no el id; el id solo se usa localmente para casar la conclusión. La correlación por nombre depende de la estabilidad de la etiqueta en el backend.
  • resendMayDuplicate == true: esta transação não é lightweight, então um reenvío pode duplicar — mitigado pela idempotência via tid.resendMayDuplicate == true: this transaction isn't lightweight, so a resend may duplicate — mitigated by idempotency via tid.resendMayDuplicate == true: esta transacción no es lightweight, así que un reenvío puede duplicar — mitigado por la idempotencia vía tid.
  • Transporte: deviceUuid vai como literal provisório no gateway (pendência conhecida do Dispatcher, comum a todas as transações).Transport: deviceUuid ships as a provisional literal in the gateway (known Dispatcher pending item, common to all transactions).Transporte: deviceUuid va como literal provisional en el gateway (pendiente conocido del Dispatcher, común a todas las transacciones).

Mesmo momento de encerramentoSame closing momentMismo momento de cierre Esta transação dispara no mesmo encerramento de visita que o 04 · Envio de visita: a resposta de smart investment é enviada primeiro; em seguida vem a atualização de status da visita. São despachos separados no mesmo gesto de finalizar. This transaction fires at the same visit closing as 04 · Visit upload: the smart investment answer goes first; then comes the visit status update. They are separate dispatches in the same finish gesture. Esta transacción se dispara en el mismo cierre de visita que 04 · Envío de visita: la respuesta de smart investment va primero; luego viene la actualización de estado de la visita. Son despachos separados en el mismo gesto de finalizar.

MercadosMarketsMercados

A disponibilidade da transação vem do DispatcherType.enabledMarkets. smartInvestmentAnswer lista apenas BR: é uma transação exclusiva do Brasil. Os demais mercados não têm este dispatcher.Transaction availability comes from DispatcherType.enabledMarkets. smartInvestmentAnswer lists BR only: it's a Brazil-exclusive transaction. The other markets have no such dispatcher.La disponibilidad de la transacción viene de DispatcherType.enabledMarkets. smartInvestmentAnswer lista solo BR: es una transacción exclusiva de Brasil. Los demás mercados no tienen este dispatcher.

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

Só no BrasilBrazil onlySolo Brasil O smart investment (oportunidades de share no encerramento) só é habilitado no Brasil. As oportunidades vêm do painel de smart investment da visita, presente apenas nas visitas do mercado brasileiro. Smart investment (share opportunities at closing) is only enabled in Brazil. The opportunities come from the visit's smart investment dashboard, present only in Brazilian-market visits. El smart investment (oportunidades de share en el cierre) solo está habilitado en Brasil. Las oportunidades vienen del panel de smart investment de la visita, presente solo en las visitas del mercado brasileño.

CL · ZA · AR · PY · PE Existem como mercados do app, mas não têm o dispatcher de smart investmentsmartInvestmentAnswer.enabledMarkets lista só BR. A resposta não é disparada nesses mercados. They exist as app markets, but have no smart investment dispatchersmartInvestmentAnswer.enabledMarkets lists only BR. The answer is not fired in these markets. Existen como mercados de la app, pero no tienen el dispatcher de smart investmentsmartInvestmentAnswer.enabledMarkets lista solo BR. La respuesta no se dispara en estos mercados.