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

Reconhecimento de imagem de merchandisingMerchandising image recognitionReconocimiento de imagen de merchandising

A transação de escrita que envia as fotos de merchandising capturadas em uma visita para o backend, via o Dispatcher, para reconhecimento de imagem. Cada foto vai como uma imagem em base64, com um rótulo e a data/hora da captura. Um único builder monta o payload JSON; toda a construção do contrato wire vive no builder. The write transaction that sends the merchandising photos captured during a visit to the backend, through the Dispatcher, for image recognition. Each photo goes as a base64 image, with a label and the capture date/time. A single builder assembles the JSON payload; all wire-contract construction lives in the builder. La transacción de escritura que envía las fotos de merchandising capturadas en una visita al backend, vía el Dispatcher, para reconocimiento de imagen. Cada foto va como una imagen en base64, con una etiqueta y la fecha/hora de la captura. Un único builder arma el payload JSON; 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
17/08/20262026-08-17
Disponível emAvailable inDisponible en BR
01

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

Durante uma visita, o representante de vendas tira fotos do ponto de merchandising (gôndola, ponta de gôndola, exposição) e, ao concluir, envia essas fotos ao backend por esta transação. É o momento em que as imagens saem do dispositivo e passam a ser processadas por reconhecimento de imagem — a análise automática do que aparece na foto. Cada foto pode ganhar um rótulo curto que descreve o que ela mostra. During a visit, the sales rep takes photos of the merchandising point (shelf, end-cap, display) and, once done, sends those photos to the backend through this transaction. It's the moment the images leave the device and start being processed by image recognition — the automatic analysis of what appears in the photo. Each photo can carry a short label describing what it shows. Durante una visita, el representante de ventas toma fotos del punto de merchandising (góndola, punta de góndola, exhibición) y, al terminar, envía esas fotos al backend por esta transacción. Es el momento en que las imágenes salen del dispositivo y pasan a ser procesadas por reconocimiento de imagen — el análisis automático de lo que aparece en la foto. Cada foto puede llevar una etiqueta corta que describe lo que muestra.

Fotos da visitaVisit photosFotos de la visita

O rep captura uma ou mais fotos do merchandising no ponto de venda.The rep captures one or more photos of the merchandising at the point of sale.El rep captura una o más fotos del merchandising en el punto de venta.

Rótulo por fotoLabel per photoEtiqueta por foto

Cada foto pode receber um rótulo curto que descreve o que ela mostra.Each photo can get a short label describing what it shows.Cada foto puede recibir una etiqueta corta que describe lo que muestra.

Envio para análiseSend for analysisEnvío para análisis

Ao concluir, todas as fotos são enviadas de uma vez para reconhecimento de imagem.On finish, all photos are sent at once for image recognition.Al terminar, todas las fotos se envían de una vez para reconocimiento de imagen.

Só no BrasilBrazil onlySolo Brasil Esta transação existe apenas no Brasil. É hoje a única stack de reconhecimento de imagem de merchandising ativa no app (distinta da auditoria de imagem ImageAudit, doc 12, que também permanece ativa). This transaction exists only in Brazil. It is today the only active merchandising image-recognition stack in the app (distinct from the ImageAudit image-audit dispatch, doc 12, which also remains active). Esta transacción existe solo en Brasil. Es hoy la única stack de reconocimiento de imagen de merchandising activa en la app (distinta de la auditoría de imagen ImageAudit, doc 12, que también permanece activa).

02

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

