Depreciación de Activo Fijo en Sevastopol
Sevastopol · Activo Fijo
Activo fijoSevastopolDepreciación
Propósito
Section titled “Propósito”La pestaña Depreciación de ActivosFijosIsland permite consultar las cuotas del periodo activo, generar depreciación por categoría, contabilizar cuotas pendientes, reversar cuotas contabilizadas y eliminar cuotas pendientes.
Esta página documenta el flujo frontend actual. La fórmula y la persistencia del cálculo viven en Orchestrator; Sevastopol actúa como interfaz operativa y proxy hacia /api/activo-fijo.
Ubicación
Section titled “Ubicación”Directorysevastopol/src/components/islands/contabilidad/
- ActivosFijosIsland.tsx
Directorysevastopol/src/pages/api/activo-fijo/
- index.ts
- […path].ts
Relación con la Vista
Section titled “Relación con la Vista”ActivosFijosIsland contiene tres pestañas:
| Pestaña | Función |
|---|---|
activos | Consulta activos, estado, valor libro y porcentaje depreciado. |
categorias | Administra categorías tributarias, vida útil y cuentas contables. |
depreciacion | Consulta, genera, contabiliza, reversa o elimina cuotas de depreciación. |
La pestaña de depreciación depende del tenant activo y del periodo activo global.
Estado de la Pestaña
Section titled “Estado de la Pestaña”const [tab, setTab] = createSignal<'activos' | 'categorias' | 'depreciacion'>( 'activos',);
const [depRows, setDepRows] = createSignal<DepreciacionEntry[]>([]);const [loadingDep, setLoadingDep] = createSignal(false);
const [showGenerar, setShowGenerar] = createSignal(false);const [generarForm, setGenerarForm] = createSignal({ categoria_id: '', periodo_mes: '', tipo_depreciacion: 'NORMAL', notas: '',});Flujo de Consulta
Section titled “Flujo de Consulta”-
Construir el periodo mensual desde el contexto activo.
function activeDepPeriodoMes() {const now = new Date();const ano = String(period().year ?? now.getFullYear());const mes = String(period().month ?? (now.getMonth() + 1)).padStart(2, '0');return `${ano}-${mes}-01`;} -
Cargar las cuotas del periodo cuando la pestaña activa es
depreciacion.const { period } = useActivePeriod(() => {if (tab() !== 'depreciacion') return;const tid = tenantId();if (!tid) return;void loadDepreciacion(tid);}); -
Consultar el proxy local de activo fijo.
async function loadDepreciacion(tid: string) {const periodoMes = activeDepPeriodoMes();const r = await authenticatedFetch(`${AF_API}/depreciacion/periodo/${periodoMes}?tenant_id=${tid}`,);await handleAuthResponse(r);setDepRows(r.ok ? await r.json() : []);}
Flujo de Generación
Section titled “Flujo de Generación”La generación se hace por categoría. La UI envía el periodo, el tipo de depreciación y notas opcionales; Orchestrator procesa cada activo elegible de la categoría.
-
Abrir el modal con el periodo activo y tipo
NORMAL.setGenerarForm({categoria_id: '',periodo_mes: activeDepPeriodoMes(),tipo_depreciacion: 'NORMAL',notas: '',});setShowGenerar(true); -
Validar categoría y periodo antes de enviar.
const f = generarForm();if (!f.categoria_id || !f.periodo_mes) {toast.push('Selecciona categoría y período', 'error');return;} -
Enviar la solicitud de generación por categoría.
const r = await authenticatedFetch(`${AF_API}/depreciacion/generar-categoria?tenant_id=${tid}`,{method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({categoria_id: Number(f.categoria_id),periodo_mes: f.periodo_mes,tipo_depreciacion: f.tipo_depreciacion,...(f.notas ? { notas: f.notas } : {}),}),},); -
Mostrar resultado y recargar la pestaña.
const { procesados, omitidos, errores } = await r.json();if (procesados > 0) {toast.push(`${procesados} activo(s) depreciado(s)`, 'success');} else if (omitidos > 0) {toast.push(`${omitidos} activo(s) ya tenían cuota para este período`, 'success');}for (const err of errores as string[]) {toast.push(err, 'error');}await loadDepreciacion(tid);
Acciones por Estado
Section titled “Acciones por Estado”| Estado de cuota | Acción visible | Endpoint |
|---|---|---|
PENDIENTE | Contabilizar | PUT /api/activo-fijo/depreciacion/:id/contabilizar |
PENDIENTE | Eliminar | DELETE /api/activo-fijo/depreciacion/:id |
CONTABILIZADO | Reversar | PUT /api/activo-fijo/depreciacion/:id/reversar-contabilizacion |
Contabilización
Section titled “Contabilización”async function handleContabilizar(depId: number) { const r = await authenticatedFetch( `${AF_API}/depreciacion/${depId}/contabilizar?tenant_id=${tid}`, { method: 'PUT' }, );
await handleAuthResponse(r);
if (r.ok) { toast.push('Depreciación contabilizada', 'success'); await loadDepreciacion(tid); }}Reversa
Section titled “Reversa”La reversa pide confirmación explícita porque elimina las líneas contables y devuelve la cuota a PENDIENTE.
const ok = confirm( '¿Reversar contabilización de esta depreciación? Se eliminarán sus líneas de movimiento y quedará en PENDIENTE.',);
if (!ok) return;
const r = await authenticatedFetch( `${AF_API}/depreciacion/${depId}/reversar-contabilizacion?tenant_id=${tid}`, { method: 'PUT' },);Eliminación
Section titled “Eliminación”La eliminación usa un modal propio y aplica sobre cuotas pendientes.
const r = await authenticatedFetch( `${AF_API}/depreciacion/${depId}?tenant_id=${tid}`, { method: 'DELETE' },);Columnas Visibles
Section titled “Columnas Visibles”| Columna | Origen |
|---|---|
| Activo | nombre_activo |
| Periodo | periodo_mes |
| Tipo | tipo_depreciacion |
| Número | periodo_numero |
| Cuota | cuota_depreciacion |
| Depreciación acumulada | dep_acumulada_posterior |
| Valor libro | valor_libro |
| Estado | estado |
Proxy Local
Section titled “Proxy Local”Sevastopol no llama directamente a Orchestrator desde la island. La ruta src/pages/api/activo-fijo/[...path].ts reenvía método, query string, cookies, Authorization y cuerpo hacia Orchestrator.
let targetUrl = `${ORCHESTRATOR_BASE_URL}/api/activo-fijo/${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 cuotas pertenecen a una base tenant. |
| Usar periodo activo | La consulta de depreciación se acota al mes contable global. |
| Generar por categoría | El flujo actual procesa activos elegibles de una categoría completa. |
| Recargar después de cada acción | Mantiene la tabla alineada con el estado de Orchestrator. |
| Mostrar acciones por estado | Evita acciones inválidas desde la UI. |