Eliminar payment + waiting (legacy): el bot toma pedidos, no cobra
El bot conversacional no maneja pagos. Su trabajo: pedidos, datos de entrega, dejar la orden anotada en Woo (status=pending). El cobro lo gestiona el comercio offline. Todo lo de payment_type / is_paid / PAYMENT / WAITING_WEBHOOKS era legacy de un flow viejo que se baja. Nuevo flow: IDLE → CART → SHIPPING → IDLE (con orden creada). Cuando el usuario completa shipping (pickup elegido OR delivery+address), shipping.js emite create_order y el bot cierra con order.confirmed. - fsm.js: 4 estados (IDLE/CART/SHIPPING/AWAITING_HUMAN). hasPaymentInfo e isPaid eliminados. deriveNextState gira SHIPPING→IDLE en vez de →PAYMENT→WAITING. ALLOWED transitions actualizadas. - orderModel.js: createEmptyOrder() sin payment_type/is_paid. migrateOldContext deja de leer payment_method / mp.payment_status. - stateHandlers: payment.js y waiting.js eliminados. shipping.js gana finalizeOrder() que emite create_order action y vuelve a IDLE. - replyTemplates: payment.* y waiting.* fuera. order.confirmed nuevo, con 3 variantes y rewriter habilitado. - NLU openai.js + nlu/schemas.js: select_payment fuera del enum, payment_method fuera de entities. Prompt sin la regla de SELECCIONAR PAGO. - nlu/router.js + nlu/index.js: dominio "payment" eliminado. shouldSkipRouter ya no chequea PAYMENT. - nlu/specialists/payment.js: eliminado. - promptsRepo.js + promptLoader.js: PROMPT_KEYS sin "payment". - turnEngineV3.js: switch ya no dispatcha a PAYMENT/WAITING. normalizeState mapea estados legacy (PAYMENT/WAITING_WEBHOOKS/COMPLETED) a IDLE. context_patch ya no emite payment_method. - wooOrders.createOrder: paymentMethod param eliminado. Order queda en status=pending sin payment_method (cobro offline). - pipeline.js: paymentMethod fuera del create_order glue. Invariant "no_checkout_without_payment_link" eliminado. signal payment_selected reemplazado por shipping_completed. - XState machine: top-level PAYMENT y WAITING eliminados. SELECT_PAYMENT event fuera. SHIPPING ahora cierra con enqueueWooCreateOrder + replyOrderConfirmed → IDLE. Guards hasPayment/isPaid borrados. - Tests fsm.test.js / orderModel.test.js / machine/index.test.js actualizados al nuevo contrato. 188 tests pasando. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -205,7 +205,6 @@ const runStatus = llmMeta?.error ? "warn" : "ok";
|
||||
ok: true,
|
||||
checks: [
|
||||
{ name: "required_keys_present", ok: true },
|
||||
{ name: "no_checkout_without_payment_link", ok: true },
|
||||
{ name: "no_order_action_without_items", ok: true },
|
||||
],
|
||||
};
|
||||
@@ -257,16 +256,14 @@ const runStatus = llmMeta?.error ? "warn" : "ok";
|
||||
...baseAddress,
|
||||
phone: baseAddress.phone || phoneFromWa,
|
||||
};
|
||||
// Obtener shipping_method y payment_method del contexto (preferir decision que es el resultado del turn)
|
||||
// shipping_method del contexto (delivery|pickup). El cobro se gestiona offline.
|
||||
const shippingMethod = decision?.context_patch?.shipping_method || reducedContext?.shipping_method || null;
|
||||
const paymentMethod = decision?.context_patch?.payment_method || reducedContext?.payment_method || null;
|
||||
const order = await createOrder({
|
||||
tenantId,
|
||||
wooCustomerId: externalCustomerId,
|
||||
basket: basketToUse,
|
||||
address: addressWithPhone,
|
||||
shippingMethod,
|
||||
paymentMethod,
|
||||
run_id: null,
|
||||
});
|
||||
actionPatch.woo_order_id = order?.id || null;
|
||||
@@ -389,9 +386,9 @@ const runStatus = llmMeta?.error ? "warn" : "ok";
|
||||
};
|
||||
// El nuevo FSM usa context.order, extraerlo para safeNextState
|
||||
const orderForFsm = context?.order || context?.order_basket || {};
|
||||
const signals = {
|
||||
const signals = {
|
||||
confirm_order: plan.intent === "confirm_order",
|
||||
payment_selected: plan.intent === "select_payment",
|
||||
shipping_completed: plan.order_action === "create_order",
|
||||
};
|
||||
const nextState = safeNextState(prev_state, orderForFsm, signals).next_state;
|
||||
plan.next_state = nextState;
|
||||
@@ -448,7 +445,6 @@ const runStatus = llmMeta?.error ? "warn" : "ok";
|
||||
invariants,
|
||||
final_reply: plan.reply,
|
||||
order_id: actionPatch.woo_order_id || null,
|
||||
payment_link: actionPatch.payment_link || null,
|
||||
latency_ms: end_to_end_ms,
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user