A transação é o último passo da jornada de reconhecimento de imagem, dentro de uma visita. As telas do caminho pertencem à feature de Merchandising; aqui só situamos onde o envio acontece:The transaction is the last step of the image-recognition journey, inside a visit. The screens along the way belong to the Merchandising feature; here we only place where the send happens:La transacción es el último paso del recorrido de reconocimiento de imagen, dentro de una visita. Las pantallas del camino pertenecen a la feature de Merchandising; aquí solo situamos dónde ocurre el envío:

  1. Detalhe da visita → MerchandisingVisit detail → MerchandisingDetalle de la visita → MerchandisingO rep abre a área de merchandising da visita e escolhe reconhecimento de imagem.The rep opens the visit's merchandising area and picks image recognition.El rep abre el área de merchandising de la visita y elige reconocimiento de imagen.
  2. Capturar fotosCapture photosCapturar fotosTira uma ou mais fotos pela câmera; cada uma entra na lista.Takes one or more photos with the camera; each one joins the list.Toma una o más fotos con la cámara; cada una entra en la lista.
  3. Rotular (opcional)Label (optional)Etiquetar (opcional)Abre um modal para dar um rótulo curto a cada foto.Opens a modal to give each photo a short label.Abre un modal para dar a cada foto una etiqueta corta.
  4. Confirmar envioConfirm sendConfirmar envíoUm modal de confirmação mostra o resumo antes de enviar.A confirmation modal shows the summary before sending.Un modal de confirmación muestra el resumen antes de enviar.
  5. Enviar → esta transaçãoSend → this transactionEnviar → esta transacciónAo confirmar, o app dispara o Reconhecimento de imagem de merchandising. É este toque que aciona a transação.On confirm, the app fires Merchandising image recognition. This tap is what triggers the transaction.Al confirmar, la app dispara el Reconocimiento de imagen de merchandising. Este toque es lo que activa la transacción.
03

Depois do envioAfter sendingDespués del envío

Confirmação ao repConfirmation to the repConfirmación al rep
Quando o backend aceita, o app confirma o envio e limpa a lista de fotos — a captura recomeça vazia para uma próxima rodada. Se falhar, o rep vê um estado de erro e pode tentar de novo sem perder as fotos.When the backend accepts it, the app confirms the send and clears the photo list — capture starts empty again for a next round. If it fails, the rep sees an error state and can retry without losing the photos.Cuando el backend lo acepta, la app confirma el envío y limpia la lista de fotos — la captura vuelve a empezar vacía para una próxima ronda. Si falla, el rep ve un estado de error y puede reintentar sin perder las fotos.
Sem internetOfflineSin internet
O envio pode entrar em fila e ser reenviado quando a conexão volta — o rep não perde as fotos. Um reenvio pode, em tese, duplicar; o sistema usa um identificador de transação para evitar isso.The send may be queued and retried when the connection returns — the rep doesn't lose the photos. A retry could, in theory, duplicate; the system uses a transaction id to avoid that.El envío puede quedar en cola y reintentarse cuando vuelve la conexión — el rep no pierde las fotos. Un reenvío podría, en teoría, duplicar; el sistema usa un identificador de transacción para evitarlo.
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

Reconhecimento de imagem de merchandising é a transação de saída que envia as fotos capturadas na visita para o backend, sob o serviceName ServiceMerchanAudit. É disparada pelo notifier da tela de reconhecimento de imagem quando o rep confirma o envio. O payload é enxuto: identificação do rep e da conta, mais um array de fotos (contagem, data, rótulo, base64). Merchandising image recognition is the outbound transaction that sends the photos captured on the visit to the backend, under the ServiceMerchanAudit serviceName. It's fired by the image-recognition screen's notifier when the rep confirms the send. The payload is lean: rep and account identification, plus an array of photos (count, date, label, base64). Reconocimiento de imagen de merchandising es la transacción de salida que envía las fotos capturadas en la visita al backend, bajo el serviceName ServiceMerchanAudit. Se dispara desde el notifier de la pantalla de reconocimiento de imagen cuando el rep confirma el envío. El payload es escueto: identificación del rep y de la cuenta, más un array de fotos (conteo, fecha, etiqueta, base64).

Payload enxutoLean payloadPayload escueto

Quatro chaves na raiz (repSfid, accountSfid, sapCustomerId, items) e quatro por foto. Sem variantes, sem cabeçalho complexo.Four root keys (repSfid, accountSfid, sapCustomerId, items) and four per photo. No variants, no complex header.Cuatro claves en la raíz (repSfid, accountSfid, sapCustomerId, items) y cuatro por foto. Sin variantes, sin encabezado complejo.

Imagens em base64Base64 imagesImágenes en base64

Cada foto é lida do disco e enviada como string base64 no campo imageBase64 do item.Each photo is read from disk and sent as a base64 string in the item's imageBase64 field.Cada foto se lee del disco y se envía como string base64 en el campo imageBase64 del ítem.

RPC genéricoGeneric RPCRPC genérico

Passa pelo mesmo sendTransaction das demais transações, com o JSON no campo message e o serviceName como discriminador.Goes through the same sendTransaction as every other transaction, with the JSON in the message field and serviceName as the discriminator.Pasa por el mismo sendTransaction que las demás transacciones, con el JSON en el campo message y el serviceName como discriminador.

