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

Envio de notasNotes uploadEnvío de notas

A transação de escrita que envia ao backend uma nota do varejo — um lembrete/observação que o representante de vendas registra sobre um ponto de venda, com título, texto e anexos opcionais (fotos/arquivos). O mesmo envelope cobre criar e excluir uma nota, distinguidos pelo campo isDeleted. Toda a construção do contrato wire vive no builder. The write transaction that sends a retail note to the backend — a reminder/observation the sales rep records about a point of sale, with a title, text and optional attachments (photos/files). The same envelope covers create and delete of a note, told apart by the isDeleted field. All wire-contract construction lives in the builder. La transacción de escritura que envía al backend una nota del punto de venta — un recordatorio/observación que el representante de ventas registra sobre un local, con título, texto y adjuntos opcionales (fotos/archivos). El mismo envelope cubre crear y eliminar una nota, distinguidos por el campo isDeleted. 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
AtualizadoUpdatedActualizado
17/08/20262026-08-17
Disponível emAvailable inDisponible en CL
01

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

Quando o representante de vendas salva uma nota sobre um varejo, o app envia essa nota ao backend por esta transação. A nota é um registro livre (título + texto) que pode acompanhar anexos — fotos ou arquivos capturados na hora. É assim que uma anotação sai do dispositivo e passa a existir no sistema, ficando associada àquele ponto de venda. When the sales rep saves a note about a retail, the app sends that note to the backend through this transaction. The note is a free-form record (title + text) that may carry attachments — photos or files captured on the spot. This is how an annotation leaves the device and starts to exist in the system, tied to that point of sale. Cuando el representante de ventas guarda una nota sobre un punto de venta, la app envía esa nota al backend por esta transacción. La nota es un registro libre (título + texto) que puede llevar adjuntos — fotos o archivos capturados al momento. Así una anotación sale del dispositivo y pasa a existir en el sistema, asociada a ese local.

A mesma transação atende dois gestos do rep:The same transaction serves two gestures by the rep:La misma transacción atiende dos gestos del rep:

Criar / salvar notaCreate / save noteCrear / guardar nota

O rep escreve título e texto, anexa fotos/arquivos e salva. A nota é enviada e passa a valer para aquele varejo.The rep writes a title and text, attaches photos/files and saves. The note is sent and starts to apply to that retail.El rep escribe título y texto, adjunta fotos/archivos y guarda. La nota se envía y pasa a valer para ese punto de venta.

Excluir notaDelete noteEliminar nota

O rep remove uma nota existente. O envio é o mesmo, só marcado como exclusão — o backend a remove.The rep removes an existing note. The send is the same, just flagged as a deletion — the backend removes it.El rep elimina una nota existente. El envío es el mismo, solo marcado como eliminación — el backend la quita.

Um gesto, um envioOne gesture, one sendUn gesto, un envío Cada nota salva ou excluída é um envio independente. Não há lote: salvar duas notas dispara a transação duas vezes. Each note saved or deleted is one independent send. There's no batch: saving two notes fires the transaction twice. Cada nota guardada o eliminada es un envío independiente. No hay lote: guardar dos notas dispara la transacción dos veces.

02

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

A transação é o passo final ao salvar ou excluir uma nota. As telas pertencem à feature de Notas do varejo; aqui só situamos onde o envio acontece:The transaction is the final step when saving or deleting a note. The screens belong to the Retail notes feature; here we only place where the send happens:La transacción es el paso final al guardar o eliminar una nota. Las pantallas pertenecen a la feature de Notas del punto de venta; aquí solo situamos dónde ocurre el envío:

  1. Lista de notas do varejoRetail notes listLista de notas del punto de ventaAbrindo um varejo, o rep vê as notas existentes e o botão de nova nota.Opening a retail, the rep sees the existing notes and the new-note button.Al abrir un punto de venta, el rep ve las notas existentes y el botón de nueva nota.
  2. Editor da notaNote editorEditor de la notaO rep escreve título e texto e anexa fotos/arquivos.The rep writes a title and text and attaches photos/files.El rep escribe título y texto y adjunta fotos/archivos.
  3. Salvar → esta transaçãoSave → this transactionGuardar → esta transacciónAo tocar em salvar, o app lê os anexos, monta o envio e dispara o Envio de notas.Tapping save, the app reads the attachments, assembles the send and fires Notes upload.Al tocar guardar, la app lee los adjuntos, arma el envío y dispara el Envío de notas.
  4. Excluir → mesma transaçãoDelete → same transactionEliminar → misma transacciónExcluir uma nota da lista dispara a mesma transação, marcada como exclusão.Deleting a note from the list fires the same transaction, flagged as a deletion.Eliminar una nota de la lista dispara la misma transacción, marcada como eliminación.
