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

Auditoria de imagem de merchandisingMerchandising image auditAuditoría de imagen de merchandising

A transação de escrita que envia ao backend as fotos de merchandising tiradas no ponto de venda para uma auditoria de imagem. O representante de vendas fotografa cada peça (marca + frente e, opcionalmente, verso) durante a visita e envia o lote. Um único builder monta o payload JSON — não há variantes; toda a construção do contrato wire vive no builder. The write transaction that sends the merchandising photos taken at the store to the backend for an image audit. The sales rep photographs each piece (brand + front and, optionally, back) during the visit and submits the batch. A single builder assembles the JSON payload — no variants; all wire-contract construction lives in the builder. La transacción de escritura que envía al backend las fotos de merchandising tomadas en el punto de venta para una auditoría de imagen. El representante de ventas fotografía cada pieza (marca + frente y, opcionalmente, dorso) durante la visita y envía el lote. Un único builder arma el payload JSON — no hay variantes; 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 registra o estado do merchandising do varejo tirando fotos das peças (displays, materiais de ponto de venda). Ao concluir o registro e enviar a auditoria, o app manda essas fotos ao backend para que sejam auditadas — é essa transação. É o momento em que as fotos saem do dispositivo e passam a existir no sistema, onde depois aparece o resultado da auditoria. During a visit, the sales rep records the retail's merchandising state by photographing the pieces (displays, point-of-sale materials). When they finish and submit the audit, the app sends those photos to the backend to be audited — that is this transaction. It's the moment the photos leave the device and start to exist in the system, where the audit result later shows up. Durante una visita, el representante de ventas registra el estado del merchandising del punto de venta fotografiando las piezas (displays, materiales de punto de venta). Al terminar y enviar la auditoría, la app manda esas fotos al backend para que sean auditadas — esa es esta transacción. Es el momento en que las fotos salen del dispositivo y pasan a existir en el sistema, donde luego aparece el resultado de la auditoría.

Uma peça, até duas fotosOne piece, up to two photosUna pieza, hasta dos fotos

Cada peça tem uma marca e uma foto de frente (obrigatória) e, quando faz sentido, uma de verso.Each piece has a brand and a front photo (required) and, when it makes sense, a back one.Cada pieza tiene una marca y una foto de frente (obligatoria) y, cuando tiene sentido, una de dorso.

Um lote por envioOne batch per sendUn lote por envío

O rep monta a lista de peças e envia tudo de uma vez, num único lote de auditoria.The rep builds the list of pieces and submits everything at once, in a single audit batch.El rep arma la lista de piezas y envía todo de una vez, en un único lote de auditoría.

Confirmação antes de enviarConfirmation before sendingConfirmación antes de enviar

O envio pede uma confirmação por modal — evita disparar a auditoria por engano.Sending asks for a modal confirmation — avoids firing the audit by mistake.El envío pide una confirmación por modal — evita disparar la auditoría por error.

Um fornecedor entre váriosOne vendor among severalUn proveedor entre varios Esta é a auditoria de imagem do Brasil. É um dos fornecedores de auditoria de varejo do ecossistema de Merchandising; outros mercados usam fornecedores diferentes (reconhecimento de imagem, auditoria de unidade), documentados nas transações irmãs. This is Brazil's image audit. It's one of the retail-audit vendors of the Merchandising ecosystem; other markets use different vendors (image recognition, unit audit), documented in the sister transactions. Esta es la auditoría de imagen de Brasil. Es uno de los proveedores de auditoría de PDV del ecosistema de Merchandising; otros mercados usan proveedores distintos (reconocimiento de imagen, auditoría de unidad), documentados en las transacciones hermanas.

02

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

