🎯 Estado de Sorteos Dominicanos y Horarios de Cierre Corte estricto: -15 min
El motor de ventas rechaza automáticamente cualquier intento después de la hora de corte.
Bancas y Puestos de Venta Autorizados
Monitoreo de estado de conexión, Hardware ID y operador en turno
| Código / Nombre | Hardware ID | Cajero / Operador | Turno | Venta Hoy | Efectivo Gaveta | Estado | Acción |
|---|
🧪 Banco de Pruebas de Endpoints REST (LotServerFB) Live Sandbox
Pruebe en tiempo real los contratos de API especificados en el documento multi-consorcio.
Verifica contra el escrutinio oficial y actualiza el estado a `PAGADO` de forma atómica para prevenir doble cobro.
Envía el payload completo con conteo de billetes RD$ 2000, 1000, 500, 200, 100, 50 y monedas 25, 10, 5, 1.
Filtra automáticamente por el `consorcio_id` del token JWT y genera el resumen de ventas, comisiones y gaveta por banca.
// Haga clic en "Ejecutar Petición REST" para probar el endpoint seleccionado.
Generador y Emulador de Impresión Térmica POS
Inspeccione el diseño del comprobante de venta físico con el serial de 12 caracteres único por lotería y el consecutivo de 6 dígitos.
CONSORCIO FORTUNA BELLO
RNC: 1-32-48592-1 · TEL: (809) 555-0199
Banca Central #001 · Santo Domingo, RD
Revise su boleto · No se pagan tickets rotos o alterados · Caduca a los 30 días
💰 Arqueo Físico de Gaveta (POST /api/cuadre/arqueo) Billetes y Monedas RD$
Desglose físico obligatorio al cierre de turno para auditar sobrantes o faltantes contra el balance del sistema.
💵 Desglose de Billetes Dominicanos
🪙 Desglose de Monedas Dominicanas
El efectivo físico coincide al 100% con los tickets emitidos y cobrados.
📊 Panel de Control del Dueño de Consorcio GET /api/dueno/resumen-general
Visión ejecutiva consolidada de ventas, premios, comisiones ganadas y arqueos físicos.
| Banca | Operador Activo | Ventas | Premios | Comisión (8%) | Balance Neto | Físico Gaveta | Cuadre |
|---|---|---|---|---|---|---|---|
| B001 - Central Fortuna Bello | Juan Pérez (Día) | RD$ 185,400.00 | RD$ 98,000.00 | RD$ 14,832.00 | RD$ 72,568.00 | RD$ 87,400.00 | CUADRADO |
| B002 - Sucursal Este | Pedro Ramírez (Día) | RD$ 210,100.00 | RD$ 142,000.00 | RD$ 16,808.00 | RD$ 51,292.00 | RD$ 68,100.00 | -RD$ 150 |
| B003 - Terminal Kiosco Villa | María Santos (Día) | RD$ 144,750.00 | RD$ 72,000.00 | RD$ 11,580.00 | RD$ 61,170.00 | RD$ 72,750.00 | CUADRADO |
Esquema Relacional DDL SQL (Multi-Consorcio)
Tablas: consorcios, bancas, usuarios, turnos_sesiones, tickets, ticket_loterias, cuadres_arqueos, cuadres_entregas.
-- ============================================================================
-- LOTSERVERFB: SISTEMA CENTRAL MULTI-CONSORCIO DDL
-- ============================================================================
CREATE TABLE consorcios (
id SERIAL PRIMARY KEY,
nombre VARCHAR(120) NOT NULL,
rnc VARCHAR(20) UNIQUE NOT NULL,
slug VARCHAR(60) UNIQUE NOT NULL,
activo BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE bancas (
id SERIAL PRIMARY KEY,
consorcio_id INT NOT NULL REFERENCES consorcios(id) ON DELETE CASCADE,
codigo VARCHAR(20) NOT NULL,
nombre VARCHAR(120) NOT NULL,
limite_quiniela NUMERIC(12, 2) DEFAULT 200.00,
limite_pale NUMERIC(12, 2) DEFAULT 100.00,
limite_tripleta NUMERIC(12, 2) DEFAULT 50.00,
comision_porcentaje NUMERIC(5, 2) DEFAULT 8.00,
activo BOOLEAN DEFAULT TRUE,
CONSTRAINT uq_banca_consorcio_codigo UNIQUE (consorcio_id, codigo)
);
CREATE TABLE usuarios (
id SERIAL PRIMARY KEY,
consorcio_id INT REFERENCES consorcios(id) ON DELETE CASCADE,
banca_id INT REFERENCES bancas(id) ON DELETE SET NULL,
username VARCHAR(60) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
nombre_completo VARCHAR(150) NOT NULL,
rol VARCHAR(20) NOT NULL CHECK (rol IN ('superadmin', 'dueno', 'supervisor', 'cajero')),
turno_actual VARCHAR(10) DEFAULT 'DIA' CHECK (turno_actual IN ('DIA', 'NOCHE')),
activo BOOLEAN DEFAULT TRUE,
CONSTRAINT uq_usuario_consorcio_username UNIQUE (consorcio_id, username)
);
CREATE TABLE tickets (
id BIGSERIAL PRIMARY KEY,
consorcio_id INT NOT NULL REFERENCES consorcios(id) ON DELETE CASCADE,
banca_id INT NOT NULL REFERENCES bancas(id) ON DELETE RESTRICT,
usuario_id INT NOT NULL REFERENCES usuarios(id) ON DELETE RESTRICT,
ticket_no VARCHAR(6) NOT NULL, -- Consecutivo 6 digitos: 000001 - 999999
attempt_id VARCHAR(64) UNIQUE NOT NULL, -- Idempotencia
fecha_hora TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
total NUMERIC(12, 2) NOT NULL,
estado VARCHAR(15) DEFAULT 'ACTIVO' CHECK (estado IN ('ACTIVO', 'ANULADO', 'PAGADO')),
codigo_seguridad VARCHAR(10) NOT NULL,
CONSTRAINT uq_ticket_banca_consecutivo UNIQUE (banca_id, ticket_no)
);
CREATE TABLE ticket_loterias (
id BIGSERIAL PRIMARY KEY,
ticket_id BIGINT NOT NULL REFERENCES tickets(id) ON DELETE CASCADE,
consorcio_id INT NOT NULL REFERENCES consorcios(id) ON DELETE CASCADE,
banca_id INT NOT NULL REFERENCES bancas(id) ON DELETE RESTRICT,
loteria_nombre VARCHAR(80) NOT NULL,
serial_loteria VARCHAR(12) UNIQUE NOT NULL, -- 12 CARACTERES MAYUSCULAS
subtotal NUMERIC(12, 2) NOT NULL,
estado VARCHAR(15) DEFAULT 'ACTIVO'
);
CREATE TABLE cuadres_arqueos (
id BIGSERIAL PRIMARY KEY,
consorcio_id INT NOT NULL REFERENCES consorcios(id) ON DELETE CASCADE,
banca_id INT NOT NULL REFERENCES bancas(id) ON DELETE RESTRICT,
usuario_id INT NOT NULL REFERENCES usuarios(id) ON DELETE RESTRICT,
fecha DATE NOT NULL,
turno VARCHAR(10) NOT NULL CHECK (turno IN ('DIA', 'NOCHE')),
billetes_2000 INT DEFAULT 0,
billetes_1000 INT DEFAULT 0,
billetes_500 INT DEFAULT 0,
billetes_200 INT DEFAULT 0,
billetes_100 INT DEFAULT 0,
billetes_50 INT DEFAULT 0,
monedas_25 INT DEFAULT 0,
monedas_10 INT DEFAULT 0,
monedas_5 INT DEFAULT 0,
monedas_1 INT DEFAULT 0,
total_fisico NUMERIC(12, 2) NOT NULL,
total_sistema NUMERIC(12, 2) NOT NULL,
diferencia NUMERIC(12, 2) NOT NULL,
observaciones TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);