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 tarefa do gestorAnswer manager taskRespuesta de tarea del gerente

A transação de escrita que devolve ao backend a conclusão de uma tarefa do gestor — as tarefas que a gestão distribui ao representante de vendas (compartilhar material, verificar promoção, ativar zona, etc.). Um único builder monta um payload JSON enxuto de uma resposta; toda a construção do contrato wire vive no build(). Compartilha o serviço AnswerTaskAPI com a resposta de call task. The write transaction that returns to the backend the completion of a manager task — the tasks management hands to the sales rep (share material, verify a promotion, activate a zone, etc.). A single builder assembles a lean JSON payload for one answer; all wire-contract construction lives in build(). It shares the AnswerTaskAPI service with the call-task answer. La transacción de escritura que devuelve al backend la finalización de una tarea del gerente — las tareas que la gestión reparte al representante de ventas (compartir material, verificar promoción, activar zona, etc.). Un único builder arma un payload JSON escueto de una respuesta; toda la construcción del contrato wire vive en build(). Comparte el servicio AnswerTaskAPI con la respuesta de call task.

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 CL ZA
01

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

As tarefas do gestor são atividades que a gestão distribui ao representante de vendas — coisas como compartilhar um material, verificar uma promoção no ponto de venda, conferir um planograma ou ativar uma zona. Quando o rep conclui uma dessas tarefas, o app avisa o backend por esta transação: é o momento em que a tarefa deixa de estar pendente e passa a constar como concluída no sistema. Manager tasks are activities management hands to the sales rep — things like sharing a piece of material, verifying a promotion at the point of sale, checking a planogram or activating a zone. When the rep completes one of these tasks, the app tells the backend through this transaction: it's the moment the task stops being pending and is recorded as done in the system. Las tareas del gerente son actividades que la gestión reparte al representante de ventas — cosas como compartir un material, verificar una promoción en el punto de venta, revisar un planograma o activar una zona. Cuando el rep finaliza una de esas tareas, la app avisa al backend por esta transacción: es el momento en que la tarea deja de estar pendiente y queda registrada como completada en el sistema.

É só a conclusãoIt's just the completionEs solo la finalización O envio carrega apenas o fato de que a tarefa foi concluída (e qual é o seu tipo) — não há respostas por produto nem lista de faltas. É uma marcação simples de "feito", diferente da resposta de call task, que também informa produtos em falta. The send carries only the fact that the task was completed (and which type it is) — there are no per-product answers or out-of-stock list. It's a plain "done" mark, unlike the call-task answer, which also reports out-of-stock products. El envío lleva solo el hecho de que la tarea fue finalizada (y cuál es su tipo) — no hay respuestas por producto ni lista de faltantes. Es una marca simple de "hecho", distinta de la respuesta de call task, que también informa productos agotados.

02

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

A transação é o último passo de concluir uma tarefa do gestor. As telas do caminho pertencem à feature de Tarefas do gestor; aqui só situamos onde o envio acontece:The transaction is the last step of completing a manager task. The screens along the way belong to the Manager tasks feature; here we only place where the send happens:La transacción es el último paso de finalizar una tarea del gerente. Las pantallas del camino pertenecen a la feature de Tareas del gerente; aquí solo situamos dónde ocurre el envío:

  1. Lista de tarefas do gestorManager tasks listLista de tareas del gerenteO rep vê as tarefas atribuídas, com seu status (pendente, futura, expirada, concluída).The rep sees the assigned tasks, with their status (pending, future, expired, completed).El rep ve las tareas asignadas, con su estado (pendiente, futura, expirada, completada).
  2. Detalhe da tarefaTask detailDetalle de la tareaAbre a tarefa, lê a descrição e, opcionalmente, escreve uma observação de conclusão.Opens the task, reads the description and, optionally, writes a completion note.Abre la tarea, lee la descripción y, opcionalmente, escribe una observación de finalización.
  3. Concluir → esta transaçãoComplete → this transactionFinalizar → esta transacciónAo tocar em concluir, o app dispara a Resposta de tarefa do gestor. É este toque que aciona a transação.Tapping complete fires the Answer manager task. This tap is what triggers the transaction.Al tocar finalizar, la app dispara la Respuesta de tarea del gerente. Este toque es lo que activa la transacción.

