{"message":"Pegassus-NG Backend API","version":"1.0.0","docs":"/docs","health":"/health","auth":{"login":"/api/v1/auth/login","refresh":"/api/v1/auth/refresh","logout":"/api/v1/auth/logout","me":"/api/v1/auth/me"},"companies":{"me":"/api/v1/companies/me"},"proveedores":{"by_company":"/api/v1/proveedores/{company_id}","details":"/api/v1/proveedores/{company_id}/{proveedor_id}"},"categorias":{"departamentos":"/api/v1/categorias/{company_id}/departamentos","rubros":"/api/v1/categorias/{company_id}/departamentos/{codigo_departamento}/rubros","familias":"/api/v1/categorias/{company_id}/departamentos/{codigo_departamento}/rubros/{codigo_rubro}/familias","subfamilias":"/api/v1/categorias/{company_id}/departamentos/{codigo_departamento}/rubros/{codigo_rubro}/familias/{codigo_familia}/subfamilias"},"medidas":{"by_company":"/api/v1/medidas/{company_id}","by_codigo":"/api/v1/medidas/{company_id}/{codigo_medida}"},"grupos_articulos":{"by_company":"/api/v1/grupos-articulos/{company_id}","by_codigo":"/api/v1/grupos-articulos/{company_id}/{codigo_grupo}"},"sedes":{"by_company":"/api/v1/sedes/{company_id}"},"etiquetas":{"lotes_by_sede":"/api/v1/etiquetas/{company_id}/sedes/{codigo_sede}/lotes","lote_detail":"/api/v1/etiquetas/{company_id}/sedes/{codigo_sede}/lotes/{lote_id}"},"tipos_etiquetas":{"by_company":"/api/v1/tipos-etiquetas/{company_id}"},"ofertas":{"list_by_sede":"/api/v1/articulos/{company_id}/sedes/{sede_id}/ofertas","toggle":"/api/v1/articulos/{company_id}/sedes/{sede_id}/ofertas/{id_vigencia}/toggle"},"recetas":{"by_company":"/api/v1/recetas/{company_id}","by_codigo":"/api/v1/recetas/{company_id}/{codigo_receta}"},"depositos":{"by_company_and_sede":"/api/v1/depositos/{company_id}/sede/{sede_id}","by_id":"/api/v1/depositos/{company_id}/deposito/{deposito_id}"},"ordenes_carga":{"create":"/api/v1/ordenes-carga/","get_by_id":"/api/v1/ordenes-carga/{orden_id}","get_completa":"/api/v1/ordenes-carga/{orden_id}/completa","update":"/api/v1/ordenes-carga/{orden_id}","anular":"/api/v1/ordenes-carga/{orden_id}/anular","list":"/api/v1/ordenes-carga/","detalles":{"get":"/api/v1/ordenes-carga/{orden_id}/detalles","create":"/api/v1/ordenes-carga/{orden_id}/detalles","update":"/api/v1/ordenes-carga/{orden_id}/detalles/{detalle_id}","delete":"/api/v1/ordenes-carga/{orden_id}/detalles/{detalle_id}"}},"asignacion_operadores":{"operadores_disponibles":"/api/v1/deposito/asignacion-operadores/operadores-disponibles","asignar":"/api/v1/deposito/asignacion-operadores/asignar","reasignar":"/api/v1/deposito/asignacion-operadores/reasignar","historial":"/api/v1/deposito/asignacion-operadores/historial/{id_orden_carga}","estadisticas":"/api/v1/deposito/asignacion-operadores/estadisticas/{id_operador}","carga_trabajo":"/api/v1/deposito/asignacion-operadores/carga-trabajo/{id_operador}"},"inventarios":{"tipos_by_company":"/api/v1/inventarios/tipos/{company_id}","tipo_by_id":"/api/v1/inventarios/tipos/{company_id}/tipo/{tipo_id}","by_deposito":"/api/v1/inventarios/{company_id}/sede/{codigo_sede}/deposito/{deposito_id}/inventarios","inventarios_reales":"/api/v1/inventarios/{company_id}/sede/{sede_id}/deposito/{codigo_deposito}/inventario/{inventario_pk}/inventarios-reales","inventarios_teoricos":"/api/v1/inventarios/{company_id}/sede/{sede_id}/deposito/{codigo_deposito}/inventario/{inventario_pk}/inventarios-teoricos","tramos_conteo":"/api/v1/inventarios/{company_id}/sede/{sede_id}/deposito/{codigo_deposito}/tramos-conteo"},"websocket":{"endpoints":{"ordenes_provisorias":"/ws/ordenes-provisorias","ordenes_deposito":"/ws/ordenes-deposito","stats":"/ws/stats"},"descripcion":"Sistema WebSocket en tiempo real con PostgreSQL LISTEN/NOTIFY y filtrado inteligente por estado","autenticacion":"JWT bypass habilitado en desarrollo (settings.debug=true)","arquitectura":{"notificaciones":"PostgreSQL LISTEN/NOTIFY automático","filtrado":"Inteligente por estado y tipo de conexión","heartbeat":"Automático cada 30 segundos","reconexion":"Automática en caso de desconexión"},"tipos_conexion":{"cargadores":{"url":"/ws/ordenes-provisorias","estados_incluidos":["PROVISORIA"],"dirigido_a":"Personal que carga/crea órdenes","mensaje_inicial":{"action":"get_pedidos_provisorios","id_empresa":"number","id_sede":"number","codigo_deposito":"number"}},"deposito":{"url":"/ws/ordenes-deposito","estados_incluidos":["PROVISORIA","PENDIENTE","ASIGNADA"],"dirigido_a":"Personal de depósito que arma/monitorea órdenes","mensaje_inicial":{"action":"get_ordenes_deposito","id_empresa":"number","id_sede":"number","codigo_deposito":"number"}}},"tipos_respuesta":["initial_data","order_insert","order_update","order_delete","pong"],"filtrado_inteligente":{"PROVISORIA":"Se envía a ambos tipos de conexión (cargadores + depósito)","PENDIENTE":"Solo se envía a conexiones de depósito","ASIGNADA":"Solo se envía a conexiones de depósito","otros_estados":"Se envían a todos por seguridad"},"ejemplo_cargadores":{"conexion":"const ws = new WebSocket('ws://localhost:8000/ws/ordenes-provisorias');","mensaje":"ws.send(JSON.stringify({action: 'get_pedidos_provisorios', id_empresa: 1, id_sede: 2, codigo_deposito: 5}));"},"ejemplo_deposito":{"conexion":"const ws = new WebSocket('ws://localhost:8000/ws/ordenes-deposito');","mensaje":"ws.send(JSON.stringify({action: 'get_ordenes_deposito', id_empresa: 1, id_sede: 2, codigo_deposito: 5}));"},"validaciones":"Usuario debe tener acceso a empresa y sede especificada","estadisticas":"Disponibles en /ws/stats con desglose por tipo de conexión"}}