Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
248 changes: 51 additions & 197 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,245 +1,99 @@
# Balance - Aplicación de Gestión Financiera

Una aplicación integral de gestión de finanzas personales construida con Flet (Python) que te ayuda a rastrear tu balance, transacciones, activos, pasivos y mantenerte actualizado con noticias financieras.

## Descripción General

Balance es una aplicación financiera moderna con tema oscuro diseñada para ayudarte a gestionar tus finanzas personales de manera efectiva. La aplicación proporciona una solución completa para rastrear tu salud financiera, incluyendo gestión de balance, registro de transacciones, seguimiento de activos y pasivos, y acceso a noticias financieras.

## Capturas de Pantalla

<table>
<tr>
<td align="center">
<img src="screenshots/main1.jpg" width="150" alt="Panel Principal 1"><br>
<sub>Panel Principal 1</sub>
</td>
<td align="center">
<img src="screenshots/main2.jpg" width="150" alt="Panel Principal 2"><br>
<sub>Panel Principal 2</sub>
</td>
<td align="center">
<img src="screenshots/transactions.jpg" width="150" alt="Transacciones"><br>
<sub>Transacciones</sub>
</td>
<td align="center">
<img src="screenshots/actives.jpg" width="150" alt="Activos"><br>
<sub>Activos</sub>
</td>
<td align="center">
<img src="screenshots/passive.jpg" width="150" alt="Pasivos"><br>
<sub>Pasivos</sub>
</td>
<td align="center">
<img src="screenshots/news.jpg" width="150" alt="Noticias"><br>
<sub>Noticias</sub>
</td>
</tr>
</table>
# Balance

## Características

### 🏠 Panel Principal

El panel principal proporciona una visión integral de tu estado financiero de un vistazo.

**Características Principales:**
- **Visualización de Balance/Liquidez**: Alterna entre ver tu balance total y activos líquidos
- **Modo de Transacciones**: Cambia entre el modo Balance/Liquidez y el modo Ingresos/Gastos
- **Búsqueda Rápida**: Busca entre tus transacciones por nombre o categoría
- **Lista de Transacciones**: Visualiza todas tus transacciones recientes con indicadores codificados por colores (verde para ingresos, rojo para gastos)
- **Navegación Rápida**: Acceso fácil a las secciones de Activos, Pasivos y Noticias
- **Personalización de Perfil**: Personaliza tu foto de perfil y mensaje de bienvenida

### 💰 Transacciones

Registra y gestiona todas tus transacciones financieras con facilidad.

**Características:**
- Agregar nuevas transacciones con nombre, categoría y monto
- Marcar transacciones como ingresos (suma al capital) o gastos
- Ver historial de transacciones con cálculos de porcentaje
- Buscar y filtrar transacciones
- Eliminar transacciones individualmente o en lote

### 📊 Gestión de Balance

Mantén un registro de tu balance financiero actual y actualízalo según sea necesario.
Aplicación de finanzas personales construida con **Flet (Python)**. Tema oscuro, diseño moderno e intuitivo.

**Características:**
- Ver balance actual con marca de tiempo de última actualización
- Actualizar balance manualmente
- Rastrear cambios de balance a lo largo del tiempo

### 📈 Activos

Gestiona tus activos e inversiones en diferentes categorías.

**Tipos de Activos:**
- Acciones
- Bonos
- Fondos
- Criptomonedas
- Bienes raíces
- Venta
- Otros

**Características:**
- Agregar activos con nombre, tipo y valor
- Marcar activos como líquidos o no líquidos
- Ver todos los activos en una lista organizada
- Editar y eliminar activos
- Indicadores visuales para activos líquidos vs no líquidos

### 📉 Pasivos

Rastrea tus deudas y pasivos para mantener una imagen clara de tus obligaciones financieras.

**Características:**
- Agregar pasivos con nombre, categoría y monto
- Marcar pasivos como pagados o no pagados
- Indicadores de estado visuales (verde para pagado, rojo para no pagado)
- Pagar pasivos con un clic
- Eliminar múltiples pasivos a la vez
- Actualizar lista para ver el estado actualizado

### 📰 Noticias Financieras
## Características