Observação de conclusãoCompletion noteObservación de finalización A observação que o rep escreve é registrada à parte — ela não viaja nesta transação. Esta transação apenas comunica que a tarefa foi concluída. The note the rep writes is recorded separately — it does not travel in this transaction. This transaction only reports that the task is completed. La observación que el rep escribe se registra aparteno viaja en esta transacción. Esta transacción solo comunica que la tarea fue finalizada.

03

Depois do envioAfter sendingDespués del envío

Confirmação ao repConfirmation to the repConfirmación al rep
Quando o backend aceita, a tarefa passa a constar como concluída e some da lista de pendências do rep.When the backend accepts it, the task is marked completed and drops off the rep's pending list.Cuando el backend lo acepta, la tarea queda como finalizada y desaparece de la lista de pendientes del rep.
Sem internetOfflineSin internet
O envio pode entrar em fila e ser reenviado quando a conexão volta. Reenviar esta transação é seguro: ela é idempotente e não duplica a conclusão.The send may be queued and retried when the connection returns. Resending this transaction is safe: it's idempotent and doesn't duplicate the completion.El envío puede quedar en cola y reintentarse cuando vuelve la conexión. Reenviar esta transacción es seguro: es idempotente y no duplica la finalización.
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 — útil para suporte investigar um envio.The dispatch's technical status (sent, queued, errored) can be followed in the app's data center / dispatch tracking — useful for support to investigate a send.El estado técnico del despacho (enviado, en cola, con error) puede seguirse en el centro de datos / tracking de despachos de la app — útil para que soporte investigue un envío.
04

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

Resposta de tarefa do gestor é a transação de saída que persiste no backend a conclusão de uma ManagerTaskEntity. É disparada pelo ManagerTaskDetailNotifier quando o representante de vendas conclui a tarefa. O payload é enxuto: uma única resposta com o tipo da tarefa e a marcação answer: true. Answer manager task is the outbound transaction that persists a ManagerTaskEntity's completion in the backend. It's fired by ManagerTaskDetailNotifier when the sales rep completes the task. The payload is lean: a single answer carrying the task type and the answer: true flag. Respuesta de tarea del gerente es la transacción de salida que persiste en el backend la finalización de una ManagerTaskEntity. La dispara ManagerTaskDetailNotifier cuando el representante de ventas finaliza la tarea. El payload es escueto: una única respuesta con el tipo de tarea y el flag answer: true.

Uma resposta, sem OOSOne answer, no OOSUna respuesta, sin OOS

O array answerTask tem exatamente 1 objeto; oosAnswerList é sempre vazio (a lista de faltas é exclusiva da call task).The answerTask array has exactly 1 object; oosAnswerList is always empty (the out-of-stock list is exclusive to the call task).El array answerTask tiene exactamente 1 objeto; oosAnswerList está siempre vacío (la lista de faltantes es exclusiva de la call task).

Serviço compartilhadoShared serviceServicio compartido

Usa o mesmo DispatcherType.answerTask / AnswerTaskAPI da resposta de call task — dois builders distintos, um contrato wire.Uses the same DispatcherType.answerTask / AnswerTaskAPI as the call-task answer — two distinct builders, one wire contract.Usa el mismo DispatcherType.answerTask / AnswerTaskAPI que la respuesta de call task — dos builders distintos, un contrato wire.

RPC genéricoGeneric RPCRPC genérico

Não há RPC por tarefa: tudo passa pelo mesmo sendTransaction, com o JSON serializado em message e serviceName como discriminador. Destino batchApi.There's no per-task RPC: everything goes through the same sendTransaction, with the JSON serialized into message and serviceName as the discriminator. Destination batchApi.No hay RPC por tarea: todo pasa por el mismo sendTransaction, con el JSON serializado en message y serviceName como discriminador. Destino batchApi.

