API REST para administrar matrices de riesgo y sus entidades asociadas (empresas, usuarios, riesgos, objetivos, fases, mitigaciones, valores de impacto y probabilidad). Construida con FastAPI + SQLAlchemy + PostgreSQL.
Proyecto académico (USCO) que implementa el flujo completo de una matriz de riesgo organizacional: identificación, evaluación, tratamiento y seguimiento.
Una matriz de riesgo es una herramienta de gestión que cruza la probabilidad de que ocurra un evento adverso con su impacto, para priorizar tratamientos. Este servicio modela:
- Empresas y usuarios con autenticación básica.
- Matrices de riesgo asociadas a cada empresa.
- Riesgos identificados, con su probabilidad e impacto.
- Objetivos afectados (financieros, operativos, estratégicos, de cumplimiento).
- Fases del proceso (planeación, ejecución, control).
- Acciones de mitigación y tipos de objetivo.
| Categoría | Tecnología |
|---|---|
| Lenguaje | Python 3.10+ |
| Framework | FastAPI 0.115 |
| ORM | SQLAlchemy 2.0 |
| Validación | Pydantic 2.10 |
| Base de datos | PostgreSQL |
| Driver | psycopg2-binary |
| Servidor | uvicorn ([standard]) |
| Despliegue | Procfile (Heroku, Railway, Render) |
cp .env.example .env
# Editar .env con tu DATABASE_URLpython -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload- API: http://localhost:8000
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
Organizados por tags en Swagger:
| Tag | Recurso | Operaciones |
|---|---|---|
empresas |
/empresas/ |
CRUD completo |
usuarios |
/usuarios/ |
CRUD + login |
matrices |
/matrices/ |
CRUD completo |
riesgos |
/riesgos/ |
CRUD completo |
impactos |
/impactos/ |
CRUD |
probabilidades |
/probabilidades/ |
CRUD |
objetivos_afectados |
/objetivos_afectados/ |
CRUD |
fases |
/fases/ |
CRUD |
mitigaciones |
/mitigaciones/ |
CRUD |
tipos_objetivo |
/tipos_objetivo/ |
CRUD |
Documentación interactiva auto-generada en /docs.
Back_matriz/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI app, routes, CORS
│ ├── models.py # SQLAlchemy ORM
│ ├── schemas.py # Pydantic schemas
│ ├── crud.py # Lógica de acceso a datos
│ └── database.py # Engine, sessionmaker (lee DATABASE_URL del env)
├── Procfile # web: uvicorn app.main:app --host=0.0.0.0 --port=8000
├── requirements.txt
├── .env.example
└── README.md
# Heroku
heroku create back-matriz
heroku config:set DATABASE_URL=postgres://...
git push heroku main
# Railway / Render
# Detectan el Procfile automáticamente. Solo configurar DATABASE_URL.- Lifespan handlers en lugar de
@app.on_event("startup")(deprecado desde FastAPI 0.110). - Migraciones con Alembic en vez de
Base.metadata.create_all()en startup — el approach actual es práctico pero no permite cambios incrementales de schema en producción. - Auth con JWT (OAuth2PasswordBearer + refresh tokens) en lugar de auth básica.
- CORS específico: hoy
allow_origins=["*"]; restringir en producción. - Tests: añadir
pytest+httpx.AsyncClient. - Hash de contraseñas: si
crud.pyguarda passwords en plano, migrar apasslib[bcrypt]. - Paginación con cursor en endpoints
GET /<recurso>/con muchos registros (hoy esskip/limitclásico).
Proyecto académico — Universidad Surcolombiana (USCO).