Mantente informado con las últimas noticias financieras y actualizaciones del mercado.
- **Panel principal** — Vista general de tu balance, liquidez e ingresos/gastos
- **Transacciones** — Registra ingresos y gastos con categorías personalizables
- **Activos** — Gestiona acciones, bonos, cripto, bienes raíces y más
- **Pasivos** — Controla deudas con estado de pago visual
- **Préstamos** — Registra préstamos realizados y recibidos
- **Transferencias** — Movimientos entre cuentas propias
- **Asistente IA** — Chat financiero Kara AI
- **Gráficas** — Visualización de tu patrimonio con matplotlib

**Características:**
- Navegar por los últimos artículos de noticias financieras
- Ver imágenes de artículos, títulos, autores y fechas de publicación
- Actualizar para obtener las últimas noticias
- Interfaz limpia basada en tarjetas para una lectura fácil

## Instalación

### Requisitos Previos
**Requisitos:** Python 3.9+

- Python 3.9 o superior
- Gestor de paquetes pip o uv

### Configuración

1. Clona el repositorio:
```bash
git clone <repository-url>
cd financeapp
```

2. Instala las dependencias:
Instala dependencias con **uv** (recomendado):
```bash
pip install -r src/requirements.txt
uv sync
```

O usando uv:
O con pip:
```bash
uv pip install -r src/requirements.txt
pip install .
```

3. Ejecuta la aplicación:
Ejecuta la app:
```bash
cd src
python main.py
flet run
```

## Configuración

### Configuración Inicial

Cuando ejecutes la aplicación por primera vez, se te pedirá:
- Ingresar tu nombre
- Seleccionar tu género (para saludos personalizados)

### Ajustes

Accede a los ajustes desde el panel principal para configurar:
- **Modo de Transacciones**: Alternar entre la vista Balance/Liquidez y la vista Ingresos/Gastos
- **Modo de Portafolio**: Cambiar entre diferentes métricas financieras
Crea un archivo `.env` en la raíz del proyecto:
```env
GEMINI_API_KEY=tu_api_key_aquí
```

## Estructura del Proyecto

```
financeapp/
├── src/
│ ├── main.py # Punto de entrada principal de la aplicación
│ ├── controller.py # Controladores de lógica de negocio
│ ├── database.py # Modelos y operaciones de base de datos
│ ├── db_connection.py # Manejo de conexión a base de datos
│ ├── requirements.txt # Dependencias de Python
│ ├── assets/ # Recursos de la aplicación (imágenes, fuentes)
│ └── storage/ # Directorio de almacenamiento de datos
├── screenshots/ # Capturas de pantalla de la aplicación
├── pyproject.toml # Configuración del proyecto
└── README.md # Este archivo
│ ├── main.py # Punto de entrada
│ ├── router.py # Enrutamiento de vistas
│ ├── setup.py # Configuración inicial
│ ├── views/ # Vistas (UI)
│ ├── controllers/ # Lógica de negocio
│ ├── components/ # Componentes reutilizables
│ ├── db/ # Base de datos y migraciones
│ ├── dto/ # Objetos de transferencia de datos
│ ├── client/ # Cliente HTTP
│ ├── external/ # Integraciones externas (Gemini)
│ ├── core/ # Configuración central
│ ├── themes/ # Temas y estilos
│ ├── assets/ # Recursos (imágenes, fuentes)
│ └── storage/ # Almacenamiento local
├── pyproject.toml
└── README.md
```

## Stack Tecnológico

- **Framework**: Flet 0.28.3
- **Lenguaje**: Python 3.9+
- **Base de Datos**: SQLite (financeapp.db)
- **Interfaz**: Tema oscuro con diseño moderno

## Características en Detalle

### Gestión de Transacciones
- Actualización automática del balance cuando se agregan transacciones
- Cálculo de porcentaje para cada transacción
- Organización basada en categorías
- Funcionalidad de búsqueda para acceso rápido
## Tech Stack

### Seguimiento de Activos
- Soporte para múltiples tipos de activos
- Seguimiento de liquidez
- Indicadores de estado visuales
- Soporte para operaciones en lote
| Tecnología | Uso |
|---|---|
| **Flet 0.28.3** | Framework UI |
| **SQLite** | Base de datos local |
| **Matplotlib** | Gráficas |
| **Gemini AI** | Asistente financiero |
| **HTTPX** | Cliente HTTP |