03

Depois do envioAfter sendingDespués del envío

Confirmação ao repConfirmation to the repConfirmación al rep
Quando o backend aceita, a nota fica confirmada e associada ao varejo; excluir remove a nota do sistema. A lista de notas do varejo reflete o resultado.When the backend accepts it, the note is confirmed and tied to the retail; deleting removes it from the system. The retail's notes list reflects the result.Cuando el backend lo acepta, la nota queda confirmada y asociada al punto de venta; eliminar la quita del sistema. La lista de notas del local refleja el resultado.
Sem internetOfflineSin internet
O envio pode entrar em fila e ser reenviado quando a conexão volta — o rep não perde a nota. Um reenvío 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 note. 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 la nota. 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

Envio de notas é a transação de saída que persiste uma nota de varejo no backend. É disparada pela feature de Notas do varejo ao salvar (submitNote) ou excluir (deleteNote) uma nota. O payload é enxuto: um único envelope AccNoteData com um objeto de nota e seus anexos em base64. Notes upload is the outbound transaction that persists a retail note in the backend. It's fired by the Retail notes feature when saving (submitNote) or deleting (deleteNote) a note. The payload is lean: a single AccNoteData envelope with one note object and its base64 attachments. Envío de notas es la transacción de salida que persiste una nota de punto de venta en el backend. Se dispara desde la feature de Notas del punto de venta al guardar (submitNote) o eliminar (deleteNote) una nota. El payload es escueto: un único envelope AccNoteData con un objeto de nota y sus adjuntos en base64.

Um builder, um envioOne builder, one sendUn builder, un envío

BuildNotesDispatcherPayloadUseCase não tem variantes: monta sempre o mesmo AccNoteData. Criar vs. excluir é só o booleano isDeleted no input.BuildNotesDispatcherPayloadUseCase has no variants: it always assembles the same AccNoteData. Create vs. delete is just the isDeleted boolean on the input.BuildNotesDispatcherPayloadUseCase no tiene variantes: siempre arma el mismo AccNoteData. Crear vs. eliminar es solo el booleano isDeleted del input.

Anexos em base64Base64 attachmentsAdjuntos en base64

Os arquivos capturados são lidos como base64 no notifier e injetados como attachments crus; o builder só normaliza a extensão do tipo.Captured files are read as base64 in the notifier and injected as raw attachments; the builder only normalizes the type extension.Los archivos capturados se leen como base64 en el notifier y se inyectan como attachments crudos; el builder solo normaliza la extensión del tipo.

RPC genéricoGeneric RPCRPC genérico

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

FontesSourcesFuentes BuildNotesDispatcherPayloadUseCase + NotesDispatcherPayloadInput + DispatcherType.notes + DispatcherConectaRep.proto. O input carrega entities cruas de domínio (CLAUDE.md §36); o build() constrói todo o wire. BuildNotesDispatcherPayloadUseCase + NotesDispatcherPayloadInput + DispatcherType.notes + DispatcherConectaRep.proto. The input carries raw domain entities (CLAUDE.md §36); build() constructs the entire wire. BuildNotesDispatcherPayloadUseCase + NotesDispatcherPayloadInput + DispatcherType.notes + 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. Para notas, serviceName = NoteUploadAPI.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. For notes, serviceName = NoteUploadAPI.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. Para notas, serviceName = NoteUploadAPI.

sendTransactionunary
MétodoMethodMétodo

rpc sendTransaction(InboxTransactionRequest) returns (InboxTransactionReply)

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

Request · InboxTransactionRequest
endpoint
string · #1 · destino salesforce (DispatcherType.notes.destination.value)target salesforce (DispatcherType.notes.destination.value)destino salesforce (DispatcherType.notes.destination.value)
serviceName
string · #2 · discriminador — sempre NoteUploadAPI (sem prefixo Promo_; notas nunca têm promoção)discriminator — always NoteUploadAPI (no Promo_ prefix; notes never carry a promotion)discriminador — siempre NoteUploadAPI (sin prefijo Promo_; las notas nunca tienen 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 note.id (correlação)the note.id (correlation)el note.id (correlación)
username
string · #5 · resource.username (preenchido no gateway)resource.username (filled in the gateway)resource.username (completado en el gateway)
message
string · #6 · o payload JSON serializado (a tabela da seção 07)the JSON payload serialized (the table in section 07)el payload JSON serializado (la tabla de la sección 07)
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
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, 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. 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. 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.