FontesSourcesFuentes BuildAnswerManagerTaskDispatcherPayloadUseCase + AnswerManagerTaskDispatcherPayloadInput + DispatcherType + DispatcherConectaRep.proto. O input carrega a ManagerTaskEntity crua (CLAUDE.md §36); o build() constrói todo o wire. BuildAnswerManagerTaskDispatcherPayloadUseCase + AnswerManagerTaskDispatcherPayloadInput + DispatcherType + DispatcherConectaRep.proto. The input carries the raw ManagerTaskEntity (CLAUDE.md §36); build() constructs the entire wire. BuildAnswerManagerTaskDispatcherPayloadUseCase + AnswerManagerTaskDispatcherPayloadInput + DispatcherType + DispatcherConectaRep.proto. El input lleva la ManagerTaskEntity cruda (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 · sfbatchapi — vem de type.destination.value (batchApi)sfbatchapi — from type.destination.value (batchApi)sfbatchapi — de type.destination.value (batchApi)
serviceName
string · #2 · discriminadorAnswerTaskAPI (sem prefixo Promo_: hasPromotion: false)discriminatorAnswerTaskAPI (no Promo_ prefix: hasPromotion: false)discriminadorAnswerTaskAPI (sin prefijo Promo_: hasPromotion: false)
dateReference
string · #3 · AAAA-MM-DD — o originalDate (data do envio)YYYY-MM-DD — the originalDate (submission date)AAAA-MM-DD — el originalDate (fecha del envío)
transactionReference
string · #4 · o task.id (correlação)the task.id (correlation)el task.id (correlación)
username
string · #5
message
string · #6 · o payload JSON serializado (a tabela da seção 08)the JSON payload serialized (the table in section 08)el payload JSON serializado (la tabla de la sección 08)
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: answerTask, serviceName: AnswerTaskAPI, payload, transactionReference: task.id, dateReference: originalDate). O DispatcherGateway serializa payload em JSON para message (jsonEncode), copia serviceName/dateReference/transactionReference, resolve endpoint por type.destination.value, preenche os campos de dispositivo e o bearer token de auth, e chama o RPC. The builder returns a DispatcherEnvelope (type: answerTask, serviceName: AnswerTaskAPI, payload, transactionReference: task.id, dateReference: originalDate). The DispatcherGateway serializes payload to JSON into message (jsonEncode), copies serviceName/dateReference/transactionReference, resolves endpoint via type.destination.value, fills in the device fields and the auth bearer token, and calls the RPC. El builder devuelve un DispatcherEnvelope (type: answerTask, serviceName: AnswerTaskAPI, payload, transactionReference: task.id, dateReference: originalDate). El DispatcherGateway serializa payload a JSON en message (jsonEncode), copia serviceName/dateReference/transactionReference, resuelve endpoint por type.destination.value, completa los campos del dispositivo y el bearer token de auth, y llama al RPC.

answerTask está no conjunto lightweightresendMayDuplicate == false: um reenvio (ex.: recuperação de fila offline) não duplica a conclusão no backend. Reprocessar é seguro.answerTask is in the lightweight set → resendMayDuplicate == false: a resend (e.g. offline-queue recovery) does not duplicate the completion on the backend. Reprocessing is safe.answerTask está en el conjunto lightweightresendMayDuplicate == false: un reenvío (p. ej. recuperación de cola offline) no duplica la finalización en el backend. Reprocesar es seguro.

06

Serviço compartilhado (25 ↔ 26)Shared service (25 ↔ 26)Servicio compartido (25 ↔ 26)