### Gestión de Pasivos
- Seguimiento del estado de pago
- Procesamiento rápido de pagos
- Organización por categorías
- Visualización de estado

### Integración de Noticias
- Noticias financieras en tiempo real
- Visualización de metadatos de artículos
- Soporte de imágenes
- Capacidad de actualización

## Consejos de Uso

1. **Actualizaciones Regulares**: Mantén tu balance y transacciones actualizados regularmente para un seguimiento financiero preciso
2. **Categorización**: Usa categorías consistentes para una mejor organización y resultados de búsqueda
3. **Liquidez de Activos**: Marca los activos líquidos correctamente para obtener cálculos de liquidez precisos
4. **Seguimiento de Pasivos**: Marca los pasivos como pagados cuando se liquiden para mantener un estado financiero preciso
5. **Función de Búsqueda**: Usa la barra de búsqueda para encontrar rápidamente transacciones específicas

## Desarrollo

### Compilación para Móviles

La aplicación se puede compilar para Android e iOS usando el sistema de compilación de Flet:
## Compilación Móvil

```bash
flet build apk # Para Android
flet build ios # Para iOS
flet build apk # Android
flet build ipa # iOS
```

### Registro de Eventos

La aplicación mantiene registros en `storage/data/applogs.log` para depuración y monitoreo.

## Licencia

Copyright (C) 2025 por Christianymoon Ltd.

## Autor

**Christian Vergara**
- Email: imchrisyt15@gmail.com
**Christian Vergara** — imchrisyt15@gmail.com

---

*Balance - Tu compañero de finanzas personales*
*Balance Tu compañero de finanzas personales*
28 changes: 28 additions & 0 deletions install_apk.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
@echo off

echo Building APK...
echo Continue to build the APK using Flet. This may take a few moments...
echo Press any key to continue...

pause

flet build apk
if errorlevel 1 (
echo Build failed. Exiting.
pause
exit /b 1
)

color 0A
echo Installing APK...

adb devices

@REM echo if your device is not listed, please connect it and try again.
@REM echo Press any key to continue...

@REM pause

adb install -r ./build/apk/app-release.apk

echo "APK installed successfully!"
5 changes: 4 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "balance"
version = "1.0.0"
version = "3.0.0-beta.1"
description = "Beta Version"
readme = "README.md"
requires-python = ">=3.9"
Expand All @@ -10,6 +10,9 @@ authors = [

dependencies = [
"flet==0.28.3",
"httpx==0.28.1",
"matplotlib==3.10.0",
"python-dotenv==1.2.2",
]

[tool.flet]
Expand Down
Binary file added requirements.txt
Binary file not shown.
Binary file removed screenshots/actives.jpg
Binary file not shown.
Binary file removed screenshots/main1.jpg
Binary file not shown.
Binary file removed screenshots/main2.jpg
Binary file not shown.
Binary file removed screenshots/news.jpg
Binary file not shown.
Binary file removed screenshots/passive.jpg
Binary file not shown.
Binary file removed screenshots/transactions.jpg
Binary file not shown.
Binary file added src/assets/charts/balance_chart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
37 changes: 37 additions & 0 deletions src/client/client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from flet import Page
import logging

class ClientStorage:
def __init__(self, page: Page):
self.page = page
self.prefix = "christianymoon.finance."


def create_key(self, key: str, value = any) -> None:
try:
self.page.client_storage.set(self.prefix + key, value)
return True
except:
logging.error(f"Error al establecer el valor de llave {key} con valor {value}")
return False


def get_value(self, key: str) -> any:
"""Returns none if value not found"""
value = self.page.client_storage.get(self.prefix + key)
return value

def set_value(self, key: str, value: any):
try:
self.remove_value(key)
self.create_key(key, value)
return True
except:
logging.error("Error al eliminar y crear el valor de llave")
return False

def remove_value(self, key: str) -> None:
self.page.client_storage.remove(self.prefix + key)

def clear_values(self):
self.page.client_storage.clear()
Loading