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.
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.
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:
- 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.
- 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.
- 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.
- 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.
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.
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.
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 ·type.destination.value— vazio ("") para esta transação (DispatcherDestination.none)type.destination.value— empty ("") for this transaction (DispatcherDestination.none)type.destination.value— vacío ("") para esta transacción (DispatcherDestination.none)serviceNamestring· #2 · discriminador —ImageAudit(sem prefixoPromo_)discriminator —ImageAudit(noPromo_prefix)discriminador —ImageAudit(sin prefijoPromo_)dateReferencestring· #3 ·AAAA-MM-DDdo envio (formatDate(submittedAt))YYYY-MM-DDof the submission (formatDate(submittedAt))AAAA-MM-DDdel envío (formatDate(submittedAt))transactionReferencestring· #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)usernamestring· #5 ·resource.username(do gateway, não do envelope)resource.username(from the gateway, not the envelope)resource.username(del gateway, no del envelope)messagestring· #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"REP"hoje (ver Pendências)"REP"literal today (see Pending)literal"REP"hoy (ver Pendientes)deviceVersionstring· #10 · dado do dispositivodevice datadato del dispositivotidint64· #11 ·envelope.tid— 0 aqui (o builder não define; ver Pendências)envelope.tid— 0 here (the builder doesn't set it; see Pending)envelope.tid— 0 aquí (el builder no lo define; ver Pendientes)
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, 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.
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 / Input | BuildRetailAuditUpload… · RetailAuditUploadDispatcherPayloadInput | nomeados retail audit (auditoria de varejo)named retail auditnombrados retail audit (auditoría de PDV) |
DispatcherType | merchandisingImageAudit | nomeado merchandising image auditnamed merchandising image auditnombrado merchandising image audit |
serviceName (wire) | ImageAudit | o 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.
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
- serializa + authserialize + authserializa + authDispatcherGateway
- send()DispatcherRepository
- SubmitRetailAuditUploadUseCaseDispatcherOrchestrator+ histórico+ history+ historial
- devolvereturnsdevuelveDispatcherEnvelope
- build()BuildRetailAuditUploadDispatcherPayloadUseCasemonta o wireassembles the wirearma el wire
- reúne entities cruas + injetadosgathers raw entities + injectedreúne entities crudas + inyectadosRetailAuditUploadDispatcherPayloadInput
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).
| CampoFieldCampo | TipoTypeTipo | PapelRoleRol |
|---|---|---|
resource | ResourceEntity | representante 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) |
accountSfid | String | sfid 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) |
sapCustomerId | String | código SAP do varejo (account.customerCode)retail SAP code (account.customerCode)código SAP del punto de venta (account.customerCode) |
pieces | List<RetailAuditPieceInput> | peças: id, brand, frontImageBase64, backImageBase64?pieces: id, brand, frontImageBase64, backImageBase64?piezas: id, brand, frontImageBase64, backImageBase64? |
submittedAt | DateTime | relógio (DateTimeUtils.now()) → dateReferenceclock (DateTimeUtils.now()) → dateReferencereloj (DateTimeUtils.now()) → dateReference |
transactionReference | String | REF-{uuid v4} · correlaçãocorrelationcorrelación |
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 (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 columns — JSON 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 columnas — Campo 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 JSON | TipoTypeTipo | Origem do DadoData sourceOrigen del Dato | RegraRuleRegla |
|---|---|---|---|
repSfid | string | input.resource.sfid | sfid do representante de vendassales rep sfidsfid del representante de ventas |
accountSfid | string | input.accountSfid | sfid do varejoretail sfidsfid del punto de venta |
sapCustomerId | string | input.sapCustomerId | código SAP do varejoretail SAP codecódigo SAP del punto de venta |
pieces | array | _wirePiece | uma 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 defrente(frontImageBase64, sempre) e — só sebackImageBase64 != null— uma detras. Ambas repetemidepieceType; diferem emtype,filenameeimageBase64.For eachRetailAuditPieceInput, the builder emits onefrenteentry (frontImageBase64, always) and — only ifbackImageBase64 != null— onetras. Both repeatidandpieceType; they differ intype,filenameandimageBase64.Para cadaRetailAuditPieceInput, el builder emite una entradafrente(frontImageBase64, siempre) y — solo sibackImageBase64 != null— unatras. Ambas repitenidypieceType; difieren entype,filenameeimageBase64.Campo JSON TipoTypeTipo Origem do DadoData sourceOrigen del Dato RegraRuleRegla idint piece.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) typestring Fixo: "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)filenamestring Calculado"peca_{id}_{type}.jpg"(extensão fixajpg)"peca_{id}_{type}.jpg"(fixedjpgextension)"peca_{id}_{type}.jpg"(extensión fijajpg)imageBase64string piece.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) pieceTypestring piece.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
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 afrenteentry (frontImageBase64, a required input field).Cada pieza del input genera siempre una entradafrente(frontImageBase64, campo obligatorio del input). - A entrada
trassó é adicionada quandobackImageBase64 != null. Uma peça sem verso vira uma entrada; com verso, duas.Thetrasentry is added only whenbackImageBase64 != null. A piece without a back becomes one entry; with a back, two.La entradatrasse agrega solo cuandobackImageBase64 != null. Una pieza sin dorso es una entrada; con dorso, dos. - O
ide opieceTypesão compartilhados entre frente e verso — é assim que o backend recompõe a peça a partir das duas fotos.TheidandpieceTypeare shared between front and back — that's how the backend reassembles the piece from the two photos.Elidy elpieceTypese 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.pieceTypeemiteMerchandisingPieceBrand.valuecru — inclui o literal"Peça própria"(em português) paraownPiece. É valor de contrato, não label de UI.pieceTypeemits the rawMerchandisingPieceBrand.value— includes the"Peça própria"literal (in Portuguese) forownPiece. It's a contract value, not a UI label.pieceTypeemite elMerchandisingPieceBrand.valuecrudo — incluye el literal"Peça própria"(en portugués) paraownPiece. Es valor de contrato, no label de UI.filenameé sempre.jpg(_imageExtensionfixo), independentemente do formato real da foto capturada.filenameis always.jpg(fixed_imageExtension), regardless of the captured photo's real format.filenamees siempre.jpg(_imageExtensionfijo), independientemente del formato real de la foto capturada.
Sem Promo_, sem varianteNo Promo_, no variantSin Promo_, sin variante serviceName
serviceNamevem detype.resolveServiceName(hasPromotion: false)— fixo emImageAudit. Esta transação não participa do mecanismo de promoções (nunca ganha o prefixoPromo_).serviceNamecomes fromtype.resolveServiceName(hasPromotion: false)— fixed atImageAudit. This transaction doesn't take part in the promotions mechanism (never gets thePromo_prefix).serviceNameviene detype.resolveServiceName(hasPromotion: false)— fijo enImageAudit. Esta transacción no participa del mecanismo de promociones (nunca recibe el prefijoPromo_).destination = DispatcherDestination.none→endpoint = "". A transação é enviada por gRPC normalmente; o roteamento fica por conta doserviceName, sem endpoint nomeado.destination = DispatcherDestination.none→endpoint = "". The transaction is sent over gRPC normally; routing is driven by theserviceName, with no named endpoint.destination = DispatcherDestination.none→endpoint = "". La transacción se envía por gRPC normalmente; el ruteo queda a cargo delserviceName, sin endpoint nombrado.
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 defineenvelope.tid, então vai0no request. ComomerchandisingImageAudit.resendMayDuplicate == true, um reenvio pode duplicar a auditoria no backend e não há idempotência viatidhoje.tid: the builder doesn't setenvelope.tid, so it goes as0in the request. SincemerchandisingImageAudit.resendMayDuplicate == true, a resend can duplicate the audit on the backend and there's notid-based idempotency today.tid: el builder no defineenvelope.tid, así que va0en el request. ComomerchandisingImageAudit.resendMayDuplicate == true, un reenvío puede duplicar la auditoría en el backend y no hay idempotencia víatidhoy.- Transporte:
deviceUuidvai como literal"REP"no gateway (pendência conhecida do Dispatcher, comum a todas as transações).Transport:deviceUuidships as the literal"REP"in the gateway (known Dispatcher pending item, shared by all transactions).Transporte:deviceUuidva como literal"REP"en el gateway (pendiente conocido del Dispatcher, común a todas las transacciones). type/pieceTypeviajam 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/pieceTypetravel with Portuguese literals (frente,tras,Peça própria) — they depend on the backend contract; any normalization is a lockstep contract change.type/pieceTypeviajan 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.
Transações irmãsSister transactionsTransacciones hermanas Faz parte do grupo de merchandising: 13 · Reconhecimento de imagem, 14 · Criação, 15 · Auditoria de unidade, 16 · Rastreamento de ativo, 17 · Anotação, 18 · Ordem de serviço. Part of the merchandising group: 13 · Image recognition, 14 · Creation, 15 · Unit audit, 16 · Asset item tracking, 17 · Annotation, 18 · Service order. Parte del grupo de merchandising: 13 · Reconocimiento de imagen, 14 · Creación, 15 · Auditoría de unidad, 16 · Seguimiento de activo, 17 · Anotación, 18 · Orden de servicio.
MercadosMarketsMercados
A disponibilidade da transação vem do DispatcherType.merchandisingImageAudit.enabledMarkets — só 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.enabledMarkets — BR 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.enabledMarkets — solo BR. Es el proveedor de auditoría de PDV de Brasil; los otros mercados usan proveedores distintos (transacciones hermanas) y no disparan esta.
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).
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.