Esta transação não tem variantes — um único DispatcherType.answerTask em BR/CL/ZA. Mas o serviceName AnswerTaskAPI (e o wrapper de payload answerTask) é compartilhado com a resposta de call task: dois builders distintos escrevem no mesmo endpoint do backend. O contrato wire usa nomes com prefixo callTask* mesmo na tarefa do gestor — herança do contrato compartilhado.This transaction has no variants — a single DispatcherType.answerTask across BR/CL/ZA. But the AnswerTaskAPI serviceName (and the answerTask payload wrapper) is shared with the call-task answer: two distinct builders write to the same backend endpoint. The wire contract uses callTask*-prefixed names even for the manager task — inherited from the shared contract.Esta transacción no tiene variantes — un único DispatcherType.answerTask en BR/CL/ZA. Pero el serviceName AnswerTaskAPI (y el wrapper de payload answerTask) es compartido con la respuesta de call task: dos builders distintos escriben en el mismo endpoint del backend. El contrato wire usa nombres con prefijo callTask* incluso en la tarea del gerente — herencia del contrato compartido.

AspectoAspectAspecto 26 · Tarefa do gestor (este doc)26 · Manager task (this doc)26 · Tarea del gerente (este doc) 25 · Call task25 · Call task25 · Call task
BuilderBuilderBuilderBuildAnswerManagerTaskDispatcherPayloadUseCaseBuildAnswerCallTaskDispatcherPayloadUseCase
InputAnswerManagerTaskDispatcherPayloadInput (ManagerTaskEntity)AnswerCallTaskDispatcherPayloadInput (CallTaskEntity)
serviceNameAnswerTaskAPIAnswerTaskAPI
callTaskCodetask.taskType.value (ManagerTaskType)callTask.callTaskCode.value
originaldatesubmittedAt (sempre a data do envio)submittedAt (always the send date)submittedAt (siempre la fecha del envío)callTask.originalDate ?? submittedAt
oosAnswerListsempre []always []siempre []uma entrada por produto (callTask.products)one entry per product (callTask.products)una entrada por producto (callTask.products)

Transação irmãSister transactionTransacción hermana A resposta de call task compartilha o serviço e o wrapper de payload — documentada em 25 · Answer call task (doc separado que se cruza com este). The call-task answer shares the service and the payload wrapper — documented in 25 · Answer call task (separate doc that cross-references this one). La respuesta de call task comparte el servicio y el wrapper de payload — documentada en 25 · Answer call task (doc separado que se cruza con este).

07

Como é disparadoHow it's firedCómo se dispara

A transação é orquestrada pelo ManagerTaskDetailNotifier (remote-first, §36). O notifier apenas reúne a entity crua e valores injetados; o builder é o dono único de toda derivação e formatação wire. A cascata:The transaction is orchestrated by ManagerTaskDetailNotifier (remote-first, §36). The notifier only gathers the raw entity and injected values; the builder is the sole owner of every derivation and wire formatting. The cascade:La transacción se orquesta desde ManagerTaskDetailNotifier (remote-first, §36). El notifier solo reúne la entity cruda y valores inyectados; el builder es el dueño único de toda derivación y formateo wire. La cascada:

  • ManagerTaskDetailNotifiersubmitCompletion()
    • reúne entity crua + injetadosgathers raw entity + injectedreúne entity cruda + inyectadosAnswerManagerTaskDispatcherPayloadInput
      • build()BuildAnswerManagerTaskDispatcherPayloadUseCasemonta o wireassembles the wirearma el wire
        • devolvereturnsdevuelveDispatcherEnvelope
          • SubmitAnswerManagerTaskUseCaseDispatcherOrchestrator
            • serializa + authserialize + authserializa + authDispatcherGateway
              • sendTransactionBackendgRPC

O input (entity crua)The input (raw entity)El input (entity cruda)

AnswerManagerTaskDispatcherPayloadInput (Freezed). Carrega o dado como existe no domínio; nada de formato wire. O relógio chega como submittedAt (via DateTimeUtils.now()); o visitSfid é resolvido pelo notifier a partir do accountSfid da tarefa.AnswerManagerTaskDispatcherPayloadInput (Freezed). Carries data as it exists in the domain; no wire shaping. The clock arrives as submittedAt (via DateTimeUtils.now()); visitSfid is resolved by the notifier from the task's accountSfid.AnswerManagerTaskDispatcherPayloadInput (Freezed). Lleva el dato como existe en el dominio; nada de formato wire. El reloj llega como submittedAt (vía DateTimeUtils.now()); el visitSfid lo resuelve el notifier a partir del accountSfid de la tarea.

