Skip to content

Categoria IVA - Documentacion Tecnica Frontend

DOCUMENTACION RETROSPECTIVA - Generada a partir de codigo implementado el 2026-02-09

Modulo: Ventas Feature: Categoria IVA (Alicuotas de IVA ARCA) Fecha: 2026-02-09


Categoria IVA - Resource


Arquitectura Implementada

Patron actual: Legacy (vanilla JavaScript + jQuery + DataTables)

NO utiliza React/TypeScript. Este recurso esta implementado completamente en el patron legacy del frontend.

ComponenteArchivoTecnologia
Vista PHPpublic/view/mod-ventas/cat-iva.phpPHP template (SSR)
Logica JSpublic/js/view/mod-ventas/cat-iva.jsVanilla JS (ES modules)
Proxy APIpublic/php/backend/categoria-iva.phpPHP proxy
API Clientpublic/js/middleware/API.jsLegacy ApiRequest class

Componentes Implementados

Vista: cat-iva.php

Ubicacion: public/view/mod-ventas/cat-iva.php

Proposito: Vista completa PHP que renderiza la pagina del listado de Categorias de IVA.

Estructura de la pagina:

  • Header con titulo "Listado de cat. de IVA"
  • Breadcrumb: Home > Ventas > Cat. IVA
  • Card con tabla DataTables
  • Footer estandar
  • Sidebar de modulo Ventas

Templates incluidos:

  • php/components/preloader.php
  • php/components/navbar.php
  • php/components/mod-venta/main-sidebar-venta.php
  • php/components/footer.php

Sidebar selection: setElementsSelectedMainSideBar('idNavMainSideBarBases', 'idMainSideBarBases', 'idMainSideBarCatIva')

URL de acceso: ?loc=mvcia

Logica: cat-iva.js

Ubicacion: public/js/view/mod-ventas/cat-iva.js

Proposito: Inicializa la tabla DataTables y carga los datos de categorias de IVA.

Dependencias importadas:

  • ApiRequest desde ../../middleware/API.js
  • LANG_TABLE desde ../../util/constantes.js

Funcionalidad implementada:

  1. Inicializacion DataTable: Configura tabla #tablaCatIva con las opciones:

    • language: Idioma espanol (via LANG_TABLE)
    • responsive: true
    • lengthChange: false (no permite cambiar items por pagina)
    • autoWidth: false
    • Botones de exportacion: Excel, PDF
  2. Columnas definidas:

    TituloDataVisible
    CodigocodigoSi
    NombrenombreSi

    NOTA: El campo porcentaje disponible en la respuesta API no se muestra en la tabla.

  3. Columna de Acciones (COMENTADA):

    • Existe codigo comentado (lineas 19-29) para una columna "Acciones" con boton de modificar
    • Sugiere que se considero la edicion pero fue descartada o pospuesta
  4. Carga de datos: IIFE asincrona que ejecuta request.get('categoria-iva') y agrega las filas a la tabla con tablaCat.rows.add(data).draw()


Flujo de Datos

cat-iva.js
  |
  | ApiRequest.get('categoria-iva')
  |   -> FormData con funcion
  |   -> fetch() POST al proxy
  v
public/php/backend/categoria-iva.php (Proxy)
  |
  | Request class (Guzzle HTTP)
  | GET al backend con json body
  v
server/backend/categoria-iva.php (Backend)
  |
  v
CategoriaIvaController -> CategoriaIva Model -> DB
  |
  v
JSON Response: { status: 200, data: [...] }
  |
  v (proxy extrae 'data')
JSON a frontend: [{ codigo, nombre, porcentaje }, ...]
  |
  v
DataTable.rows.add(data).draw()

NOTA sobre el proxy: El proxy en public/php/backend/categoria-iva.php valida sesion ($_SESSION['SD_USER']), hace la peticion al backend real mediante la clase Request, extrae el campo data de la respuesta y lo reenvio al frontend.


Integracion con Backend

Endpoint Consumido

MetodoEndpoint ProxyEndpoint Backend Real
GETphp/backend/categoria-iva.phpbackend/categoria-iva.php

Datos Recibidos

typescript
// Tipo inferido de la respuesta
interface CategoriaIva {
  codigo: number;   // Codigo ARCA
  nombre: string;   // Nombre descriptivo
  porcentaje: number; // Porcentaje de alicuota (no mostrado en tabla)
}

Patron de Comunicacion

  • API Client: ApiRequest class (legacy, usa fetch con FormData)
  • Metodo: request.get('categoria-iva') que internamente hace POST al proxy
  • Autenticacion: Session-based (via $_SESSION['SD_USER'] en proxy)
  • Schema: Automaticamente inyectado por API.js desde localStorage

