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.
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.
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:
- 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).
- 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.
- 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).
- 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.
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.
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.
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.
sendTransactionunaryrpc sendTransaction(InboxTransactionRequest) returns (InboxTransactionReply)
path /mn.bat.conectarep.dispatcher.DispatcherConectaRepService/sendTransaction
InboxTransactionRequestendpointstring· #1 · endpoint alvo (config de ambiente)target endpoint (environment config)endpoint destino (config de ambiente)serviceNamestring· #2 · discriminador —AnswerTaskAPI(sem prefixoPromo_:hasPromotioné semprefalse)discriminator —AnswerTaskAPI(noPromo_prefix:hasPromotionis alwaysfalse)discriminador —AnswerTaskAPI(sin prefijoPromo_:hasPromotionsiempre esfalse)dateReferencestring· #3 ·AAAA-MM-DD=originalDateda call task (ooriginaldatedo payload)YYYY-MM-DD= the call task'soriginalDate(the payload'soriginaldate)AAAA-MM-DD=originalDatede la call task (eloriginaldatedel payload)transactionReferencestring· #4 ·callTask.id(correlação do despacho)callTask.id(dispatch correlation)callTask.id(correlación del despacho)usernamestring· #5messagestring· #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)manufacturerstring· #7 · dado do dispositivodevice datadato del dispositivomodelstring· #8 · dado do dispositivodevice datadato del dispositivodeviceUuidstring· #9 · literal provisório hoje (ver Pendências)provisional literal today (see Pending)literal provisional hoy (ver Pendientes)deviceVersionstring· #10tidint64· #11 · id de transação para idempotência/replaytransaction id for idempotency/replayid de transacción para idempotencia/replay
InboxTransactionReplystatusint32· #1 · status do ack (0 = sucesso)ack status (0 = success)status del ack (0 = éxito)messagestring· #2 · mensagem do backendbackend messagemensaje del backendtransactionIdint32· #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.
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 |
|---|---|---|---|
answerTask | AnswerTaskAPI | batchApi | BR · CL · ZA |
Serviço compartilhado (cross-service)Shared service (cross-service)Servicio compartido (cross-service)
- O mesmo
DispatcherType.answerTaskeserviceName = AnswerTaskAPIsão usados por dois builders: este (call task) e o da resposta de manager task. São docs separadas que se cruzam.The sameDispatcherType.answerTaskandserviceName = AnswerTaskAPIare used by two builders: this one (call task) and the manager task answer. They are separate docs that cross-reference.El mismoDispatcherType.answerTaskyserviceName = AnswerTaskAPIson 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
answerTaskcom os mesmos 7 campos), mas o conteúdo difere: a call task preencheoosAnswerListcom um objeto por produto e usacallTask.callTaskCode.valueemcallTaskCode; a manager task enviaoosAnswerListsempre vazio e usatask.taskType.valueemcallTaskCode.The payload shape is the same (ananswerTaskarray with the same 7 fields), but the content differs: the call task fillsoosAnswerListwith one object per product and usescallTask.callTaskCode.valueforcallTaskCode; the manager task shipsoosAnswerListalways empty and usestask.taskType.valueforcallTaskCode.La forma del payload es la misma (un arrayanswerTaskcon los mismos 7 campos), pero el contenido difiere: la call task llenaoosAnswerListcon un objeto por producto y usacallTask.callTaskCode.valueencallTaskCode; la manager task envíaoosAnswerListsiempre vacío y usatask.taskType.valueencallTaskCode.
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
- serializa + authserialize + authserializa + authDispatcherGateway
- SubmitAnswerCallTaskUseCaseDispatcherRepository
- devolvereturnsdevuelveDispatcherEnvelope
- build()BuildAnswerCallTaskDispatcherPayloadUseCasemonta o wireassembles the wirearma el wire
- reúne call task crua + visitSfid + relógiogathers raw call task + visitSfid + clockreúne call task cruda + visitSfid + relojAnswerCallTaskDispatcherPayloadInput
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()).
| CampoFieldCampo | TipoTypeTipo | PapelRoleRol |
|---|---|---|
callTask | CallTaskEntity | call 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) |
visitSfid | String | sfid 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) |
submittedAt | DateTime | reló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 |
Payload (message)
O JSON serializado no campo message do request. Cada tabela abaixo tem 4 colunas — Campo 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 columns — JSON 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 columnas — Campo 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 JSON | TipoTypeTipo | Origem do DadoData sourceOrigen del Dato | RegraRuleRegla |
|---|---|---|---|
answerTask | array | [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 JSON TipoTypeTipo Origem do DadoData sourceOrigen del Dato RegraRuleRegla visitUuidstring input.visitSfidsfid da visita (o notifier passa callTask.visitSfid)visit sfid (the notifier passescallTask.visitSfid)sfid de la visita (el notifier pasacallTask.visitSfid)answerDatestring input.submittedAtformato yyyy-MM-dd HH:mm:ss(DateFormatType.isoDateTime)yyyy-MM-dd HH:mm:ssformat (DateFormatType.isoDateTime)formatoyyyy-MM-dd HH:mm:ss(DateFormatType.isoDateTime)originaldatestring callTask.originalDateformato yyyy-MM-dd(DateFormatType.isoDate); fallbackinput.submittedAtquandooriginalDateé null. Chave em minúsculas, verbatim do contratoyyyy-MM-ddformat (DateFormatType.isoDate); fallbackinput.submittedAtwhenoriginalDateis null. Lowercase key, verbatim from the contractformatoyyyy-MM-dd(DateFormatType.isoDate); fallbackinput.submittedAtcuandooriginalDatees null. Clave en minúsculas, verbatim del contratocallTaskVisitstring callTask.idid da call taskcall task idid de la call task callTaskCodestring callTask.callTaskCode.value"CallTaskOOS"(ruptura) ou""(geral)"CallTaskOOS"(OOS) or""(general)"CallTaskOOS"(quiebre) o""(general)answerbool Fixo: truehardcoded true— não reflete a resposta real; enviado sempretrue(ver Pendências)hardcodedtrue— doesn't reflect the actual answer; always senttrue(see Pending)hardcodedtrue— no refleja la respuesta real; enviado siempretrue(ver Pendientes)oosAnswerListarray callTask.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 JSON TipoTypeTipo Origem do DadoData sourceOrigen del Dato RegraRuleRegla answerstring product.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 respondidocallTaskVisitProductstring product.idid do produto da call taskcall task product idid del producto de la call task product_namestring product.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_visitstring callTask.idid da call task, repetido em cada item; chave em snake_case, verbatim (redundante com callTaskVisitdo objeto pai)call task id, repeated on each item; snake_case key, verbatim (redundant with the parent object'scallTaskVisit)id de la call task, repetido en cada ítem; clave en snake_case, verbatim (redundante concallTaskVisitdel objeto padre)
Regras de negócioBusiness rulesReglas de negocio
Produtos e OOSProducts & OOSProductos y OOS oosAnswerList · callTaskCode
oosAnswerListcarrega todos os produtos decallTask.products— um objeto por produto — não só os que estão em falta. Apesar do nome (OOS), é a lista completa de produtos respondidos.oosAnswerListcarries all products fromcallTask.products— one object per product — not only the ones out of stock. Despite the name (OOS), it's the full list of answered products.oosAnswerListlleva todos los productos decallTask.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
oosAnswerListcomo array vazio.A call task with no products (regular task) sendsoosAnswerListas an empty array.Una call task sin productos (tarea común) envíaoosAnswerListcomo array vacío. callTaskCodevem decallTask.callTaskCode.value:"CallTaskOOS"para ruptura,""para geral. É o enumCallTaskCodeserializado pelo.value.callTaskCodecomes fromcallTask.callTaskCode.value:"CallTaskOOS"for OOS,""for general. It's theCallTaskCodeenum serialized by.value.callTaskCodeviene decallTask.callTaskCode.value:"CallTaskOOS"para quiebre,""para general. Es el enumCallTaskCodeserializado por.value.
Datas e correlaçãoDates & correlationFechas y correlación answerDate · originaldate · dateReference
answerDate(momento da resposta) usaDateFormatType.isoDateTime(yyyy-MM-dd HH:mm:ss) a partir deinput.submittedAt.answerDate(answer moment) usesDateFormatType.isoDateTime(yyyy-MM-dd HH:mm:ss) frominput.submittedAt.answerDate(momento de la respuesta) usaDateFormatType.isoDateTime(yyyy-MM-dd HH:mm:ss) desdeinput.submittedAt.originaldateusaDateFormatType.isoDate(yyyy-MM-dd) a partir decallTask.originalDate; quandooriginalDateé null, cai parainput.submittedAt. Toda formatação de data passa peloDateTimeUtils(§14).originaldateusesDateFormatType.isoDate(yyyy-MM-dd) fromcallTask.originalDate; whenoriginalDateis null, it falls toinput.submittedAt. All date formatting goes throughDateTimeUtils(§14).originaldateusaDateFormatType.isoDate(yyyy-MM-dd) desdecallTask.originalDate; cuandooriginalDatees null, cae ainput.submittedAt. Todo formateo de fecha pasa porDateTimeUtils(§14).- O envelope leva
transactionReference = callTask.id(correlação do despacho) edateReference = originaldate(o mesmo valor formatadoyyyy-MM-dd).The envelope carriestransactionReference = callTask.id(dispatch correlation) anddateReference = originaldate(the sameyyyy-MM-ddformatted value).El envelope llevatransactionReference = callTask.id(correlación del despacho) ydateReference = originaldate(el mismo valor formateadoyyyy-MM-dd).
serviceName e casing das chavesserviceName & key casingserviceName y casing de las claves AnswerTaskAPI · originaldate · product_name
serviceName: fixoAnswerTaskAPI— o builder chamatype.resolveServiceName(hasPromotion: false), então nunca há prefixoPromo_.serviceName: fixedAnswerTaskAPI— the builder callstype.resolveServiceName(hasPromotion: false), so there's never aPromo_prefix.serviceName: fijoAnswerTaskAPI— el builder llamatype.resolveServiceName(hasPromotion: false), así que nunca hay prefijoPromo_.- O contrato mistura casing de chaves de propósito:
originaldate(minúsculas),product_nameecall_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_nameandcall_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_nameycall_task_visit(snake_case),visitUuid/callTaskVisit/callTaskVisitProduct(camelCase). El builder los emite verbatim — no normalizar. - Compartilha
DispatcherType.answerTask/AnswerTaskAPIcom a resposta de manager task — o backend distingue as duas pelo conteúdo do payload, não peloserviceName.SharesDispatcherType.answerTask/AnswerTaskAPIwith the manager task answer — the backend tells them apart by payload content, not byserviceName.ComparteDispatcherType.answerTask/AnswerTaskAPIcon la respuesta de manager task — el backend las distingue por el contenido del payload, no por elserviceName.
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
answerdo objetoanswerTaské hardcodedtrue— não reflete a resposta real do rep; toda conclusão enviaanswer: true.TheanswerTaskobject'sanswerfield is hardcodedtrue— it doesn't reflect the rep's actual answer; every completion sendsanswer: true.El campoanswerdel objetoanswerTaskes hardcodedtrue— no refleja la respuesta real del rep; toda conclusión envíaanswer: true. call_task_visitrepetecallTask.idem cada item deoosAnswerList, redundante comcallTaskVisitdo objeto pai — mantido por fidelidade ao contrato wire.call_task_visitrepeatscallTask.idon everyoosAnswerListitem, redundant with the parent'scallTaskVisit— kept for wire-contract fidelity.call_task_visitrepitecallTask.iden cada ítem deoosAnswerList, redundante concallTaskVisitdel padre — mantenido por fidelidad al contrato wire.- Sem campo de tipo/variante e sem suporte a
Promo_:hasPromotioné semprefalsenobuild().No type/variant field and noPromo_support:hasPromotionis alwaysfalseinbuild().Sin campo de tipo/variante y sin soporte aPromo_:hasPromotionsiempre esfalseenbuild(). - Transporte:
deviceUuidvai como literal provisório no gateway (pendência conhecida do Dispatcher, comum a todas as transações).Transport:deviceUuidships as a provisional literal in the gateway (known Dispatcher pending item, common to all transactions).Transporte:deviceUuidva 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.enabledMarkets — BR/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.enabledMarkets — BR/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.enabledMarkets — BR/CL/ZA. El payload es uniforme: no hay divergencia de campos por mercado. AR/PY/PE no tienen esta transacción.
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ção — enabledMarkets 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 transaction — enabledMarkets 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ón — enabledMarkets no los lista. La respuesta de call task no se dispara en estos mercados.