CampoFieldCampoTipoTypeTipoPapelRoleRol
taskManagerTaskEntitytarefa crua (id, taskType, accountSfid, status…); o builder deriva callTaskVisit e callTaskCoderaw task (id, taskType, accountSfid, status…); the builder derives callTaskVisit and callTaskCodetarea cruda (id, taskType, accountSfid, status…); el builder deriva callTaskVisit y callTaskCode
visitSfidStringvisitUuid. Resolvido no notifier via GetVisitsUseCase.getCachedByAccountSfid(task.accountSfid); "" para tarefa de zona ou visita ausente no cachevisitUuid. Resolved in the notifier via GetVisitsUseCase.getCachedByAccountSfid(task.accountSfid); "" for a zone task or a visit missing from cachevisitUuid. Resuelto en el notifier vía GetVisitsUseCase.getCachedByAccountSfid(task.accountSfid); "" para tarea de zona o visita ausente en cache
submittedAtDateTimerelógio injetado (DateTimeUtils.now()); formata answerDate e originaldateinjected clock (DateTimeUtils.now()); formats answerDate and originaldatereloj inyectado (DateTimeUtils.now()); formatea answerDate y originaldate
08

Payload (message)

O JSON serializado no campo message do request. A tabela tem 4 colunasCampo JSON · Tipo · Origem do Dado · Regra — e lista todas as chaves que o build() emite (1 wrapper + 7 campos). 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 build() emits (1 wrapper + 7 fields). 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 todas las claves que build() emite (1 wrapper + 7 campos). 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
answerTaskarraywrapperwrapperwrapperRaiz do payload. Array com exatamente 1 objeto de resposta (a tarefa do gestor sempre envia uma resposta por vez).Payload root. Array with exactly 1 answer object (the manager task always sends one answer at a time).Raíz del payload. Array con exactamente 1 objeto de respuesta (la tarea del gerente siempre envía una respuesta por vez).
answerTask[].visitUuidstringinput.visitSfidSFID da visita do varejo da tarefa. Resolvido pelo notifier via GetVisitsUseCase.getCachedByAccountSfid(task.accountSfid). "" quando a tarefa é de zona (sem accountSfid) ou a visita não está em cache.SFID of the task's retail visit. Resolved by the notifier via GetVisitsUseCase.getCachedByAccountSfid(task.accountSfid). "" when the task is a zone task (no accountSfid) or the visit isn't cached.SFID de la visita del punto de venta de la tarea. Resuelto por el notifier vía GetVisitsUseCase.getCachedByAccountSfid(task.accountSfid). "" cuando la tarea es de zona (sin accountSfid) o la visita no está en cache.
answerTask[].answerDatestringDateTimeUtils.formatDate(submittedAt, isoDateTime)Instante do envio no formato yyyy-MM-dd HH:mm:ss (submittedAt = DateTimeUtils.now() injetado pelo notifier).Send instant in yyyy-MM-dd HH:mm:ss format (submittedAt = DateTimeUtils.now() injected by the notifier).Instante del envío en formato yyyy-MM-dd HH:mm:ss (submittedAt = DateTimeUtils.now() inyectado por el notifier).
answerTask[].originaldatestringDateTimeUtils.formatDate(submittedAt, isoDate)Data do envio no formato yyyy-MM-dd. Chave grafada com d minúsculo — verbatim do contrato wire. Também vira o dateReference do envelope. Divergência vs call task: lá usa callTask.originalDate ?? submittedAt.Send date in yyyy-MM-dd format. Key spelled with lowercase d — verbatim from the wire contract. Also becomes the envelope's dateReference. Divergence vs call task: it uses callTask.originalDate ?? submittedAt.Fecha del envío en formato yyyy-MM-dd. Clave escrita con d minúscula — verbatim del contrato wire. También pasa a ser el dateReference del envelope. Divergencia vs call task: allí usa callTask.originalDate ?? submittedAt.
answerTask[].callTaskVisitstringtask.idId da tarefa do gestor. Nome de campo herdado do contrato AnswerTaskAPI (compartilhado com call task). Também é o transactionReference do envelope.The manager task's id. Field name inherited from the AnswerTaskAPI contract (shared with call task). Also the envelope's transactionReference.Id de la tarea del gerente. Nombre de campo heredado del contrato AnswerTaskAPI (compartido con call task). También es el transactionReference del envelope.
answerTask[].callTaskCodestringtask.taskType.valueCódigo do tipo da tarefa (ManagerTaskType.value): share, conecta_prime, promotion_campaign, objective_achievement, conecta_voce, tactical_actions, stock_audit, promo_verification, planogram, zone_activation.Task type code (ManagerTaskType.value): share, conecta_prime, promotion_campaign, objective_achievement, conecta_voce, tactical_actions, stock_audit, promo_verification, planogram, zone_activation.Código del tipo de tarea (ManagerTaskType.value): share, conecta_prime, promotion_campaign, objective_achievement, conecta_voce, tactical_actions, stock_audit, promo_verification, planogram, zone_activation.
answerTask[].answerboolFixo: trueFixed: trueFijo: trueSempre true — a resposta da tarefa do gestor é a marcação de conclusão.Always true — the manager task's answer is the completion mark.Siempre true — la respuesta de la tarea del gerente es la marca de finalización.
answerTask[].oosAnswerListarrayFixo: []Fixed: []Fijo: []Sempre vazio (const <Map>[]) para a tarefa do gestor. Só a call task popula esta lista (respostas OOS por produto). Ver Pendências.Always empty (const <Map>[]) for the manager task. Only the call task populates this list (per-product OOS answers). See Pending.Siempre vacío (const <Map>[]) para la tarea del gerente. Solo la call task puebla esta lista (respuestas OOS por producto). Ver Pendientes.
09