State Management

TipoTecnologiaUso
Datos servidorDataTables internoAlmacena filas en memoria de DataTables
No hay estado local-No se usa useState ni variables de estado
SesionlocalStorage/sessionStorageSchema, token (manejado por API.js)

No hay gestion de estado compleja dado que la vista es de solo lectura sin interacciones de usuario mas alla de la visualizacion y exportacion.


Exportacion de Datos

DataTables proporciona botones de exportacion:

  • Excel: Exporta tabla a formato .xlsx
  • PDF: Exporta tabla a formato .pdf

Ambas funcionalidades son proporcionadas por los plugins de DataTables (buttons.html5.min.js, pdfmake).


Routing

URLParametroVistaArchivo
?loc=mvciamvciaListado Cat. IVAview/mod-ventas/cat-iva.php

No usa React Router. El routing se maneja mediante parametro loc en la URL procesado por public/index.php.


Librerias/Plugins Utilizados

LibreriaVersionProposito
jQuery(incluido)Manipulacion DOM
DataTables(incluido)Tabla interactiva
DataTables Bootstrap 4(incluido)Estilo Bootstrap
DataTables Responsive(incluido)Tabla responsive
DataTables Buttons(incluido)Botones exportar
pdfmake(incluido)Generacion PDF
jszip(incluido)Generacion Excel
AdminLTE(incluido)Template de UI
Bootstrap 4(incluido)Framework CSS
Font Awesome(incluido)Iconos
SweetAlert(referenciado CSS)Alertas

Comparacion con Recurso Relacionado: Condicion IVA

La "Condicion IVA" (?loc=mvci) es un recurso similar pero con mas funcionalidades:

AspectoCategoria IVA (aliva)Condicion IVA (ordiva)
VistaSolo lecturaLectura + Edicion
Columnas tablaCodigo, NombreCodigo, Nombre, Defecto, Acciones
FormularioNoSi (modal con Descripcion, CUIT obl., Discrimina)
Operaciones APIGETGET, PUT, PATCH
Boton altaNoSi (deshabilitado con alerta)
Checkbox defectoNoSi (marca condicion por defecto)
Boton editarNo (comentado en codigo)Si (abre modal de edicion)

Uso como Componente en React (Membresias)

Aunque la vista principal es legacy, la entidad "Condicion IVA" (ordiva) se consume desde React en el modulo Membresias:

Archivo: public/ts/mod-membresias/Miembro/components/MiembroForm/DatosComerciales.tsx

Patron: ControlledSelect component con endpoint ordiva

<ControlledSelect
  name="condicionIva"
  endpoint="ordiva"
  label="Condicion IVA"
  defaultSelection="defecto"
  required
/>

NOTA: Este es uso de "Condicion IVA" (ordiva), NO de "Categoria IVA" (aliva). No se encontro consumo React directo de la tabla aliva.


Schemas de Validacion

No existen schemas Zod para este recurso. No hay componentes React ni formularios que requieran validacion frontend moderna.


Patrones Identificados

Conformidad con Arquitectura Frontend del Sistema

PatronEstadoNota
React/TypeScriptNOUsa vanilla JS
TanStack QueryNOUsa ApiRequest legacy
Zod schemasNONo hay validacion
React Hook FormNONo hay formulario
ControlledSelectNONo hay selects React
Vite compilationNOJS cargado directamente
TypeScript typesNOSin tipado

Deuda Tecnica Identificada

  1. Sin migracion a React: Toda la vista es legacy PHP + vanilla JS
  2. Sin TypeScript: No hay tipos definidos para la entidad
  3. API legacy (ApiRequest): Usa patron FormData + fetch en lugar de axios + interceptors
  4. Sin Zod schemas: No hay validacion de datos recibidos
  5. Sin TanStack Query: No hay cache ni gestion de estado servidor
  6. Columna de Acciones comentada: Codigo muerto en el archivo JS
  7. Porcentaje no visible: Campo disponible pero no mostrado en tabla

Preguntas Tecnicas Pendientes

Hay aspectos tecnicos que requieren validacion. Ver: Preguntas sobre Categoria IVA

Preguntas tecnicas relacionadas al frontend:

  • Boton de acciones comentado - eliminar o implementar? (Q8)
  • Porcentaje no visible en tabla - intencional? (Q4)

Referencias


NOTA IMPORTANTE: Esta documentacion fue generada automaticamente analizando el codigo implementado. Este recurso esta completamente en patron legacy (PHP + vanilla JS + jQuery + DataTables). Si se planea modernizar, deberia migrarse a React/TypeScript siguiendo el patron del sistema documentado en docs/frontend/estructura-modulos-react.md.