@hostwebhook/platform-contracts 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -72,4 +72,63 @@ export interface PasoEjecutado {
72
72
  * de antes: la pantalla cae a la de la versión, avisando.
73
73
  */
74
74
  configuracion?: Record<string, unknown>;
75
+ /**
76
+ * Cómo decidió un conditional [2026-09-29]: cada rama, cada condición con
77
+ * lo que valió cada lado, y cuál ganó. Sólo lo llevan los pasos de un
78
+ * conditional; ver `EvaluacionDeRamas`.
79
+ */
80
+ evaluacion?: EvaluacionDeRamas;
81
+ }
82
+ /**
83
+ * Una condición de una rama, tal como se evaluó.
84
+ *
85
+ * `actual` y `esperado` son los dos lados YA RESUELTOS —lo que salió de
86
+ * `{{payload.amount}}` y de lo que se escribió como valor—, recortados para
87
+ * que un payload grande no infle el paso. `actual` AUSENTE quiere decir que
88
+ * el campo no resolvió (`undefined`), que es justo lo que más se busca al
89
+ * mirar por qué una rama no casó; salvo cuando el payload era una lista, que
90
+ * entonces no hay un valor sino muchos y lo que va es `items`.
91
+ */
92
+ export interface CondicionEvaluada {
93
+ /** El campo tal como se escribió: `{{payload.amount}}` o `amount`. */
94
+ campo: string;
95
+ operador: string;
96
+ /** El valor tal como se escribió, sin resolver. */
97
+ valor?: string;
98
+ /** No cuenta: desactivada, o sin campo. Ver `condicionPuesta`. */
99
+ ignorada?: true;
100
+ /** Si se cumplió. Ausente si está ignorada, si la rama no llegó a evaluarse o si el payload era una lista. */
101
+ paso?: boolean;
102
+ actual?: unknown;
103
+ esperado?: unknown;
104
+ /** Payload iterable: cuántos ítems la cumplieron, de cuántos. */
105
+ items?: {
106
+ total: number;
107
+ pasan: number;
108
+ };
109
+ }
110
+ /**
111
+ * - `casa`: se cumplió y es la que se tomó (la primera que casa gana).
112
+ * - `no-casa`: se evaluó y no se cumplió.
113
+ * - `sin-condiciones`: no tiene ninguna, y el conditional se la salta.
114
+ * - `no-evaluada`: una anterior ya había casado, así que ésta ni se miró.
115
+ */
116
+ export type ResultadoDeRama = 'casa' | 'no-casa' | 'sin-condiciones' | 'no-evaluada';
117
+ export interface RamaEvaluada {
118
+ id: string;
119
+ nombre: string;
120
+ modo: 'and' | 'or';
121
+ resultado: ResultadoDeRama;
122
+ condiciones: CondicionEvaluada[];
123
+ /** Payload iterable: cuántos ítems cumplieron la rama entera. */
124
+ items?: {
125
+ total: number;
126
+ pasan: number;
127
+ };
128
+ }
129
+ /** La decisión de un conditional, en el orden en que se evaluaron sus ramas. */
130
+ export interface EvaluacionDeRamas {
131
+ ramas: RamaEvaluada[];
132
+ /** El id de la rama que ganó; `null` = ninguna, se fue por el `else`. */
133
+ ganadora: string | null;
75
134
  }
@@ -26,7 +26,7 @@
26
26
  * que está diseñada justo para que los secretos NO crucen a lo bruto. Ningún
27
27
  * secreto vive aquí.
28
28
  */
29
- export type { FileRef, ChunkingStrategy, RunStepStatus, PasoEjecutado as PasoEjecutadoDelSdk, } from './formas-compartidas';
29
+ export type { FileRef, ChunkingStrategy, RunStepStatus, PasoEjecutado as PasoEjecutadoDelSdk, CondicionEvaluada, ResultadoDeRama, RamaEvaluada, EvaluacionDeRamas, } from './formas-compartidas';
30
30
  export * from './almacenes-vectoriales';
31
31
  export * from './aprobaciones-pendientes';
32
32
  export * from './avisos-en-vivo';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostwebhook/platform-contracts",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "Contratos compartidos entre los servicios de HostWebhook: addons del plan, identidad interna, y las formas que cruzan una frontera de red",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",