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 call taskAnswer call taskRespuesta de call task

A transação de escrita que envia ao backend a resposta de uma call task concluída pelo representante dentro de uma visita. Um único builder monta um payload JSON de uma única variante com o id da call task, a data de resposta e — em tarefas de ruptura (OOS) — a resposta produto a produto. Toda a construção do contrato wire vive no builder. The write transaction that sends the backend the answer to a call task completed by the rep inside a visit. A single builder assembles a JSON payload of one single variant carrying the call task id, the answer date and — for out-of-stock (OOS) tasks — the per-product answer. All wire-contract construction lives in the builder. La transacción de escritura que envía al backend la respuesta de una call task completada por el representante dentro de una visita. Un único builder arma un payload JSON de una única variante con el id de la call task, la fecha de respuesta y — en tareas de quiebre (OOS) — la respuesta producto a producto. Toda la construcción 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 CL ZA
01

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

Durante uma visita, o representante de vendas resolve call tasks — pequenas tarefas ligadas àquele varejo (verificar ruptura de produto, checar merchandising, criar pedido, responder pesquisa). Quando o rep conclui uma call task, o app envia essa conclusão ao backend por esta transação. É o que registra a resposta da tarefa. During a visit, the sales rep resolves call tasks — small tasks tied to that retail (check product out-of-stock, check merchandising, create an order, answer a survey). When the rep completes a call task, the app sends that completion to the backend through this transaction. It's what records the task's answer. Durante una visita, el representante de ventas resuelve call tasks — pequeñas tareas ligadas a ese punto de venta (verificar quiebre de producto, revisar merchandising, crear pedido, responder encuesta). Cuando el rep completa una call task, la app envía esa conclusión al backend por esta transacción. Es lo que registra la respuesta de la tarea.

O que a resposta carrega depende do tipo da call task:What the answer carries depends on the call task's type:Lo que la respuesta lleva depende del tipo de la call task:

Tarefa comumRegular taskTarea común

O rep marca como concluída; a resposta registra que a tarefa foi resolvida na visita.The rep marks it done; the answer records that the task was resolved on the visit.El rep la marca como completada; la respuesta registra que la tarea se resolvió en la visita.

Tarefa de ruptura (OOS)Out-of-stock task (OOS)Tarea de quiebre (OOS)

Além de concluir, o rep responde produto a produto (disponível / em falta); cada produto vai na resposta.Beyond completing, the rep answers product by product (available / out of stock); each product goes in the answer.Además de completar, el rep responde producto a producto (disponible / faltante); cada producto va en la respuesta.

Vinculada à visitaTied to the visitVinculada a la visita

A resposta leva o id da visita e o id da call task, para o backend ligar a resposta ao lugar certo.The answer carries the visit id and the call task id, so the backend links the answer to the right place.La respuesta lleva el id de la visita y el id de la call task, para que el backend ligue la respuesta al lugar correcto.

Onde aconteceWhere it happensDónde ocurre O envio parte da feature Call Task — do Call Task Detail, quando o rep toca em concluir. Veja essa feature para o contexto completo da tela. The send starts from the Call Task feature — from Call Task Detail, when the rep taps complete. See that feature for the full screen context. El envío parte de la feature Call Task — desde el Call Task Detail, cuando el rep toca completar. Vea esa feature para el contexto completo de la pantalla.

02

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