A transação é o último passo da auditoria de imagem. As telas do caminho pertencem à feature de Merchandising; aqui só situamos onde o envio acontece:The transaction is the last step of the image audit. 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 de la auditoría de imagen. Las pantallas del camino pertenecen a la feature de Merchandising; aquí solo situamos dónde ocurre el envío:

  1. Menu de merchandising → AuditoriaMerchandising menu → AuditMenú de merchandising → AuditoríaA partir da visita, o rep abre o menu de merchandising e escolhe a auditoria de imagem.From the visit, the rep opens the merchandising menu and picks the image audit.Desde la visita, el rep abre el menú de merchandising y elige la auditoría de imagen.
  2. Adicionar peçaAdd pieceAgregar piezaPara cada peça: escolhe a marca, indica se tem frente/verso e tira as fotos com a câmera.For each piece: pick the brand, indicate whether it has front/back and take the photos with the camera.Para cada pieza: elige la marca, indica si tiene frente/dorso y toma las fotos con la cámara.
  3. Revisar o loteReview the batchRevisar el loteA tela lista as peças adicionadas; o rep pode remover ou tirar mais fotos antes de enviar.The screen lists the added pieces; the rep can remove or take more photos before sending.La pantalla lista las piezas agregadas; el rep puede quitar o tomar más fotos antes de enviar.
  4. Enviar → confirmação → esta transaçãoSend → confirmation → this transactionEnviar → confirmación → esta transacciónAo tocar em enviar, um modal de confirmação aparece; confirmar dispara a auditoria de imagem. É esse toque que aciona a transação.Tapping send brings up a confirmation modal; confirming fires the image audit. This tap is what triggers the transaction.Al tocar enviar, aparece un modal de confirmación; confirmar dispara la auditoría de imagen. Este toque es lo que activa la transacción.

Botão só habilita com peçasButton enables only with piecesBotón habilita solo con piezas O botão de enviar só fica ativo quando há pelo menos uma peça com foto no lote — não é possível enviar uma auditoria vazia. The send button only becomes active when there's at least one piece with a photo in the batch — an empty audit can't be sent. El botón de enviar solo se activa cuando hay al menos una pieza con foto en el lote — no se puede enviar una auditoría vacía.

03

Depois do envioAfter sendingDespués del envío

Confirmação ao repConfirmation to the repConfirmación al rep
Quando o backend aceita, o envio é confirmado e a auditoria passa a constar na lista de resultados de auditoria de imagem — que aparece como em análise até o fornecedor processar as fotos.When the backend accepts it, the send is confirmed and the audit appears in the image-audit results list — shown as in analysis until the vendor processes the photos.Cuando el backend lo acepta, el envío se confirma y la auditoría aparece en la lista de resultados de auditoría de imagen — mostrada como en análisis hasta que el proveedor procese las fotos.
Sem internetOfflineSin internet
O envio exige conexão: offline, a transação é bloqueada e o rep é avisado. As fotos ficam no dispositivo para reenviar quando a conexão volta.Sending requires a connection: offline, the transaction is blocked and the rep is warned. The photos stay on the device to be resent when the connection returns.El envío exige conexión: sin internet, la transacción se bloquea y se avisa al rep. Las fotos quedan en el dispositivo para reenviar cuando vuelve la conexión.
Acompanhar o envioTracking the sendSeguir el envío
O status técnico do despacho (enviado, com erro) fica registrado no histórico de despachos do app — útil para o suporte investigar um envio.The dispatch's technical status (sent, errored) is recorded in the app's dispatch history — useful for support to investigate a send.El estado técnico del despacho (enviado, con error) queda registrado en el historial de despachos de la app — útil para que soporte investigue un envío.
04

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

Auditoria de imagem de merchandising é a transação de saída que envia as fotos das peças do PDV ao backend, via o Dispatcher. É disparada pelo fluxo de merchandising quando o representante de vendas conclui e envia uma auditoria de imagem. As fotos são a fonte; o resultado é uma auditoria que passa a aparecer na feature de Merchandising. Merchandising image audit is the outbound transaction that sends the store's piece photos to the backend, through the Dispatcher. It's fired by the merchandising flow when the sales rep finishes and submits an image audit. The photos are the source; the result is an audit that then shows up in the Merchandising feature. Auditoría de imagen de merchandising es la transacción de salida que envía las fotos de las piezas del PDV al backend, vía el Dispatcher. Se dispara desde el flujo de merchandising cuando el representante de ventas termina y envía una auditoría de imagen. Las fotos son la fuente; el resultado es una auditoría que luego aparece en la feature de Merchandising.

Payload enxutoLean payloadPayload conciso

O contrato wire tem só a identificação (rep, varejo, SAP) e um array de peças. Sem variantes, sem promoções, sem impostos.The wire contract carries only the identification (rep, retail, SAP) and an array of pieces. No variants, no promotions, no taxes.El contrato wire lleva solo la identificación (rep, punto de venta, SAP) y un array de piezas. Sin variantes, sin promociones, sin impuestos.