FontesSourcesFuentes BuildMerchandisingImageRecognitionDispatcherPayloadUseCase + MerchandisingImageRecognitionDispatcherPayloadInput + DispatcherType.imageRecognitionAudit + DispatcherConectaRep.proto. O input carrega entities cruas de domínio (CLAUDE.md §36); o build() constrói todo o wire. BuildMerchandisingImageRecognitionDispatcherPayloadUseCase + MerchandisingImageRecognitionDispatcherPayloadInput + DispatcherType.imageRecognitionAudit + DispatcherConectaRep.proto. The input carries raw domain entities (CLAUDE.md §36); build() constructs the entire wire. BuildMerchandisingImageRecognitionDispatcherPayloadUseCase + MerchandisingImageRecognitionDispatcherPayloadInput + DispatcherType.imageRecognitionAudit + 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 · discriminadorServiceMerchanAudit (sem prefixo Promo_: transação não tem promoção)discriminatorServiceMerchanAudit (no Promo_ prefix: the transaction has no promotion)discriminadorServiceMerchanAudit (sin prefijo Promo_: la transacción no tiene promoción)
dateReference
string · #3 · AAAA-MM-DD do envio (submittedAt)YYYY-MM-DD of the submission (submittedAt)AAAA-MM-DD del envío (submittedAt)
transactionReference
string · #4 · o accountSfid (correlação)the accountSfid (correlation)el accountSfid (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, serviceName, payload, transactionReference, dateReference). Não seta account nem tid (defaults). 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). It sets neither account nor tid (defaults). 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). No setea account ni tid (defaults). 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.

06

serviceName

Esta transação tem um único serviceName e não tem variantes. O DispatcherType.imageRecognitionAudit resolve para ServiceMerchanAudit; como a transação nunca carrega promoção, o builder chama resolveServiceName(hasPromotion: false) — nunca há prefixo Promo_. O destination do tipo é none (sem roteamento de destino downstream no app).This transaction has a single serviceName and no variants. DispatcherType.imageRecognitionAudit resolves to ServiceMerchanAudit; since the transaction never carries a promotion, the builder calls resolveServiceName(hasPromotion: false) — there's never a Promo_ prefix. The type's destination is none (no downstream destination routing in the app).Esta transacción tiene un único serviceName y no tiene variantes. DispatcherType.imageRecognitionAudit resuelve a ServiceMerchanAudit; como la transacción nunca lleva promoción, el builder llama resolveServiceName(hasPromotion: false) — nunca hay prefijo Promo_. El destination del tipo es none (sin ruteo de destino downstream en la app).

DispatcherType serviceName destination MercadosMarketsMercados
imageRecognitionAuditServiceMerchanAuditnoneBR

Transações irmãsSister transactionsTransacciones hermanas Faz parte da família de merchandising, que compartilha a feature de Merchandising: 14 · Criação de merchandising (CreateMerchan), 17 · Anotação (CreateMerchanAnnotation) e 18 · Ordem de serviço (BPOneServiceOrderUpsert). Cada uma tem seu próprio serviceName e doc separado. It's part of the merchandising family, which shares the Merchandising feature: 14 · Merchandising creation (CreateMerchan), 17 · Annotation (CreateMerchanAnnotation) and 18 · Service order (BPOneServiceOrderUpsert). Each has its own serviceName and separate doc. Forma parte de la familia de merchandising, que comparte la feature de Merchandising: 14 · Creación de merchandising (CreateMerchan), 17 · Anotación (CreateMerchanAnnotation) y 18 · Orden de servicio (BPOneServiceOrderUpsert). Cada una tiene su propio serviceName y doc separado.

07

Como é disparadoHow it's firedCómo se dispara

