SIFAC-SW es un sistema de información de escritorio desarrollado íntegramente en Java 24 con interfaz gráfica JavaFX y persistencia en PostgreSQL (NeonDB cloud). Su dominio funcional es la facturación electrónica para una PyME: gestión de clientes, productos, emisión de comprobantes (facturas y boletas), generación de documentos PDF y XML, historial de transacciones y control de acceso por roles.
El proyecto está diseñado y documentado como caso de estudio integral de Ingeniería del Software, donde cada módulo, patrón y capa arquitectónica evidencia los conceptos del curso:
| Unidad IS | Concepto | Evidencia en SIFAC-SW |
|---|---|---|
| Unidad I | Ciclo de Vida del Software | Fases de concepción → elaboración → construcción → transición del PU |
| Unidad II | Paradigma Orientado a Objetos | 17 clases de dominio, herencia, polimorfismo, encapsulamiento, abstracción |
| Unidad III | Proceso Unificado / Arquitecturas | MVC + capas + 4 arquitecturas del PU + 6 patrones GoF |
| Unidad IV | Diseño Conceptual / Lógico / Físico | model/ → dao/ → impl/ → PostgreSQL |
Desarrollar e implementar SIFAC-SW, aplicando los fundamentos de la Ingeniería del Software — ciclo de vida, paradigma OO, proceso unificado, arquitecturas empresariales y diseño de datos en tres niveles — tomando la facturación electrónica como dominio de negocio.
| Componente | Versión | Propósito |
|---|---|---|
| Java JDK | 24 | Runtime y compilación |
| JavaFX | 24.0.1 | Framework de interfaz gráfica (MVC — Capa Vista) |
| PostgreSQL | 15+ | SGBD relacional (Diseño Físico — Unidad IV) |
| NeonDB | Cloud | Hosting PostgreSQL serverless (Arquitectura Tecnológica — Unidad III) |
| Maven | 3.8.1+ | Gestor de dependencias y ciclo de build |
| iText | 5.5.13 | Generación de PDFs — patrón Builder |
| iKonli | 12.4.0 | Librería de iconos (FontAwesome, Ant Design) |
| JavaMail | 1.6.2 | Envío de correos — patrón Adapter |
Ubicación: persistence/dao/DAOFactory + persistence/impl/PostgresDAOFactory
Relación IS: Arquitectura de Aplicación (Unidad III) — Principio Abierto/Cerrado
DAOFactory factory = DAOFactory.getDAOFactory(DAOFactory.POSTGRES);
DAOCliente daoCliente = factory.getClienteDAO();Permite cambiar de PostgreSQL a cualquier otro SGBD sin tocar la lógica de negocio.
Ubicación: patterns/builder/ (Director, Builder, GeneradorBoletaPDF, GeneradorFacturaPDF)
Relación IS: Arquitectura de Información (Unidad III) — SRP, pasos ordenados
GeneradorPDFDirector → iniciarDocumento() → agregarEncabezado() → agregarCuerpo() → finalizarDocumento()
Construye documentos PDF en pasos controlados, reutilizando el Director para boletas y facturas.
Ubicación: patterns/strategy/NavegacionStrategy + 6 implementaciones
Relación IS: Polimorfismo / Beneficios OO (Unidad II) + Arquitectura de Aplicación (Unidad III)
NavegacionStrategy estrategia = new NavFacturacion();
if (estrategia.tienePermiso()) { estrategia.navegar(); }Cada módulo encapsula su lógica de validación de permisos. El menú es agnóstico al tipo de módulo.
Ubicación: patterns/adapter/XMLGenerator + implementaciones + MailTrapEmailAdapter
Relación IS: Arquitectura Tecnológica (Unidad III) — DIP, integración de servicios externos
XMLGenerator gen = XMLGeneratorFactory.getXMLGenerator(tipoComprobante);
gen.generar(comprobante); // Retorna BoletaXMLGenerator o FacturaXMLGeneratorUbicación: persistence/ConexionBD
Relación IS: Datos Centralizados (Unidad IV)
ConexionBD.getInstance().getConnection(); // Siempre la misma instanciaUbicación: persistence/dao/ (interfaces) + persistence/impl/ (implementaciones PostgreSQL)
Relación IS: Diseño Lógico → Diseño Físico (Unidad IV)
DAOCliente (interfaz — Diseño Lógico) → DAOClienteImpl (SQL — Diseño Físico)
┌──────────────────────────────────────────────────────┐
│ CAPA DE PRESENTACIÓN (View + Controller) │
│ JavaFX FXML + ControllerLogin, ControllerFacturas… │
│ [Arquitectura de Aplicación — MVC] │
└──────────────────────┬───────────────────────────────┘
│ delegación
┌──────────────────────▼───────────────────────────────┐
│ CAPA DE LÓGICA DE NEGOCIO (Service Layer) │
│ ClienteService, ComprobanteService, genPDFService… │
│ [Arquitectura de Negocios — Reglas del negocio] │
└──────────────────────┬───────────────────────────────┘
│ CRUD
┌──────────────────────▼───────────────────────────────┐
│ CAPA DE ACCESO A DATOS (DAO + Abstract Factory) │
│ DAOFactory → DAOClienteImpl, DAOComprobanteImpl… │
│ [Diseño Lógico → Diseño Físico — Unidad IV] │
└──────────────────────┬───────────────────────────────┘
│ JDBC / SSL
┌──────────────────────▼───────────────────────────────┐
│ CAPA DE DATOS (PostgreSQL en NeonDB) │
│ Tablas: clientes, productos, comprobantes, ubigeo… │
│ [Diseño Físico — Datos Centralizados — Unidad IV] │
└──────────────────────────────────────────────────────┘
SIFAC-SW (Patrones/)
├── README.md ← Este documento
├── INFORME_ACADEMICO.md ← Informe para sustentación
│
├── docs/ ← Documentación académica modular
│ ├── 01_introduccion.md ← Unidad I: Contexto y presentación
│ ├── 02_justificacion.md ← Justificación académica y técnica
│ ├── 03_objetivos.md ← OG + 7 Objetivos Específicos
│ ├── 04_alcance.md ← Funcionalidades incluidas/excluidas
│ ├── 05_arquitectura.md ← 4 Arquitecturas del PU (Unidad III)
│ ├── 06_silabo_mapping.md ← Tabla módulo ↔ unidad ↔ concepto IS
│ ├── 07_patrones_diseno.md ← 6 patrones GoF con código y análisis
│ └── 08_diseno_datos.md ← Diseño conceptual/lógico/físico
│
├── images/ ← Capturas de pantalla del sistema
│
└── demo/ ← Módulo Maven ejecutable
├── pom.xml ← Java 24, JavaFX 24, PostgreSQL driver
└── src/main/
├── java/pe/utp/facturacion/
│ ├── core/ [Núcleo — Arranque del Sistema — Unidad I]
│ ├── controller/ [Capa Presentación — MVC — Unidad III]
│ ├── model/ [Modelo de Dominio — POO — Unidad II]
│ ├── patterns/
│ │ ├── adapter/ [Patrón Adaptador — Unidad III]
│ │ ├── builder/ [Patrón Constructor — Unidad III]
│ │ └── strategy/ [Patrón Estrategia — Unidad II-III]
│ ├── persistence/
│ │ ├── dao/ [Diseño Lógico — Unidad IV]
│ │ └── impl/ [Diseño Físico — Unidad IV]
│ ├── service/ [Arquitectura de Negocios — Unidad III]
│ └── ui/loading/ [Componente de Arranque — Unidad I]
│
└── resources/pe/utp/facturacion/
├── *.fxml [Vistas JavaFX — Capa V del MVC]
├── styles/ [Sistema de Diseño Visual]
├── PDFs/ [Artefactos PDF Generados — Salida del Sistema]
└── xml/ [Artefactos XML-UBL Generados]
Login UI (ControllerLogin)
↓ credenciales
AutenticacioService.validar()
↓
DAOUsuario.obtenerPorCredenciales() ← Diseño Físico (Unidad IV)
↓ éxito
ManejadorSesion.guardarSesion() ← Strategy + permisos
↓
Menu principal con NavegacionStrategy
GenFactures.fxml (View)
↓ evento @FXML
ControllerFacturas (Controller)
↓ llama
ComprobanteService.crear() ← Regla de negocio (Unidad III)
↓ persiste
DAOComprobanteImpl.insertar() ← SQL INSERT (Unidad IV)
↓ genera artefactos
genPDFService → Builder → PDF ← Arquitectura de Información
XMLService → Adapter → XML ← Arquitectura Tecnológica
ControllerMenu.navegar()
↓ selecciona estrategia
NavegacionStrategy strategy = new NavFacturacion()
↓ verifica
strategy.tienePermiso() → PermisosNavegacion.puedeFacturar()
↓ ejecuta
strategy.navegar() → App.setRoot("GenFactures")
AbstractGeneradorPDF (Clase Base Abstracta)
├── GeneradorBoletaPDF extends AbstractGeneradorPDF
└── GeneradorFacturaPDF extends AbstractGeneradorPDFNavegacionStrategy estrategia = new NavFacturacion(); // o NavClientes, NavProductos...
estrategia.navegar(); // comportamiento diferente según implementación concretapublic class Cliente {
private Long idCliente; // atributos privados
private String nombres;
public String getNombres() { return nombres; } // acceso controlado
public void setNombres(String n) { if (n!=null) this.nombres = n; }
}public abstract class DAOFactory {
public abstract DAOCliente getClienteDAO(); // contrato abstracto
// la implementación concreta es PostgresDAOFactory
}- Java JDK 24 o superior
- Maven 3.8.1+
- Conexión a internet (acceso a NeonDB cloud)
cd demo
mvn javafx:run| Aspecto | Estado | Descripción |
|---|---|---|
| Compilación | ✅ Operacional | Java 24, Maven limpio |
| Ejecución | ✅ Operacional | JavaFX UI funcional |
| Patrones GoF | ✅ 6 implementados | Abstract Factory, Builder, Strategy, Adapter, Singleton, DAO |
| Persistencia | ✅ Conectado | NeonDB PostgreSQL activo |
| Documentación IS | ✅ Completa | README + 8 documentos en docs/ |
| Informe Académico | ✅ Generado | INFORME_ACADEMICO.md |
| Documento | Contenido | Unidad IS |
|---|---|---|
| 01_introduccion.md | Presentación del proyecto y contexto IS | I |
| 02_justificacion.md | Justificación académica, técnica y profesional | I-IV |
| 03_objetivos.md | Objetivo general + 7 objetivos específicos | I-IV |
| 04_alcance.md | Funcionalidades incluidas y excluidas | I-III |
| 05_arquitectura.md | Arquitecturas de negocios, aplicación, información y tecnológica | III |
| 06_silabo_mapping.md | Tabla de mapeo módulo ↔ unidad ↔ concepto | I-IV |
| 07_patrones_diseno.md | 6 patrones GoF con código y análisis IS | II-III |
| 08_diseno_datos.md | Diseño conceptual, lógico y físico de datos | IV |
Desarrollado como caso de estudio de Ingeniería del Software:
- Universidad: Universidad Tecnológica del Perú (UTP)
- Curso: Ingeniería del Software
- Período Académico: 2025-2026
╔══════════════════════════════════════════════════════════════════╗
║ SIFAC-SW — Sistema de Facturación Académica ║
║ Gestión del Ciclo de Vida del Software — Ingeniería del SW ║
╚══════════════════════════════════════════════════════════════════╝
Desarrollado con ❤️ en Java | Universidad Tecnológica del Perú






