Aplicación móvil para el control de gastos, presupuestos y planificación financiera
FinanzIA es una aplicación móvil multiplataforma de gestión financiera personal desarrollada con React Native y Expo. Permite a los usuarios administrar múltiples billeteras, realizar seguimiento de transacciones, controlar suscripciones y recibir planes financieros personalizados generados por inteligencia artificial.
- Multi-billetera - Gestiona múltiples cuentas con diferentes monedas
- Seguimiento de transacciones - Registra ingresos, gastos y transferencias entre billeteras
- Gestión de suscripciones - Control automático de pagos recurrentes (diario, semanal, mensual, anual)
- Presupuestos - Establece límites de gasto por categoría
- Objetivos financieros - Define y rastrea metas de ahorro o reducción de deuda
- Categorías personalizables - Organiza tus transacciones con categorías y etiquetas
- Planificación con IA - Obtén planes financieros personalizados usando OpenAI GPT-4
- Estadísticas visuales - Gráficos interactivos de tus finanzas
- Multi-moneda - Soporte para diferentes divisas por billetera
- Modo oscuro - Interfaz adaptativa según preferencias del sistema
- Actualizaciones OTA - Recibe mejoras automáticamente sin reinstalar
- React Native
0.79.6- Framework móvil multiplataforma - Expo
~53.0- Plataforma de desarrollo y deployment - Expo Router
~5.1- Navegación basada en archivos - TypeScript
~5.8- Tipado estático
- NativeWind
^4.1- Tailwind CSS para React Native - React Native Reanimated
~3.17- Animaciones fluidas - Expo Symbols - Iconografía SF Symbols
- Gifted Charts - Gráficos estadísticos
- Expo SQLite
^15.2- Base de datos local con soporte FTS - Migraciones versionadas - Sistema de versionado de esquema (v8)
- Vercel AI SDK
^5.0- Framework para integración de IA - OpenAI
^2.0- Modelo GPT-4o-mini para planes financieros
- React Native UUID - Generación de identificadores únicos
- Date-fns - Manipulación de fechas
- Expo Notifications - Notificaciones push
- Async Storage - Persistencia de datos clave-valor
- Node.js 18+ y npm
- Expo CLI
- Para desarrollo nativo:
- iOS: macOS con Xcode instalado
- Android: Android Studio con SDK configurado
- Clona el repositorio:
git clone https://github.com/RogelioLB/finanzIA.git
cd finanzIA- Instala las dependencias:
npm install- (Opcional) Configura la API de OpenAI para planes financieros:
# Crea el archivo .env.local
echo "OPENAI_API_KEY=sk-tu-clave-aqui" > .env.localVer AI_PLAN_SETUP.md para más detalles.
# Iniciar servidor de desarrollo
npm start
# Iniciar con variante de desarrollo
npm run dev
# Ejecutar en Android
npm run android
# Ejecutar en iOS
npm run ios
# Ejecutar en web
npm run web
# Linter
npm run lintfinanzIA/
├── app/ # Rutas y pantallas (Expo Router)
│ ├── (tabs)/ # Navegación por pestañas
│ │ ├── index.tsx # Pantalla principal (Dashboard)
│ │ ├── history.tsx # Historial de transacciones
│ │ ├── statistic.tsx # Estadísticas y gráficos
│ │ ├── ai-plan.tsx # Planificación con IA
│ │ └── more.tsx # Configuración y más opciones
│ └── api/ # Endpoints API
│ └── generate-plan+api.ts # Generación de planes con OpenAI
├── components/ # Componentes reutilizables
│ └── views/ # Componentes específicos de vistas
├── contexts/ # Proveedores de Context API
│ ├── WalletsContext.tsx
│ ├── TransactionsContext.tsx
│ ├── CategoriesContext.tsx
│ ├── AddTransactionContext.tsx
│ └── NotificationsContext.tsx
├── hooks/ # Custom hooks
├── lib/
│ └── database/ # Configuración y servicios SQLite
│ ├── initDatabase.ts # Esquema y migraciones
│ └── sqliteService.ts # CRUD operations
├── constants/ # Colores y constantes
└── assets/ # Imágenes, fuentes, etc.
Cada dominio tiene un Context provider con hook correspondiente:
// Uso típico
import { useWallets } from '@/contexts/WalletsContext';
function MyComponent() {
const { wallets, refreshWallets } = useWallets();
// ... lógica del componente
}Importante: Siempre llama a refreshTransactions() o refreshWallets() después de mutaciones en la base de datos.
Versión actual: 8
Tablas principales:
wallets- Billeteras con balance, moneda, icono y colorcategories- Categorías de ingreso/gasto (precargadas en español)transactions- Registros de transacciones con soporte para suscripcionesbudgets/category_budget_limits- Presupuestosobjectives- Objetivos financieroslabels/transaction_labels- Etiquetas para transacciones
income- Ingresosexpense- Gastostransfer- Transferencias entre billeteras (usato_wallet_id)- Suscripciones: Marca
is_subscription=1consubscription_frequency(daily/weekly/monthly/yearly) - Exclusión de IA: Flag
is_excludedexcluye transacciones del análisis de IA
Cada billetera tiene su propia moneda. La agregación de balances agrupa por moneda usando Intl.NumberFormat.
El proyecto soporta dos variantes configuradas en app.config.js:
| Variante | Comando | Nombre de app | Bundle ID |
|---|---|---|---|
| Desarrollo | npm run dev |
FinanzIA (Dev) | com.rogeliolb.finanzia.dev |
| Producción | npm start |
FinanzIA | com.rogeliolb.finanzia |
Ver BUILD_VARIANTS_SETUP.md para más detalles.
El proyecto está configurado para actualizaciones automáticas over-the-air (OTA) cuando se hace push a las ramas main o master.
- Genera un token de acceso en https://expo.dev/settings/access-tokens
- Agrega el secreto
EXPO_TOKENen la configuración del repositorio de GitHub - Crea un build inicial de producción:
eas build --platform all --profile productionNota: Los cambios en código nativo, plugins o eas.json requieren un nuevo build completo. Solo los cambios en JS/React se pueden desplegar vía OTA.
Ver EAS_AUTO_DEPLOY.md para instrucciones completas.
La función de planificación con IA requiere:
- Mínimo 10 transacciones registradas
- Clave API de OpenAI configurada en
.env.local - Endpoint:
POST /api/generate-plan+api
El sistema analiza transacciones (excepto las marcadas con is_excluded) y genera planes personalizados de ahorro, reducción de gastos y consejos financieros.
- Timestamps: Se almacenan como milisegundos desde epoch
- UUIDs: Generados via
react-native-uuidpara todas las entidades - Funciones de base de datos: Siguen el patrón
get*(),create*(),update*(),delete*()ensqliteService.ts - Idioma de UI: Español (nombres de categorías, etiquetas, textos)
Las contribuciones son bienvenidas. Por favor:
- Haz fork del repositorio
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commitea tus cambios (
git commit -m 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
Este proyecto está bajo la licencia MIT. Ver el archivo LICENSE para más detalles.
Rogelio López Blanco - @RogelioLB