Referencia de datos del recibo
Las plantillas HTML sin lógica y las plantillas XML térmicas de WCPOS se generan a partir del mismo payload canónico de recibo. Se utilizan rutas de puntos Mustache como {{order.number}}, {{store.name}} y {{totals.total_display}}. Los arrays se representan con secciones:
{{#lines}}
{{name}} x {{qty}} — {{line_total_display}}
{{/lines}}
El contrato canónico es generado por el constructor de datos de recibo de WCPOS en el servidor y replicado por el renderizador de recibos sin conexión en la aplicación. Los recibos se abren inmediatamente a partir de los datos locales y luego se actualizan con la respuesta del servidor cuando está disponible, por lo que las plantillas personalizadas deben utilizar los campos que se indican a continuación en lugar de los métodos PHP de pedido.
Reglas de representación
Campos de moneda
Los campos monetarios numéricos se conservan como números y el renderizador añade campos _display con formato adaptado a la configuración regional para la salida de la plantilla:
| Campo numérico | Campo de visualización |
|---|---|
totals.total | totals.total_display |
lines[].line_total | lines[].line_total_display |
payments[].amount | payments[].amount_display |
tax_summary[].tax_amount | tax_summary[].tax_amount_display |
Se recomienda utilizar los campos _display al imprimir recibos. Los campos numéricos deben usarse únicamente para secciones condicionales o salida legible por máquina.
Campos con visualización de impuestos
Varios campos tienen variantes con impuestos incluidos y excluidos, además de un valor de conveniencia para la visualización. El valor de conveniencia sigue la configuración de visualización de impuestos del carrito de la tienda.
| Campo de conveniencia | Campo con impuestos incluidos | Campo con impuestos excluidos |
|---|---|---|
lines[].unit_price | lines[].unit_price_incl | lines[].unit_price_excl |
lines[].unit_subtotal | lines[].unit_subtotal_incl | lines[].unit_subtotal_excl |
lines[].line_subtotal | lines[].line_subtotal_incl | lines[].line_subtotal_excl |
lines[].discounts | lines[].discounts_incl | lines[].discounts_excl |
lines[].line_total | lines[].line_total_incl | lines[].line_total_excl |
fees[].total | fees[].total_incl | fees[].total_excl |
shipping[].total | shipping[].total_incl | shipping[].total_excl |
discounts[].total | discounts[].total_incl | discounts[].total_excl |
totals.subtotal | totals.subtotal_incl | totals.subtotal_excl |
totals.discount_total | totals.discount_total_incl | totals.discount_total_excl |
totals.total | totals.total_incl | totals.total_excl |
Objetos de fecha
Los campos de fecha son objetos con múltiples variantes preformateadas. Esto evita realizar el formateo de fechas dentro de Mustache.
| Campo | Descripción |
|---|---|
datetime, date, time | Cadenas de fecha/hora predeterminadas |
datetime_short, datetime_long, datetime_full | Formatos combinados adaptados a la configuración regional |
date_short, date_long, date_full | Formatos de solo fecha adaptados a la configuración regional |
date_ymd, date_dmy, date_mdy | Formatos de fecha con orden fijo |
weekday_short, weekday_long | Nombres de días |
day, month, month_short, month_long, year | Partes individuales de la fecha |
Objetos de fecha disponibles: order.created, order.paid, order.completed, order.printed y refunds[].date. order.printed se actualiza en el momento de la renderización, lo cual es útil para reimpresiones.
Secciones de nivel superior
| Sección | Tipo | Descripción |
|---|---|---|
order | objeto | Identidad del pedido, estado, fechas, nota e información de URL de pago |
store | objeto | Identidad de la tienda, dirección, datos de contacto, identificaciones fiscales, logotipo, horario y texto de pie de página |
cashier | objeto | Usuario que procesó el pedido |
customer | objeto | Nombre para mostrar del cliente, direcciones e identificaciones fiscales |
lines | arreglo | Líneas de productos |
fees | arreglo | Filas de tarifas |
shipping | arreglo | Filas de envío |
discounts | arreglo | Filas de cupones/descuentos |
totals | objeto | Totales del pedido, totales de pago, resumen de reembolsos y recuentos de artículos |
tax | objeto | Indicadores del modo de visualización de impuestos para guardas de sección |
tax_summary | arreglo | Filas de resumen de impuestos por tasa |
has_tax_summary | booleano | Guarda de conveniencia para tax_summary |
payments | arreglo | Filas de pago |
refunds | arreglo | Registros de reembolso aplicados al pedido |
fiscal | objeto | Campos de datos fiscales completados por integraciones fiscales |
presentation_hints | objeto | Indicaciones de formato y renderizado |
i18n | objeto | Etiquetas traducidas para plantillas incluidas y personalizadas |
order
| Campo | Tipo | Ejemplo / descripción |
|---|---|---|
order.id | número | 1234 |
order.number | cadena de texto | Número de pedido visible para el cliente, p. ej. "10045" |
order.currency | cadena de texto | Código de moneda ISO, p. ej. "USD" |
order.customer_note | cadena de texto | Nota del cliente/pedido |
order.wc_status | cadena de texto | Slug de estado sin procesar de WooCommerce, p. ej. "processing" |
order.status_label | cadena de texto | Etiqueta de estado localizada, incluidos estados personalizados |
order.created_via | cadena de texto | Origen/canal, p. ej. "woocommerce-pos" |
order.needs_payment | booleano | Indica si se debe mostrar una sección de pago |
order.payment_url | cadena de texto | URL de pago del pedido cuando está disponible |
order.created | objeto de fecha | Fecha de creación del pedido |
order.paid | objeto de fecha | Fecha de pago; cadenas vacías cuando no se ha pagado |
order.completed | objeto de fecha | Fecha de finalización; cadenas vacías cuando no se ha completado |
order.printed | objeto de fecha | Marca de tiempo de impresión/reimpresión en el momento de renderizado |
tienda
| Campo | Tipo | Ejemplo / descripción |
|---|---|---|
store.id | número | ID de la tienda, o ID histórico para tiendas eliminadas |
store.name | cadena | Nombre visible de la tienda |
store.address.address_1 | cadena | Línea 1 de la dirección |
store.address.address_2 | cadena | Línea de suite/unidad |
store.address.city | cadena | Ciudad/localidad |
store.address.state | cadena | Estado/región |
store.address.postcode | cadena | Código postal |
store.address.country | cadena | Código de país ISO |
store.address_lines | arreglo | Líneas de dirección preformateadas; recomendadas para la mayoría de las plantillas |
store.tax_ids | arreglo | Identificadores fiscales estructurados; se recomienda iterar este campo en lugar de utilizar un único identificador fiscal |
store.phone | cadena | Teléfono de la tienda |
store.email | cadena | Correo electrónico de la tienda |
store.logo | cadena/nulo | URL o URI de datos del logotipo de la tienda |
store.opening_hours | cadena/nulo | Texto compacto de horario de atención |
store.opening_hours_vertical | cadena/nulo | Bloque de horario de atención en varias líneas |
store.opening_hours_inline | cadena/nulo | Texto de horario de atención separado por comas |
store.opening_hours_notes | cadena/nulo | Notas de texto libre sobre el horario de atención |
store.personal_notes | cadena/nulo | Nota personal o pie de recibo |
store.policies_and_conditions | cadena/nulo | Texto de reembolsos, devoluciones o términos |
store.footer_imprint | cadena/nulo | Pie de página legal |
Objetos de identificación fiscal
store.tax_ids y customer.tax_ids contienen objetos con la misma estructura:
| Campo | Tipo | Descripción |
|---|---|---|
type | cadena | Identificador como eu_vat, de_steuernummer, au_abn, br_cpf, us_ein u other |
value | cadena | Valor del ID fiscal para imprimir |
country | cadena/nulo | Código de país ISO cuando se conoce |
label | cadena/nulo | Etiqueta de visualización localizada, resuelta antes del renderizado |
Ejemplo:
{{#store.tax_ids}}
{{label}}: {{value}}
{{/store.tax_ids}}
cajero
| Campo | Tipo | Ejemplo / descripción |
|---|---|---|
cashier.id | número | ID de usuario de WordPress, 0 cuando se desconoce |
cashier.name | cadena | Nombre de visualización del cajero |
cliente
| Campo | Tipo | Ejemplo / descripción |
|---|---|---|
customer.id | número/null | ID del cliente, o null para invitados |
customer.name | cadena | Nombre visible del cliente, o etiqueta de invitado |
customer.billing_address.* | objeto | Campos de dirección de facturación de WooCommerce |
customer.shipping_address.* | objeto | Campos de dirección de envío de WooCommerce |
customer.tax_ids | arreglo | Identificadores fiscales del cliente capturados del pedido |
Las claves de dirección más comunes incluyen first_name, last_name, company, address_1, address_2, city, state, postcode, country, email y phone.
líneas
Se itera con {{#lines}}...{{/lines}}.
| Campo | Tipo | Descripción |
|---|---|---|
key | cadena | Clave estable de línea / ID del artículo del pedido |
sku | cadena | SKU del producto |
name | cadena | Nombre visible del producto o de la línea |
qty | número | Cantidad vendida |
qty_refunded | número | Cantidad reembolsada para esta línea |
unit_subtotal / _incl / _excl | número | Precio unitario antes de descuento |
unit_price / _incl / _excl | número | Precio unitario después de descuento |
line_subtotal / _incl / _excl | número | Subtotal de línea antes de descuento |
discounts / _incl / _excl | número | Importe de descuento como valor positivo |
line_total / _incl / _excl | número | Total final de línea |
total_refunded | número | Total reembolsado para esta línea como valor positivo |
taxes | arreglo | Filas de impuestos por tasa para esta línea |
meta | arreglo | Metadatos del artículo del pedido como pares {key, value} |
attributes | arreglo | Atributos del producto/variación como pares {key, value} |
Las variantes formateadas incluyen unit_subtotal_display, unit_price_display, line_subtotal_display, discounts_display, line_total_display y las variantes _display con y sin impuestos incluidos.
tarifas y envío
Iterar con {{#fees}}...{{/fees}} y {{#shipping}}...{{/shipping}}.
| Campo | Tipo | Descripción |
|---|---|---|
label | cadena | Etiqueta de tarifa o nombre del método de envío |
method_id | cadena | ID del método de envío (solo envío) |
total / _incl / _excl | número | Totales de visualización, con impuestos incluidos y sin impuestos |
taxes | arreglo | Filas de impuestos por tasa |
meta | arreglo | Pares de metadatos {key, value} |
Variantes formateadas: total_display, total_incl_display y total_excl_display.
descuentos
Iterar con {{#discounts}}...{{/discounts}}.
| Campo | Tipo | Descripción |
|---|---|---|
label | cadena | Descripción del cupón o código como alternativa |
code | cadena | Código del cupón |
codes | cadena | Alternativa heredada/de visualización para códigos concatenados |
total / _incl / _excl | número | Importe del descuento como valor positivo |
Variantes formateadas: total_display, total_incl_display y total_excl_display. Es posible agregar un signo menos en la plantilla si se desea mostrar los descuentos como filas negativas.
totales
| Campo | Tipo | Descripción |
|---|---|---|
totals.subtotal / _incl / _excl | número | Subtotal del pedido antes de descuentos |
totals.discount_total / _incl / _excl | número | Total de descuentos del pedido como valor positivo |
totals.tax_total | número | Importe total de impuestos |
totals.total / _incl / _excl | número | Total general del pedido |
totals.paid_total | número | Importe pagado/aplicado |
totals.change_total | número | Cambio devuelto al cliente |
totals.refund_total | número | Total reembolsado como valor positivo |
totals.net_total | número | total - refund_total, limitado a cero |
totals.total_qty | número | Suma de las cantidades de artículos de línea |
totals.line_count | número | Cantidad de filas de líneas de producto |
Las variantes formateadas incluyen subtotal_display, discount_total_display, tax_total_display, total_display, paid_total_display, change_total_display, refund_total_display y net_total_display, además de variantes con impuestos incluidos/excluidos cuando corresponda.
tax y tax_summary
Se utiliza tax para las condiciones del modo de visualización y tax_summary para las filas de tasas detalladas.
| Campo de impuesto | Tipo | Descripción |
|---|---|---|
tax.display | cadena | incl o excl |
tax.display_incl | booleano | Verdadero cuando los precios se muestran con impuestos incluidos |
tax.display_excl | booleano | Verdadero cuando los precios se muestran sin impuestos |
tax.breakdown | cadena | hidden, single o itemized |
tax.breakdown_hidden | booleano | Verdadero cuando las filas de impuestos deben ocultarse |
tax.breakdown_single | booleano | Verdadero cuando se prefiere un total único de impuestos |
tax.breakdown_itemized | booleano | Verdadero cuando se prefieren filas por tasa |
has_tax_summary | booleano | Verdadero cuando tax_summary contiene filas |
Iterar tax_summary con {{#tax_summary}}...{{/tax_summary}}.
| Campo | Tipo | Descripción |
|---|---|---|
code | cadena | ID/código de la tasa impositiva |
rate | número/null | Porcentaje de la tasa cuando está resuelto |
label | cadena | Etiqueta de la tasa impositiva |
compound | booleano | Indica si la tasa es compuesta |
taxable_amount_excl | número/null | Base imponible sin impuestos |
tax_amount | número | Impuesto recaudado |
taxable_amount_incl | número/null | Base imponible con impuesto incluido |
Variantes formateadas: taxable_amount_excl_display, tax_amount_display y taxable_amount_incl_display.
pagos
Iterar con {{#payments}}...{{/payments}}.
| Campo | Tipo | Descripción |
|---|---|---|
method_id | cadena | Identificador del método de pago |
method_title | cadena | Nombre visible del método de pago |
amount | número | Monto aplicado al pedido |
transaction_id | cadena | ID de transacción de la pasarela |
tendered | número | Monto en efectivo entregado, cuando corresponde |
change | número | Cambio en efectivo devuelto, cuando corresponde |
Variantes con formato: amount_display, tendered_display y change_display.
reembolsos
Se itera con {{#refunds}}...{{/refunds}}. Los importes de reembolso son magnitudes positivas; las plantillas deciden si se antepone un signo menos o si se muestra un bloque separado de artículos devueltos.
| Campo | Tipo | Descripción |
|---|---|---|
id | número | ID del registro de reembolso |
date | objeto de fecha | Fecha de creación del reembolso |
amount | número | Total del reembolso |
subtotal | número | Subtotal de líneas reembolsadas |
tax_total | número | Impuesto reembolsado |
shipping_total | número | Importe de envío reembolsado |
shipping_tax | número | Impuesto de envío reembolsado |
reason | cadena de texto | Motivo del reembolso |
refunded_by_id | número/nulo | ID del usuario que emitió el reembolso |
refunded_by_name | cadena | Nombre para mostrar del usuario que emitió el reembolso |
refunded_payment | booleano | Indica si el pago fue reembolsado a través de la pasarela |
destination | cadena | original_method, cash o manual |
gateway_id | cadena | ID de la pasarela utilizada para el reembolso |
gateway_title | cadena | Título visible de la pasarela |
processing_mode | cadena | Modo de procesamiento del proveedor/manual |
lines | arreglo | Filas de productos reembolsados |
fees | arreglo | Filas de tarifas reembolsadas |
shipping | arreglo | Filas de envío reembolsadas |
Los campos de línea de reembolso incluyen name, sku, qty, total, total_incl, total_excl, line_total, unit_total y taxes. Las filas de tarifas y envío de reembolso utilizan label, total, total_incl, total_excl y taxes. Se añaden variantes de visualización para los totales y los importes de impuestos.
fiscal
Los campos fiscales están vacíos de forma predeterminada y se completan mediante integraciones fiscales o el enriquecimiento de instantáneas de WCPOS Pro.
| Campo | Tipo | Descripción |
|---|---|---|
fiscal.immutable_id | cadena de texto | Identificador fiscal inmutable |
fiscal.receipt_number | cadena de texto | Número de recibo fiscal |
fiscal.sequence | número/nulo | Contador de secuencia |
fiscal.hash | cadena de texto | Valor de hash/firma |
fiscal.qr_payload | cadena de texto | Contenido QR para verificación fiscal |
fiscal.tax_agency_code | cadena de texto | Código de la autoridad tributaria |
fiscal.signed_at | cadena de texto | Marca de tiempo de la firma fiscal |
fiscal.signature_excerpt | cadena de texto | Firma truncada para visualización |
fiscal.document_label | cadena de texto | Etiqueta del documento, p. ej. Factura fiscal |
fiscal.is_reprint | booleano | Indica si esta impresión es una reimpresión |
fiscal.reprint_count | número | Contador de reimpresiones |
fiscal.extra_fields | arreglo/objeto | Valores específicos de la jurisdicción |
presentation_hints
Estos campos son consumidos principalmente por el renderizador y el formateador. Están disponibles para las plantillas cuando sea necesario.
| Campo | Tipo | Descripción |
|---|---|---|
presentation_hints.display_tax | cadena | incl, excl, hidden, itemized o single |
presentation_hints.prices_entered_with_tax | booleano | Indica si los precios del catálogo incluyen impuestos |
presentation_hints.rounding_mode | cadena | Configuración de redondeo de impuestos de WooCommerce |
presentation_hints.locale | cadena | Configuración regional utilizada para el formato |
presentation_hints.timezone | cadena | Zona horaria del recibo |
presentation_hints.currency_position | cadena | Posición del símbolo de moneda |
presentation_hints.currency_symbol | cadena | Símbolo de moneda |
presentation_hints.price_thousand_separator | cadena de texto | Separador de miles |
presentation_hints.price_decimal_separator | cadena de texto | Separador decimal |
presentation_hints.price_num_decimals | número | Cantidad de decimales |
presentation_hints.price_display_suffix | cadena de texto | Sufijo de visualización de precio de WooCommerce |
presentation_hints.order_barcode_type | cadena de texto | Tipo de código de barras utilizado por las plantillas de galería |
i18n
Se recomienda utilizar las etiquetas de i18n en lugar de texto fijo siempre que sea posible:
{{i18n.order}} #{{order.number}}
{{i18n.cashier}}: {{cashier.name}}
{{i18n.total}}: {{totals.total_display}}
Las claves comunes incluyen order, date, cashier, customer, item, sku, qty, unit_price, discount, subtotal, total, tax, paid, tendered, change, tax_summary, refunded, net_total, customer_note, thank_you_purchase, opening_hours, y las claves de etiqueta de identificación fiscal como store_tax_id_label_eu_vat y customer_tax_id_label_other. Las extensiones pueden agregar claves adicionales.