Regras de negócioBusiness rulesReglas de negocio

O que o build() garanteWhat build() guaranteesLo que build() garantiza

  • answer é sempre true e oosAnswerList sempre []: a transação apenas marca a conclusão da tarefa, sem respostas por produto.answer is always true and oosAnswerList always []: the transaction only marks completion of the task, with no per-product answers.answer siempre es true y oosAnswerList siempre []: la transacción solo marca la finalización de la tarea, sin respuestas por producto.
  • hasPromotion: false fixo → o serviceName nunca recebe o prefixo Promo_.hasPromotion: false fixed → the serviceName never gets the Promo_ prefix.hasPromotion: false fijo → el serviceName nunca recibe el prefijo Promo_.
  • Idempotente: answerTask é lightweight, então resendMayDuplicate == false — reenviar não duplica a conclusão.Idempotent: answerTask is lightweight, so resendMayDuplicate == false — resending doesn't duplicate the completion.Idempotente: answerTask es lightweight, así que resendMayDuplicate == false — reenviar no duplica la finalización.

O que fica fora da transação (notifier)What sits outside the transaction (notifier)Lo que queda fuera de la transacción (notifier)

  • A observação de conclusão (completionDescription) não viaja neste payload — o ManagerTaskDetailNotifier a persiste à parte, via SubmitManagerTaskDetailsUseCase, após o ack de sucesso desta transação.The completion note (completionDescription) does not travel in this payload — ManagerTaskDetailNotifier persists it separately, via SubmitManagerTaskDetailsUseCase, after this transaction's success ack.La observación de finalización (completionDescription) no viaja en este payload — ManagerTaskDetailNotifier la persiste aparte, vía SubmitManagerTaskDetailsUseCase, después del ack de éxito de esta transacción.
  • Remote-first (§36): o notifier só marca status = completed localmente depois do ack de sucesso; um ack de erro deixa a tarefa pendente e exibe a mensagem de falha.Remote-first (§36): the notifier only marks status = completed locally after the success ack; an error ack keeps the task pending and shows the failure message.Remote-first (§36): el notifier solo marca status = completed localmente después del ack de éxito; un ack de error deja la tarea pendiente y muestra el mensaje de fallo.