Para notas, resendMayDuplicate == true: um reenvio (ex.: recuperação de fila offline) pode duplicar a nota no backend; a idempotência via tid é o que mitiga isso.For notes, resendMayDuplicate == true: a resend (e.g. offline-queue recovery) may duplicate the note on the backend; idempotency via tid is what mitigates it.Para notas, resendMayDuplicate == true: un reenvío (p. ej. recuperación de cola offline) puede duplicar la nota en el backend; la idempotencia vía tid es lo que lo mitiga.

06

Como é disparadoHow it's firedCómo se dispara

A transação é orquestrada pela feature de Notas (remote-first, §36). O notifier apenas reúne entities cruas e valores injetados (o base64 dos anexos é resolvido no notifier); o builder é o dono único da montagem do wire — derivação do resourceSfid, normalização de extensão e formatação de data. A cascata:The transaction is orchestrated by the Notes feature (remote-first, §36). The notifier only gathers raw entities and injected values (attachment base64 is resolved in the notifier); the builder is the sole owner of the wire assembly — resourceSfid derivation, extension normalization and date formatting. The cascade:La transacción se orquesta desde la feature de Notas (remote-first, §36). El notifier solo reúne entities crudas y valores inyectados (el base64 de los adjuntos se resuelve en el notifier); el builder es el dueño único del armado del wire — derivación del resourceSfid, normalización de extensión y formateo de fecha. La cascada:

  • NotesNotifiersubmitNote · deleteNote
    • reúne entities cruas + base64gathers raw entities + base64reúne entities crudas + base64NotesDispatcherPayloadInput
      • build()BuildNotesDispatcherPayloadUseCasemonta o wireassembles the wirearma el wire
        • devolvereturnsdevuelveDispatcherEnvelope
          • SubmitNotesUseCaseDispatcherOrchestrator
            • serializa + authserialize + authserializa + authDispatcherGateway
              • sendTransactionBackendgRPC

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

NotesDispatcherPayloadInput (Freezed). Carrega o dado como existe no domínio; nada de formato wire. O relógio chega como submittedAt (via DateTimeUtils.now()); os anexos já chegam com o conteúdo lido em base64.NotesDispatcherPayloadInput (Freezed). Carries data as it exists in the domain; no wire shaping. The clock arrives as submittedAt (via DateTimeUtils.now()); attachments arrive with their content already read as base64.NotesDispatcherPayloadInput (Freezed). Lleva el dato como existe en el dominio; nada de formato wire. El reloj llega como submittedAt (vía DateTimeUtils.now()); los adjuntos llegan con su contenido ya leído en base64.

CampoFieldCampoTipoTypeTipoPapelRoleRol
noteNoteEntitynota crua — o builder lê id, title, textraw note — the builder reads id, title, textnota cruda — el builder lee id, title, text
accountSfidStringretailerId + DispatchAccountEntity.sfid
attachmentsList<NoteAttachmentUploadInput>fileName · fileType · base64 (já lido)fileName · fileType · base64 (already read)fileName · fileType · base64 (ya leído)
isDeletedboolisDeleted (criar = false, excluir = truecreate = false, delete = truecrear = false, eliminar = true)
resourceResourceEntityrepresentante de vendas (cru — o builder deriva resourceSfid)sales rep (raw — the builder derives resourceSfid)representante de ventas (crudo — el builder deriva resourceSfid)
submittedAtDateTimedateReference (yyyy-MM-dd)
07

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. Campo, Tipo e Origem são código cru; só a Regra é prosa. Um exemplo completo (variante CL) 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. Field, Type and Source are raw code; only Rule is prose. A full example (CL variant) 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. Campo, Tipo y Origen son código crudo; solo la Regla es prosa. Un ejemplo completo (variante CL) está en transaction_example.json, junto a este doc.

Raiz do payloadPayload rootRaíz del payload

