Operaciones SII en Sevastopol
Sevastopol · Operaciones SII
Compras-VentasSevastopolUI
Propósito
Section titled “Propósito”OperationsViewIsland es la interfaz frontend para revisar documentos SII normalizados y operar el detalle contable generado por OperationsService. La vista permite consultar ventas, compras y boletas por periodo, revisar su estado y solicitar la generación o reproceso del detalle operacional.
Esta página documenta el flujo frontend actual. La clasificación contable, la persistencia y la validación de reprocesos viven en Orchestrator; Sevastopol actúa como interfaz operativa y proxy hacia el backend.
Ubicación
Section titled “Ubicación”Directorysevastopol/src/components/islands/accounting/
- OperationsViewIsland.tsx
Directorysevastopol/src/pages/api/accounting/
- index.ts
- […path].ts
Relación con la Vista
Section titled “Relación con la Vista”La vista trabaja sobre tres tipos documentales del SII.
| Tipo | Uso en la interfaz |
|---|---|
VENTA | Revisa facturas emitidas, notas de crédito, notas de débito y su detalle neto e IVA. |
COMPRA | Revisa facturas recibidas, IVA recuperable, IVA no recuperable, otros impuestos y clasificación posterior. |
BOLETA | Revisa resúmenes de boletas y su separación automática entre neto e IVA. |
La pantalla depende del tenant activo y de un periodo mensual o rango de periodos. El detalle mostrado corresponde a documentos fuente y líneas generadas en operaciones_sii.compras_ventas_detalle.
Flujo de Consulta
Section titled “Flujo de Consulta”-
Seleccionar tenant, tipo documental y periodo de trabajo.
const params = new URLSearchParams({tenant_id: tenantId,tipo_documento: tipoDocumento,periodo,}); -
Consultar documentos fuente normalizados para el tipo seleccionado.
const r = await authenticatedFetch(`/api/accounting/operations?${params}`);await handleAuthResponse(r); -
Consultar el estado de contabilización del periodo.
const estado = await authenticatedFetch(`/api/accounting/operations/estado?${params}`,); -
Renderizar totales, estado general y tabla de documentos.
Generación de Detalle
Section titled “Generación de Detalle”La acción de generación solicita a Orchestrator que procese los documentos fuente del periodo y cree líneas operacionales. La opción de reproceso debe usarse solo cuando se necesita borrar el detalle previo y reconstruirlo con reglas actualizadas.
const body = { tipo_documento: tipoDocumento, periodo_desde: periodoDesde, periodo_hasta: periodoHasta, forzar_reproceso: forceReprocess, contabilizar_ingresos: contabilizarIngresos,};| Opción | Efecto |
|---|---|
forzar_reproceso | Borra el detalle existente del tipo y periodo antes de regenerar. |
contabilizar_ingresos | Marca ingresos netos de ventas o boletas como contabilizados. No aplica a compras. |
Contabilización de Ingresos
Section titled “Contabilización de Ingresos”Para VENTA y BOLETA, la vista puede pedir que los ingresos netos generados queden contabilizados en el mismo flujo. Esta acción no crea líneas nuevas; cambia el estado de las líneas netas pendientes y deja trazabilidad para los servicios posteriores.
| Tipo documental | Acción permitida |
|---|---|
VENTA | Generar detalle y opcionalmente contabilizar ingresos netos. |
BOLETA | Generar detalle y opcionalmente contabilizar ingresos netos. |
COMPRA | Generar detalle; la clasificación posterior deriva a activo fijo, existencias, gastos o impuestos. |
Derivación de Compras
Section titled “Derivación de Compras”Las compras no se agotan en la generación del detalle operacional. Después de consultar o regenerar el periodo, la UI debe conducir las líneas COMPRA pendientes hacia una clasificación por proveedor y, desde ahí, hacia su destino contable.
| Destino | Criterio |
|---|---|
| Inventarios | Bienes adquiridos para venta, transformación, producción o consumo futuro. |
| Activo fijo | Bienes tangibles usados por más de un periodo y no destinados a venta ordinaria. |
| Gastos | Bienes o servicios consumidos en el periodo o sin activo identificable. |
Reversa de Ingresos
Section titled “Reversa de Ingresos”La reversa aplica solo a ingresos netos de ventas o boletas marcados por este flujo. La vista debe impedir que compras entren en esta acción, porque las compras se consumen por procesos posteriores.
await authenticatedFetch(`/api/accounting/operations/reversar`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ tenant_id: tenantId, tipo_documento: tipoDocumento, periodo_desde: periodoDesde, periodo_hasta: periodoHasta, }),});Estados Visibles
Section titled “Estados Visibles”| Estado | Lectura de interfaz |
|---|---|
VACIO | No existen documentos fuente ni detalle para el periodo. |
PENDIENTE | Existen documentos fuente, pero falta generar detalle. |
VALIDADO | Los documentos tienen detalle generado y pendiente de acciones posteriores. |
CONTABILIZADO | Las líneas aplicables ya fueron marcadas como contabilizadas. |
PAGADO | El flujo posterior marcó las líneas como pagadas. |
PARCIAL | Existe mezcla de estados o avance incompleto. |
INCONSISTENTE | Hay diferencias entre documentos fuente y detalle generado. |
Endpoints
Section titled “Endpoints”| Método | Ruta | Operación |
|---|---|---|
GET | /api/accounting/operations | Consulta documentos fuente normalizados. |
GET | /api/accounting/operations/estado | Consulta resumen de estado por tipo y periodo. |
POST | /api/accounting/operations/generate | Genera o reprocesa detalle contable operacional. |
POST | /api/accounting/operations/reversar | Revierte contabilización de ingresos de ventas o boletas. |
Proxy Local
Section titled “Proxy Local”Sevastopol no debe acoplar la island a la URL interna de Orchestrator. Las rutas bajo src/pages/api/accounting/ reenvían método, query string, cookies, Authorization y cuerpo hacia el backend.
let targetUrl = `${ORCHESTRATOR_BASE_URL}/api/accounting/${restPath}`;if (url.search) targetUrl += url.search;
const orchestratorRes = await fetch(targetUrl, { method: request.method, headers: getProxyHeaders(request), body, credentials: 'include',});Reglas de UI
Section titled “Reglas de UI”| Regla | Motivo |
|---|---|
| Usar tenant activo | Las operaciones pertenecen a la base tenant seleccionada. |
| Separar tipo documental | Ventas, compras y boletas tienen reglas contables distintas. |
| Mostrar estado antes de reprocesar | Evita borrar detalle ya revisado sin contexto. |
Bloquear contabilizar_ingresos para compras | Las compras derivan a flujos posteriores y no se contabilizan como ingreso. |
| Recargar resumen después de cada acción | Mantiene la tabla alineada con el estado real de Orchestrator. |