10

Pendências / roadmapPending / roadmapPendientes / roadmap

O que o builder envia inerte ou depende de outra transação, documentado fiel ao estado atual do código (nunca descrito como se já existisse):What the builder ships inert or depends on another transaction, documented faithfully to the current code state (never described as already existing):Lo que el builder envía inerte o depende de otra transacción, documentado fiel al estado actual del código (nunca descrito como si ya existiera):

Inerte / pendenteInert / pendingInerte / pendiente

  • oosAnswerList: sempre [] — a tarefa do gestor não modela produtos em falta. A chave existe só porque o contrato AnswerTaskAPI é compartilhado com a call task (que a popula).oosAnswerList: always [] — the manager task doesn't model out-of-stock products. The key exists only because the AnswerTaskAPI contract is shared with the call task (which populates it).oosAnswerList: siempre [] — la tarea del gerente no modela productos agotados. La clave existe solo porque el contrato AnswerTaskAPI es compartido con la call task (que la puebla).
  • visitUuid: vai "" quando a tarefa é de zona (accountSfid vazio) ou quando a visita do varejo não está no cache local — depende de a visita já ter sido carregada.visitUuid: ships "" when the task is a zone task (empty accountSfid) or when the retail visit isn't in the local cache — depends on the visit having been loaded.visitUuid: va "" cuando la tarea es de zona (accountSfid vacío) o cuando la visita del punto de venta no está en el cache local — depende de que la visita ya se haya cargado.
  • Transporte: deviceUuid vai como literal provisório no gateway (pendência conhecida do Dispatcher).Transport: deviceUuid ships as a provisional literal in the gateway (known Dispatcher pending item).Transporte: deviceUuid va como literal provisional en el gateway (pendiente conocido del Dispatcher).

MercadosMarketsMercados

A disponibilidade da transação vem do DispatcherType.answerTask.enabledMarketsBR/CL/ZA. Os mesmos mercados da resposta de call task (mesmo DispatcherType). AR/PY/PE não têm este dispatcher.Transaction availability comes from DispatcherType.answerTask.enabledMarketsBR/CL/ZA. The same markets as the call-task answer (same DispatcherType). AR/PY/PE don't have this dispatcher.La disponibilidad de la transacción viene de DispatcherType.answerTask.enabledMarketsBR/CL/ZA. Los mismos mercados que la respuesta de call task (mismo DispatcherType). AR/PY/PE no tienen este dispatcher.

BRx CLx ZAx AR PY PE
disponívelavailabledisponible presente, desligadopresent, offpresente, apagado ausenteabsentausente
BRCLZA

Comportamento uniformeUniform behaviorComportamiento uniforme O payload é idêntico nos três mercados — não há campos ou variantes específicos de mercado nesta transação. O que varia é só o callTaskCode (o tipo de tarefa que a gestão de cada mercado atribui). The payload is identical across the three markets — there are no market-specific fields or variants in this transaction. What varies is only the callTaskCode (the task type each market's management assigns). El payload es idéntico en los tres mercados — no hay campos ni variantes específicos de mercado en esta transacción. Lo que varía es solo el callTaskCode (el tipo de tarea que la gestión de cada mercado asigna).

AR · PY · PE Existem como mercados do app (config PANGEA mínima), mas não têm o dispatcher de resposta de tarefaanswerTask.enabledMarkets não os lista. A conclusão de tarefa não é disparada nesses mercados. They exist as app markets (minimal PANGEA config), but have no answer-task dispatcheranswerTask.enabledMarkets doesn't list them. Task completion is not fired in these markets. Existen como mercados de la app (config PANGEA mínima), pero no tienen el dispatcher de respuesta de tareaanswerTask.enabledMarkets no los lista. La finalización de tarea no se dispara en estos mercados.