Campo JSONTipoTypeTipoOrigem do DadoData sourceOrigen del DatoRegraRuleRegla
AccNoteDataarray[accNote]array de um único objeto (a nota)single-element array (the note)array de un solo objeto (la nota)
  • AccNoteData[] objeto únicosingle objectobjeto único 7 camposfieldscampos
    Campo JSONTipoTypeTipoOrigem do DadoData sourceOrigen del DatoRegraRuleRegla
    idstringnote.idid da nota (novo = note_<millis>, gerado no notifier); também vira transactionReferencenote id (new = note_<millis>, generated in the notifier); also becomes transactionReferenceid de la nota (nuevo = note_<millis>, generado en el notifier); también se vuelve transactionReference
    retailerIdstringinput.accountSfidSFID do varejo a que a nota pertenceSFID of the retail the note belongs toSFID del punto de venta al que pertenece la nota
    titlestringnote.titletítulo (já trim()-ado no notifier)title (already trim()-med in the notifier)título (ya trim()-eado en el notifier)
    textPreviewstringnote.textcorpo da nota (já trim()-ado no notifier)note body (already trim()-med in the notifier)cuerpo de la nota (ya trim()-eado en el notifier)
    isDeletedboolinput.isDeletedfalse ao criar/salvar, true ao excluirfalse on create/save, true on deletefalse al crear/guardar, true al eliminar
    resourceSfidstringCalculadoresource.isPrimaryResource ? primaryResourceSfid : secondaryResourceSfidresource.isPrimaryResource ? primaryResourceSfid : secondaryResourceSfidresource.isPrimaryResource ? primaryResourceSfid : secondaryResourceSfid
    attachmentsarrayinput.attachmentsuma entrada por anexo capturado; [] quando não há anexo (ex.: exclusão)one entry per captured attachment; [] when there's none (e.g. deletion)una entrada por adjunto capturado; [] cuando no hay ninguno (p. ej. eliminación)
    • attachments[] por anexoper attachmentpor adjunto 3 camposfieldscampos
      Campo JSONTipoTypeTipoOrigem do DadoData sourceOrigen del DatoRegraRuleRegla
      filenamestringattachment.fileNamenome do arquivo (cru)file name (raw)nombre del archivo (crudo)
      fileTypestringattachment.fileType.replaceAll(".", "").toLowerCase()extensão normalizada — sem ponto, minúscula (ex.: jpg, pdf)normalized extension — no dot, lowercase (e.g. jpg, pdf)extensión normalizada — sin punto, minúscula (p. ej. jpg, pdf)
      base64stringattachment.base64conteúdo do arquivo em base64 (lido no notifier)file content in base64 (read in the notifier)contenido del archivo en base64 (leído en el notifier)
08

Regras de negócioBusiness rulesReglas de negocio

Derivação do resourceSfidresourceSfid derivationDerivación del resourceSfid isPrimaryResource
  • O resourceSfid não vem pronto: o builder escolhe entre resource.primaryResourceSfid e resource.secondaryResourceSfid conforme resource.isPrimaryResource — identifica qual rep registrou a nota (§25 — escrita usa o sfid do rep).The resourceSfid isn't ready-made: the builder picks between resource.primaryResourceSfid and resource.secondaryResourceSfid based on resource.isPrimaryResource — it identifies which rep recorded the note (§25 — writes use the rep's sfid).El resourceSfid no viene listo: el builder elige entre resource.primaryResourceSfid y resource.secondaryResourceSfid según resource.isPrimaryResource — identifica qué rep registró la nota (§25 — la escritura usa el sfid del rep).
Normalização da extensão do anexoAttachment extension normalizationNormalización de la extensión del adjunto fileType
  • fileType é sanitizado no build(): replaceAll(".", "") remove qualquer ponto e toLowerCase() força minúsculas — então .JPG vira jpg. A extensão em si é derivada no notifier a partir do nome do arquivo (_extensionOf).fileType is sanitized in build(): replaceAll(".", "") strips any dot and toLowerCase() forces lowercase — so .JPG becomes jpg. The extension itself is derived in the notifier from the file name (_extensionOf).fileType se sanea en build(): replaceAll(".", "") quita cualquier punto y toLowerCase() fuerza minúsculas — así .JPG se vuelve jpg. La extensión en sí se deriva en el notifier a partir del nombre del archivo (_extensionOf).
Criar vs. excluir (mesmo envelope)Create vs. delete (same envelope)Crear vs. eliminar (mismo envelope) isDeleted · attachments
  • O builder não distingue os dois casos — quem os separa é o notifier: submitNote chama com isDeleted: false e a lista de anexos; deleteNote chama com isDeleted: true e attachments: [].The builder doesn't tell the two cases apart — the notifier does: submitNote calls with isDeleted: false and the attachment list; deleteNote calls with isDeleted: true and attachments: [].El builder no distingue los dos casos — lo hace el notifier: submitNote llama con isDeleted: false y la lista de adjuntos; deleteNote llama con isDeleted: true y attachments: [].
