-- -- PostgreSQL database dump -- \restrict londHmqT4llS8Wof4ZnceO2dyFhn4jiR5xbaszMgZpMczgr6aVW6xQJxeUdqJwa -- Dumped from database version 16.10 (Debian 16.10-1.pgdg13+1) -- Dumped by pg_dump version 16.10 (Debian 16.10-1.pgdg13+1) SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; -- -- Name: asistencia_delete_raw(bigint, text); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.asistencia_delete_raw(p_id_raw bigint, p_tz text DEFAULT 'America/Montevideo'::text) RETURNS jsonb LANGUAGE plpgsql AS $$ DECLARE v_id_usuario INT; v_ts TIMESTAMPTZ; v_t0 TIMESTAMPTZ; v_t1 TIMESTAMPTZ; v_del_raw INT; v_del INT; v_ins INT; BEGIN SELECT id_usuario, ts INTO v_id_usuario, v_ts FROM public.asistencia_raw WHERE id_raw = p_id_raw; IF v_id_usuario IS NULL THEN RETURN jsonb_build_object('deleted',0,'msg','id_raw inexistente'); END IF; v_t0 := v_ts - INTERVAL '1 day'; v_t1 := v_ts + INTERVAL '1 day'; -- borrar raw DELETE FROM public.asistencia_raw WHERE id_raw = p_id_raw; GET DIAGNOSTICS v_del_raw = ROW_COUNT; -- recomputar pares en ventana WITH tl AS ( SELECT ar.ts, ROW_NUMBER() OVER (ORDER BY ar.ts) AS rn FROM public.asistencia_raw ar WHERE ar.id_usuario = v_id_usuario AND ar.ts BETWEEN v_t0 AND v_t1 ), ready AS ( SELECT (t1.ts AT TIME ZONE p_tz)::date AS fecha, t1.ts AS desde, t2.ts AS hasta, EXTRACT(EPOCH FROM (t2.ts - t1.ts))/60.0 AS dur_min FROM tl t1 JOIN tl t2 ON t2.rn = t1.rn + 1 WHERE (t1.rn % 2) = 1 AND t2.ts > t1.ts ), del AS ( DELETE FROM public.asistencia_intervalo ai WHERE ai.id_usuario = v_id_usuario AND (ai.desde BETWEEN v_t0 AND v_t1 OR ai.hasta BETWEEN v_t0 AND v_t1) RETURNING 1 ), ins AS ( INSERT INTO public.asistencia_intervalo (id_usuario, fecha, desde, hasta, dur_min, origen) SELECT v_id_usuario, r.fecha, r.desde, r.hasta, r.dur_min, 'delete_adjust' FROM ready r ON CONFLICT (id_usuario, desde, hasta) DO NOTHING RETURNING 1 ) SELECT (SELECT COUNT(*) FROM del), (SELECT COUNT(*) FROM ins) INTO v_del, v_ins; RETURN jsonb_build_object('deleted',v_del_raw,'deleted_pairs',v_del,'inserted_pairs',v_ins); END; $$; ALTER FUNCTION public.asistencia_delete_raw(p_id_raw bigint, p_tz text) OWNER TO manso; -- -- Name: asistencia_get(text, date, date, text); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.asistencia_get(p_doc text, p_desde date, p_hasta date, p_tz text DEFAULT 'America/Montevideo'::text) RETURNS jsonb LANGUAGE sql AS $$ WITH u AS ( SELECT id_usuario, documento, nombre, apellido FROM public.usuarios WHERE regexp_replace(documento,'^\s*0+','','g') = regexp_replace(p_doc,'^\s*0+','','g') LIMIT 1 ), r AS ( SELECT ar.id_raw, (ar.ts AT TIME ZONE p_tz)::date AS fecha, to_char(ar.ts AT TIME ZONE p_tz,'HH24:MI:SS') AS hora, COALESCE(ar.modo,'') AS modo, COALESCE(ar.origen,'') AS origen, ar.ts FROM public.asistencia_raw ar JOIN u USING (id_usuario) WHERE (ar.ts AT TIME ZONE p_tz)::date BETWEEN p_desde AND p_hasta ), i AS ( SELECT ai.id_intervalo, ai.fecha, to_char(ai.desde AT TIME ZONE p_tz,'HH24:MI:SS') AS desde_hora, to_char(ai.hasta AT TIME ZONE p_tz,'HH24:MI:SS') AS hasta_hora, ai.dur_min FROM public.asistencia_intervalo ai JOIN u USING (id_usuario) WHERE ai.fecha BETWEEN p_desde AND p_hasta ) SELECT jsonb_build_object( 'usuario', (SELECT to_jsonb(u.*) FROM u), 'raw', COALESCE((SELECT jsonb_agg(to_jsonb(r.*) ORDER BY r.ts) FROM r),'[]'::jsonb), 'intervalos', COALESCE((SELECT jsonb_agg(to_jsonb(i.*) ORDER BY i.fecha, i.id_intervalo) FROM i),'[]'::jsonb) ); $$; ALTER FUNCTION public.asistencia_get(p_doc text, p_desde date, p_hasta date, p_tz text) OWNER TO manso; -- -- Name: asistencia_update_raw(bigint, date, text, text, text); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.asistencia_update_raw(p_id_raw bigint, p_fecha date, p_hora text, p_modo text, p_tz text DEFAULT 'America/Montevideo'::text) RETURNS jsonb LANGUAGE plpgsql AS $$ DECLARE v_id_usuario INT; v_ts_old TIMESTAMPTZ; v_ts_new TIMESTAMPTZ; v_t0 TIMESTAMPTZ; v_t1 TIMESTAMPTZ; v_del INT; v_ins INT; BEGIN -- leer estado previo SELECT id_usuario, ts INTO v_id_usuario, v_ts_old FROM public.asistencia_raw WHERE id_raw = p_id_raw; IF v_id_usuario IS NULL THEN RETURN jsonb_build_object('updated',0,'msg','id_raw inexistente'); END IF; -- construir ts nuevo v_ts_new := make_timestamptz( EXTRACT(YEAR FROM p_fecha)::INT, EXTRACT(MONTH FROM p_fecha)::INT, EXTRACT(DAY FROM p_fecha)::INT, split_part(p_hora,':',1)::INT, split_part(p_hora,':',2)::INT, COALESCE(NULLIF(split_part(p_hora,':',3),''), '0')::INT, p_tz); -- aplicar update UPDATE public.asistencia_raw SET ts = v_ts_new, modo = COALESCE(p_modo, modo) WHERE id_raw = p_id_raw; -- ventana de recálculo v_t0 := LEAST(v_ts_old, v_ts_new) - INTERVAL '1 day'; v_t1 := GREATEST(v_ts_old, v_ts_new) + INTERVAL '1 day'; -- recomputar pares en la ventana: borrar los del rango y reinsertar WITH tl AS ( SELECT ar.ts, ROW_NUMBER() OVER (ORDER BY ar.ts) AS rn FROM public.asistencia_raw ar WHERE ar.id_usuario = v_id_usuario AND ar.ts BETWEEN v_t0 AND v_t1 ), ready AS ( SELECT (t1.ts AT TIME ZONE p_tz)::date AS fecha, t1.ts AS desde, t2.ts AS hasta, EXTRACT(EPOCH FROM (t2.ts - t1.ts))/60.0 AS dur_min FROM tl t1 JOIN tl t2 ON t2.rn = t1.rn + 1 WHERE (t1.rn % 2) = 1 AND t2.ts > t1.ts ), del AS ( DELETE FROM public.asistencia_intervalo ai WHERE ai.id_usuario = v_id_usuario AND (ai.desde BETWEEN v_t0 AND v_t1 OR ai.hasta BETWEEN v_t0 AND v_t1) RETURNING 1 ), ins AS ( INSERT INTO public.asistencia_intervalo (id_usuario, fecha, desde, hasta, dur_min, origen) SELECT v_id_usuario, r.fecha, r.desde, r.hasta, r.dur_min, 'edit_manual' FROM ready r ON CONFLICT (id_usuario, desde, hasta) DO NOTHING RETURNING 1 ) SELECT (SELECT COUNT(*) FROM del), (SELECT COUNT(*) FROM ins) INTO v_del, v_ins; RETURN jsonb_build_object('updated',1,'deleted_pairs',v_del,'inserted_pairs',v_ins); END; $$; ALTER FUNCTION public.asistencia_update_raw(p_id_raw bigint, p_fecha date, p_hora text, p_modo text, p_tz text) OWNER TO manso; -- -- Name: delete_compra(integer); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.delete_compra(p_id_compra integer) RETURNS void LANGUAGE plpgsql AS $$ BEGIN DELETE FROM public.deta_comp_materias WHERE id_compra = p_id_compra; DELETE FROM public.deta_comp_producto WHERE id_compra = p_id_compra; DELETE FROM public.compras WHERE id_compra = p_id_compra; END; $$; ALTER FUNCTION public.delete_compra(p_id_compra integer) OWNER TO manso; -- -- Name: f_abrir_comanda(integer); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.f_abrir_comanda(p_id integer) RETURNS jsonb LANGUAGE plpgsql AS $$ DECLARE r jsonb; BEGIN UPDATE public.comandas SET estado = 'abierta', fec_cierre = NULL WHERE id_comanda = p_id; IF NOT FOUND THEN RETURN NULL; END IF; SELECT to_jsonb(v) INTO r FROM public.v_comandas_resumen v WHERE v.id_comanda = p_id; RETURN r; END; $$; ALTER FUNCTION public.f_abrir_comanda(p_id integer) OWNER TO manso; -- -- Name: f_cerrar_comanda(integer); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.f_cerrar_comanda(p_id integer) RETURNS jsonb LANGUAGE plpgsql AS $$ DECLARE r jsonb; BEGIN UPDATE public.comandas SET estado = 'cerrada', fec_cierre = COALESCE(fec_cierre, NOW()) WHERE id_comanda = p_id; IF NOT FOUND THEN RETURN NULL; END IF; SELECT to_jsonb(v) INTO r FROM public.v_comandas_resumen v WHERE v.id_comanda = p_id; RETURN r; END; $$; ALTER FUNCTION public.f_cerrar_comanda(p_id integer) OWNER TO manso; -- -- Name: f_comanda_detalle_json(integer); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.f_comanda_detalle_json(p_id_comanda integer) RETURNS jsonb LANGUAGE sql AS $$ WITH base AS ( SELECT c.id_comanda, c.fec_creacion, c.estado, c.observaciones, u.id_usuario, u.nombre AS usuario_nombre, u.apellido AS usuario_apellido, m.id_mesa, m.numero AS mesa_numero, m.apodo AS mesa_apodo, d.id_producto, p.nombre AS producto_nombre, d.cantidad, d.pre_unitario, (d.cantidad * d.pre_unitario) AS subtotal FROM public.comandas c JOIN public.usuarios u ON u.id_usuario = c.id_usuario JOIN public.mesas m ON m.id_mesa = c.id_mesa LEFT JOIN public.deta_comandas d ON d.id_comanda = c.id_comanda LEFT JOIN public.productos p ON p.id_producto = d.id_producto WHERE c.id_comanda = p_id_comanda ), hdr AS ( -- 1 sola fila con los datos de cabecera SELECT DISTINCT id_comanda, fec_creacion, estado, observaciones, id_usuario, usuario_nombre, usuario_apellido, id_mesa, mesa_numero, mesa_apodo FROM base ), agg_items AS ( SELECT COALESCE( jsonb_agg( jsonb_build_object( 'producto_id', b.id_producto, 'producto', b.producto_nombre, 'cantidad', b.cantidad, 'pre_unitario', b.pre_unitario, 'subtotal', b.subtotal ) ORDER BY b.producto_nombre NULLS LAST ) FILTER (WHERE b.id_producto IS NOT NULL), '[]'::jsonb ) AS items FROM base b ), tot AS ( SELECT COUNT(*) FILTER (WHERE id_producto IS NOT NULL) AS items, COALESCE(SUM(subtotal), 0)::numeric AS total FROM base ) SELECT CASE WHEN EXISTS (SELECT 1 FROM hdr) THEN jsonb_build_object( 'id_comanda', h.id_comanda, 'fec_creacion', h.fec_creacion, 'estado', h.estado, 'observaciones',h.observaciones, 'usuario', jsonb_build_object( 'id_usuario', h.id_usuario, 'nombre', h.usuario_nombre, 'apellido', h.usuario_apellido ), 'mesa', jsonb_build_object( 'id_mesa', h.id_mesa, 'numero', h.mesa_numero, 'apodo', h.mesa_apodo ), 'items', i.items, 'totales', jsonb_build_object( 'items', t.items, 'total', t.total ) ) ELSE NULL END FROM hdr h, agg_items i, tot t; $$; ALTER FUNCTION public.f_comanda_detalle_json(p_id_comanda integer) OWNER TO manso; -- -- Name: f_comanda_detalle_rows(integer); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.f_comanda_detalle_rows(p_id_comanda integer) RETURNS TABLE(id_comanda integer, fec_creacion timestamp without time zone, estado text, observaciones text, id_usuario integer, usuario_nombre text, usuario_apellido text, id_mesa integer, mesa_numero integer, mesa_apodo text, producto_id integer, producto_nombre text, cantidad numeric, pre_unitario numeric, subtotal numeric, items integer, total numeric) LANGUAGE sql AS $$ WITH base AS ( SELECT c.id_comanda, c.fec_creacion, c.estado, c.observaciones, u.id_usuario, u.nombre AS usuario_nombre, u.apellido AS usuario_apellido, m.id_mesa, m.numero AS mesa_numero, m.apodo AS mesa_apodo, d.id_producto, p.nombre AS producto_nombre, d.cantidad, d.pre_unitario, (d.cantidad * d.pre_unitario) AS subtotal FROM public.comandas c JOIN public.usuarios u ON u.id_usuario = c.id_usuario JOIN public.mesas m ON m.id_mesa = c.id_mesa LEFT JOIN public.deta_comandas d ON d.id_comanda = c.id_comanda LEFT JOIN public.productos p ON p.id_producto = d.id_producto WHERE c.id_comanda = p_id_comanda ), tot AS ( SELECT COUNT(*) FILTER (WHERE id_producto IS NOT NULL) AS items, COALESCE(SUM(subtotal), 0) AS total FROM base ) SELECT b.id_comanda, b.fec_creacion, b.estado, b.observaciones, b.id_usuario, b.usuario_nombre, b.usuario_apellido, b.id_mesa, b.mesa_numero, b.mesa_apodo, b.id_producto, b.producto_nombre, b.cantidad, b.pre_unitario, b.subtotal, t.items, t.total FROM base b CROSS JOIN tot t ORDER BY b.producto_nombre NULLS LAST; $$; ALTER FUNCTION public.f_comanda_detalle_rows(p_id_comanda integer) OWNER TO manso; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: comandas; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.comandas ( id_comanda integer NOT NULL, id_usuario integer NOT NULL, id_mesa integer NOT NULL, fec_creacion timestamp without time zone DEFAULT now() NOT NULL, estado text NOT NULL, observaciones text, fec_cierre timestamp with time zone, CONSTRAINT comandas_estado_check CHECK ((estado = ANY (ARRAY['abierta'::text, 'cerrada'::text, 'pagada'::text, 'anulada'::text]))) ); ALTER TABLE public.comandas OWNER TO manso; -- -- Name: COLUMN comandas.fec_cierre; Type: COMMENT; Schema: public; Owner: manso -- COMMENT ON COLUMN public.comandas.fec_cierre IS 'Fecha/hora de cierre de la comanda (NULL si está abierta)'; -- -- Name: deta_comandas; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.deta_comandas ( id_det_comanda integer NOT NULL, id_comanda integer NOT NULL, id_producto integer NOT NULL, cantidad numeric(12,3) NOT NULL, pre_unitario numeric(12,2) NOT NULL, observaciones text, CONSTRAINT deta_comandas_cantidad_check CHECK ((cantidad > (0)::numeric)), CONSTRAINT deta_comandas_pre_unitario_check CHECK ((pre_unitario >= (0)::numeric)) ); ALTER TABLE public.deta_comandas OWNER TO manso; -- -- Name: mesas; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.mesas ( id_mesa integer NOT NULL, numero integer NOT NULL, apodo text NOT NULL, estado text DEFAULT 'libre'::text NOT NULL, CONSTRAINT mesas_estado_check CHECK ((estado = ANY (ARRAY['libre'::text, 'ocupada'::text, 'reservada'::text]))) ); ALTER TABLE public.mesas OWNER TO manso; -- -- Name: usuarios; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.usuarios ( id_usuario integer NOT NULL, documento text, img_perfil character varying(255) DEFAULT 'img_perfil.png'::character varying NOT NULL, nombre text NOT NULL, apellido text NOT NULL, correo text, telefono text, fec_nacimiento date, activo boolean DEFAULT true ); ALTER TABLE public.usuarios OWNER TO manso; -- -- Name: v_comandas_resumen; Type: VIEW; Schema: public; Owner: manso -- CREATE VIEW public.v_comandas_resumen AS WITH items AS ( SELECT d.id_comanda, count(*) AS items, sum((d.cantidad * d.pre_unitario)) AS total FROM public.deta_comandas d GROUP BY d.id_comanda ) SELECT c.id_comanda, c.fec_creacion, c.estado, c.observaciones, u.id_usuario, u.nombre AS usuario_nombre, u.apellido AS usuario_apellido, m.id_mesa, m.numero AS mesa_numero, m.apodo AS mesa_apodo, COALESCE(i.items, (0)::bigint) AS items, COALESCE(i.total, (0)::numeric) AS total, c.fec_cierre, CASE WHEN (c.fec_cierre IS NOT NULL) THEN round((EXTRACT(epoch FROM (c.fec_cierre - (c.fec_creacion)::timestamp with time zone)) / 60.0), 1) ELSE NULL::numeric END AS duracion_min FROM (((public.comandas c JOIN public.usuarios u ON ((u.id_usuario = c.id_usuario))) JOIN public.mesas m ON ((m.id_mesa = c.id_mesa))) LEFT JOIN items i ON ((i.id_comanda = c.id_comanda))); ALTER VIEW public.v_comandas_resumen OWNER TO manso; -- -- Name: f_comandas_resumen(text, integer); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.f_comandas_resumen(p_estado text DEFAULT NULL::text, p_limit integer DEFAULT 200) RETURNS SETOF public.v_comandas_resumen LANGUAGE sql AS $$ SELECT * FROM public.v_comandas_resumen WHERE (p_estado IS NULL OR estado = p_estado) ORDER BY id_comanda DESC LIMIT p_limit; $$; ALTER FUNCTION public.f_comandas_resumen(p_estado text, p_limit integer) OWNER TO manso; -- -- Name: find_usuarios_por_documentos(jsonb); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.find_usuarios_por_documentos(p_docs jsonb) RETURNS jsonb LANGUAGE sql AS $$ WITH docs AS ( SELECT DISTINCT regexp_replace(value::text, '^\s*0+', '', 'g') AS doc_clean, value::text AS original FROM jsonb_array_elements_text(COALESCE(p_docs,'[]')) ), rows AS ( SELECT d.original AS documento, u.nombre, u.apellido, (u.id_usuario IS NOT NULL) AS found FROM docs d LEFT JOIN public.usuarios u ON regexp_replace(u.documento, '^\s*0+', '', 'g') = d.doc_clean ) SELECT COALESCE( jsonb_object_agg( documento, jsonb_build_object( 'nombre', COALESCE(nombre, ''), 'apellido', COALESCE(apellido, ''), 'found', found ) ), '{}'::jsonb ) FROM rows; $$; ALTER FUNCTION public.find_usuarios_por_documentos(p_docs jsonb) OWNER TO manso; -- -- Name: get_compra(integer); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.get_compra(p_id_compra integer) RETURNS jsonb LANGUAGE sql AS $$ WITH cab AS ( SELECT c.id_compra, c.id_proveedor, c.fec_compra, c.total FROM public.compras c WHERE c.id_compra = p_id_compra ), dm AS ( SELECT 'MAT'::text AS tipo, d.id_mat_prima AS id, d.cantidad, d.pre_unitario AS precio FROM public.deta_comp_materias d WHERE d.id_compra = p_id_compra ), dp AS ( SELECT 'PROD'::text AS tipo, d.id_producto AS id, d.cantidad, d.pre_unitario AS precio FROM public.deta_comp_producto d WHERE d.id_compra = p_id_compra ), det AS ( SELECT jsonb_agg(to_jsonb(x.*)) AS detalles FROM ( SELECT * FROM dm UNION ALL SELECT * FROM dp ) x ) SELECT jsonb_build_object( 'id_compra', (SELECT id_compra FROM cab), 'id_proveedor',(SELECT id_proveedor FROM cab), 'fec_compra', to_char((SELECT fec_compra FROM cab),'YYYY-MM-DD HH24:MI:SS'), 'total', (SELECT total FROM cab), 'detalles', COALESCE((SELECT detalles FROM det),'[]'::jsonb) ); $$; ALTER FUNCTION public.get_compra(p_id_compra integer) OWNER TO manso; -- -- Name: get_materia_prima(integer); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.get_materia_prima(p_id integer) RETURNS jsonb LANGUAGE sql AS $$ SELECT jsonb_build_object( 'materia', to_jsonb(mp), 'proveedores', COALESCE( ( SELECT jsonb_agg( jsonb_build_object( 'id_proveedor', pr.id_proveedor, 'raz_social', pr.raz_social, 'rut', pr.rut, 'contacto', pr.contacto, 'direccion', pr.direccion ) ) FROM public.prov_mate_prima pmp JOIN public.proveedores pr ON pr.id_proveedor = pmp.id_proveedor WHERE pmp.id_mat_prima = mp.id_mat_prima ), '[]'::jsonb ) ) FROM public.mate_primas mp WHERE mp.id_mat_prima = p_id; $$; ALTER FUNCTION public.get_materia_prima(p_id integer) OWNER TO manso; -- -- Name: get_producto(integer); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.get_producto(p_id integer) RETURNS jsonb LANGUAGE sql AS $$ SELECT jsonb_build_object( 'producto', to_jsonb(p), -- el registro completo del producto en JSONB 'receta', COALESCE( ( SELECT jsonb_agg( jsonb_build_object( 'id_mat_prima', rp.id_mat_prima, 'qty_por_unidad', rp.qty_por_unidad, 'nombre', mp.nombre, 'unidad', mp.unidad ) ) FROM receta_producto rp LEFT JOIN mate_primas mp USING (id_mat_prima) WHERE rp.id_producto = p.id_producto ), '[]'::jsonb ) ) FROM productos p WHERE p.id_producto = p_id; $$; ALTER FUNCTION public.get_producto(p_id integer) OWNER TO manso; -- -- Name: import_asistencia(jsonb, text, text); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.import_asistencia(p_registros jsonb, p_origen text, p_tz text DEFAULT 'America/Montevideo'::text) RETURNS jsonb LANGUAGE plpgsql AS $_$ DECLARE v_ins_raw INT; v_ins_pairs INT; v_miss JSONB; BEGIN WITH -- 1) JSON -> filas j AS ( SELECT regexp_replace(elem->>'doc','^\s*0+','','g')::TEXT AS doc_clean, (elem->>'isoDate')::DATE AS d, elem->>'time' AS time_str, NULLIF(elem->>'mode','') AS modo FROM jsonb_array_elements(COALESCE(p_registros,'[]')) elem ), -- 2) Vincular a usuarios u AS ( SELECT j.*, u.id_usuario FROM j LEFT JOIN public.usuarios u ON regexp_replace(u.documento,'^\s*0+','','g') = j.doc_clean ), -- 3) Documentos faltantes miss AS ( SELECT jsonb_agg(doc_clean) AS missing FROM u WHERE id_usuario IS NULL ), -- 4) TS determinista en TZ del negocio parsed AS ( SELECT u.id_usuario, u.modo, make_timestamptz( EXTRACT(YEAR FROM u.d)::INT, EXTRACT(MONTH FROM u.d)::INT, EXTRACT(DAY FROM u.d)::INT, split_part(u.time_str,':',1)::INT, split_part(u.time_str,':',2)::INT, COALESCE(NULLIF(split_part(u.time_str,':',3),''),'0')::INT, p_tz ) AS ts_calc FROM u WHERE u.id_usuario IS NOT NULL ), -- 5) Ventana por usuario (±1 día de lo importado) win AS ( SELECT id_usuario, (MIN(ts_calc) - INTERVAL '1 day') AS t0, (MAX(ts_calc) + INTERVAL '1 day') AS t1 FROM parsed GROUP BY id_usuario ), -- 6) Lo existente en BD dentro de la ventana existing AS ( SELECT ar.id_usuario, ar.ts FROM public.asistencia_raw ar JOIN win w ON w.id_usuario = ar.id_usuario AND ar.ts BETWEEN w.t0 AND w.t1 ), -- 7) CANDIDATE = existente ∪ archivo (sin duplicados) candidate AS ( SELECT id_usuario, ts FROM existing UNION -- ¡clave para evitar doble click! SELECT id_usuario, ts_calc AS ts FROM parsed ), -- 8) Paridad previa (cuántas marcas había ANTES de la ventana) before_cnt AS ( SELECT w.id_usuario, COUNT(*)::int AS cnt FROM win w JOIN public.asistencia_raw ar ON ar.id_usuario = w.id_usuario AND ar.ts < w.t0 GROUP BY w.id_usuario ), -- 9) Línea de tiempo candidata y pares (1→2, 3→4…), jornada = día local del inicio timeline AS ( SELECT c.id_usuario, c.ts, ROW_NUMBER() OVER (PARTITION BY c.id_usuario ORDER BY c.ts) AS rn FROM candidate c ), ready AS ( SELECT t1.id_usuario, (t1.ts AT TIME ZONE p_tz)::date AS fecha, t1.ts AS desde, t2.ts AS hasta, EXTRACT(EPOCH FROM (t2.ts - t1.ts))/60.0 AS dur_min FROM timeline t1 JOIN timeline t2 ON t2.id_usuario = t1.id_usuario AND t2.rn = t1.rn + 1 LEFT JOIN before_cnt b ON b.id_usuario = t1.id_usuario WHERE ((COALESCE(b.cnt,0) + t1.rn) % 2) = 1 -- t1 es IN global AND t2.ts > t1.ts ), -- 10) INSERT crudo (dedupe) ins_raw AS ( INSERT INTO public.asistencia_raw (id_usuario, ts, modo, origen) SELECT id_usuario, ts_calc, NULLIF(modo,'')::text, -- puede quedar NULL para auto-etiquetado p_origen FROM parsed ON CONFLICT (id_usuario, ts) DO NOTHING RETURNING 1 ), -- 11) Auto-etiquetar IN/OUT en BD para filas con modo vacío/'1' (tras insertar) before_cnt2 AS ( SELECT w.id_usuario, COUNT(*)::int AS cnt FROM win w JOIN public.asistencia_raw ar ON ar.id_usuario = w.id_usuario AND ar.ts < w.t0 GROUP BY w.id_usuario ), tl2 AS ( SELECT ar.id_usuario, ar.ts, ROW_NUMBER() OVER (PARTITION BY ar.id_usuario ORDER BY ar.ts) AS rn FROM public.asistencia_raw ar JOIN win w ON w.id_usuario = ar.id_usuario AND ar.ts BETWEEN w.t0 AND w.t1 ), label2 AS ( SELECT t.id_usuario, t.ts, CASE WHEN ((COALESCE(b.cnt,0) + t.rn) % 2) = 1 THEN 'IN' ELSE 'OUT' END AS new_mode FROM tl2 t LEFT JOIN before_cnt2 b ON b.id_usuario = t.id_usuario ), set_mode AS ( UPDATE public.asistencia_raw ar SET modo = l.new_mode FROM label2 l WHERE ar.id_usuario = l.id_usuario AND ar.ts = l.ts AND (ar.modo IS NULL OR btrim(ar.modo) = '' OR ar.modo ~ '^\s*1\s*$') RETURNING 1 ), -- 12) INSERT pares (dedupe) calculados desde CANDIDATE (ya tiene todo el contexto) ins_pairs AS ( INSERT INTO public.asistencia_intervalo (id_usuario, fecha, desde, hasta, dur_min, origen) SELECT id_usuario, fecha, desde, hasta, dur_min, p_origen FROM ready ON CONFLICT (id_usuario, desde, hasta) DO NOTHING RETURNING 1 ) SELECT (SELECT COUNT(*) FROM ins_raw), (SELECT COUNT(*) FROM ins_pairs), (SELECT COALESCE(missing,'[]'::jsonb) FROM miss) INTO v_ins_raw, v_ins_pairs, v_miss; RETURN jsonb_build_object( 'inserted_raw', v_ins_raw, 'inserted_pairs', v_ins_pairs, 'missing_docs', v_miss ); END; $_$; ALTER FUNCTION public.import_asistencia(p_registros jsonb, p_origen text, p_tz text) OWNER TO manso; -- -- Name: report_asistencia(date, date); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.report_asistencia(p_desde date, p_hasta date) RETURNS TABLE(documento text, nombre text, apellido text, fecha date, desde_hora text, hasta_hora text, dur_min numeric) LANGUAGE sql AS $$ SELECT u.documento, u.nombre, u.apellido, ai.fecha, to_char(ai.desde AT TIME ZONE 'America/Montevideo','HH24:MI:SS') AS desde_hora, to_char(ai.hasta AT TIME ZONE 'America/Montevideo','HH24:MI:SS') AS hasta_hora, ai.dur_min FROM public.asistencia_intervalo ai JOIN public.usuarios u USING (id_usuario) WHERE ai.fecha BETWEEN p_desde AND p_hasta ORDER BY u.documento, ai.fecha, ai.desde; $$; ALTER FUNCTION public.report_asistencia(p_desde date, p_hasta date) OWNER TO manso; -- -- Name: report_gastos(integer); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.report_gastos(p_year integer) RETURNS jsonb LANGUAGE sql STABLE AS $$ WITH mdata AS ( SELECT date_trunc('month', c.fec_compra)::date AS m, SUM(c.total)::numeric AS importe FROM public.compras c WHERE EXTRACT(YEAR FROM c.fec_compra) = p_year GROUP BY 1 ), mm AS ( SELECT EXTRACT(MONTH FROM m)::int AS mes, importe FROM mdata ) SELECT jsonb_build_object( 'year', p_year, 'total', COALESCE((SELECT SUM(importe) FROM mdata), 0), 'avg', COALESCE((SELECT AVG(importe) FROM mdata), 0), 'months', (SELECT jsonb_agg( jsonb_build_object( 'mes', gs, 'nombre', to_char(to_date(gs::text,'MM'),'Mon'), 'importe', COALESCE(mm.importe,0) ) ORDER BY gs ) FROM generate_series(1,12) gs LEFT JOIN mm ON mm.mes = gs) ); $$; ALTER FUNCTION public.report_gastos(p_year integer) OWNER TO manso; -- -- Name: report_tickets_year(integer, text); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.report_tickets_year(p_year integer, p_tz text DEFAULT 'America/Montevideo'::text) RETURNS jsonb LANGUAGE sql STABLE AS $$ WITH bounds AS ( SELECT make_timestamp(p_year, 1, 1, 0,0,0) AS d0, make_timestamp(p_year+1, 1, 1, 0,0,0) AS d1, make_timestamptz(p_year, 1, 1, 0,0,0, p_tz) AS t0, make_timestamptz(p_year+1, 1, 1, 0,0,0, p_tz) AS t1 ), base AS ( SELECT c.id_comanda, CASE WHEN c.fec_cierre IS NOT NULL THEN (c.fec_cierre AT TIME ZONE p_tz) ELSE c.fec_creacion END AS fec_local, v.total FROM public.comandas c JOIN public.vw_ticket_total v ON v.id_comanda = c.id_comanda JOIN bounds b ON TRUE WHERE (c.fec_cierre IS NOT NULL AND c.fec_cierre >= b.t0 AND c.fec_cierre < b.t1) OR (c.fec_cierre IS NULL AND c.fec_creacion >= b.d0 AND c.fec_creacion < b.d1) ), m AS ( SELECT EXTRACT(MONTH FROM fec_local)::int AS mes, COUNT(*)::int AS cant, SUM(total)::numeric AS importe, AVG(total)::numeric AS avg FROM base GROUP BY 1 ), ytd AS ( SELECT COUNT(*)::int AS total_ytd, AVG(total)::numeric AS avg_ticket, SUM(total)::numeric AS to_date FROM base ) SELECT jsonb_build_object( 'year', p_year, 'total_ytd', (SELECT total_ytd FROM ytd), 'avg_ticket', (SELECT avg_ticket FROM ytd), 'to_date', (SELECT to_date FROM ytd), 'months', (SELECT jsonb_agg( jsonb_build_object( 'mes', mes, 'nombre', to_char(to_date(mes::text,'MM'),'Mon'), 'cant', cant, 'importe', importe, 'avg', avg ) ORDER BY mes ) FROM m) ); $$; ALTER FUNCTION public.report_tickets_year(p_year integer, p_tz text) OWNER TO manso; -- -- Name: save_compra(integer, integer, timestamp with time zone, jsonb); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.save_compra(p_id_compra integer, p_id_proveedor integer, p_fec_compra timestamp with time zone, p_detalles jsonb) RETURNS TABLE(id_compra integer, total numeric) LANGUAGE plpgsql AS $$ DECLARE v_id INT; v_total numeric := 0; BEGIN IF COALESCE(jsonb_array_length(p_detalles),0) = 0 THEN RAISE EXCEPTION 'No hay renglones en la compra'; END IF; -- Cabecera (insert/update) IF p_id_compra IS NULL THEN INSERT INTO public.compras (id_proveedor, fec_compra, total) VALUES (p_id_proveedor, COALESCE(p_fec_compra, now()), 0) RETURNING public.compras.id_compra INTO v_id; ELSE UPDATE public.compras c SET id_proveedor = p_id_proveedor, fec_compra = COALESCE(p_fec_compra, c.fec_compra) WHERE c.id_compra = p_id_compra RETURNING c.id_compra INTO v_id; -- Reemplazamos los renglones DELETE FROM public.deta_comp_materias d WHERE d.id_compra = v_id; DELETE FROM public.deta_comp_producto p WHERE p.id_compra = v_id; END IF; -- Materias primas (sin CTE: parseo JSON inline) INSERT INTO public.deta_comp_materias (id_compra, id_mat_prima, cantidad, pre_unitario) SELECT v_id, x.id, x.cantidad, x.precio FROM jsonb_to_recordset(COALESCE(p_detalles, '[]'::jsonb)) AS x(tipo text, id int, cantidad numeric, precio numeric) WHERE UPPER(TRIM(x.tipo)) = 'MAT'; -- Productos (sin CTE) INSERT INTO public.deta_comp_producto (id_compra, id_producto, cantidad, pre_unitario) SELECT v_id, x.id, x.cantidad, x.precio FROM jsonb_to_recordset(COALESCE(p_detalles, '[]'::jsonb)) AS x(tipo text, id int, cantidad numeric, precio numeric) WHERE UPPER(TRIM(x.tipo)) = 'PROD'; -- Recalcular total (calificado) y redondear a ENTERO SELECT COALESCE( (SELECT SUM(dcm.cantidad*dcm.pre_unitario) FROM public.deta_comp_materias dcm WHERE dcm.id_compra = v_id), 0) + COALESCE( (SELECT SUM(dcp.cantidad*dcp.pre_unitario) FROM public.deta_comp_producto dcp WHERE dcp.id_compra = v_id), 0) INTO v_total; UPDATE public.compras c SET total = round(v_total, 0) WHERE c.id_compra = v_id; RETURN QUERY SELECT v_id, round(v_total, 0); END; $$; ALTER FUNCTION public.save_compra(p_id_compra integer, p_id_proveedor integer, p_fec_compra timestamp with time zone, p_detalles jsonb) OWNER TO manso; -- -- Name: save_materia_prima(integer, text, text, boolean, jsonb); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.save_materia_prima(p_id_mat_prima integer, p_nombre text, p_unidad text, p_activo boolean, p_proveedores jsonb DEFAULT '[]'::jsonb) RETURNS integer LANGUAGE plpgsql AS $_$ DECLARE v_id INT; BEGIN IF p_id_mat_prima IS NULL THEN INSERT INTO public.mate_primas (nombre, unidad, activo) VALUES (p_nombre, p_unidad, COALESCE(p_activo, TRUE)) RETURNING mate_primas.id_mat_prima INTO v_id; ELSE UPDATE public.mate_primas mp SET nombre = p_nombre, unidad = p_unidad, activo = COALESCE(p_activo, TRUE) WHERE mp.id_mat_prima = p_id_mat_prima; v_id := p_id_mat_prima; END IF; -- Sincronizar proveedores: borrar todos y re-crear a partir de JSONB DELETE FROM public.prov_mate_prima pmp WHERE pmp.id_mat_prima = v_id; INSERT INTO public.prov_mate_prima (id_proveedor, id_mat_prima) SELECT (e->>0)::INT AS id_proveedor, -- elementos JSON como enteros (array simple) v_id AS id_mat_prima FROM jsonb_array_elements(COALESCE(p_proveedores, '[]'::jsonb)) AS e WHERE (e->>0) ~ '^\d+$'; -- solo enteros RETURN v_id; END; $_$; ALTER FUNCTION public.save_materia_prima(p_id_mat_prima integer, p_nombre text, p_unidad text, p_activo boolean, p_proveedores jsonb) OWNER TO manso; -- -- Name: save_producto(integer, text, text, numeric, boolean, integer, jsonb); Type: FUNCTION; Schema: public; Owner: manso -- CREATE FUNCTION public.save_producto(p_id_producto integer, p_nombre text, p_img_producto text, p_precio numeric, p_activo boolean, p_id_categoria integer, p_receta jsonb DEFAULT '[]'::jsonb) RETURNS integer LANGUAGE plpgsql AS $_$ DECLARE v_id INT; BEGIN IF p_id_producto IS NULL THEN INSERT INTO public.productos (nombre, img_producto, precio, activo, id_categoria) VALUES (p_nombre, p_img_producto, p_precio, COALESCE(p_activo, TRUE), p_id_categoria) RETURNING productos.id_producto INTO v_id; ELSE UPDATE public.productos p SET nombre = p_nombre, img_producto = p_img_producto, precio = p_precio, activo = COALESCE(p_activo, TRUE), id_categoria = p_id_categoria WHERE p.id_producto = p_id_producto; v_id := p_id_producto; END IF; -- Limpia receta actual DELETE FROM public.receta_producto rp WHERE rp.id_producto = v_id; -- Inserta SOLO ítems válidos (id entero positivo y cantidad > 0), redondeo a 3 decimales INSERT INTO public.receta_producto (id_producto, id_mat_prima, qty_por_unidad) SELECT v_id, (rec->>'id_mat_prima')::INT, ROUND((rec->>'qty_por_unidad')::NUMERIC, 3) FROM jsonb_array_elements(COALESCE(p_receta, '[]'::jsonb)) AS rec WHERE (rec->>'id_mat_prima') ~ '^\d+$' AND (rec->>'id_mat_prima')::INT > 0 AND (rec->>'qty_por_unidad') ~ '^\d+(\.\d+)?$' AND (rec->>'qty_por_unidad')::NUMERIC > 0; RETURN v_id; END; $_$; ALTER FUNCTION public.save_producto(p_id_producto integer, p_nombre text, p_img_producto text, p_precio numeric, p_activo boolean, p_id_categoria integer, p_receta jsonb) OWNER TO manso; -- -- Name: asistencia_intervalo; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.asistencia_intervalo ( id_intervalo bigint NOT NULL, id_usuario integer NOT NULL, fecha date NOT NULL, desde timestamp with time zone NOT NULL, hasta timestamp with time zone NOT NULL, dur_min numeric(10,2) NOT NULL, origen text, created_at timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT chk_ai_orden CHECK ((hasta > desde)) ); ALTER TABLE public.asistencia_intervalo OWNER TO manso; -- -- Name: asistencia_intervalo_id_intervalo_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.asistencia_intervalo_id_intervalo_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.asistencia_intervalo_id_intervalo_seq OWNER TO manso; -- -- Name: asistencia_intervalo_id_intervalo_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.asistencia_intervalo_id_intervalo_seq OWNED BY public.asistencia_intervalo.id_intervalo; -- -- Name: asistencia_raw; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.asistencia_raw ( id_raw bigint NOT NULL, id_usuario integer NOT NULL, ts timestamp with time zone NOT NULL, modo text, origen text, created_at timestamp with time zone DEFAULT now() NOT NULL ); ALTER TABLE public.asistencia_raw OWNER TO manso; -- -- Name: asistencia_raw_id_raw_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.asistencia_raw_id_raw_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.asistencia_raw_id_raw_seq OWNER TO manso; -- -- Name: asistencia_raw_id_raw_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.asistencia_raw_id_raw_seq OWNED BY public.asistencia_raw.id_raw; -- -- Name: asistencia_resumen_diario; Type: VIEW; Schema: public; Owner: manso -- CREATE VIEW public.asistencia_resumen_diario AS SELECT ai.id_usuario, u.documento, u.nombre, u.apellido, ai.fecha, sum(ai.dur_min) AS minutos_dia, round((sum(ai.dur_min) / 60.0), 2) AS horas_dia, count(*) AS pares_dia FROM (public.asistencia_intervalo ai JOIN public.usuarios u USING (id_usuario)) GROUP BY ai.id_usuario, u.documento, u.nombre, u.apellido, ai.fecha ORDER BY ai.id_usuario, ai.fecha; ALTER VIEW public.asistencia_resumen_diario OWNER TO manso; -- -- Name: categorias; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.categorias ( id_categoria integer NOT NULL, nombre text NOT NULL, visible boolean DEFAULT true ); ALTER TABLE public.categorias OWNER TO manso; -- -- Name: categorias_id_categoria_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.categorias_id_categoria_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.categorias_id_categoria_seq OWNER TO manso; -- -- Name: categorias_id_categoria_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.categorias_id_categoria_seq OWNED BY public.categorias.id_categoria; -- -- Name: clientes; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.clientes ( id_cliente integer NOT NULL, nombre text NOT NULL, correo text, telefono text, fec_nacimiento date, activo boolean DEFAULT true ); ALTER TABLE public.clientes OWNER TO manso; -- -- Name: clientes_id_cliente_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.clientes_id_cliente_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.clientes_id_cliente_seq OWNER TO manso; -- -- Name: clientes_id_cliente_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.clientes_id_cliente_seq OWNED BY public.clientes.id_cliente; -- -- Name: comandas_id_comanda_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.comandas_id_comanda_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.comandas_id_comanda_seq OWNER TO manso; -- -- Name: comandas_id_comanda_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.comandas_id_comanda_seq OWNED BY public.comandas.id_comanda; -- -- Name: compras; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.compras ( id_compra integer NOT NULL, id_proveedor integer NOT NULL, fec_compra timestamp without time zone NOT NULL, total numeric(14,2) ); ALTER TABLE public.compras OWNER TO manso; -- -- Name: compras_id_compra_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.compras_id_compra_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.compras_id_compra_seq OWNER TO manso; -- -- Name: compras_id_compra_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.compras_id_compra_seq OWNED BY public.compras.id_compra; -- -- Name: deta_comandas_id_det_comanda_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.deta_comandas_id_det_comanda_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.deta_comandas_id_det_comanda_seq OWNER TO manso; -- -- Name: deta_comandas_id_det_comanda_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.deta_comandas_id_det_comanda_seq OWNED BY public.deta_comandas.id_det_comanda; -- -- Name: deta_comp_materias; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.deta_comp_materias ( id_compra integer NOT NULL, id_mat_prima integer NOT NULL, cantidad numeric(12,3) NOT NULL, pre_unitario numeric(12,2) NOT NULL, CONSTRAINT deta_comp_materias_cantidad_check CHECK ((cantidad > (0)::numeric)), CONSTRAINT deta_comp_materias_pre_unitario_check CHECK ((pre_unitario >= (0)::numeric)) ); ALTER TABLE public.deta_comp_materias OWNER TO manso; -- -- Name: deta_comp_producto; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.deta_comp_producto ( id_compra integer NOT NULL, id_producto integer NOT NULL, cantidad numeric(12,3) NOT NULL, pre_unitario numeric(12,2) NOT NULL, CONSTRAINT deta_comp_producto_cantidad_check CHECK ((cantidad > (0)::numeric)), CONSTRAINT deta_comp_producto_pre_unitario_check CHECK ((pre_unitario >= (0)::numeric)) ); ALTER TABLE public.deta_comp_producto OWNER TO manso; -- -- Name: mate_primas; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.mate_primas ( id_mat_prima integer NOT NULL, nombre text NOT NULL, unidad text NOT NULL, activo boolean DEFAULT true ); ALTER TABLE public.mate_primas OWNER TO manso; -- -- Name: mate_primas_id_mat_prima_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.mate_primas_id_mat_prima_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.mate_primas_id_mat_prima_seq OWNER TO manso; -- -- Name: mate_primas_id_mat_prima_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.mate_primas_id_mat_prima_seq OWNED BY public.mate_primas.id_mat_prima; -- -- Name: mesas_id_mesa_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.mesas_id_mesa_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.mesas_id_mesa_seq OWNER TO manso; -- -- Name: mesas_id_mesa_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.mesas_id_mesa_seq OWNED BY public.mesas.id_mesa; -- -- Name: productos; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.productos ( id_producto integer NOT NULL, nombre text NOT NULL, img_producto character varying(255) DEFAULT 'img/productos/img_producto.png'::character varying NOT NULL, precio integer NOT NULL, activo boolean DEFAULT true, id_categoria integer NOT NULL, CONSTRAINT productos_precio_check CHECK (((precio)::numeric >= (0)::numeric)), CONSTRAINT productos_precio_nn CHECK ((precio >= 0)) ); ALTER TABLE public.productos OWNER TO manso; -- -- Name: productos_id_producto_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.productos_id_producto_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.productos_id_producto_seq OWNER TO manso; -- -- Name: productos_id_producto_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.productos_id_producto_seq OWNED BY public.productos.id_producto; -- -- Name: prov_mate_prima; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.prov_mate_prima ( id_proveedor integer NOT NULL, id_mat_prima integer NOT NULL ); ALTER TABLE public.prov_mate_prima OWNER TO manso; -- -- Name: prov_producto; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.prov_producto ( id_proveedor integer NOT NULL, id_producto integer NOT NULL ); ALTER TABLE public.prov_producto OWNER TO manso; -- -- Name: proveedores; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.proveedores ( id_proveedor integer NOT NULL, rut text, raz_social text NOT NULL, direccion text, contacto text ); ALTER TABLE public.proveedores OWNER TO manso; -- -- Name: proveedores_id_proveedor_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.proveedores_id_proveedor_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.proveedores_id_proveedor_seq OWNER TO manso; -- -- Name: proveedores_id_proveedor_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.proveedores_id_proveedor_seq OWNED BY public.proveedores.id_proveedor; -- -- Name: receta_producto; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.receta_producto ( id_producto integer NOT NULL, id_mat_prima integer NOT NULL, qty_por_unidad numeric(12,3) NOT NULL, CONSTRAINT receta_producto_qty_por_unidad_check CHECK ((qty_por_unidad > (0)::numeric)) ); ALTER TABLE public.receta_producto OWNER TO manso; -- -- Name: roles; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.roles ( id_rol integer NOT NULL, nombre text NOT NULL ); ALTER TABLE public.roles OWNER TO manso; -- -- Name: roles_id_rol_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.roles_id_rol_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.roles_id_rol_seq OWNER TO manso; -- -- Name: roles_id_rol_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.roles_id_rol_seq OWNED BY public.roles.id_rol; -- -- Name: usua_roles; Type: TABLE; Schema: public; Owner: manso -- CREATE TABLE public.usua_roles ( id_usuario integer NOT NULL, id_rol integer NOT NULL, fec_asignacion timestamp without time zone DEFAULT now(), autor integer, activo boolean DEFAULT true ); ALTER TABLE public.usua_roles OWNER TO manso; -- -- Name: usuarios_id_usuario_seq; Type: SEQUENCE; Schema: public; Owner: manso -- CREATE SEQUENCE public.usuarios_id_usuario_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.usuarios_id_usuario_seq OWNER TO manso; -- -- Name: usuarios_id_usuario_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: manso -- ALTER SEQUENCE public.usuarios_id_usuario_seq OWNED BY public.usuarios.id_usuario; -- -- Name: v_comandas_detalle_base; Type: VIEW; Schema: public; Owner: manso -- CREATE VIEW public.v_comandas_detalle_base AS SELECT c.id_comanda, c.fec_creacion, c.fec_cierre, c.estado, c.observaciones, u.id_usuario, u.nombre AS usuario_nombre, u.apellido AS usuario_apellido, m.id_mesa, m.numero AS mesa_numero, m.apodo AS mesa_apodo, d.id_producto, p.nombre AS producto_nombre, d.cantidad, d.pre_unitario, (d.cantidad * d.pre_unitario) AS subtotal FROM ((((public.comandas c JOIN public.usuarios u ON ((u.id_usuario = c.id_usuario))) JOIN public.mesas m ON ((m.id_mesa = c.id_mesa))) LEFT JOIN public.deta_comandas d ON ((d.id_comanda = c.id_comanda))) LEFT JOIN public.productos p ON ((p.id_producto = d.id_producto))); ALTER VIEW public.v_comandas_detalle_base OWNER TO manso; -- -- Name: v_comandas_detalle_items; Type: VIEW; Schema: public; Owner: manso -- CREATE VIEW public.v_comandas_detalle_items AS SELECT d.id_comanda, d.id_det_comanda, d.id_producto, p.nombre AS producto_nombre, d.cantidad, d.pre_unitario, (d.cantidad * d.pre_unitario) AS subtotal, d.observaciones FROM (public.deta_comandas d JOIN public.productos p ON ((p.id_producto = d.id_producto))); ALTER VIEW public.v_comandas_detalle_items OWNER TO manso; -- -- Name: v_comandas_detalle_json; Type: VIEW; Schema: public; Owner: manso -- CREATE VIEW public.v_comandas_detalle_json AS SELECT id_comanda, jsonb_build_object('id_comanda', id_comanda, 'fec_creacion', fec_creacion, 'fec_cierre', fec_cierre, 'estado', estado, 'observaciones', observaciones, 'usuario', jsonb_build_object('id_usuario', id_usuario, 'nombre', usuario_nombre, 'apellido', usuario_apellido), 'mesa', jsonb_build_object('id_mesa', id_mesa, 'numero', mesa_numero, 'apodo', mesa_apodo), 'items', COALESCE(( SELECT jsonb_agg(jsonb_build_object('producto_id', b.id_producto, 'producto', b.producto_nombre, 'cantidad', b.cantidad, 'pre_unitario', b.pre_unitario, 'subtotal', b.subtotal) ORDER BY b.producto_nombre) AS jsonb_agg FROM public.v_comandas_detalle_base b WHERE ((b.id_comanda = h.id_comanda) AND (b.id_producto IS NOT NULL))), '[]'::jsonb), 'totales', jsonb_build_object('items', COALESCE(( SELECT count(*) AS count FROM public.v_comandas_detalle_base b WHERE ((b.id_comanda = h.id_comanda) AND (b.id_producto IS NOT NULL))), (0)::bigint), 'total', COALESCE(( SELECT sum(b.subtotal) AS sum FROM public.v_comandas_detalle_base b WHERE (b.id_comanda = h.id_comanda)), (0)::numeric))) AS data FROM ( SELECT DISTINCT v_comandas_detalle_base.id_comanda, v_comandas_detalle_base.fec_creacion, v_comandas_detalle_base.fec_cierre, v_comandas_detalle_base.estado, v_comandas_detalle_base.observaciones, v_comandas_detalle_base.id_usuario, v_comandas_detalle_base.usuario_nombre, v_comandas_detalle_base.usuario_apellido, v_comandas_detalle_base.id_mesa, v_comandas_detalle_base.mesa_numero, v_comandas_detalle_base.mesa_apodo FROM public.v_comandas_detalle_base) h; ALTER VIEW public.v_comandas_detalle_json OWNER TO manso; -- -- Name: vw_compras; Type: VIEW; Schema: public; Owner: manso -- CREATE VIEW public.vw_compras AS SELECT c.id_compra, c.id_proveedor, p.raz_social AS proveedor, c.fec_compra, c.total FROM (public.compras c JOIN public.proveedores p USING (id_proveedor)) ORDER BY c.fec_compra DESC, c.id_compra DESC; ALTER VIEW public.vw_compras OWNER TO manso; -- -- Name: vw_ticket_total; Type: VIEW; Schema: public; Owner: manso -- CREATE VIEW public.vw_ticket_total AS WITH lineas AS ( SELECT c.id_comanda, COALESCE(c.fec_cierre, (c.fec_creacion)::timestamp with time zone) AS fec_ticket, (COALESCE(dc.pre_unitario, (p.precio)::numeric, (0)::numeric))::numeric(14,2) AS pu, (COALESCE(dc.cantidad, (1)::numeric))::numeric(14,3) AS qty FROM ((public.comandas c JOIN public.deta_comandas dc ON ((dc.id_comanda = c.id_comanda))) LEFT JOIN public.productos p ON ((p.id_producto = dc.id_producto))) ) SELECT id_comanda, fec_ticket, (sum((qty * pu)))::numeric(14,2) AS total FROM lineas GROUP BY id_comanda, fec_ticket; ALTER VIEW public.vw_ticket_total OWNER TO manso; -- -- Name: asistencia_intervalo id_intervalo; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.asistencia_intervalo ALTER COLUMN id_intervalo SET DEFAULT nextval('public.asistencia_intervalo_id_intervalo_seq'::regclass); -- -- Name: asistencia_raw id_raw; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.asistencia_raw ALTER COLUMN id_raw SET DEFAULT nextval('public.asistencia_raw_id_raw_seq'::regclass); -- -- Name: categorias id_categoria; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.categorias ALTER COLUMN id_categoria SET DEFAULT nextval('public.categorias_id_categoria_seq'::regclass); -- -- Name: clientes id_cliente; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.clientes ALTER COLUMN id_cliente SET DEFAULT nextval('public.clientes_id_cliente_seq'::regclass); -- -- Name: comandas id_comanda; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.comandas ALTER COLUMN id_comanda SET DEFAULT nextval('public.comandas_id_comanda_seq'::regclass); -- -- Name: compras id_compra; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.compras ALTER COLUMN id_compra SET DEFAULT nextval('public.compras_id_compra_seq'::regclass); -- -- Name: deta_comandas id_det_comanda; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.deta_comandas ALTER COLUMN id_det_comanda SET DEFAULT nextval('public.deta_comandas_id_det_comanda_seq'::regclass); -- -- Name: mate_primas id_mat_prima; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.mate_primas ALTER COLUMN id_mat_prima SET DEFAULT nextval('public.mate_primas_id_mat_prima_seq'::regclass); -- -- Name: mesas id_mesa; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.mesas ALTER COLUMN id_mesa SET DEFAULT nextval('public.mesas_id_mesa_seq'::regclass); -- -- Name: productos id_producto; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.productos ALTER COLUMN id_producto SET DEFAULT nextval('public.productos_id_producto_seq'::regclass); -- -- Name: proveedores id_proveedor; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.proveedores ALTER COLUMN id_proveedor SET DEFAULT nextval('public.proveedores_id_proveedor_seq'::regclass); -- -- Name: roles id_rol; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.roles ALTER COLUMN id_rol SET DEFAULT nextval('public.roles_id_rol_seq'::regclass); -- -- Name: usuarios id_usuario; Type: DEFAULT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.usuarios ALTER COLUMN id_usuario SET DEFAULT nextval('public.usuarios_id_usuario_seq'::regclass); -- -- Data for Name: asistencia_intervalo; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.asistencia_intervalo (id_intervalo, id_usuario, fecha, desde, hasta, dur_min, origen, created_at) FROM stdin; 83 1 2025-08-29 2025-08-30 01:19:38+00 2025-08-30 01:26:19+00 6.68 delete_adjust 2025-08-30 04:42:43.597798+00 84 1 2025-08-29 2025-08-30 02:30:00+00 2025-08-30 02:46:40+00 16.67 delete_adjust 2025-08-30 04:42:43.597798+00 85 1 2025-08-30 2025-08-30 03:13:31+00 2025-08-30 03:36:03+00 22.53 delete_adjust 2025-08-30 04:42:43.597798+00 86 1 2025-08-30 2025-08-30 04:10:00+00 2025-08-30 04:12:00+00 2.00 delete_adjust 2025-08-30 04:42:43.597798+00 87 1 2025-08-30 2025-08-30 04:24:08+00 2025-08-30 04:38:56+00 14.80 delete_adjust 2025-08-30 04:42:43.597798+00 88 1 2025-08-30 2025-08-30 05:01:55+00 2025-08-30 05:10:00+00 8.08 delete_adjust 2025-08-30 04:42:43.597798+00 89 1 2025-08-27 2025-08-27 04:34:55+00 2025-08-27 06:35:08+00 120.22 AGL_001.txt 2025-08-30 04:43:13.749738+00 90 1 2025-08-29 2025-08-30 00:12:34+00 2025-08-30 00:47:24+00 34.83 AGL_001.txt 2025-08-30 04:43:13.749738+00 97 2 2025-01-02 2025-01-02 12:12:00+00 2025-01-02 14:48:00+00 156.00 manual_form 2025-08-30 04:45:59.234439+00 99 2 2025-01-02 2025-01-02 20:50:00+00 2025-01-03 02:48:00+00 358.00 manual_form 2025-08-30 04:46:45.672304+00 108 1 2025-01-01 2025-01-01 10:00:00+00 2025-01-01 16:00:00+00 360.00 manual_form 2025-09-01 21:03:36.046072+00 \. -- -- Data for Name: asistencia_raw; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.asistencia_raw (id_raw, id_usuario, ts, modo, origen, created_at) FROM stdin; 1 1 2025-08-30 05:10:00+00 OUT manual_form 2025-08-30 04:11:08.227836+00 2 1 2025-08-30 04:10:00+00 IN manual_form 2025-08-30 04:11:08.227836+00 3 1 2025-08-30 04:12:00+00 OUT manual_form 2025-08-30 04:12:30.456958+00 4 1 2025-08-30 02:30:00+00 IN manual_form 2025-08-30 04:12:30.456958+00 22 1 2025-08-30 01:19:38+00 IN AGL_001.txt 2025-08-30 04:32:09.754679+00 21 1 2025-08-30 01:26:19+00 OUT AGL_001.txt 2025-08-30 04:32:09.754679+00 20 1 2025-08-30 02:46:40+00 OUT AGL_001.txt 2025-08-30 04:32:09.754679+00 19 1 2025-08-30 03:13:31+00 IN AGL_001.txt 2025-08-30 04:32:09.754679+00 18 1 2025-08-30 03:36:03+00 OUT AGL_001.txt 2025-08-30 04:32:09.754679+00 17 1 2025-08-30 04:38:56+00 OUT AGL_001.txt 2025-08-30 04:32:09.754679+00 16 1 2025-08-30 05:01:55+00 IN AGL_001.txt 2025-08-30 04:32:09.754679+00 15 1 2025-08-30 04:24:08+00 IN AGL_001.txt 2025-08-30 04:32:09.754679+00 71 2 2025-01-02 14:48:00+00 OUT manual_form 2025-08-30 04:45:59.234439+00 72 2 2025-01-02 12:12:00+00 IN manual_form 2025-08-30 04:45:59.234439+00 73 2 2025-01-03 02:48:00+00 OUT manual_form 2025-08-30 04:46:45.672304+00 74 2 2025-01-02 20:50:00+00 IN manual_form 2025-08-30 04:46:45.672304+00 60 1 2025-08-27 04:34:55+00 IN AGL_001.txt 2025-08-30 04:43:13.749738+00 59 1 2025-08-27 06:35:08+00 OUT AGL_001.txt 2025-08-30 04:43:13.749738+00 70 1 2025-08-30 00:12:34+00 IN AGL_001.txt 2025-08-30 04:43:13.749738+00 69 1 2025-08-30 00:47:24+00 OUT AGL_001.txt 2025-08-30 04:43:13.749738+00 87 1 2025-01-01 16:00:00+00 OUT manual_form 2025-09-01 21:03:36.046072+00 88 1 2025-01-01 10:00:00+00 IN manual_form 2025-09-01 21:03:36.046072+00 \. -- -- Data for Name: categorias; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.categorias (id_categoria, nombre, visible) FROM stdin; 1 Cafetería t 2 Café t 3 Bar t 4 Tragos y Refrescos t \. -- -- Data for Name: clientes; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.clientes (id_cliente, nombre, correo, telefono, fec_nacimiento, activo) FROM stdin; 1 Familia \N \N \N t \. -- -- Data for Name: comandas; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.comandas (id_comanda, id_usuario, id_mesa, fec_creacion, estado, observaciones, fec_cierre) FROM stdin; 2 3 14 2025-08-25 18:47:57.398972 cerrada \N \N 49 1 14 2025-08-29 16:53:42.617246 cerrada Auto blanco 2025-08-29 16:56:44.184737+00 4 1 1 2025-08-25 19:07:51.695426 cerrada Pedido para una familia grande. \N 3 1 1 2025-08-25 19:07:37.584356 cerrada Pedido para una familia grande. \N 1 3 14 2025-08-25 18:46:18.834688 cerrada \N \N 48 3 14 2025-08-29 16:53:06.77149 cerrada Grande huevo 2025-08-29 16:56:45.225257+00 47 3 14 2025-08-29 16:52:22.556665 cerrada Grande huevo 2025-08-29 16:56:46.440835+00 8 3 14 2025-08-29 02:57:22.46956 cerrada \N 2025-08-29 03:47:50.750949+00 7 1 14 2025-08-29 02:56:29.755449 cerrada \N 2025-08-29 04:31:33.254769+00 6 2 6 2025-08-25 19:09:25.280339 cerrada \N 2025-08-29 04:32:29.813119+00 46 3 14 2025-08-29 16:51:23.011327 cerrada Grande huevo 2025-08-29 16:56:47.457248+00 5 1 1 2025-08-25 19:08:08.596438 cerrada \N 2025-08-29 04:35:24.52745+00 10 1 3 2025-08-29 04:41:51.354916 cerrada \N 2025-08-29 04:48:01.548441+00 12 3 14 2025-08-29 04:48:53.292023 cerrada \N 2025-08-29 05:17:41.133298+00 19 3 14 2025-08-29 05:49:56.258621 cerrada \N 2025-08-29 05:50:10.286428+00 18 3 14 2025-08-29 05:49:13.120391 cerrada \N 2025-08-29 05:50:11.319667+00 17 3 14 2025-08-29 05:46:54.548073 cerrada oBSERVACIOOONNN 2025-08-29 05:50:12.331972+00 16 2 8 2025-08-29 05:46:23.763257 cerrada oBSERVACIOOONNN 2025-08-29 05:50:13.37213+00 15 2 8 2025-08-29 05:46:18.69042 cerrada oBSERVACIOOONNN 2025-08-29 05:50:14.334797+00 14 3 14 2025-08-29 05:19:28.908216 cerrada jdwkjklqwndv 2025-08-29 05:50:15.26329+00 13 3 14 2025-08-29 04:58:36.159791 cerrada hola 2025-08-29 05:50:16.511989+00 11 1 4 2025-08-29 04:48:36.541902 cerrada \N 2025-08-29 05:50:17.832327+00 9 1 1 2025-08-29 04:37:56.310221 cerrada Olaaa 2025-08-29 05:50:19.084017+00 20 3 14 2025-08-29 05:50:25.106438 cerrada \N 2025-08-29 05:50:30.321838+00 29 2 6 2025-08-29 06:06:44.812528 cerrada \N 2025-08-29 06:08:16.181067+00 28 3 14 2025-08-29 06:06:13.297627 cerrada \N 2025-08-29 06:08:17.69094+00 27 1 1 2025-08-29 06:03:10.757812 cerrada \N 2025-08-29 06:08:18.986658+00 26 1 8 2025-08-29 06:02:25.460776 cerrada \N 2025-08-29 06:08:20.296605+00 25 1 8 2025-08-29 06:01:26.571144 cerrada Sin gluten 2025-08-29 06:08:22.898867+00 24 1 1 2025-08-29 05:58:17.922202 cerrada \N 2025-08-29 06:08:24.187839+00 23 1 1 2025-08-29 05:57:35.418369 cerrada Observacionesssqaishfoiadhfohsdf 2025-08-29 06:08:25.558933+00 22 3 14 2025-08-29 05:54:44.675905 cerrada \N 2025-08-29 06:08:27.55245+00 21 3 14 2025-08-29 05:51:54.451937 cerrada \N 2025-08-29 06:08:29.094665+00 31 1 14 2025-08-29 16:10:31.619565 cerrada TestObs,.-.-. 2025-08-29 16:13:11.693159+00 30 1 4 2025-08-29 14:46:00.062522 cerrada 123 2025-08-29 16:13:14.63311+00 52 1 12 2025-08-29 16:55:21.360321 cerrada grande el huevo 2025-08-29 16:56:40.145463+00 51 1 14 2025-08-29 16:54:44.410546 cerrada auto blanco 2025-08-29 16:56:41.279442+00 50 1 14 2025-08-29 16:54:08.307324 cerrada auto blanco 2025-08-29 16:56:42.968122+00 45 3 14 2025-08-29 16:51:08.371592 cerrada Grande huevo 2025-08-29 16:56:48.831883+00 44 3 14 2025-08-29 16:50:54.483409 cerrada Grande huevo 2025-08-29 16:56:49.85665+00 43 1 14 2025-08-29 16:50:11.083248 cerrada Grande huevo 2025-08-29 16:56:51.165809+00 41 1 13 2025-08-29 16:27:13.691181 cerrada Mesa normal 2025-08-29 16:56:52.301133+00 42 3 12 2025-08-29 16:27:47.766143 cerrada Mesa normal 2025-08-29 16:56:53.405482+00 40 1 14 2025-08-29 16:26:43.787724 cerrada Observación huevo 2025-08-29 16:56:54.62857+00 39 3 14 2025-08-29 16:26:09.754868 cerrada Observación del huevo 2025-08-29 16:56:55.865184+00 38 3 14 2025-08-29 16:25:43.366429 cerrada Observación del huevo 2025-08-29 16:56:57.13223+00 37 1 14 2025-08-29 16:25:01.413168 cerrada Observación del huevo 2025-08-29 16:56:58.590021+00 36 1 14 2025-08-29 16:24:23.587871 cerrada Observación del huevo 2025-08-29 16:56:59.863697+00 35 3 14 2025-08-29 16:23:33.26689 cerrada Observación del huevo 2025-08-29 16:57:01.082691+00 34 3 14 2025-08-29 16:23:27.385911 cerrada Observación del huevo 2025-08-29 16:57:02.429882+00 33 1 5 2025-08-29 16:16:28.527735 cerrada Esta es una observación 2025-08-29 16:57:03.761533+00 32 1 5 2025-08-29 16:15:54.377397 cerrada Esta es una observación 2025-08-29 16:57:05.939418+00 53 3 8 2025-09-01 20:21:27.553491 abierta \N \N 54 3 14 2025-09-01 21:16:30.760241 abierta Ana \N 55 3 11 2025-09-02 00:22:18.600045 abierta \N \N \. -- -- Data for Name: compras; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.compras (id_compra, id_proveedor, fec_compra, total) FROM stdin; 36 4 2025-07-29 08:02:33.489822 3806.00 37 1 2025-06-28 06:27:33.489822 2944.00 38 2 2025-08-22 22:23:33.489822 2866.00 39 2 2025-07-27 10:50:33.489822 7774.00 40 4 2025-08-03 21:28:33.489822 2373.00 41 1 2025-06-13 08:23:33.489822 1556.00 42 4 2025-07-29 02:30:33.489822 5941.00 43 4 2025-07-27 04:39:33.489822 3570.00 44 4 2025-07-10 04:43:33.489822 2648.00 45 1 2025-07-05 00:59:33.489822 11349.00 46 3 2025-07-04 18:17:33.489822 1671.00 47 3 2025-07-11 02:42:33.489822 2423.00 48 3 2025-07-16 14:47:33.489822 7851.00 49 3 2025-07-21 01:24:33.489822 4888.00 50 1 2025-06-05 13:46:33.489822 4985.00 51 3 2025-08-02 20:32:33.489822 144.00 52 1 2025-07-27 10:08:33.489822 1840.00 53 2 2025-08-22 08:01:33.489822 3398.00 55 2 2025-07-14 10:16:33.489822 632.00 56 2 2025-07-14 20:17:33.489822 6882.00 57 1 2025-06-17 15:01:33.489822 2974.00 58 2 2025-06-19 15:29:33.489822 2644.00 60 2 2025-06-09 15:01:33.489822 1436.00 61 3 2025-08-09 00:54:33.489822 6453.00 62 1 2025-08-26 16:17:33.489822 5450.00 63 1 2025-08-05 08:39:33.489822 8873.00 64 1 2025-07-19 12:38:33.489822 4093.00 65 1 2025-06-23 09:31:33.489822 666.00 59 1 2025-08-29 16:42:00 3248.00 54 2 2025-08-26 04:37:00 2483.00 \. -- -- Data for Name: deta_comandas; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.deta_comandas (id_det_comanda, id_comanda, id_producto, cantidad, pre_unitario, observaciones) FROM stdin; 1 1 52 4.000 130.00 \N 2 2 40 1.000 250.00 \N 3 2 49 1.000 230.00 \N 4 2 24 3.000 100.00 \N 5 6 51 5.000 230.00 \N 6 6 33 2.000 550.00 \N 7 7 52 3.000 130.00 \N 8 8 33 3.000 550.00 \N 9 9 37 3.000 320.00 \N 10 10 52 1.000 130.00 \N 11 11 47 3.000 280.00 \N 12 11 43 1.000 230.00 \N 13 11 45 1.000 280.00 \N 14 11 44 1.000 150.00 \N 15 11 24 2.000 100.00 \N 16 12 28 1.000 100.00 \N 17 12 31 13.000 100.00 \N 18 13 51 2.000 230.00 \N 19 13 52 2.000 130.00 \N 20 14 52 1.000 130.00 \N 21 15 52 1.000 130.00 \N 22 15 51 1.000 230.00 \N 23 16 51 1.000 230.00 \N 24 16 52 1.000 130.00 \N 25 17 46 1.000 150.00 \N 26 18 47 1.000 280.00 \N 27 19 51 1.000 230.00 \N 28 19 48 1.000 230.00 \N 29 20 52 1.000 130.00 \N 30 20 49 1.000 230.00 \N 31 20 51 1.000 230.00 \N 32 22 49 1.000 230.00 \N 33 23 52 1.000 130.00 \N 34 23 48 1.000 230.00 \N 35 23 51 1.000 230.00 \N 36 23 50 1.000 230.00 \N 37 24 52 1.000 130.00 \N 38 24 51 1.000 230.00 \N 39 25 47 1.000 280.00 \N 40 25 49 1.000 230.00 \N 41 25 50 1.000 230.00 \N 42 26 50 1.000 230.00 \N 43 26 49 1.000 230.00 \N 44 27 50 3.000 230.00 \N 45 27 49 3.000 230.00 \N 46 28 51 1.000 230.00 \N 47 28 52 1.000 130.00 \N 48 28 45 1.000 280.00 \N 49 28 50 1.000 230.00 \N 50 29 48 2.000 230.00 \N 51 29 49 6.000 230.00 \N 52 29 47 2.000 280.00 \N 54 30 20 3.000 140.00 \N 53 30 16 1.000 100.00 \N 55 30 17 1.000 150.00 \N 56 31 51 1.000 230.00 \N 57 31 23 1.000 180.00 \N 58 31 52 2.000 140.00 \N 59 31 33 1.000 550.00 \N 60 33 9 2.000 120.00 \N 61 33 18 1.000 80.00 \N 62 33 2 1.000 60.00 \N 63 34 3 1.000 60.00 \N 64 34 21 1.000 180.00 \N 65 34 33 1.000 550.00 \N 66 34 23 2.000 180.00 \N 67 36 33 1.000 550.00 \N 68 36 49 1.000 230.00 \N 69 36 3 1.000 60.00 \N 70 36 6 1.000 50.00 \N 71 36 11 1.000 120.00 \N 72 37 3 1.000 60.00 \N 73 37 6 1.000 50.00 \N 74 37 49 1.000 230.00 \N 75 38 38 4.000 250.00 \N 76 38 33 1.000 550.00 \N 77 38 50 1.000 230.00 \N 78 38 10 1.000 120.00 \N 79 38 52 1.000 140.00 \N 80 38 9 1.000 120.00 \N 81 39 33 1.000 550.00 \N 82 39 38 4.000 250.00 \N 83 40 52 1.000 140.00 \N 84 40 29 1.000 80.00 \N 85 40 46 1.000 150.00 \N 86 40 49 1.000 230.00 \N 87 40 10 1.000 120.00 \N 88 40 11 6.000 120.00 \N 89 41 4 1.000 250.00 \N 90 41 8 1.000 120.00 \N 91 42 46 1.000 150.00 \N 92 42 49 1.000 230.00 \N 93 42 44 1.000 150.00 \N 94 43 33 1.000 550.00 \N 95 43 25 1.000 180.00 \N 96 43 16 1.000 100.00 \N 97 43 24 1.000 100.00 \N 98 43 47 2.000 280.00 \N 99 44 46 1.000 150.00 \N 100 45 46 1.000 150.00 \N 101 46 46 1.000 150.00 \N 102 47 51 1.000 230.00 \N 103 48 50 1.000 230.00 \N 104 49 47 1.000 280.00 \N 105 49 33 2.000 550.00 \N 106 51 33 1.000 550.00 \N 107 51 47 1.000 280.00 \N 108 52 24 1.000 100.00 \N 109 52 25 1.000 180.00 \N 110 52 16 1.000 100.00 \N 111 53 52 10.000 130.00 \N 112 53 23 11.000 180.00 \N 113 53 33 10.000 550.00 \N 114 54 50 2.000 230.00 \N 115 54 52 2.000 130.00 \N 116 55 33 2.000 550.00 \N 117 55 52 2.000 130.00 \N \. -- -- Data for Name: deta_comp_materias; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.deta_comp_materias (id_compra, id_mat_prima, cantidad, pre_unitario) FROM stdin; 36 5 1.019 322.00 36 9 1.370 80.00 36 10 5.755 232.00 38 3 7.311 392.00 39 1 6.840 447.00 39 10 7.533 397.00 40 9 2.636 283.00 40 8 8.262 151.00 41 7 3.794 410.00 43 3 5.017 293.00 44 4 8.652 306.00 45 6 9.781 426.00 46 7 3.017 422.00 48 1 0.735 511.00 48 3 5.249 373.00 49 1 9.816 498.00 50 1 2.517 459.00 50 7 2.785 239.00 50 2 3.788 392.00 52 6 7.542 244.00 53 3 4.332 522.00 55 6 4.937 128.00 56 5 6.062 45.00 57 9 1.806 465.00 57 5 4.283 275.00 57 7 1.861 402.00 57 3 4.002 52.00 58 1 3.379 471.00 60 2 0.588 216.00 61 10 13.011 327.00 62 10 4.719 405.00 62 9 4.646 295.00 62 1 3.242 338.00 63 6 8.843 457.00 63 7 6.086 270.00 63 8 6.852 394.00 63 1 1.678 147.00 65 1 4.788 139.00 59 9 1.000 590.00 54 3 2.000 157.00 54 6 2.000 376.00 54 9 4.000 67.00 \. -- -- Data for Name: deta_comp_producto; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.deta_comp_producto (id_compra, id_producto, cantidad, pre_unitario) FROM stdin; 36 31 8.500 35.00 36 33 8.224 211.00 37 19 2.839 238.00 37 51 5.961 162.00 37 36 8.570 152.00 39 12 2.329 515.00 39 2 2.859 184.00 40 13 1.521 63.00 40 2 2.897 98.00 42 50 8.152 516.00 42 15 8.067 215.00 43 26 2.209 314.00 43 14 5.892 179.00 43 33 2.023 174.00 45 40 9.248 434.00 45 27 5.979 530.00 46 46 2.919 87.00 46 32 0.658 219.00 47 17 7.792 225.00 47 34 2.923 229.00 48 2 8.937 268.00 48 14 8.415 371.00 50 9 1.573 516.00 50 14 1.940 447.00 51 41 1.598 90.00 53 40 1.525 416.00 53 38 2.629 191.00 56 1 5.752 412.00 56 42 9.845 378.00 56 7 2.073 250.00 58 14 6.745 156.00 60 34 9.698 135.00 61 26 3.828 460.00 61 22 1.325 330.00 62 8 8.369 105.00 62 27 0.812 238.00 63 13 0.730 332.00 64 46 9.524 257.00 64 22 1.355 431.00 64 47 6.969 99.00 64 43 2.123 175.00 59 39 6.000 443.00 54 16 3.000 383.00 \. -- -- Data for Name: mate_primas; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.mate_primas (id_mat_prima, nombre, unidad, activo) FROM stdin; 2 Huevo u t 3 Harina gr t 4 Avena gr t 1 Capsulas u t 9 Queso Azul San Ignacio gr t 10 Panceta gr t 8 Sal gr t 7 Sobres de Azucar u t 6 Azucar gr t 5 Bondiola cocida gr t \. -- -- Data for Name: mesas; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.mesas (id_mesa, numero, apodo, estado) FROM stdin; 1 1 Living princial libre 2 2 Ventanal izquierdo libre 3 3 Primer mesa contra la baranda libre 4 4 Ventanal derecho libre 5 5 Segunda mesa contra la baranda libre 6 6 Junto a Juana libre 7 7 Mostrador/Barra libre 8 8 Booth derecho libre 9 9 Booth izquierdo libre 10 10 Living secundario libre 11 11 Zona del Pool libre 12 12 Cowork libre 13 13 Mesa del fuego libre 14 14 Takeaway libre \. -- -- Data for Name: productos; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.productos (id_producto, nombre, img_producto, precio, activo, id_categoria) FROM stdin; 17 Cheesecake img/productos/img_producto.png 250 t 1 2 Alfajores de Maicena img/productos/img_producto.png 60 t 1 3 Alfajores sin TACC img/productos/img_producto.png 60 t 1 4 Sandwich tostado LyC img/productos/img_producto.png 250 t 1 5 Sandwich tostado JyQ img/productos/img_producto.png 250 t 1 6 Scones img/productos/img_producto.png 50 t 1 7 Medialunas img/productos/img_producto.png 80 t 1 8 Medialunas Rellenas img/productos/img_producto.png 120 t 1 9 Cookies de Avena img/productos/img_producto.png 120 t 1 10 Cookies de chocolate img/productos/img_producto.png 120 t 1 11 Brownies con helado img/productos/img_producto.png 120 t 1 12 Budín de banana img/productos/img_producto.png 150 t 1 13 Budín de naranja img/productos/img_producto.png 150 t 1 14 Tostadas img/productos/img_producto.png 100 t 1 15 Tarteletas img/productos/img_producto.png 150 t 1 16 Chocobomba img/productos/img_producto.png 100 t 1 18 Carajillo Oriental img/productos/img_producto.png 80 t 2 20 Latte img/productos/img_producto.png 140 t 2 21 Latte de DDL img/productos/img_producto.png 180 t 2 22 Latte de chocolate semi amargo img/productos/img_producto.png 180 t 2 23 Latte de vainilla img/productos/img_producto.png 180 t 2 24 Expresso img/productos/img_producto.png 100 t 2 25 Expresso doble img/productos/img_producto.png 180 t 2 26 Cortado img/productos/img_producto.png 100 t 2 27 Lágrima img/productos/img_producto.png 100 t 2 28 Americano img/productos/img_producto.png 100 t 2 29 Té img/productos/img_producto.png 80 t 2 30 Té con leche img/productos/img_producto.png 100 t 2 31 Submarino img/productos/img_producto.png 100 t 2 32 Muzzarela clásica img/productos/img_producto.png 450 t 3 34 Margarita img/productos/img_producto.png 500 t 3 35 Calzone img/productos/img_producto.png 450 t 3 36 Fritas img/productos/img_producto.png 250 t 3 37 Aros de cebolla img/productos/img_producto.png 320 t 3 38 Papas con cheddar img/productos/img_producto.png 250 t 3 41 Tostones img/productos/img_producto.png 250 t 3 42 Corona chica img/productos/img_producto.png 150 t 4 43 Corona grande img/productos/img_producto.png 230 t 4 44 Patricia Dunkel (lata) img/productos/img_producto.png 150 t 4 45 Patricia Dunkel (grande) img/productos/img_producto.png 280 t 4 46 Zillertal (lata) img/productos/img_producto.png 150 t 4 47 Zillertal (grande) img/productos/img_producto.png 280 t 4 48 Patagonia Weisse img/productos/img_producto.png 230 t 4 19 Cappuccino img/productos/img_producto.png 140 t 2 50 Patagonia Bohemian img/productos/img_producto.png 230 t 4 49 Patagonia 24.7 img/productos/img_producto.png 230 t 4 1 Desayuno americano para dos img/productos/img_producto.png 800 t 1 51 Patagonia Amber Lager img/productos/img_producto.png 240 t 4 33 Una Vaina Bien img/productos/img_producto.png 550 t 3 40 Tequeños img/productos/img_producto.png 250 f 3 52 Monster img/productos/img_producto.png 140 t 4 39 Pastelitos img/productos/img_producto.png 250 t 3 \. -- -- Data for Name: prov_mate_prima; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.prov_mate_prima (id_proveedor, id_mat_prima) FROM stdin; 3 2 2 3 2 4 3 1 2 9 3 10 2 8 3 7 2 6 3 5 \. -- -- Data for Name: prov_producto; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.prov_producto (id_proveedor, id_producto) FROM stdin; \. -- -- Data for Name: proveedores; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.proveedores (id_proveedor, rut, raz_social, direccion, contacto) FROM stdin; 1 217795000011 Emilupe S.R.L. \N 091049216 2 216450470015 Finesa Trading S.A. \N 094426877 3 \N Otro \N \N 4 \N Gara Gardo S en C \N \N \. -- -- Data for Name: receta_producto; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.receta_producto (id_producto, id_mat_prima, qty_por_unidad) FROM stdin; 28 1 1.000 19 1 1.000 50 7 1.000 49 8 1.000 17 2 2.000 17 3 21.500 1 2 1.000 1 10 10.000 51 6 1.000 33 3 60.000 33 2 25.000 52 5 1.000 39 10 1.000 39 3 1.000 \. -- -- Data for Name: roles; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.roles (id_rol, nombre) FROM stdin; 1 Dueño 2 Cocinero 3 Barista 4 Barman 5 Bachero 6 Mozo \. -- -- Data for Name: usua_roles; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.usua_roles (id_usuario, id_rol, fec_asignacion, autor, activo) FROM stdin; 1 1 2025-08-25 14:39:39.204513 1 t 1 3 2025-08-25 14:39:39.204513 1 t 2 3 2025-08-25 14:39:39.204513 1 t 2 4 2025-08-25 14:39:39.204513 1 t 3 2 2025-08-25 14:39:39.204513 1 t \. -- -- Data for Name: usuarios; Type: TABLE DATA; Schema: public; Owner: manso -- COPY public.usuarios (id_usuario, documento, img_perfil, nombre, apellido, correo, telefono, fec_nacimiento, activo) FROM stdin; 1 52809684 img_perfil.png Mateo Saldain mateosaldain02@gmail.com \N 2002-08-11 t 2 55683627 img_perfil.png Cristopher Moreno \N \N 2001-08-11 t 3 49953084 img_perfil.png Bruno Correa \N \N 1999-08-19 t \. -- -- Name: asistencia_intervalo_id_intervalo_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.asistencia_intervalo_id_intervalo_seq', 108, true); -- -- Name: asistencia_raw_id_raw_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.asistencia_raw_id_raw_seq', 88, true); -- -- Name: categorias_id_categoria_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.categorias_id_categoria_seq', 4, true); -- -- Name: clientes_id_cliente_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.clientes_id_cliente_seq', 1, true); -- -- Name: comandas_id_comanda_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.comandas_id_comanda_seq', 55, true); -- -- Name: compras_id_compra_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.compras_id_compra_seq', 66, true); -- -- Name: deta_comandas_id_det_comanda_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.deta_comandas_id_det_comanda_seq', 117, true); -- -- Name: mate_primas_id_mat_prima_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.mate_primas_id_mat_prima_seq', 10, true); -- -- Name: mesas_id_mesa_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.mesas_id_mesa_seq', 14, true); -- -- Name: productos_id_producto_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.productos_id_producto_seq', 52, true); -- -- Name: proveedores_id_proveedor_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.proveedores_id_proveedor_seq', 4, true); -- -- Name: roles_id_rol_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.roles_id_rol_seq', 6, true); -- -- Name: usuarios_id_usuario_seq; Type: SEQUENCE SET; Schema: public; Owner: manso -- SELECT pg_catalog.setval('public.usuarios_id_usuario_seq', 3, true); -- -- Name: asistencia_intervalo asistencia_intervalo_id_usuario_desde_hasta_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.asistencia_intervalo ADD CONSTRAINT asistencia_intervalo_id_usuario_desde_hasta_key UNIQUE (id_usuario, desde, hasta); -- -- Name: asistencia_intervalo asistencia_intervalo_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.asistencia_intervalo ADD CONSTRAINT asistencia_intervalo_pkey PRIMARY KEY (id_intervalo); -- -- Name: asistencia_raw asistencia_raw_id_usuario_ts_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.asistencia_raw ADD CONSTRAINT asistencia_raw_id_usuario_ts_key UNIQUE (id_usuario, ts); -- -- Name: asistencia_raw asistencia_raw_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.asistencia_raw ADD CONSTRAINT asistencia_raw_pkey PRIMARY KEY (id_raw); -- -- Name: categorias categorias_nombre_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.categorias ADD CONSTRAINT categorias_nombre_key UNIQUE (nombre); -- -- Name: categorias categorias_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.categorias ADD CONSTRAINT categorias_pkey PRIMARY KEY (id_categoria); -- -- Name: clientes clientes_correo_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.clientes ADD CONSTRAINT clientes_correo_key UNIQUE (correo); -- -- Name: clientes clientes_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.clientes ADD CONSTRAINT clientes_pkey PRIMARY KEY (id_cliente); -- -- Name: clientes clientes_telefono_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.clientes ADD CONSTRAINT clientes_telefono_key UNIQUE (telefono); -- -- Name: comandas comandas_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.comandas ADD CONSTRAINT comandas_pkey PRIMARY KEY (id_comanda); -- -- Name: compras compras_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.compras ADD CONSTRAINT compras_pkey PRIMARY KEY (id_compra); -- -- Name: deta_comandas deta_comandas_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.deta_comandas ADD CONSTRAINT deta_comandas_pkey PRIMARY KEY (id_det_comanda); -- -- Name: deta_comp_materias deta_comp_materias_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.deta_comp_materias ADD CONSTRAINT deta_comp_materias_pkey PRIMARY KEY (id_compra, id_mat_prima); -- -- Name: deta_comp_producto deta_comp_producto_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.deta_comp_producto ADD CONSTRAINT deta_comp_producto_pkey PRIMARY KEY (id_compra, id_producto); -- -- Name: mate_primas mate_primas_nombre_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.mate_primas ADD CONSTRAINT mate_primas_nombre_key UNIQUE (nombre); -- -- Name: mate_primas mate_primas_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.mate_primas ADD CONSTRAINT mate_primas_pkey PRIMARY KEY (id_mat_prima); -- -- Name: mesas mesas_apodo_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.mesas ADD CONSTRAINT mesas_apodo_key UNIQUE (apodo); -- -- Name: mesas mesas_numero_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.mesas ADD CONSTRAINT mesas_numero_key UNIQUE (numero); -- -- Name: mesas mesas_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.mesas ADD CONSTRAINT mesas_pkey PRIMARY KEY (id_mesa); -- -- Name: productos productos_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.productos ADD CONSTRAINT productos_pkey PRIMARY KEY (id_producto); -- -- Name: prov_mate_prima prov_mate_prima_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.prov_mate_prima ADD CONSTRAINT prov_mate_prima_pkey PRIMARY KEY (id_proveedor, id_mat_prima); -- -- Name: prov_producto prov_producto_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.prov_producto ADD CONSTRAINT prov_producto_pkey PRIMARY KEY (id_proveedor, id_producto); -- -- Name: proveedores proveedores_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.proveedores ADD CONSTRAINT proveedores_pkey PRIMARY KEY (id_proveedor); -- -- Name: proveedores proveedores_rut_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.proveedores ADD CONSTRAINT proveedores_rut_key UNIQUE (rut); -- -- Name: receta_producto receta_producto_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.receta_producto ADD CONSTRAINT receta_producto_pkey PRIMARY KEY (id_producto, id_mat_prima); -- -- Name: roles roles_nombre_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.roles ADD CONSTRAINT roles_nombre_key UNIQUE (nombre); -- -- Name: roles roles_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.roles ADD CONSTRAINT roles_pkey PRIMARY KEY (id_rol); -- -- Name: usua_roles usua_roles_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.usua_roles ADD CONSTRAINT usua_roles_pkey PRIMARY KEY (id_usuario, id_rol); -- -- Name: usuarios usuarios_documento_key; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.usuarios ADD CONSTRAINT usuarios_documento_key UNIQUE (documento); -- -- Name: usuarios usuarios_pkey; Type: CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.usuarios ADD CONSTRAINT usuarios_pkey PRIMARY KEY (id_usuario); -- -- Name: compras_fec_compra_idx; Type: INDEX; Schema: public; Owner: manso -- CREATE INDEX compras_fec_compra_idx ON public.compras USING btree (fec_compra); -- -- Name: idx_asist_int_usuario_fecha; Type: INDEX; Schema: public; Owner: manso -- CREATE INDEX idx_asist_int_usuario_fecha ON public.asistencia_intervalo USING btree (id_usuario, fecha); -- -- Name: idx_asist_raw_usuario_ts; Type: INDEX; Schema: public; Owner: manso -- CREATE INDEX idx_asist_raw_usuario_ts ON public.asistencia_raw USING btree (id_usuario, ts); -- -- Name: idx_detalle_comanda_comanda; Type: INDEX; Schema: public; Owner: manso -- CREATE INDEX idx_detalle_comanda_comanda ON public.deta_comandas USING btree (id_comanda); -- -- Name: idx_detalle_comanda_producto; Type: INDEX; Schema: public; Owner: manso -- CREATE INDEX idx_detalle_comanda_producto ON public.deta_comandas USING btree (id_producto); -- -- Name: ix_comandas_fec_cierre; Type: INDEX; Schema: public; Owner: manso -- CREATE INDEX ix_comandas_fec_cierre ON public.comandas USING btree (fec_cierre); -- -- Name: ix_comandas_id; Type: INDEX; Schema: public; Owner: manso -- CREATE INDEX ix_comandas_id ON public.comandas USING btree (id_comanda); -- -- Name: ix_deta_comandas_id_comanda; Type: INDEX; Schema: public; Owner: manso -- CREATE INDEX ix_deta_comandas_id_comanda ON public.deta_comandas USING btree (id_comanda); -- -- Name: ix_deta_comandas_id_producto; Type: INDEX; Schema: public; Owner: manso -- CREATE INDEX ix_deta_comandas_id_producto ON public.deta_comandas USING btree (id_producto); -- -- Name: asistencia_intervalo asistencia_intervalo_id_usuario_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.asistencia_intervalo ADD CONSTRAINT asistencia_intervalo_id_usuario_fkey FOREIGN KEY (id_usuario) REFERENCES public.usuarios(id_usuario) ON DELETE CASCADE; -- -- Name: asistencia_raw asistencia_raw_id_usuario_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.asistencia_raw ADD CONSTRAINT asistencia_raw_id_usuario_fkey FOREIGN KEY (id_usuario) REFERENCES public.usuarios(id_usuario) ON DELETE CASCADE; -- -- Name: comandas comandas_id_mesa_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.comandas ADD CONSTRAINT comandas_id_mesa_fkey FOREIGN KEY (id_mesa) REFERENCES public.mesas(id_mesa); -- -- Name: comandas comandas_id_usuario_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.comandas ADD CONSTRAINT comandas_id_usuario_fkey FOREIGN KEY (id_usuario) REFERENCES public.usuarios(id_usuario); -- -- Name: compras compras_id_proveedor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.compras ADD CONSTRAINT compras_id_proveedor_fkey FOREIGN KEY (id_proveedor) REFERENCES public.proveedores(id_proveedor); -- -- Name: deta_comandas deta_comandas_id_comanda_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.deta_comandas ADD CONSTRAINT deta_comandas_id_comanda_fkey FOREIGN KEY (id_comanda) REFERENCES public.comandas(id_comanda) ON DELETE CASCADE; -- -- Name: deta_comandas deta_comandas_id_producto_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.deta_comandas ADD CONSTRAINT deta_comandas_id_producto_fkey FOREIGN KEY (id_producto) REFERENCES public.productos(id_producto); -- -- Name: deta_comp_materias deta_comp_materias_id_compra_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.deta_comp_materias ADD CONSTRAINT deta_comp_materias_id_compra_fkey FOREIGN KEY (id_compra) REFERENCES public.compras(id_compra) ON DELETE CASCADE; -- -- Name: deta_comp_materias deta_comp_materias_id_mat_prima_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.deta_comp_materias ADD CONSTRAINT deta_comp_materias_id_mat_prima_fkey FOREIGN KEY (id_mat_prima) REFERENCES public.mate_primas(id_mat_prima); -- -- Name: deta_comp_producto deta_comp_producto_id_compra_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.deta_comp_producto ADD CONSTRAINT deta_comp_producto_id_compra_fkey FOREIGN KEY (id_compra) REFERENCES public.compras(id_compra) ON DELETE CASCADE; -- -- Name: deta_comp_producto deta_comp_producto_id_producto_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.deta_comp_producto ADD CONSTRAINT deta_comp_producto_id_producto_fkey FOREIGN KEY (id_producto) REFERENCES public.productos(id_producto); -- -- Name: productos productos_id_categoria_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.productos ADD CONSTRAINT productos_id_categoria_fkey FOREIGN KEY (id_categoria) REFERENCES public.categorias(id_categoria); -- -- Name: prov_mate_prima prov_mate_prima_id_mat_prima_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.prov_mate_prima ADD CONSTRAINT prov_mate_prima_id_mat_prima_fkey FOREIGN KEY (id_mat_prima) REFERENCES public.mate_primas(id_mat_prima); -- -- Name: prov_mate_prima prov_mate_prima_id_proveedor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.prov_mate_prima ADD CONSTRAINT prov_mate_prima_id_proveedor_fkey FOREIGN KEY (id_proveedor) REFERENCES public.proveedores(id_proveedor) ON DELETE CASCADE; -- -- Name: prov_producto prov_producto_id_producto_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.prov_producto ADD CONSTRAINT prov_producto_id_producto_fkey FOREIGN KEY (id_producto) REFERENCES public.productos(id_producto); -- -- Name: prov_producto prov_producto_id_proveedor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.prov_producto ADD CONSTRAINT prov_producto_id_proveedor_fkey FOREIGN KEY (id_proveedor) REFERENCES public.proveedores(id_proveedor) ON DELETE CASCADE; -- -- Name: receta_producto receta_producto_id_mat_prima_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.receta_producto ADD CONSTRAINT receta_producto_id_mat_prima_fkey FOREIGN KEY (id_mat_prima) REFERENCES public.mate_primas(id_mat_prima); -- -- Name: receta_producto receta_producto_id_producto_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.receta_producto ADD CONSTRAINT receta_producto_id_producto_fkey FOREIGN KEY (id_producto) REFERENCES public.productos(id_producto) ON DELETE CASCADE; -- -- Name: usua_roles usua_roles_autor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.usua_roles ADD CONSTRAINT usua_roles_autor_fkey FOREIGN KEY (autor) REFERENCES public.usuarios(id_usuario); -- -- Name: usua_roles usua_roles_id_rol_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.usua_roles ADD CONSTRAINT usua_roles_id_rol_fkey FOREIGN KEY (id_rol) REFERENCES public.roles(id_rol); -- -- Name: usua_roles usua_roles_id_usuario_fkey; Type: FK CONSTRAINT; Schema: public; Owner: manso -- ALTER TABLE ONLY public.usua_roles ADD CONSTRAINT usua_roles_id_usuario_fkey FOREIGN KEY (id_usuario) REFERENCES public.usuarios(id_usuario) ON DELETE CASCADE; -- -- PostgreSQL database dump complete -- \unrestrict londHmqT4llS8Wof4ZnceO2dyFhn4jiR5xbaszMgZpMczgr6aVW6xQJxeUdqJwa