O envio é o último passo de concluir uma call task numa visita. As telas do caminho pertencem às features de Call Task e Detalhe da visita; aqui só situamos onde o envio acontece:The send is the last step of completing a call task on a visit. The screens along the way belong to the Call Task and Visit detail features; here we only place where the send happens:El envío es el último paso de completar una call task en una visita. Las pantallas del camino pertenecen a las features de Call Task y Detalle de la visita; aquí solo situamos dónde ocurre el envío:

  1. Inicie a visitaStart the visitInicie la visitaAs call tasks só podem ser concluídas com a visita iniciada (guarda de check-in).Call tasks can only be completed once the visit has started (check-in guard).Las call tasks solo pueden completarse con la visita iniciada (guardia de check-in).
  2. Detalhe da visita → módulo Call TasksVisit detail → Call Tasks moduleDetalle de la visita → módulo Call TasksRole até o módulo Call Tasks e toque numa tarefa.Scroll to the Call Tasks module and tap a task.Desplácese al módulo Call Tasks y toque una tarea.
  3. Call Task DetailCall Task DetailCall Task DetailLê a mensagem e, se for ruptura (OOS), responde cada produto (disponível / em falta).Reads the message and, if OOS, answers each product (available / out of stock).Lee el mensaje y, si es quiebre (OOS), responde cada producto (disponible / faltante).
  4. Concluir → esta transaçãoComplete → this transactionCompletar → esta transacciónAo tocar em concluir, o app dispara a Resposta de call task. É este toque que aciona a transação.Tapping complete, the app fires Answer call task. This tap is what triggers the transaction.Al tocar completar, la app dispara la Respuesta de call task. Este toque es lo que activa la transacción.

Reagendar é outra transaçãoRescheduling is another transactionReprogramar es otra transacción Se o rep reagenda a call task em vez de concluir, o app não dispara esta transação — dispara a de reagendamento (ReschedulingCallTaskAPI), documentada à parte. If the rep reschedules the call task instead of completing, the app doesn't fire this transaction — it fires the reschedule one (ReschedulingCallTaskAPI), documented separately. Si el rep reprograma la call task en vez de completar, la app no dispara esta transacción — dispara la de reprogramación (ReschedulingCallTaskAPI), documentada aparte.

03

Depois do envioAfter sendingDespués del envío

Confirmação ao repConfirmation to the repConfirmación al rep
Quando o backend aceita, a call task fica marcada como concluída localmente e o rep vê a tarefa resolvida; a tela atualiza a tag de status.When the backend accepts it, the call task is marked completed locally and the rep sees the task resolved; the screen updates the status tag.Cuando el backend lo acepta, la call task queda marcada como completada localmente y el rep ve la tarea resuelta; la pantalla actualiza la etiqueta de estado.
Sem internetOfflineSin internet
O envio pode entrar em fila e ser reenviado quando a conexão volta — a resposta não se perde. O sistema usa um identificador de transação para evitar duplicidade em reenvios.The send may be queued and retried when the connection returns — the answer isn't lost. The system uses a transaction id to avoid duplicates on retries.El envío puede quedar en cola y reintentarse cuando vuelve la conexión — la respuesta no se pierde. El sistema usa un identificador de transacción para evitar duplicados en los reenvíos.
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 call task é a transação de saída que registra no backend a conclusão de uma call task de visita. É disparada pelo notifier do Call Task Detail ao concluir a tarefa. Uma única variante — não há campo de tipo, não há prefixo Promo_ — com destino batchApi. Answer call task is the outbound transaction that records a visit call task's completion in the backend. It's fired by the Call Task Detail notifier upon completing the task. A single variant — no type field, no Promo_ prefix — with batchApi destination. Respuesta de call task es la transacción de salida que registra en el backend la conclusión de una call task de visita. Se dispara desde el notifier del Call Task Detail al completar la tarea. Una única variante — sin campo de tipo, sin prefijo Promo_ — con destino batchApi.

Payload aninhadoNested payloadPayload anidado

Um array answerTask com um objeto de 7 campos; dentro dele, oosAnswerList tem um objeto de 4 campos por produto.An answerTask array with one 7-field object; inside it, oosAnswerList has one 4-field object per product.Un array answerTask con un objeto de 7 campos; dentro, oosAnswerList tiene un objeto de 4 campos por producto.

Serviço compartilhadoShared serviceServicio compartido

Mesmo DispatcherType.answerTask / AnswerTaskAPI da resposta de manager task — dois builders, payloads distintos.Same DispatcherType.answerTask / AnswerTaskAPI as the manager task answer — two builders, distinct payloads.Mismo DispatcherType.answerTask / AnswerTaskAPI que la respuesta de manager task — dos builders, payloads distintos.