A transação é orquestrada pelo MerchandisingImageRecognitionNotifier.submit(). O notifier apenas reúne entities cruas e valores injetados (resource, sfid/código da conta, relógio, fotos + base64 já lidos); o builder é o dono único da derivação do repSfid, formatação de data e montagem do array de itens. A cascata:The transaction is orchestrated by MerchandisingImageRecognitionNotifier.submit(). The notifier only gathers raw entities and injected values (resource, account sfid/code, clock, photos + base64 already read); the builder is the sole owner of the repSfid derivation, date formatting and item-array assembly. The cascade:La transacción se orquesta desde MerchandisingImageRecognitionNotifier.submit(). El notifier solo reúne entities crudas y valores inyectados (resource, sfid/código de la cuenta, reloj, fotos + base64 ya leídos); el builder es el dueño único de la derivación del repSfid, formateo de fecha y armado del array de ítems. La cascada:

  • MerchandisingImageRecognitionNotifiersubmit()
    • lê base64 + reúne entities cruasreads base64 + gathers raw entitieslee base64 + reúne entities crudasMerchandisingImageRecognitionDispatcherPayloadInput
      • build()BuildMerchandisingImageRecognitionDispatcherPayloadUseCasemonta o wireassembles the wirearma el wire
        • devolvereturnsdevuelveDispatcherEnvelope
          • SubmitMerchandisingImageRecognitionUseCaseDispatcherOrchestrator
            • serializa + authserialize + authserializa + authDispatcherGateway
              • sendTransactionBackendgRPC

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

MerchandisingImageRecognitionDispatcherPayloadInput (Freezed). Carrega o dado como existe no domínio; nada de formato wire. O relógio chega como submittedAt (via DateTimeUtils.now()); os bytes de imagem chegam já lidos como photosBase64, na mesma ordem de photos.MerchandisingImageRecognitionDispatcherPayloadInput (Freezed). Carries data as it exists in the domain; no wire shaping. The clock arrives as submittedAt (via DateTimeUtils.now()); the image bytes arrive already read as photosBase64, in the same order as photos.MerchandisingImageRecognitionDispatcherPayloadInput (Freezed). Lleva el dato como existe en el dominio; nada de formato wire. El reloj llega como submittedAt (vía DateTimeUtils.now()); los bytes de imagen llegan ya leídos como photosBase64, en el mismo orden que photos.

CampoFieldCampoTipoTypeTipoPapelRoleRol
resourceResourceEntityrepresentante de vendas (cru — o builder deriva repSfid)sales rep (raw — the builder derives repSfid)representante de ventas (crudo — el builder deriva repSfid)
accountSfidStringaccountSfid + transactionReference
accountCodeStringsapCustomerId (código SAP da contaaccount SAP codecódigo SAP de la cuenta)
submittedAtDateTimerelógio do envio → dateReferencesubmission clock → dateReferencereloj del envío → dateReference
photosList<MerchandisingImageRecognitionPhotoEntity>fotos cruas: cada uma tem file, takenAt, labelraw photos: each has file, takenAt, labelfotos crudas: cada una tiene file, takenAt, label
photosBase64List<String>bytes já lidos (I/O resolvido no notifier), alinhados por índice a photosbytes already read (I/O resolved in the notifier), index-aligned to photosbytes ya leídos (I/O resuelto en el notifier), alineados por índice a photos
08

Payload (message)

O JSON serializado no campo message do request. As tabelas abaixo têm 4 colunasCampo JSON · Tipo · Origem do Dado · Regra — e listam toda chave que o build() emite (4 na raiz + 4 por item = 8 no total). 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 tables below have 4 columnsJSON field · Type · Data source · Rule — and list every key that build() emits (4 at the root + 4 per item = 8 total). 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. Las tablas abajo tienen 4 columnasCampo JSON · Tipo · Origen del Dato · Regla — y listan toda clave que build() emite (4 en la raíz + 4 por ítem = 8 en total). 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.

Raiz do payloadPayload rootRaíz del payload

Campo JSONTipoTypeTipoOrigem do DadoData sourceOrigen del DatoRegraRuleRegla
repSfidstringCalculadoresource.isPrimaryResource ? resource.primaryResourceSfid : resource.secondaryResourceSfidresource.isPrimaryResource ? resource.primaryResourceSfid : resource.secondaryResourceSfidresource.isPrimaryResource ? resource.primaryResourceSfid : resource.secondaryResourceSfid
accountSfidstringinput.accountSfid
sapCustomerIdstringinput.accountCodecódigo SAP da contaaccount SAP codecódigo SAP de la cuenta
itemsarrayloop sobre input.photosloop over input.photosloop sobre input.photosuma entrada por foto (ver tabela abaixo)one entry per photo (see table below)una entrada por foto (ver tabla abajo)
  • items[] um por fotoone per photouno por foto 4 camposfieldscampos
    Campo JSONTipoTypeTipoOrigem do DadoData sourceOrigen del DatoRegraRuleRegla
    countintCalculadoindex + 1 — sequencial 1-based na ordem de capturaindex + 1 — 1-based sequence in capture orderindex + 1 — secuencial 1-based en orden de captura
    datePhotoTakenstringphoto.takenAtformato dd/MM/yyyy - HH'h'mm (ex.: 17/08/2026 - 14h05)dd/MM/yyyy - HH'h'mm format (e.g. 17/08/2026 - 14h05)formato dd/MM/yyyy - HH'h'mm (p. ej. 17/08/2026 - 14h05)
    labelstringphoto.label.trim() aplicado; "" quando sem rótulo.trim() applied; "" when unlabeled.trim() aplicado; "" cuando sin etiqueta
    imageBase64stringinput.photosBase64[index]index < photosBase64.length ? photosBase64[index] : "" — guarda de índice; "" se faltarindex < photosBase64.length ? photosBase64[index] : "" — index guard; "" if missingindex < photosBase64.length ? photosBase64[index] : "" — guarda de índice; "" si falta