serviceName · dateReference · transactionReference envelope
  • serviceName = type.resolveServiceName(hasPromotion: false) → sempre NoteUploadAPI; notas nunca recebem o prefixo Promo_.serviceName = type.resolveServiceName(hasPromotion: false) → always NoteUploadAPI; notes never get the Promo_ prefix.serviceName = type.resolveServiceName(hasPromotion: false) → siempre NoteUploadAPI; las notas nunca reciben el prefijo Promo_.
  • dateReference = DateTimeUtils.formatDate(dateTime: input.submittedAt)yyyy-MM-dd (default isoDate).dateReference = DateTimeUtils.formatDate(dateTime: input.submittedAt)yyyy-MM-dd (default isoDate).dateReference = DateTimeUtils.formatDate(dateTime: input.submittedAt)yyyy-MM-dd (default isoDate).
  • transactionReference = note.id (correlação/idempotência); account = DispatchAccountEntity(sfid: input.accountSfid).transactionReference = note.id (correlation/idempotency); account = DispatchAccountEntity(sfid: input.accountSfid).transactionReference = note.id (correlación/idempotencia); account = DispatchAccountEntity(sfid: input.accountSfid).
09

Pendências / roadmapPending / roadmapPendientes / roadmap

O que o builder não emite, documentado fiel ao estado atual do código (nunca descrito como se já existisse):What the builder does not emit, documented faithfully to the current code state (never described as already existing):Lo que el builder no emite, documentado fiel al estado actual del código (nunca descrito como si ya existiera):

Não enviado / pendenteNot sent / pendingNo enviado / pendiente

  • Timestamps da nota (note.createdAt, note.updatedAt) existem na entity mas não entram no payload — a única data enviada é o dateReference do envelope (submittedAt, yyyy-MM-dd).The note's timestamps (note.createdAt, note.updatedAt) exist on the entity but do not enter the payload — the only date sent is the envelope's dateReference (submittedAt, yyyy-MM-dd).Los timestamps de la nota (note.createdAt, note.updatedAt) existen en la entity pero no entran en el payload — la única fecha enviada es el dateReference del envelope (submittedAt, yyyy-MM-dd).
  • Anexos já enviados (note.attachmentsNoteAttachmentEntity com fileUrl) não são reenviados: o builder emite só input.attachments (recém-capturados, em base64).Already-uploaded attachments (note.attachmentsNoteAttachmentEntity with fileUrl) are not re-sent: the builder emits only input.attachments (freshly captured, in base64).Adjuntos ya enviados (note.attachmentsNoteAttachmentEntity con fileUrl) no se reenvían: el builder emite solo input.attachments (recién capturados, en base64).
  • Transporte: deviceUuid vai como literal provisório "REP" no gateway (pendência conhecida do Dispatcher, comum a todas as transações).Transport: deviceUuid ships as a provisional "REP" literal in the gateway (known Dispatcher pending item, shared by all transactions).Transporte: deviceUuid va como literal provisional "REP" en el gateway (pendiente conocido del Dispatcher, común a todas las transacciones).

MercadosMarketsMercados

A disponibilidade da transação vem do DispatcherType.notes.enabledMarketssó o Chile (CL). A feature de Notas do varejo é exclusiva do Chile; nenhum outro mercado dispara este envio.Transaction availability comes from DispatcherType.notes.enabledMarketsChile only (CL). The Retail notes feature is Chile-exclusive; no other market fires this send.La disponibilidad de la transacción viene de DispatcherType.notes.enabledMarketssolo Chile (CL). La feature de Notas del punto de venta es exclusiva de Chile; ningún otro mercado dispara este envío.

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

Só no ChileChile onlySolo Chile A transação inteira é específica do Chile. O payload não tem nenhuma ramificação por mercado — a mesma estrutura vale para toda nota chilena, com ou sem anexo. The whole transaction is Chile-specific. The payload has no per-market branching — the same structure applies to every Chilean note, with or without an attachment. La transacción entera es específica de Chile. El payload no tiene ninguna ramificación por mercado — la misma estructura vale para toda nota chilena, con o sin adjunto.

BR · ZA · AR · PY · PE Nenhum destes mercados lista notes em enabledMarkets — a criação/exclusão de notas de varejo não é disparada fora do Chile. None of these markets list notes in enabledMarkets — retail-note create/delete is not fired outside Chile. Ninguno de estos mercados lista notes en enabledMarkets — la creación/eliminación de notas de punto de venta no se dispara fuera de Chile.