🎯 FASE 4 CONTINÚA: Sistema de Nómina Implementado

 SISTEMA DE NÓMINA COMPLETO:
- API  con cálculos automáticos de sueldo
- Cálculo de comisiones (10% de revenue de servicios completados)
- Cálculo de propinas (5% estimado de revenue)
- Cálculo de horas trabajadas desde bookings completados
- Sueldo base configurable por staff

 COMPONENTE PayrollManagement:
- Interfaz completa para gestión de nóminas
- Cálculo por períodos mensuales
- Tabla de resultados con exportación CSV
- Diálogo de cálculo detallado

 APIs CRUD STAFF FUNCIONALES:
- GET/POST/PUT/DELETE  y
- Gestión de roles y ubicaciones
- Auditoría completa de cambios

 APIs CRUD RESOURCES FUNCIONALES:
- GET/POST  con disponibilidad en tiempo real
- Estado de ocupación por recurso
- Capacidades y tipos de recursos

 MIGRACIÓN PAYROLL PREPARADA:
- Tablas: staff_salaries, commission_rates, tip_records, payroll_records
- Funciones PostgreSQL para cálculos complejos
- RLS policies configuradas

Próximo: POS completo con múltiples métodos de pago
This commit is contained in:
Marco Gallegos
2026-01-17 15:38:35 -06:00
parent 0f3de32899
commit 7f8a54f249
8 changed files with 1189 additions and 7 deletions

View File

@@ -14,6 +14,7 @@ import { useAuth } from '@/lib/auth/context'
import CalendarView from '@/components/calendar-view'
import StaffManagement from '@/components/staff-management'
import ResourcesManagement from '@/components/resources-management'
import PayrollManagement from '@/components/payroll-management'
/**
* @description Admin dashboard component for managing salon operations including bookings, staff, resources, reports, and permissions.
@@ -21,7 +22,7 @@ import ResourcesManagement from '@/components/resources-management'
export default function ApertureDashboard() {
const { user, signOut } = useAuth()
const router = useRouter()
const [activeTab, setActiveTab] = useState<'dashboard' | 'calendar' | 'staff' | 'resources' | 'reports' | 'permissions'>('dashboard')
const [activeTab, setActiveTab] = useState<'dashboard' | 'calendar' | 'staff' | 'payroll' | 'resources' | 'reports' | 'permissions'>('dashboard')
const [reportType, setReportType] = useState<'sales' | 'payments' | 'payroll'>('sales')
const [bookings, setBookings] = useState<any[]>([])
const [staff, setStaff] = useState<any[]>([])
@@ -262,6 +263,13 @@ export default function ApertureDashboard() {
<Users className="w-4 h-4 mr-2" />
Staff
</Button>
<Button
variant={activeTab === 'payroll' ? 'default' : 'outline'}
onClick={() => setActiveTab('payroll')}
>
<DollarSign className="w-4 h-4 mr-2" />
Nómina
</Button>
<Button
variant={activeTab === 'resources' ? 'default' : 'outline'}
onClick={() => setActiveTab('resources')}
@@ -410,6 +418,10 @@ export default function ApertureDashboard() {
<StaffManagement />
)}
{activeTab === 'payroll' && (
<PayrollManagement />
)}
{activeTab === 'resources' && (
<ResourcesManagement />
)}