09

Regras de negócioBusiness rulesReglas de negocio

  • Derivação do repSfidrepSfid derivationDerivación del repSfid isPrimaryResource
    • O repSfid é derivado no build() a partir da ResourceEntity crua: rep primário → primaryResourceSfid; secundário → secondaryResourceSfid. O notifier passa a entity inteira; a derivação nunca vive no notifier (CLAUDE.md §36).The repSfid is derived in build() from the raw ResourceEntity: primary rep → primaryResourceSfid; secondary → secondaryResourceSfid. The notifier passes the whole entity; the derivation never lives in the notifier (CLAUDE.md §36).El repSfid se deriva en build() desde la ResourceEntity cruda: rep primario → primaryResourceSfid; secundario → secondaryResourceSfid. El notifier pasa la entity entera; la derivación nunca vive en el notifier (CLAUDE.md §36).
  • Alinhamento fotos ↔ base64photos ↔ base64 alignmentAlineación fotos ↔ base64 index guard
    • O loop percorre input.photos por índice; o imageBase64 é pareado por índice com input.photosBase64. Se, por qualquer razão, faltar um base64 no índice (index >= photosBase64.length), o item sai com imageBase64: "" em vez de estourar.The loop walks input.photos by index; imageBase64 is paired by index with input.photosBase64. If, for any reason, a base64 is missing at the index (index >= photosBase64.length), the item ships imageBase64: "" instead of throwing.El loop recorre input.photos por índice; el imageBase64 se empareja por índice con input.photosBase64. Si, por cualquier razón, falta un base64 en el índice (index >= photosBase64.length), el ítem sale con imageBase64: "" en vez de estallar.
    • O count é sempre index + 1 — sequencial 1-based, na ordem em que as fotos foram capturadas (a mesma ordem de photos).The count is always index + 1 — 1-based sequence, in the order the photos were captured (the same order as photos).El count es siempre index + 1 — secuencial 1-based, en el orden en que se capturaron las fotos (el mismo orden que photos).
  • Formatação de dataDate formattingFormateo de fecha datePhotoTaken · dateReference
    • datePhotoTaken (por foto): DateTimeUtils.formatDate com DateFormatType.dayMonthYearDashHourLabeldd/MM/yyyy - HH'h'mm. Data legível da captura (dado do item).datePhotoTaken (per photo): DateTimeUtils.formatDate with DateFormatType.dayMonthYearDashHourLabeldd/MM/yyyy - HH'h'mm. Human-readable capture date (item data).datePhotoTaken (por foto): DateTimeUtils.formatDate con DateFormatType.dayMonthYearDashHourLabeldd/MM/yyyy - HH'h'mm. Fecha legible de la captura (dato del ítem).
    • dateReference (do envelope, não do payload): DateTimeUtils.formatDate(dateTime: input.submittedAt) com o formato default isoDateyyyy-MM-dd. Data wire do envio.dateReference (from the envelope, not the payload): DateTimeUtils.formatDate(dateTime: input.submittedAt) with the default isoDate format → yyyy-MM-dd. Wire submission date.dateReference (del envelope, no del payload): DateTimeUtils.formatDate(dateTime: input.submittedAt) con el formato default isoDateyyyy-MM-dd. Fecha wire del envío.
  • transactionReference accountSfid
    • O transactionReference do envelope é o input.accountSfid — correlaciona o despacho à conta visitada. Não há campo account populado no envelope (fica default null).The envelope's transactionReference is input.accountSfid — it correlates the dispatch to the visited account. There's no account field populated on the envelope (stays default null).El transactionReference del envelope es input.accountSfid — correlaciona el despacho con la cuenta visitada. No hay campo account poblado en el envelope (queda default null).