Uma peça vira 1–2 entradasOne piece → 1–2 entriesUna pieza → 1–2 entradas

Cada peça do input explode em uma entrada de frente (sempre) e uma de tras (só quando há verso), ambas com o mesmo id.Each input piece explodes into a frente entry (always) and a tras one (only when there's a back), both with the same id.Cada pieza del input explota en una entrada frente (siempre) y una tras (solo cuando hay dorso), ambas con el mismo id.

RPC genéricoGeneric RPCRPC genérico

Não há RPC próprio: passa pelo mesmo sendTransaction, com o JSON no campo message e o serviceName ImageAudit como discriminador.There's no dedicated RPC: it goes through the same sendTransaction, with the JSON in the message field and the ImageAudit serviceName as the discriminator.No hay RPC propio: pasa por el mismo sendTransaction, con el JSON en el campo message y el serviceName ImageAudit como discriminador.

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

05

Transporte gRPCgRPC transportTransporte gRPC

DispatcherConectaRep.proto · proto3 · package mn.bat.conectarep.dispatcher. O serviço expõe um único RPC genérico — não existe mensagem por transação. TODA transação de escrita do app usa este mesmo sendTransaction; o que muda é o serviceName (discriminador) e o JSON dentro de message.The service exposes a single generic RPC — there's no per-transaction message. EVERY write transaction in the app uses this same sendTransaction; what changes is the serviceName (discriminator) and the JSON inside message.El servicio expone un único RPC genérico — no existe mensaje por transacción. TODA transacción de escritura de la app usa este mismo sendTransaction; lo que cambia es el serviceName (discriminador) y el JSON dentro de message.

sendTransactionunary
MétodoMethodMétodo

rpc sendTransaction(InboxTransactionRequest) returns (InboxTransactionReply)

path /mn.bat.conectarep.dispatcher.DispatcherConectaRepService/sendTransaction

Request · InboxTransactionRequest
endpoint
string · #1 · type.destination.valuevazio ("") para esta transação (DispatcherDestination.none)type.destination.valueempty ("") for this transaction (DispatcherDestination.none)type.destination.valuevacío ("") para esta transacción (DispatcherDestination.none)
serviceName
string · #2 · discriminadorImageAudit (sem prefixo Promo_)discriminatorImageAudit (no Promo_ prefix)discriminadorImageAudit (sin prefijo Promo_)
dateReference
string · #3 · AAAA-MM-DD do envio (formatDate(submittedAt))YYYY-MM-DD of the submission (formatDate(submittedAt))AAAA-MM-DD del envío (formatDate(submittedAt))
transactionReference
string · #4 · REF-{uuid v4} gerado no notifier (correlação)REF-{uuid v4} generated in the notifier (correlation)REF-{uuid v4} generado en el notifier (correlación)
username
string · #5 · resource.username (do gateway, não do envelope)resource.username (from the gateway, not the envelope)resource.username (del gateway, no del envelope)
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 "REP" hoje (ver Pendências)"REP" literal today (see Pending)literal "REP" hoy (ver Pendientes)
deviceVersion
string · #10 · dado do dispositivodevice datadato del dispositivo
tid
int64 · #11 · envelope.tid0 aqui (o builder não define; ver Pendências)envelope.tid0 here (the builder doesn't set it; see Pending)envelope.tid0 aquí (el builder no lo define; ver Pendientes)
Reply · InboxTransactionReply
status
int32 · #1 · status do ack (0 = sucesso)ack status (0 = success)status del ack (0 = éxito)
message
string · #2 · mensagem do backendbackend messagemensaje del backend
transactionId
int32 · #3 · id atribuído pelo backend (correlação)backend-assigned id (correlation)id asignado por el backend (correlación)

Envelope → Request O builder devolve um DispatcherEnvelope (type, serviceName, payload, account, transactionReference, dateReference). O DispatcherGateway serializa payload em JSON para message, copia serviceName/dateReference/transactionReference, preenche os campos de dispositivo e o bearer token de auth, e chama o RPC. O account do envelope não vai no request — serve só ao histórico de despachos; a identidade do varejo chega ao backend pelo payload. The builder returns a DispatcherEnvelope (type, serviceName, payload, account, transactionReference, dateReference). The DispatcherGateway serializes payload to JSON into message, copies serviceName/dateReference/transactionReference, fills in the device fields and the auth bearer token, and calls the RPC. The envelope's account is not in the request — it only serves the dispatch history; the retail identity reaches the backend via the payload. El builder devuelve un DispatcherEnvelope (type, serviceName, payload, account, transactionReference, dateReference). El DispatcherGateway serializa payload a JSON en message, copia serviceName/dateReference/transactionReference, completa los campos del dispositivo y el bearer token de auth, y llama al RPC. El account del envelope no va en el request — solo sirve al historial de despachos; la identidad del punto de venta llega al backend por el payload.

Envio bloqueado offline (NetworkException) e reautenticação automática numa falha unauthenticated (reenvia uma vez com token renovado). Com mock ligado, o gateway devolve um ack simulado sem tocar a rede.Send is blocked offline (NetworkException) and re-authentication is automatic on an unauthenticated failure (resends once with a refreshed token). With mock on, the gateway returns a simulated ack without hitting the network.Envío bloqueado offline (NetworkException) y reautenticación automática ante un fallo unauthenticated (reenvía una vez con token renovado). Con mock activo, el gateway devuelve un ack simulado sin tocar la red.

06

serviceName e nomenclaturaserviceName & namingserviceName y nomenclatura

Esta transação tem uma única variante: um DispatcherType → um serviceName, sem split e sem prefixo Promo_ (resolveServiceName(hasPromotion: false)). O ponto de atenção é a nomenclatura em três nomes diferentes para a mesma coisa:This transaction has a single variant: one DispatcherType → one serviceName, no split and no Promo_ prefix (resolveServiceName(hasPromotion: false)). The thing to watch is the three different names for the same thing:Esta transacción tiene una única variante: un DispatcherType → un serviceName, sin split y sin prefijo Promo_ (resolveServiceName(hasPromotion: false)). El punto de atención es la nomenclatura en tres nombres distintos para lo mismo:

CamadaLayerCapa Nome no códigoName in codeNombre en el código ObservaçãoNoteObservación
Builder / InputBuilder / InputBuilder / InputBuildRetailAuditUpload… · RetailAuditUploadDispatcherPayloadInputnomeados retail audit (auditoria de varejo)named retail auditnombrados retail audit (auditoría de PDV)
DispatcherTypemerchandisingImageAuditnomeado merchandising image auditnamed merchandising image auditnombrado merchandising image audit
serviceName (wire)ImageAudito discriminador que o backend enxergathe discriminator the backend seesel discriminador que ve el backend

Três nomes, uma transaçãoThree names, one transactionTres nombres, una transacción Ao rastrear um envio, lembre que retail audit (builder/input), merchandisingImageAudit (DispatcherType) e ImageAudit (serviceName) são a mesma transação. Nos logs e no backend, procure por ImageAudit. When tracing a send, remember that retail audit (builder/input), merchandisingImageAudit (DispatcherType) and ImageAudit (serviceName) are the same transaction. In logs and on the backend, look for ImageAudit. Al rastrear un envío, recuerde que retail audit (builder/input), merchandisingImageAudit (DispatcherType) e ImageAudit (serviceName) son la misma transacción. En los logs y en el backend, busque ImageAudit.

07

Como é disparadoHow it's firedCómo se dispara

A transação é orquestrada pelo notifier da tela de auditoria de imagem (remote-first, §36). O notifier reúne entities cruas e valores injetados; o builder é o dono único de todo rename, formatação e derivação wire. A cascata:The transaction is orchestrated by the image-audit screen's notifier (remote-first, §36). The notifier gathers raw entities and injected values; the builder is the sole owner of every rename, formatting and wire derivation. The cascade:La transacción se orquesta desde el notifier de la pantalla de auditoría de imagen (remote-first, §36). El notifier reúne entities crudas y valores inyectados; el builder es el dueño único de todo rename, formateo y derivación wire. La cascada:

  • MerchandisingImageAuditNotifiersubmit()
    • reúne entities cruas + injetadosgathers raw entities + injectedreúne entities crudas + inyectadosRetailAuditUploadDispatcherPayloadInput
      • build()BuildRetailAuditUploadDispatcherPayloadUseCasemonta o wireassembles the wirearma el wire
        • devolvereturnsdevuelveDispatcherEnvelope
          • SubmitRetailAuditUploadUseCaseDispatcherOrchestrator+ histórico+ history+ historial
            • send()DispatcherRepository
              • serializa + authserialize + authserializa + authDispatcherGateway
                • sendTransactionBackendgRPC

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

RetailAuditUploadDispatcherPayloadInput (Freezed). Carrega o dado como existe no domínio; nada de formato wire. O relógio chega como submittedAt (DateTimeUtils.now()) e o transactionReference como REF-{uuid}, ambos injetados pelo notifier; as fotos já chegam como base64 (I/O resolvido no notifier via captureService.readAsBase64).RetailAuditUploadDispatcherPayloadInput (Freezed). Carries data as it exists in the domain; no wire shaping. The clock arrives as submittedAt (DateTimeUtils.now()) and the transactionReference as REF-{uuid}, both injected by the notifier; the photos arrive already as base64 (I/O resolved in the notifier via captureService.readAsBase64).RetailAuditUploadDispatcherPayloadInput (Freezed). Lleva el dato como existe en el dominio; nada de formato wire. El reloj llega como submittedAt (DateTimeUtils.now()) y el transactionReference como REF-{uuid}, ambos inyectados por el notifier; las fotos llegan ya como base64 (I/O resuelto en el notifier vía captureService.readAsBase64).

CampoFieldCampoTipoTypeTipoPapelRoleRol
resourceResourceEntityrepresentante de vendas (cru — o builder usa resource.sfid direto, sem derivação primary/secondary)sales rep (raw — the builder uses resource.sfid directly, no primary/secondary derivation)representante de ventas (crudo — el builder usa resource.sfid directo, sin derivación primary/secondary)
accountSfidStringsfid do varejo (state.account.sfid, da visita)retail sfid (state.account.sfid, from the visit)sfid del punto de venta (state.account.sfid, de la visita)
sapCustomerIdStringcódigo SAP do varejo (account.customerCode)retail SAP code (account.customerCode)código SAP del punto de venta (account.customerCode)
piecesList<RetailAuditPieceInput>peças: id, brand, frontImageBase64, backImageBase64?pieces: id, brand, frontImageBase64, backImageBase64?piezas: id, brand, frontImageBase64, backImageBase64?
submittedAtDateTimerelógio (DateTimeUtils.now()) → dateReferenceclock (DateTimeUtils.now()) → dateReferencereloj (DateTimeUtils.now()) → dateReference
transactionReferenceStringREF-{uuid v4} · correlaçãocorrelationcorrelación
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 (4 na raiz + 5 por peça = 9 no total). 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 (4 at the root + 5 per piece = 9 total). 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 (4 en la raíz + 5 por pieza = 9 en total). 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
repSfidstringinput.resource.sfidsfid do representante de vendassales rep sfidsfid del representante de ventas
accountSfidstringinput.accountSfidsfid do varejoretail sfidsfid del punto de venta
sapCustomerIdstringinput.sapCustomerIdcódigo SAP do varejoretail SAP codecódigo SAP del punto de venta
piecesarray_wirePieceuma entrada por foto: frente sempre + tras quando há verso (ver dropdown)one entry per photo: frente always + tras when there's a back (see dropdown)una entrada por foto: frente siempre + tras cuando hay dorso (ver dropdown)
  • pieces[] por fotoper photopor foto 5 camposfieldscampos

    Para cada RetailAuditPieceInput, o builder emite uma entrada de frente (frontImageBase64, sempre) e — só se backImageBase64 != nulluma de tras. Ambas repetem id e pieceType; diferem em type, filename e imageBase64.For each RetailAuditPieceInput, the builder emits one frente entry (frontImageBase64, always) and — only if backImageBase64 != nullone tras. Both repeat id and pieceType; they differ in type, filename and imageBase64.Para cada RetailAuditPieceInput, el builder emite una entrada frente (frontImageBase64, siempre) y — solo si backImageBase64 != nulluna tras. Ambas repiten id y pieceType; difieren en type, filename e imageBase64.

    Campo JSONTipoTypeTipoOrigem do DadoData sourceOrigen del DatoRegraRuleRegla
    idintpiece.idid da peça (mesmo valor na frente e no verso da mesma peça)piece id (same value on a piece's front and back)id de la pieza (mismo valor en el frente y el dorso de la misma pieza)
    typestringFixo: "frente" / "tras"face da foto — literais wire em português (_frontType / _backType)photo face — Portuguese wire literals (_frontType / _backType)cara de la foto — literales wire en portugués (_frontType / _backType)
    filenamestringCalculado"peca_{id}_{type}.jpg" (extensão fixa jpg)"peca_{id}_{type}.jpg" (fixed jpg extension)"peca_{id}_{type}.jpg" (extensión fija jpg)
    imageBase64stringpiece.frontImageBase64 / backImageBase64conteúdo base64 da foto (resolvido no notifier)the photo's base64 content (resolved in the notifier)contenido base64 de la foto (resuelto en el notifier)
    pieceTypestringpiece.brand?.value ?? ""marca (MerchandisingPieceBrand.value): BAT/PMI/JTI/Peça própria; "" quando sem marcabrand (MerchandisingPieceBrand.value): BAT/PMI/JTI/Peça própria; "" when no brandmarca (MerchandisingPieceBrand.value): BAT/PMI/JTI/Peça própria; "" cuando sin marca
09

Regras de negócioBusiness rulesReglas de negocio

Expansão frente/versoFront/back expansionExpansión frente/dorso pieces
  • Cada peça do input gera sempre uma entrada frente (frontImageBase64, campo obrigatório no input).Each input piece always produces a frente entry (frontImageBase64, a required input field).Cada pieza del input genera siempre una entrada frente (frontImageBase64, campo obligatorio del input).
  • A entrada tras só é adicionada quando backImageBase64 != null. Uma peça sem verso vira uma entrada; com verso, duas.The tras entry is added only when backImageBase64 != null. A piece without a back becomes one entry; with a back, two.La entrada tras se agrega solo cuando backImageBase64 != null. Una pieza sin dorso es una entrada; con dorso, dos.
  • O id e o pieceType são compartilhados entre frente e verso — é assim que o backend recompõe a peça a partir das duas fotos.The id and pieceType are shared between front and back — that's how the backend reassembles the piece from the two photos.El id y el pieceType se comparten entre frente y dorso — así el backend recompone la pieza a partir de las dos fotos.
Literais do contrato wireWire-contract literalsLiterales del contrato wire type · pieceType · filename
  • type: "frente" / "tras" são strings literais do contrato (em português), não traduções — o backend espera exatamente esses valores.type: "frente" / "tras" are literal contract strings (in Portuguese), not translations — the backend expects exactly these values.type: "frente" / "tras" son strings literales del contrato (en portugués), no traducciones — el backend espera exactamente esos valores.
  • pieceType emite MerchandisingPieceBrand.value cru — inclui o literal "Peça própria" (em português) para ownPiece. É valor de contrato, não label de UI.pieceType emits the raw MerchandisingPieceBrand.value — includes the "Peça própria" literal (in Portuguese) for ownPiece. It's a contract value, not a UI label.pieceType emite el MerchandisingPieceBrand.value crudo — incluye el literal "Peça própria" (en portugués) para ownPiece. Es valor de contrato, no label de UI.
  • filename é sempre .jpg (_imageExtension fixo), independentemente do formato real da foto capturada.filename is always .jpg (fixed _imageExtension), regardless of the captured photo's real format.filename es siempre .jpg (_imageExtension fijo), independientemente del formato real de la foto capturada.
Sem Promo_, sem varianteNo Promo_, no variantSin Promo_, sin variante serviceName
  • serviceName vem de type.resolveServiceName(hasPromotion: false)fixo em ImageAudit. Esta transação não participa do mecanismo de promoções (nunca ganha o prefixo Promo_).serviceName comes from type.resolveServiceName(hasPromotion: false)fixed at ImageAudit. This transaction doesn't take part in the promotions mechanism (never gets the Promo_ prefix).serviceName viene de type.resolveServiceName(hasPromotion: false)fijo en ImageAudit. Esta transacción no participa del mecanismo de promociones (nunca recibe el prefijo Promo_).
  • destination = DispatcherDestination.noneendpoint = "". A transação é enviada por gRPC normalmente; o roteamento fica por conta do serviceName, sem endpoint nomeado.destination = DispatcherDestination.noneendpoint = "". The transaction is sent over gRPC normally; routing is driven by the serviceName, with no named endpoint.destination = DispatcherDestination.noneendpoint = "". La transacción se envía por gRPC normalmente; el ruteo queda a cargo del serviceName, sin endpoint nombrado.
10

Pendências / roadmapPending / roadmapPendientes / roadmap

O que o builder/transporte ainda envia inerte ou provisório, documentado fiel ao estado atual do código (nunca descrito como se já existisse):What the builder/transport still ships inert or provisional, documented faithfully to the current code state (never described as already existing):Lo que el builder/transporte aún envía inerte o provisional, documentado fiel al estado actual del código (nunca descrito como si ya existiera):

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

  • tid: o builder não define envelope.tid, então vai 0 no request. Como merchandisingImageAudit.resendMayDuplicate == true, um reenvio pode duplicar a auditoria no backend e não há idempotência via tid hoje.tid: the builder doesn't set envelope.tid, so it goes as 0 in the request. Since merchandisingImageAudit.resendMayDuplicate == true, a resend can duplicate the audit on the backend and there's no tid-based idempotency today.tid: el builder no define envelope.tid, así que va 0 en el request. Como merchandisingImageAudit.resendMayDuplicate == true, un reenvío puede duplicar la auditoría en el backend y no hay idempotencia vía tid hoy.
  • Transporte: deviceUuid vai como literal "REP" no gateway (pendência conhecida do Dispatcher, comum a todas as transações).Transport: deviceUuid ships as the literal "REP" in the gateway (known Dispatcher pending item, shared by all transactions).Transporte: deviceUuid va como literal "REP" en el gateway (pendiente conocido del Dispatcher, común a todas las transacciones).
  • type/pieceType viajam com literais em português (frente, tras, Peça própria) — dependem do contrato do backend; qualquer normalização é mudança de contrato lockstep.type/pieceType travel with Portuguese literals (frente, tras, Peça própria) — they depend on the backend contract; any normalization is a lockstep contract change.type/pieceType viajan con literales en portugués (frente, tras, Peça própria) — dependen del contrato del backend; cualquier normalización es un cambio de contrato lockstep.

MercadosMarketsMercados

A disponibilidade da transação vem do DispatcherType.merchandisingImageAudit.enabledMarketssó BR. É o fornecedor de auditoria de varejo do Brasil; os outros mercados usam fornecedores diferentes (transações irmãs) e não disparam esta.Transaction availability comes from DispatcherType.merchandisingImageAudit.enabledMarketsBR only. It's Brazil's retail-audit vendor; other markets use different vendors (sister transactions) and don't fire this one.La disponibilidad de la transacción viene de DispatcherType.merchandisingImageAudit.enabledMarketssolo BR. Es el proveedor de auditoría de PDV de Brasil; los otros mercados usan proveedores distintos (transacciones hermanas) y no disparan esta.

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

Só no BrasilBrazil onlySolo Brasil A auditoria de imagem (ImageAudit) é o fornecedor de auditoria de varejo do Brasil. O envio é por lote de peças com foto de frente (e verso opcional). Image audit (ImageAudit) is Brazil's retail-audit vendor. The send is a batch of pieces with a front photo (and optional back). La auditoría de imagen (ImageAudit) es el proveedor de auditoría de PDV de Brasil. El envío es un lote de piezas con foto de frente (y dorso opcional).

ZACL

Outros fornecedoresOther vendorsOtros proveedores ZA/CL não usam esta transação: a África do Sul audita peça por peça (15 · Auditoria de unidade) e ZA/CL rastreiam ativos (16 · Rastreamento de ativo). ZA/CL don't use this transaction: South Africa audits piece by piece (15 · Unit audit) and ZA/CL track assets (16 · Asset item tracking). ZA/CL no usan esta transacción: Sudáfrica audita pieza por pieza (15 · Auditoría de unidad) y ZA/CL rastrean activos (16 · Seguimiento de activo).

AR · PY · PE Existem como mercados do app (config PANGEA mínima), mas não têm auditoria de imagem — não constam em enabledMarkets. A transação não é disparada nesses mercados. They exist as app markets (minimal PANGEA config), but have no image audit — not in enabledMarkets. The transaction is not fired in these markets. Existen como mercados de la app (config PANGEA mínima), pero no tienen auditoría de imagen — no están en enabledMarkets. La transacción no se dispara en estos mercados.