RPC genéricoGeneric RPCRPC genérico

Não há RPC por resposta: tudo passa pelo mesmo sendTransaction, com o JSON serializado em message e serviceName = AnswerTaskAPI.There's no per-answer RPC: everything goes through the same sendTransaction, with the JSON serialized into message and serviceName = AnswerTaskAPI.No hay RPC por respuesta: todo pasa por el mismo sendTransaction, con el JSON serializado en message y serviceName = AnswerTaskAPI.

FontesSourcesFuentes BuildAnswerCallTaskDispatcherPayloadUseCase + AnswerCallTaskDispatcherPayloadInput + DispatcherType.answerTask + DispatcherConectaRep.proto. O input carrega entities cruas de domínio (CLAUDE.md §36); o build() constrói todo o wire. BuildAnswerCallTaskDispatcherPayloadUseCase + AnswerCallTaskDispatcherPayloadInput + DispatcherType.answerTask + DispatcherConectaRep.proto. The input carries raw domain entities (CLAUDE.md §36); build() constructs the entire wire. BuildAnswerCallTaskDispatcherPayloadUseCase + AnswerCallTaskDispatcherPayloadInput + DispatcherType.answerTask + 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 · discriminadorAnswerTaskAPI (sem prefixo Promo_: hasPromotion é sempre false)discriminatorAnswerTaskAPI (no Promo_ prefix: hasPromotion is always false)discriminadorAnswerTaskAPI (sin prefijo Promo_: hasPromotion siempre es false)
dateReference
string · #3 · AAAA-MM-DD = originalDate da call task (o originaldate do payload)YYYY-MM-DD = the call task's originalDate (the payload's originaldate)AAAA-MM-DD = originalDate de la call task (el originaldate del payload)
transactionReference
string · #4 · callTask.id (correlação do despacho)callTask.id (dispatch correlation)callTask.id (correlación del despacho)
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, serviceName, payload, 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. The builder returns a DispatcherEnvelope (type, serviceName, payload, 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. El builder devuelve un DispatcherEnvelope (type, serviceName, payload, 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.

O destino é DispatcherDestination.batchApi: a resposta entra no lote de despachos (batch) e é enviada pelo mesmo sendTransaction, junto de outras transações do lote.The destination is DispatcherDestination.batchApi: the answer joins the dispatch batch and is sent through the same sendTransaction, alongside other batched transactions.El destino es DispatcherDestination.batchApi: la respuesta entra en el lote de despachos (batch) y se envía por el mismo sendTransaction, junto a otras transacciones del lote.

06

serviceName

Uma única variante — um só DispatcherType, um só serviceName. Não há campo de tipo no input e não há prefixo Promo_ (o builder chama type.resolveServiceName(hasPromotion: false) fixo).A single variant — one DispatcherType, one serviceName. There's no type field on the input and no Promo_ prefix (the builder calls type.resolveServiceName(hasPromotion: false) fixed).Una única variante — un solo DispatcherType, un solo serviceName. No hay campo de tipo en el input y no hay prefijo Promo_ (el builder llama type.resolveServiceName(hasPromotion: false) fijo).

DispatcherType serviceName DestinoDestinationDestino MercadosMarketsMercados
answerTaskAnswerTaskAPIbatchApiBR · CL · ZA

Serviço compartilhado (cross-service)Shared service (cross-service)Servicio compartido (cross-service)

  • O mesmo DispatcherType.answerTask e serviceName = AnswerTaskAPI são usados por dois builders: este (call task) e o da resposta de manager task. São docs separadas que se cruzam.The same DispatcherType.answerTask and serviceName = AnswerTaskAPI are used by two builders: this one (call task) and the manager task answer. They are separate docs that cross-reference.El mismo DispatcherType.answerTask y serviceName = AnswerTaskAPI son usados por dos builders: este (call task) y la respuesta de manager task. Son docs separadas que se cruzan.
  • O formato do payload é o mesmo (array answerTask com os mesmos 7 campos), mas o conteúdo difere: a call task preenche oosAnswerList com um objeto por produto e usa callTask.callTaskCode.value em callTaskCode; a manager task envia oosAnswerList sempre vazio e usa task.taskType.value em callTaskCode.The payload shape is the same (an answerTask array with the same 7 fields), but the content differs: the call task fills oosAnswerList with one object per product and uses callTask.callTaskCode.value for callTaskCode; the manager task ships oosAnswerList always empty and uses task.taskType.value for callTaskCode.La forma del payload es la misma (un array answerTask con los mismos 7 campos), pero el contenido difiere: la call task llena oosAnswerList con un objeto por producto y usa callTask.callTaskCode.value en callTaskCode; la manager task envía oosAnswerList siempre vacío y usa task.taskType.value en callTaskCode.
07

Como é disparadoHow it's firedCómo se dispara

A transação é disparada do método complete() do notifier do Call Task Detail. O notifier apenas reúne a call task crua, o visitSfid e o relógio; o builder é o dono único de todo join, rename, formatação de data e derivação wire. A cascata:The transaction is fired from the complete() method of the Call Task Detail notifier. The notifier only gathers the raw call task, the visitSfid and the clock; the builder is the sole owner of every join, rename, date formatting and wire derivation. The cascade:La transacción se dispara desde el método complete() del notifier del Call Task Detail. El notifier solo reúne la call task cruda, el visitSfid y el reloj; el builder es el dueño único de todo join, rename, formateo de fecha y derivación wire. La cascada:

  • Call Task Detailnotifier · complete()
    • reúne call task crua + visitSfid + relógiogathers raw call task + visitSfid + clockreúne call task cruda + visitSfid + relojAnswerCallTaskDispatcherPayloadInput
      • build()BuildAnswerCallTaskDispatcherPayloadUseCasemonta o wireassembles the wirearma el wire
        • devolvereturnsdevuelveDispatcherEnvelope
          • SubmitAnswerCallTaskUseCaseDispatcherRepository
            • serializa + authserialize + authserializa + authDispatcherGateway
              • sendTransactionBackendgRPC

Após o ack de sucesso, o notifier chama MarkCallTaskAnsweredUseCase e marca a call task como isCompleted localmente — isso é cache local, fora do payload desta transação.After the success ack, the notifier calls MarkCallTaskAnsweredUseCase and marks the call task isCompleted locally — that's local cache, outside this transaction's payload.Tras el ack de éxito, el notifier llama MarkCallTaskAnsweredUseCase y marca la call task como isCompleted localmente — eso es caché local, fuera del payload de esta transacción.

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

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

CampoFieldCampoTipoTypeTipoPapelRoleRol
callTaskCallTaskEntitycall task crua: id, callTaskCode, originalDate, products (cada um com id, productName, answer)raw call task: id, callTaskCode, originalDate, products (each with id, productName, answer)call task cruda: id, callTaskCode, originalDate, products (cada uno con id, productName, answer)
visitSfidStringsfid da visita — vira visitUuid (o notifier passa callTask.visitSfid)visit sfid — becomes visitUuid (the notifier passes callTask.visitSfid)sfid de la visita — se vuelve visitUuid (el notifier pasa callTask.visitSfid)
submittedAtDateTimerelógio injetado (DateTimeUtils.now()) — vira answerDate e o fallback de originaldateinjected clock (DateTimeUtils.now()) — becomes answerDate and the originaldate fallbackreloj inyectado (DateTimeUtils.now()) — se vuelve answerDate y el fallback de originaldate
08

Payload (message)

O JSON serializado no campo message do request. Cada tabela abaixo tem 4 colunasCampo JSON · Tipo · Origem do Dado · Regra — e lista toda chave que o build() emite (1 na raiz + 7 no objeto answerTask + 4 por item de oosAnswerList = 12). 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. Each table below has 4 columnsJSON field · Type · Data source · Rule — and lists every key that build() emits (1 at the root + 7 in the answerTask object + 4 per oosAnswerList item = 12). 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. Cada tabla abajo tiene 4 columnasCampo JSON · Tipo · Origen del Dato · Regla — y lista toda clave que build() emite (1 en la raíz + 7 en el objeto answerTask + 4 por ítem de oosAnswerList = 12). 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
answerTaskarray[answerTask]array de um único objeto (a resposta)single-element array (the answer)array de un solo objeto (la respuesta)
  • answerTask objeto únicosingle objectobjeto único 7 camposfieldscampos
    Campo JSONTipoTypeTipoOrigem do DadoData sourceOrigen del DatoRegraRuleRegla
    visitUuidstringinput.visitSfidsfid da visita (o notifier passa callTask.visitSfid)visit sfid (the notifier passes callTask.visitSfid)sfid de la visita (el notifier pasa callTask.visitSfid)
    answerDatestringinput.submittedAtformato yyyy-MM-dd HH:mm:ss (DateFormatType.isoDateTime)yyyy-MM-dd HH:mm:ss format (DateFormatType.isoDateTime)formato yyyy-MM-dd HH:mm:ss (DateFormatType.isoDateTime)
    originaldatestringcallTask.originalDateformato yyyy-MM-dd (DateFormatType.isoDate); fallback input.submittedAt quando originalDate é null. Chave em minúsculas, verbatim do contratoyyyy-MM-dd format (DateFormatType.isoDate); fallback input.submittedAt when originalDate is null. Lowercase key, verbatim from the contractformato yyyy-MM-dd (DateFormatType.isoDate); fallback input.submittedAt cuando originalDate es null. Clave en minúsculas, verbatim del contrato
    callTaskVisitstringcallTask.idid da call taskcall task idid de la call task
    callTaskCodestringcallTask.callTaskCode.value"CallTaskOOS" (ruptura) ou "" (geral)"CallTaskOOS" (OOS) or "" (general)"CallTaskOOS" (quiebre) o "" (general)
    answerboolFixo: truehardcoded true — não reflete a resposta real; enviado sempre true (ver Pendências)hardcoded true — doesn't reflect the actual answer; always sent true (see Pending)hardcoded true — no refleja la respuesta real; enviado siempre true (ver Pendientes)
    oosAnswerListarraycallTask.productsum objeto por produto (tabela abaixo); vazio se a call task não tem produtosone object per product (table below); empty if the call task has no productsun objeto por producto (tabla abajo); vacío si la call task no tiene productos
  • answerTask[].oosAnswerList objeto por produtoobject per productobjeto por producto 4 camposfieldscampos
    Campo JSONTipoTypeTipoOrigem do DadoData sourceOrigen del DatoRegraRuleRegla
    answerstringproduct.answerresposta por produto (string livre; ex. disponível / em falta); "" se não respondidoper-product answer (free string; e.g. available / out of stock); "" if unansweredrespuesta por producto (string libre; p. ej. disponible / faltante); "" si no respondido
    callTaskVisitProductstringproduct.idid do produto da call taskcall task product idid del producto de la call task
    product_namestringproduct.productNamenome do produto; chave em snake_case, verbatim do contratoproduct name; snake_case key, verbatim from the contractnombre del producto; clave en snake_case, verbatim del contrato
    call_task_visitstringcallTask.idid da call task, repetido em cada item; chave em snake_case, verbatim (redundante com callTaskVisit do objeto pai)call task id, repeated on each item; snake_case key, verbatim (redundant with the parent object's callTaskVisit)id de la call task, repetido en cada ítem; clave en snake_case, verbatim (redundante con callTaskVisit del objeto padre)
09

Regras de negócioBusiness rulesReglas de negocio

Produtos e OOSProducts & OOSProductos y OOS oosAnswerList · callTaskCode
  • oosAnswerList carrega todos os produtos de callTask.products — um objeto por produto — não só os que estão em falta. Apesar do nome (OOS), é a lista completa de produtos respondidos.oosAnswerList carries all products from callTask.products — one object per product — not only the ones out of stock. Despite the name (OOS), it's the full list of answered products.oosAnswerList lleva todos los productos de callTask.products — un objeto por producto — no solo los faltantes. A pesar del nombre (OOS), es la lista completa de productos respondidos.
  • Uma call task sem produtos (tarefa comum) envia oosAnswerList como array vazio.A call task with no products (regular task) sends oosAnswerList as an empty array.Una call task sin productos (tarea común) envía oosAnswerList como array vacío.
  • callTaskCode vem de callTask.callTaskCode.value: "CallTaskOOS" para ruptura, "" para geral. É o enum CallTaskCode serializado pelo .value.callTaskCode comes from callTask.callTaskCode.value: "CallTaskOOS" for OOS, "" for general. It's the CallTaskCode enum serialized by .value.callTaskCode viene de callTask.callTaskCode.value: "CallTaskOOS" para quiebre, "" para general. Es el enum CallTaskCode serializado por .value.
Datas e correlaçãoDates & correlationFechas y correlación answerDate · originaldate · dateReference
  • answerDate (momento da resposta) usa DateFormatType.isoDateTime (yyyy-MM-dd HH:mm:ss) a partir de input.submittedAt.answerDate (answer moment) uses DateFormatType.isoDateTime (yyyy-MM-dd HH:mm:ss) from input.submittedAt.answerDate (momento de la respuesta) usa DateFormatType.isoDateTime (yyyy-MM-dd HH:mm:ss) desde input.submittedAt.
  • originaldate usa DateFormatType.isoDate (yyyy-MM-dd) a partir de callTask.originalDate; quando originalDate é null, cai para input.submittedAt. Toda formatação de data passa pelo DateTimeUtils (§14).originaldate uses DateFormatType.isoDate (yyyy-MM-dd) from callTask.originalDate; when originalDate is null, it falls to input.submittedAt. All date formatting goes through DateTimeUtils (§14).originaldate usa DateFormatType.isoDate (yyyy-MM-dd) desde callTask.originalDate; cuando originalDate es null, cae a input.submittedAt. Todo formateo de fecha pasa por DateTimeUtils (§14).
  • O envelope leva transactionReference = callTask.id (correlação do despacho) e dateReference = originaldate (o mesmo valor formatado yyyy-MM-dd).The envelope carries transactionReference = callTask.id (dispatch correlation) and dateReference = originaldate (the same yyyy-MM-dd formatted value).El envelope lleva transactionReference = callTask.id (correlación del despacho) y dateReference = originaldate (el mismo valor formateado yyyy-MM-dd).
serviceName e casing das chavesserviceName & key casingserviceName y casing de las claves AnswerTaskAPI · originaldate · product_name
  • serviceName: fixo AnswerTaskAPI — o builder chama type.resolveServiceName(hasPromotion: false), então nunca há prefixo Promo_.serviceName: fixed AnswerTaskAPI — the builder calls type.resolveServiceName(hasPromotion: false), so there's never a Promo_ prefix.serviceName: fijo AnswerTaskAPI — el builder llama type.resolveServiceName(hasPromotion: false), así que nunca hay prefijo Promo_.
  • O contrato mistura casing de chaves de propósito: originaldate (minúsculas), product_name e call_task_visit (snake_case), visitUuid/callTaskVisit/callTaskVisitProduct (camelCase). O builder emite verbatim — não normalize.The contract mixes key casing on purpose: originaldate (lowercase), product_name and call_task_visit (snake_case), visitUuid/callTaskVisit/callTaskVisitProduct (camelCase). The builder emits them verbatim — don't normalize.El contrato mezcla el casing de las claves a propósito: originaldate (minúsculas), product_name y call_task_visit (snake_case), visitUuid/callTaskVisit/callTaskVisitProduct (camelCase). El builder los emite verbatim — no normalizar.
  • Compartilha DispatcherType.answerTask/AnswerTaskAPI com a resposta de manager task — o backend distingue as duas pelo conteúdo do payload, não pelo serviceName.Shares DispatcherType.answerTask/AnswerTaskAPI with the manager task answer — the backend tells them apart by payload content, not by serviceName.Comparte DispatcherType.answerTask/AnswerTaskAPI con la respuesta de manager task — el backend las distingue por el contenido del payload, no por el serviceName.
10

Pendências / roadmapPending / roadmapPendientes / roadmap

O que o builder ainda não preenche ou envia inerte, documentado fiel ao estado atual do código (nunca descrito como se já existisse):What the builder does not yet fill, or ships inert, documented faithfully to the current code state (never described as already existing):Lo que el builder aún no completa, o envía inerte, documentado fiel al estado actual del código (nunca descrito como si ya existiera):

Não portado / pendenteNot ported / pendingNo portado / pendiente

  • O campo answer do objeto answerTask é hardcoded true — não reflete a resposta real do rep; toda conclusão envia answer: true.The answerTask object's answer field is hardcoded true — it doesn't reflect the rep's actual answer; every completion sends answer: true.El campo answer del objeto answerTask es hardcoded true — no refleja la respuesta real del rep; toda conclusión envía answer: true.
  • call_task_visit repete callTask.id em cada item de oosAnswerList, redundante com callTaskVisit do objeto pai — mantido por fidelidade ao contrato wire.call_task_visit repeats callTask.id on every oosAnswerList item, redundant with the parent's callTaskVisit — kept for wire-contract fidelity.call_task_visit repite callTask.id en cada ítem de oosAnswerList, redundante con callTaskVisit del padre — mantenido por fidelidad al contrato wire.
  • Sem campo de tipo/variante e sem suporte a Promo_: hasPromotion é sempre false no build().No type/variant field and no Promo_ support: hasPromotion is always false in build().Sin campo de tipo/variante y sin soporte a Promo_: hasPromotion siempre es false en build().
  • 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).

Feature donaOwning featureFeature dueña O envio parte da feature Call Task (Call Task Detail, dentro do Detalhe da visita) — veja essas features para o contexto de UI. Serviço compartilhado com a resposta de manager task. The send comes from the Call Task feature (Call Task Detail, inside Visit detail) — see those features for the UI context. Service shared with the manager task answer. El envío parte de la feature Call Task (Call Task Detail, dentro del Detalle de la visita) — vea esas features para el contexto de UI. Servicio compartido con la respuesta de manager task.

MercadosMarketsMercados

A disponibilidade da transação vem do DispatcherType.answerTask.enabledMarketsBR/CL/ZA. O payload é uniforme: não há divergência de campos por mercado. AR/PY/PE não têm esta transação.Transaction availability comes from DispatcherType.answerTask.enabledMarketsBR/CL/ZA. The payload is uniform: there's no per-market field divergence. AR/PY/PE don't have this transaction.La disponibilidad de la transacción viene de DispatcherType.answerTask.enabledMarketsBR/CL/ZA. El payload es uniforme: no hay divergencia de campos por mercado. AR/PY/PE no tienen esta transacción.

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

Mesmo contratoSame contractMismo contrato Nos três mercados o payload é idêntico — os mesmos 7 campos de answerTask (mais os 4 por produto em oosAnswerList), mesmo serviceName e mesmo destino batchApi. A call task e seus produtos não variam de forma por país. In all three markets the payload is identical — the same 7 answerTask fields (plus the 4 per product in oosAnswerList), same serviceName and same batchApi destination. The call task and its products don't vary in shape by country. En los tres mercados el payload es idéntico — los mismos 7 campos de answerTask (más los 4 por producto en oosAnswerList), mismo serviceName y mismo destino batchApi. La call task y sus productos no varían de forma por país.

AR · PY · PE Existem como mercados do app (config PANGEA mínima), mas não têm esta transaçãoenabledMarkets não os lista. A resposta de call task não é disparada nesses mercados. They exist as app markets (minimal PANGEA config), but don't have this transactionenabledMarkets doesn't list them. Call task answering is not fired in these markets. Existen como mercados de la app (config PANGEA mínima), pero no tienen esta transacciónenabledMarkets no los lista. La respuesta de call task no se dispara en estos mercados.