10

Pendências / roadmapPending / roadmapPendientes / roadmap

Estado atual do código, documentado fiel (nunca descrito como se fosse além do que já existe):Current code state, documented faithfully (never described beyond what already exists):Estado actual del código, documentado fiel (nunca descrito más allá de lo que ya existe):

Contexto / pendenteContext / pendingContexto / pendiente

  • Única stack de reconhecimento de imagem hoje. Esta transação (ServiceMerchanAudit) é a única stack de reconhecimento de imagem ativa no app. Isso não significa que a auditoria de imagem ImageAudit (DispatcherType.merchandisingImageAudit, doc 12) tenha sido removida — ela permanece uma transação de dispatch ativa e distinta, com BuildRetailAuditUploadDispatcherPayloadUseCase, SubmitRetailAuditUploadUseCase e MerchandisingImageAuditNotifier todos wired. A nota de projeto sobre "remoção" se referia à stack de leitura/exibição de resultados de auditoria, não ao builder de despacho.Only image-recognition stack today. This transaction (ServiceMerchanAudit) is the only active image-recognition stack in the app. This does not mean the ImageAudit image audit (DispatcherType.merchandisingImageAudit, doc 12) was removed — it remains an active, distinct dispatch transaction, with BuildRetailAuditUploadDispatcherPayloadUseCase, SubmitRetailAuditUploadUseCase and MerchandisingImageAuditNotifier all wired. The project note about "removal" referred to the audit-results reading/display stack, not the dispatch builder.Única stack de reconocimiento de imagen hoy. Esta transacción (ServiceMerchanAudit) es la única stack de reconocimiento de imagen activa en la app. Esto no significa que la auditoría de imagen ImageAudit (DispatcherType.merchandisingImageAudit, doc 12) haya sido removida — permanece una transacción de dispatch activa y distinta, con BuildRetailAuditUploadDispatcherPayloadUseCase, SubmitRetailAuditUploadUseCase y MerchandisingImageAuditNotifier todos wired. La nota de proyecto sobre "remoción" se refería a la stack de lectura/exhibición de resultados de auditoría, no al builder de despacho.
  • imageBase64: "" quando o base64 falta no índice: guarda defensiva; não há hoje um caminho que produza essa divergência (o notifier lê um base64 por foto), mas o builder não estoura se acontecer.imageBase64: "" when the base64 is missing at the index: a defensive guard; there's no path today that produces that mismatch (the notifier reads one base64 per photo), but the builder won't throw if it happens.imageBase64: "" cuando falta el base64 en el índice: guarda defensiva; hoy no hay un camino que produzca esa divergencia (el notifier lee un base64 por foto), pero el builder no estalla si ocurre.
  • 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).

MercadosMarketsMercados

A disponibilidade da transação vem do DispatcherType.imageRecognitionAudit.enabledMarkets = [BR]. Existe apenas no Brasil. Os demais mercados não têm este dispatcher.Transaction availability comes from DispatcherType.imageRecognitionAudit.enabledMarkets = [BR]. It exists only in Brazil. Other markets have no such dispatcher.La disponibilidad de la transacción viene de DispatcherType.imageRecognitionAudit.enabledMarkets = [BR]. Existe solo en Brasil. Los demás mercados no tienen este dispatcher.

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

Só no BrasilBrazil onlySolo Brasil A transação e a feature de reconhecimento de imagem de merchandising são específicas do Brasil. destination = none: sem roteamento de destino downstream configurado no app. The merchandising image-recognition transaction and feature are Brazil-specific. destination = none: no downstream destination routing configured in the app. La transacción y la feature de reconocimiento de imagen de merchandising son específicas de Brasil. destination = none: sin ruteo de destino downstream configurado en la app.

CL · ZA · AR · PY · PE Não têm este dispatcher — nenhum lista o mercado em enabledMarkets. O reconhecimento de imagem de merchandising não é disparado nesses mercados. Have no such dispatcher — none list the market in enabledMarkets. Merchandising image recognition is not fired in these markets. No tienen este dispatcher — ninguno lista el mercado en enabledMarkets. El reconocimiento de imagen de merchandising no se dispara en estos mercados.