# PhronCare

## 📌 Descripción
PhronCare es una plataforma back-office desarrollada en .NET 8 para la gestión de operaciones en ortopedia y logística médica.

Incluye módulos principales como:
- Presupuestos (Quotes)
- Expediciones (Expeditions)
- Stock médico con trazabilidad GS1
- Generación de documentos (PDF / Excel)

---

## 🧱 Arquitectura

El sistema sigue una arquitectura estricta por capas:

Data → Domain → Core → API → UI (Blazor)

Reglas clave:
- NO modificar modelos EF generados por scaffold (Models/Data)
- La lógica de negocio vive en Domain/Core
- Las entidades de dominio (E*) replican estructura de DB
- Core orquesta casos de uso y transacciones

---

## 📦 Estructura del proyecto

/src
 ├── 1.1 Data           → EF Models + Repositories
 ├── 1.2 Domain         → Entidades E*, contratos, enums
 ├── 1.3 Core           → Servicios de negocio
 ├── API                → Controllers / Endpoints
 ├── UIBlazor           → Frontend Blazor
 ├── Documents          → Templates PDF / Excel

---

## ⚙️ Requisitos

- .NET 8 SDK
- SQL Server
- Docker (opcional)
- Node.js (solo si se utiliza en contenedor o build específico)

---

## 🚀 Ejecución local

1. Configurar `appsettings.json` con la conexión a base de datos
2. Verificar que la base de datos esté disponible
3. Ejecutar la API:
   dotnet run (en proyecto API)
4. Ejecutar la UI Blazor:
   dotnet run (en proyecto UIBlazor)

Opcional:
- Ejecutar con Docker Compose si está configurado

---

## 🔌 Endpoints principales

- /api/quotes
- /api/expeditions
- /api/stock
- /api/lsstockscan

Swagger disponible en:
- /swagger

---

## 📄 Generación de documentos

El sistema soporta generación de:

- PDF (Quotes, Expeditions, Delivery Notes)
- Excel (exportaciones)

Implementación basada en:
- DocumentTemplateService
- Templates Razor
- PuppeteerSharp

---

## 🧠 Convenciones del proyecto

- Tablas: PascalCase
- Campos: snake_case
- Foreign Keys: *_id

Prefijos por módulo:
- PhS_ → Sales
- PhLSM_ → Logística y Stock Médico
- PhOH_ → Operations Hub

Otros:
- Entidades Domain: prefijo E (EQuoteHeader, etc.)
- DTOs separados de entidades
- No usar AutoMapper (usar EntityMapper)

---

## 🔄 Flujo de desarrollo

- API-First
- Stories pequeñas y atómicas
- Branching:
  - feature/{issue}-{desc}
  - fix/{issue}-{desc}

Commits:
- Conventional Commits
- Uso de “Closes #issue” en PR

---

## 📋 Stories y documentación

Las stories del proyecto siguen una plantilla estándar ubicada en:

/docs/story-template.md

Incluye:
- Objetivo
- Contexto
- Alcance
- Criterios de aceptación
- Decisiones de diseño

---

## ⚠️ Notas importantes

- No romper contratos existentes de la API
- Mantener consistencia con módulos existentes
- Priorizar claridad sobre complejidad
