json icon

Order Completed

v1events

Una orden de compra se completó exitosamente. Es el evento de conversión del negocio.

1{
2  "type": "record",
3  "name": "OrderCompleted",
4  "namespace": "payments.order",
5  "doc": "Emitido cuando una orden se completa exitosamente en bigbox-backend (payments). Consumido por el servicio analytics para reenviar la conversion a GA4, Meta, Google Ads y Customer.io.",
6  "fields": [
7    {
8      "name": "order_id",
9      "type": "string",
10      "doc": "Id de la orden. Se emite como string aunque el id sea numerico (str(order.id))."
11    },
12    {
13      "name": "channel",
14      "type": ["null", "string"],
15      "default": null,
16      "doc": "Canal de la orden (Order.CHANNEL): biglife | corporate_send | corporative | internal | maleva | manual_corporative | stock_entry | web. analytics descarta todo lo que no sea 'web'."
17    },
18    {
19      "name": "price",
20      "type": "string",
21      "doc": "Precio final de la orden. Se emite como string (str(order.get_final_price())); el consumer lo castea a float >= 0."
22    },
23    {
24      "name": "currency",
25      "type": {
26        "type": "enum",
27        "name": "Currency",
28        "symbols": ["USD", "ARS", "UYU", "PEN", "CLP", "COP", "MXN", "EUR"]
29      },
30      "doc": "Codigo de moneda derivado del pais de la orden (CurrentSiteMapper.currency_code). Los simbolos son los que acepta el consumer."
31    },
32    {
33      "name": "items",
34      "type": {
35        "type": "array",
36        "items": {
37          "type": "record",
38          "name": "Item",
39          "fields": [
40            {
41              "name": "item_id",
42              "type": "string",
43              "doc": "Id del producto, emitido como string."
44            },
45            {
46              "name": "item_name",
47              "type": "string",
48              "doc": "Nombre del producto."
49            },
50            {
51              "name": "short_description",
52              "type": ["null", "string"],
53              "default": null,
54              "doc": "Descripcion corta del producto hijo, si existe."
55            },
56            {
57              "name": "price",
58              "type": "string",
59              "doc": "Precio del item, emitido como string; el consumer lo castea a float."
60            },
61            {
62              "name": "quantity",
63              "type": "int",
64              "doc": "Siempre 1: se emite una entrada por item de la orden."
65            },
66            {
67              "name": "currency",
68              "type": "Currency",
69              "doc": "Misma moneda que la orden."
70            },
71            {
72              "name": "shipping_type",
73              "type": ["null", "string"],
74              "default": null,
75              "doc": "typename del shipping del item; null si el item no tiene shipping."
76            }
77          ]
78        }
79      },
80      "doc": "Items activos de la orden (order_line.date_removed is null). El consumer exige al menos 1."
81    },
82    {
83      "name": "email",
84      "type": "string",
85      "doc": "Email del comprador. El consumer lo valida como EmailStr y aplica una whitelist de dominios."
86    },
87    {
88      "name": "phone",
89      "type": ["null", "string"],
90      "default": null,
91      "doc": "Telefono del comprador."
92    },
93    {
94      "name": "first_name",
95      "type": ["null", "string"],
96      "default": null,
97      "doc": "Nombre del comprador."
98    },
99    {
100      "name": "last_name",
101      "type": ["null", "string"],
102      "default": null,
103      "doc": "Apellido del comprador."
104    },
105    {
106      "name": "event_source_url",
107      "type": ["null", "string"],
108      "default": null,
109      "doc": "URL de origen de la conversion. Hoy el publisher siempre envia string vacio."
110    },
111    {
112      "name": "country_id",
113      "type": ["null", "int"],
114      "default": null,
115      "doc": "Id del pais de la orden."
116    },
117    {
118      "name": "coupon",
119      "type": ["null", "string"],
120      "default": null,
121      "doc": "Codigo de descuento aplicado; null si no hubo."
122    },
123    {
124      "name": "items_with_change_or_extension",
125      "type": ["null", "boolean"],
126      "default": null,
127      "doc": "True si algun item de la orden es una Extension (cambio o extension)."
128    },
129    {
130      "name": "amount_payed_with_credit",
131      "type": ["null", "string"],
132      "default": null,
133      "doc": "Monto pagado con credito, emitido como string (str(order.get_total_credit()))."
134    },
135    {
136      "name": "analytics_client",
137      "type": {
138        "type": "record",
139        "name": "AnalyticsClient",
140        "doc": "Identidad del cliente para analytics. Se arma con los campos fijos mas el spread de AnalyticsSession.data_session, por lo que puede traer claves extra no listadas aca.",
141        "fields": [
142          {
143            "name": "internal_id",
144            "type": ["null", "string"],
145            "default": null,
146            "doc": "Id interno del usuario, emitido como string."
147          },
148          {
149            "name": "ga4_client_id",
150            "type": ["null", "string"],
151            "default": null,
152            "doc": "client_id de GA4 tomado de data_session."
153          },
154          {
155            "name": "gclid",
156            "type": ["null", "string"],
157            "default": null,
158            "doc": "Google Click Id."
159          },
160          {
161            "name": "ga_user_properties",
162            "type": ["null", { "type": "map", "values": ["null", "string", "boolean", "double"] }],
163            "default": null,
164            "doc": "User properties libres que se reenvian a GA4."
165          },
166          {
167            "name": "ga_session",
168            "type": [
169              "null",
170              {
171                "type": "record",
172                "name": "GASession",
173                "fields": [
174                  { "name": "ga_session_id", "type": ["null", "string"], "default": null },
175                  { "name": "ga_session_number", "type": ["null", "string"], "default": null }
176                ]
177              }
178            ],
179            "default": null
180          },
181          {
182            "name": "meta_session",
183            "type": [
184              "null",
185              {
186                "type": "record",
187                "name": "MetaSession",
188                "fields": [
189                  { "name": "fbp", "type": ["null", "string"], "default": null },
190                  { "name": "fbc", "type": ["null", "string"], "default": null },
191                  { "name": "gclicl", "type": ["null", "string"], "default": null, "doc": "Nombre tal cual esta en el consumer (posible typo de gclid)." }
192                ]
193              }
194            ],
195            "default": null
196          },
197          {
198            "name": "location",
199            "type": [
200              "null",
201              {
202                "type": "record",
203                "name": "LocationSession",
204                "fields": [
205                  { "name": "client_ip_address", "type": ["null", "string"], "default": null },
206                  { "name": "client_user_agent", "type": ["null", "string"], "default": null }
207                ]
208              }
209            ],
210            "default": null
211          }
212        ]
213      },
214      "doc": "Datos de sesion/identidad del cliente."
215    },
216    {
217      "name": "occurred_at",
218      "type": "string",
219      "doc": "ISO-8601 naive en hora local del proceso. Lo inyecta events.event.Event.__init__ en todos los eventos del monolito."
220    }
221  ]
222}
223

Details

Format
JSON Schema
Resource
events
Filename
schema.json

Versions