Skip to content

Repository files navigation

Firebase POS Gastro — Monorepo (Mock Transbank + Mock SII)

Este starter incluye:

  • Functions con endpoints (/psp/*, /einvoice/*, /integrations/*) y triggers (orden pagada → boleta mock + descuento inventario).
  • Admin (Next.js), Menú QR (Next.js), KDS (React/Vite).
  • Seeds para datos demo.
  • Config listo para mock: PSP_MODE=mock, SII_ENV=mock.

Requisitos

  • Node 20+, pnpm, Firebase CLI
  • (Opcional) Flutter para POS nativo

Pasos rápidos

  1. Clonar y preparar entorno:

    pnpm i -w
  2. Configurar proyecto Firebase:

    firebase use tu-proyecto
    pnpm -w run build
  3. Variables de entorno:

    • Copia .env.example a cada app/web según corresponda (o usa variables del sistema).
    • Para Functions, usa Secrets para claves sensibles:
      firebase functions:secrets:set TBK_API_KEY
      firebase functions:secrets:set SII_CERT_PASS
  4. Desplegar:

    firebase deploy --only functions

    (Hosting de Next.js puede requerir adaptador; por ahora webRenderer responde placeholder.)

  5. Seed de datos (en tu local con emuladores o en proyecto):

    pnpm --filter tools run seed

Endpoints principales

  • POST /psp/pay → procesa pago mock.
  • POST /psp/webhook → confirma evento PSP (mock).
  • POST /einvoice/boleta → emite boleta mock.
  • POST /integrations/:provider/webhook → entrada delivery (mock).
  • GET /healthz, GET /version

Siguientes pasos

  • Conectar Admin/KDS/QR a Hosting o Next.js en Vercel y apuntar rutas de API al Cloud Function api.
  • Implementar recetas reales y descuento de inventario por ítems.
  • Agregar autenticación (Auth) y tokens con tenantId, roles, branchIds para que las reglas funcionen.
  • Migrar de mock a sandbox/certprod en PSP/SII.

Nota: Este es un starter didáctico, no listo para producción. Refuerza seguridad, validaciones y despliegue CI/CD antes de operar.


Autenticación y Claims (multi-tenant)

Configura un usuario y asigna custom claims (tenantId, roles, branchIds) para que las reglas funcionen:

  1. Define una clave para la API admin:
    firebase functions:secrets:set ADMIN_API_KEY
  2. Envía un POST a https://REGION-PROJECT.cloudfunctions.net/api/admin/set-claims con header x-admin-key: <tu_clave> y body:
    { "uid": "<UID>", "tenantId": "demo", "roles": ["admin"], "branchIds": ["casa-matriz"] }

PSP: de mock → sandbox (Transbank)

  • Cambia .env:
    PSP_MODE=sandbox
    TBK_COMMERCE_CODE=597055555532
    TBK_API_KEY=TEST_API_KEY
  • Flujo:
    1. POST /psp/pay con { orderId, amount, returnUrl } → devuelve token y url de Webpay (sandbox).
    2. Redirige al url (en front) y luego commit con POST /psp/commit { token }.

SII: de mock → cert

  • Cambia .env:
    SII_ENV=cert
    SII_RUT_EMISOR=<tu-rut>
  • El stub NO envía al SII todavía: genera estructura y rutas simuladas. Debes implementar firma/CAF/envío.

Descuento de inventario por recetas

  • Cuando orders.status cambia a paid, el trigger:
    • emite boleta (mock/cert stub),
    • descuenta inventario según recipes y crea stock_movements.

Admin (Next.js)

  • /login → email/clave Firebase
  • /dashboard → accesos
  • /products, /inventory → CRUDs básicos

Importante: Conecta Auth en Admin para obtener tokens con claims. En emuladores, puedes omitir claims mientras pruebas.

About

pos resto

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages