sigo-entities 1.2.465 → 1.2.467

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,70 @@
1
+ # CLAUDE.md
2
+
3
+ Frontend: C:\Users\USER\Desktop\Michael\5_cobra\1_workspace\1_projects\SIGO\Frontend\sigo-frontend-2
4
+ Backend: C:\Users\USER\Desktop\Michael\5_cobra\1_workspace\1_projects\SIGO\Backend\sigo-backend
5
+ Sigo-entities: C:\Users\USER\Desktop\Michael\5_cobra\1_workspace\1_projects\SIGO\npm\sigo-entities
6
+
7
+ ## Descripción
8
+ Paquete NPM interno — contrato compartido de tipos, validación y transformación entre `sigo-frontend` y `sigo-backend`.
9
+
10
+ ## Comandos
11
+
12
+ ```bash
13
+ npm run build # Compila con tsup (CJS + ESM) y resuelve path aliases con tsc-alias
14
+ ```
15
+
16
+ ## Arquitectura
17
+
18
+ El paquete exporta todo desde `src/index.ts`, que re-exporta por dominio:
19
+
20
+ ```
21
+ src/
22
+ administracion/ — asistencia, personal, etc.
23
+ configuracion/ — usuarios, perfiles
24
+ logistica/ — bodega, items, almacen
25
+ operativa/ — mantenimientos, procesos
26
+ programados/ — tareas programadas
27
+ shared/ — DTOs, enums, types y utils reutilizables
28
+ v2/ — versión 2 de entidades/DTOs
29
+ ```
30
+
31
+ Cada dominio tiene su propio `index.ts` que agrega exports de sus submódulos. El entry point es `dist/index.js` (CJS) / `dist/index.mjs` (ESM) con tipos en `dist/index.d.ts`.
32
+
33
+ ## Patrón de entidades y DTOs
34
+
35
+ **ENTITY**: Representa un documento completo de una colección MongoDB.
36
+ **DTO**: Representa una sub-estructura reutilizable o forma de datos anidados.
37
+
38
+ Ejemplo de propiedad con el patrón completo:
39
+
40
+ ```ts
41
+ @Expose()
42
+ @IsDefined({ message: "El campo X es obligatorio" })
43
+ @IsString()
44
+ @Length(0, 75)
45
+ @Transform(({ value }) => value?.toUpperCase().trim())
46
+ Codigo: string = ''
47
+ ```
48
+
49
+ Patrones clave:
50
+
51
+ - Todas las propiedades se inicializan con valores por defecto (strings vacíos, `0`, `new Class()`)
52
+ - Objetos anidados usan `@Type(() => DtoClass)` + `@ValidateNested()`
53
+ - Arrays usan `@IsArray()` + `@ValidateNested({ each: true })`
54
+ - Texto normalmente se transforma con `.toUpperCase().trim()`
55
+
56
+ ## Path aliases (tsconfig)
57
+
58
+ ```json
59
+ "@shared-dto/*" → "src/shared/dto/*"
60
+ "@shared-types/*" → "src/shared/types/*"
61
+ "@shared-enums/*" → "src/shared/enums/*"
62
+ ```
63
+
64
+ ## Convenciones importantes
65
+
66
+ - Cada colección MongoDB tiene exactamente una `ENTITY`
67
+ - Naming: `[Nombre]ENTITY` y `[Nombre]DTO`
68
+ - Este paquete es la única fuente de verdad para los tipos — no duplicar en front ni back
69
+ - Cualquier cambio en una entidad impacta ambos proyectos — cuidado con breaking changes
70
+ - `reflect-metadata` se importa en el `src/index.ts` raíz (requerido por class-validator/transformer)
@@ -0,0 +1,21 @@
1
+ {
2
+ "allow": [
3
+ "Read(//c/Users/USER/Desktop/Michael/5_cobra/1_workspace/1_projects/SIGO/Frontend/sigo-frontend-2/**)",
4
+ "Read(//c/Users/USER/Desktop/Michael/5_cobra/1_workspace/1_projects/SIGO/Backend/sigo-backend/**)",
5
+ "Read(//c/Users/USER/Desktop/Michael/5_cobra/1_workspace/1_projects/SIGO/npm/sigo-entities/**)",
6
+ "Read(//c/Users/USER/Desktop/Michael/5_cobra/1_workspace/1_projects/SIGO/npm/sigo-package/**)",
7
+ "Read(.env)",
8
+ "Read(.env.*)"
9
+ ],
10
+ "env": {
11
+ "SIGO_FRONTEND": "C:/Users/USER/Desktop/Michael/5_cobra/1_workspace/1_projects/SIGO/Frontend/sigo-frontend-2",
12
+ "SIGO_BACKEND": "C:/Users/USER/Desktop/Michael/5_cobra/1_workspace/1_projects/SIGO/Backend/sigo-backend",
13
+ "SIGO_ENTITIES": "C:/Users/USER/Desktop/Michael/5_cobra/1_workspace/1_projects/SIGO/npm/sigo-entities"
14
+ },
15
+ "permissions": {
16
+ "deny": [
17
+ "Read(node_modules/**)",
18
+ "Read(dist/**)"
19
+ ]
20
+ }
21
+ }
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: mdl-administracion
3
+ description: >
4
+ Dominio administracion/ — base de datos MDL_ADMINISTRACION. Usar cuando se trabaje con
5
+ órdenes de trabajo (OT), asistencia, mano de obra, precios, baremos, documentación PEX,
6
+ zonas de trabajo, o cualquier entidad/DTO dentro de src/administracion/.
7
+ ---
8
+
9
+ # Skill: MDL_ADMINISTRACION
10
+
11
+ Carpeta: `src/administracion/`
12
+ Base de datos MongoDB: **MDL_ADMINISTRACION**
13
+
14
+ También contiene parte de **MDL_CATALOGO** — datos de referencia como precios, tipos y unidades.
15
+
16
+ ## Sub-dominios principales
17
+
18
+ | Carpeta | Contenido |
19
+ |---|---|
20
+ | `ot/` | Órdenes de Trabajo — vigencia, estado |
21
+ | `otglobal/` | OT globales |
22
+ | `asistencia/` | Registro de asistencia y resumen |
23
+ | `mano-obra-unidad-obra/` | Relación mano de obra ↔ unidad de obra |
24
+ | `mano_obra_mtto/` | Mano de obra en mantenimiento |
25
+ | `precio-mano-obra/` | Precios de MO (global, empresa, precio actual) — **MDL_CATALOGO** |
26
+ | `precio material/` | Precios de materiales — **MDL_CATALOGO** |
27
+ | `precio especialidad/` | Precios por especialidad y agencia — **MDL_CATALOGO** |
28
+ | `unidad_obra/` | Catálogo de unidades de obra — **MDL_CATALOGO** |
29
+ | `unidad obra material/` | Materiales por unidad de obra — **MDL_CATALOGO** |
30
+ | `zona trabajo/` | Zonas de trabajo y contratos OT |
31
+ | `documentacion-pex/` | Documentación de procesos PEX |
32
+ | `documentacion-baremo-pex/` | Baremos para documentación PEX |
33
+ | `tipo movil/` | Tipos de vehículo/móvil — **MDL_CATALOGO** |
34
+ | `tipo_clave/` | Tipos de clave — **MDL_CATALOGO** |
35
+ | `rm_zona_actividad/` | Relación RM zona-actividad |
36
+ | `ItemExtra/` | Ítems extra (SKU, proveedor) |
37
+ | `EstadoInterno/` | Estados internos de OT |
38
+ | `permisos-app/` | Permisos de la app |
39
+ | `mail structure/` | Estructura de destinatarios de mail |
40
+ | `key integracion/` | Claves de integración externa |
41
+ | `PrecioAgencia_mam_onnet/` | Precios de agencia MAM/Onnet |
42
+ | `chile 9512 paquetizado mano obra/` | Chile: MO paquetizada contrato 9512 |
43
+ | `chile 9512 paquetizado material/` | Chile: material paquetizado contrato 9512 |
44
+
45
+ ## Naming
46
+
47
+ - Entidades: `[Nombre]ENTITY` — representan una colección MongoDB completa
48
+ - DTOs: `[Nombre]DTO` — sub-estructuras anidadas o reutilizables
49
+ - Ejemplo: `OtENTITY`, `VigenciaOtDTO`, `PrecioManoObraENTITY`, `PrecioEmpresaDTO`
50
+
51
+ ## Ubicación de archivos
52
+
53
+ ```
54
+ src/administracion/
55
+ └── [nombre-modulo]/
56
+ └── shared/
57
+ ├── [nombre].entity.ts ← ENTITY principal
58
+ └── dto/
59
+ └── [nombre]-dto.ts ← DTOs anidados
60
+ ```
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: mdl-configuracion
3
+ description: >
4
+ Dominio configuracion/ — base de datos MDL_CONFIGURACION. Usar cuando se trabaje con
5
+ usuarios, perfiles, empresas, sistema, notificaciones, cargos, contratos OT,
6
+ o cualquier entidad/DTO dentro de src/configuracion/.
7
+ ---
8
+
9
+ # Skill: MDL_CONFIGURACION
10
+
11
+ Carpeta: `src/configuracion/`
12
+ Base de datos MongoDB: **MDL_CONFIGURACION**
13
+
14
+ ## Sub-dominios principales
15
+
16
+ | Carpeta | Contenido |
17
+ |---|---|
18
+ | `usuarios/` | Usuarios del sistema |
19
+ | `usuarios autoinventario/` | Usuarios del módulo autoinventario |
20
+ | `perfiles/` | Perfiles de acceso y sistemas asociados |
21
+ | `personal/` | Datos del personal |
22
+ | `cargo personal/` | Cargos/roles del personal |
23
+ | `empresa/` | Empresas (datos generales, GIA, grupo empresa, representante legal, tipo) |
24
+ | `sistema/` | Configuración general del sistema |
25
+ | `opcion sistema/` | Opciones del sistema |
26
+ | `tipo opcion sistema/` | Tipos de opciones del sistema |
27
+ | `tipo especialidad mo/` | Tipos de especialidad de mano de obra |
28
+ | `tipo clave/` | Tipos de clave de configuración |
29
+ | `contrato ot/` | Contratos de órdenes de trabajo |
30
+ | `notificaciones/` | Notificaciones (data adicional) |
31
+ | `scraping credential/` | Credenciales para scraping |
32
+ | `theme config country/` | Configuración de tema por país |
33
+
34
+ ## Naming
35
+
36
+ - Entidades: `[Nombre]ENTITY`
37
+ - DTOs: `[Nombre]DTO`
38
+ - Ejemplo: `UsuarioENTITY`, `EmpresaENTITY`, `DatosGeneralesDTO`, `SistemaDTO`, `PerfilENTITY`
39
+
40
+ ## Ubicación de archivos
41
+
42
+ ```
43
+ src/configuracion/
44
+ └── [nombre-modulo]/
45
+ └── shared/
46
+ ├── [nombre].entity.ts
47
+ └── dto/
48
+ └── [nombre]-dto.ts
49
+ ```
@@ -0,0 +1,71 @@
1
+ ---
2
+ name: ope-im
3
+ description: >
4
+ Dominio operativa/ — base de datos OPE_IM. Usar cuando se trabaje con
5
+ mantenimientos, procesos de integración externa (TOA, WAOO, WIN, Fibramas, Onnet,
6
+ Movistar, Somacyl, Tuves, TDC), órdenes de liquidación, order stock,
7
+ o cualquier entidad/DTO dentro de src/operativa/.
8
+ ---
9
+
10
+ # Skill: OPE_IM
11
+
12
+ Carpeta: `src/operativa/`
13
+ Base de datos MongoDB: **OPE_IM**
14
+
15
+ Contiene integraciones con sistemas externos de operadores de telecomunicaciones y procesos de mantenimiento.
16
+
17
+ ## Sub-dominios principales
18
+
19
+ ### `mantenimientos/`
20
+ Entidades de mantenimiento operativo.
21
+
22
+ ### `procesos/`
23
+ Integraciones con sistemas externos por operador:
24
+
25
+ | Carpeta | Operador / Sistema |
26
+ |---|---|
27
+ | `TOA orden liquidacion/` | TOA — órdenes de liquidación |
28
+ | `TOA orden liquidacion_db/` | TOA — órdenes de liquidación (versión BD) |
29
+ | `TOA Claro order stock/` | TOA Claro — order stock |
30
+ | `TOA order stock/` | TOA — order stock genérico |
31
+ | `toa_claro/` | TOA Claro (scraper + shared) |
32
+ | `toa_movistar/` | TOA Movistar |
33
+ | `toa_movistar_db/` | TOA Movistar (versión BD) |
34
+ | `baremos_toa/` | Baremos TOA (Chile + shared) |
35
+ | `liquidadas_toa/` | Órdenes TOA liquidadas |
36
+ | `valorizadas_toa/` | Órdenes TOA valorizadas |
37
+ | `onnet_fibra/` | Onnet Fibra (DTOs + utils) |
38
+ | `fibramas_order/` | Fibramas — órdenes |
39
+ | `fibramas_order_db/` | Fibramas — órdenes (versión BD) |
40
+ | `win_order/` | WIN — órdenes |
41
+ | `win_order_db/` | WIN — órdenes (versión BD) |
42
+ | `waoo_order_stock/` | WAOO — order stock |
43
+ | `cliente_waoo/` | WAOO — clientes |
44
+ | `somacyl_order/` | Somacyl — órdenes |
45
+ | `tuves/` | Tuves |
46
+ | `tuves_order_stock/` | Tuves — order stock |
47
+ | `tdc/` | TDC (Chile — DTOs + interfaces) |
48
+ | `stb_dth_toaperu/` | STB DTH TOA Perú |
49
+ | `order stock/` | Order stock genérico |
50
+ | `request number TTL/` | Request number TTL |
51
+
52
+ ## Naming
53
+
54
+ - Entidades: `[Nombre]ENTITY`
55
+ - DTOs: `[Nombre]DTO`
56
+ - Ejemplo: `ToaOrdenLiquidacionENTITY`, `BaremoToaENTITY`, `OnnetFibraENTITY`
57
+
58
+ ## Ubicación de archivos
59
+
60
+ ```
61
+ src/operativa/
62
+ ├── mantenimientos/
63
+ │ └── shared/
64
+ │ └── [nombre].entity.ts
65
+ └── procesos/
66
+ └── [nombre-operador]/
67
+ └── shared/
68
+ ├── [nombre].entity.ts
69
+ └── dto/
70
+ └── [nombre]-dto.ts
71
+ ```
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: ope-logistica
3
+ description: >
4
+ Dominio logistica/ — base de datos OPE_LOGISTICA. Usar cuando se trabaje con
5
+ almacenes, bodega, stock, inventario, movimientos de almacén, consumo de material,
6
+ devoluciones, ítems, kits, o cualquier entidad/DTO dentro de src/logistica/.
7
+ ---
8
+
9
+ # Skill: OPE_LOGISTICA
10
+
11
+ Carpeta: `src/logistica/`
12
+ Base de datos MongoDB: **OPE_LOGISTICA**
13
+
14
+ También contiene parte de **MDL_CATALOGO** — catálogo de ítems, tipos de almacén, unidades de medida.
15
+
16
+ ## Sub-dominios principales
17
+
18
+ | Carpeta | Contenido |
19
+ |---|---|
20
+ | `almacen/` | Almacenes |
21
+ | `almacen extra/` | Almacenes extra |
22
+ | `bodega/` | Bodegas |
23
+ | `stock almacen/` | Stock en almacén |
24
+ | `stock almacen equipos/` | Stock de equipos en almacén |
25
+ | `stock personal/` | Stock asignado a personal |
26
+ | `stock personal equipos/` | Stock de equipos del personal |
27
+ | `movimiento almacen/` | Movimientos de almacén |
28
+ | `ingreso almacen/` | Ingresos a almacén |
29
+ | `salida almacen/` | Salidas de almacén |
30
+ | `devolucion almacen/` | Devoluciones de almacén |
31
+ | `consumo material/` | Consumo de material (incluye variante Alemania) |
32
+ | `consumos P117/` | Consumos protocolo P117 |
33
+ | `kitconsumo/` | Kits de consumo |
34
+ | `autoinventario/` | Autoinventario |
35
+ | `transaccion folios/` | Transacciones con folios |
36
+ | `atencion ordenes liquidadas/` | Atención de órdenes liquidadas |
37
+ | `items/` | Catálogo de ítems (incluye variante Alemania) — **MDL_CATALOGO** |
38
+ | `gran familia item/` | Gran familia de ítems — **MDL_CATALOGO** |
39
+ | `tipo almacen/` | Tipos de almacén — **MDL_CATALOGO** |
40
+ | `tipo movimiento almacen/` | Tipos de movimiento de almacén — **MDL_CATALOGO** |
41
+ | `tipo stock/` | Tipos de stock — **MDL_CATALOGO** |
42
+ | `unidad medida/` | Unidades de medida — **MDL_CATALOGO** |
43
+ | `procesos/navisionpreorden/` | Pre-órdenes Navision (DTOs, enums, requestDtos) |
44
+
45
+ ## Naming
46
+
47
+ - Entidades: `[Nombre]ENTITY`
48
+ - DTOs: `[Nombre]DTO`
49
+ - Ejemplo: `AlmacenENTITY`, `AlmacenDTO`, `StockAlmacenENTITY`, `MovimientoAlmacenENTITY`
50
+
51
+ ## Ubicación de archivos
52
+
53
+ ```
54
+ src/logistica/
55
+ └── [nombre-modulo]/
56
+ └── shared/
57
+ ├── [nombre].entity.ts
58
+ └── dto/
59
+ └── [nombre]-dto.ts
60
+ ```
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: ope-pex
3
+ description: >
4
+ Dominio programados/ — base de datos OPE_PEX. Usar cuando se trabaje con
5
+ procesos programados de ejecución: obra, trabajo, cubicación, macroobra,
6
+ reservas (MO y material), reportes de producción, liberación de pagos,
7
+ mantenimientos de catálogos (agencia, cuadrilla, periodo, presupuesto),
8
+ o cualquier entidad/DTO dentro de src/programados/.
9
+ ---
10
+
11
+ # Skill: OPE_PEX
12
+
13
+ Carpeta: `src/programados/`
14
+ Base de datos MongoDB: **OPE_PEX**
15
+
16
+ Procesos programados de ejecución — el dominio más grande del paquete.
17
+
18
+ ## Sub-dominios principales
19
+
20
+ ### `Reportes/`
21
+
22
+ | Carpeta | Contenido |
23
+ |---|---|
24
+ | `LiberacionDePagos/` | Reporte de liberación de pagos (DTOs + requestDtos) |
25
+ | `ReporteProduccion/` | Reporte de producción (Alemania, Chile, Colombia — baremos y resumen) |
26
+ | `RptProduccionCurso_Baremos_Fases/` | Reporte producción en curso con baremos y fases |
27
+
28
+ ### `mantenimientos/`
29
+ Catálogos y configuraciones base de OPE_PEX:
30
+
31
+ | Carpeta | Contenido |
32
+ |---|---|
33
+ | `agencia/` | Agencias |
34
+ | `area_gom/` | Áreas GOM |
35
+ | `centro costos/` | Centros de costo |
36
+ | `contrato-pagos/` | Contratos de pago (Alemania) |
37
+ | `cuadrilla/` | Cuadrillas de trabajo |
38
+ | `mano obra global/` | Mano de obra global |
39
+ | `mano-obra-baremo/` | Mano de obra × baremo |
40
+ | `periodo/` | Períodos |
41
+ | `presupuesto-ot/` | Presupuesto de OT |
42
+ | `rm actividad/` | RM actividad |
43
+ | `rm comuna/` | RM comuna |
44
+ | `rm mano obra/` | RM mano de obra |
45
+ | `rm paquetizado/` | RM paquetizado |
46
+ | `rm-material/` | RM material |
47
+ | `rm-zonas-actividad/` | RM zonas de actividad |
48
+ | `tipo actividad mo/` | Tipos de actividad MO |
49
+ | `tipo obra/` | Tipos de obra |
50
+
51
+ ### `procesos/`
52
+ Procesos de ejecución programada:
53
+
54
+ | Carpeta | Contenido |
55
+ |---|---|
56
+ | `obra/` | Obra (Alemania AL02/AL04, Chile 9512, Colombia 9612, Perú 9112, shared) |
57
+ | `trabajo/` | Trabajo (Alemania + shared) |
58
+ | `macroobra/` | Macro-obra (Chile, Perú, shared) |
59
+ | `trabajoMacroObra/` | Trabajo en macro-obra (Alemania + shared) |
60
+ | `cubicacion/` | Cubicación (Alemania, Chile, Colombia, Perú, shared) |
61
+ | `reservaManoObra/` | Reserva de mano de obra (Alemania + shared) |
62
+ | `reservaManoObraRegularizacion/` | Regularización de reserva MO |
63
+ | `reservaMaterial/` | Reserva de material |
64
+ | `precioContratistaIssue/` | Precio contratista — issues (Alemania AL02 + shared) |
65
+ | `precioContratistaMO/` | Precio contratista MO (Alemania AL02/AL04 + shared) |
66
+ | `precioContratistaMaterial/` | Precio contratista material |
67
+ | `gom/` | GOM (Colombia + shared) |
68
+ | `Issue/` | Issues generales |
69
+ | `addressList_AL04/` | Lista de direcciones AL04 (Alemania) |
70
+ | `data-migrations/` | Migraciones de datos |
71
+ | `model mo sql/` | Modelo MO SQL (Perú) |
72
+ | `model obra sql/` | Modelo obra SQL (Perú) |
73
+
74
+ ## Naming
75
+
76
+ - Entidades: `[Nombre]ENTITY`
77
+ - DTOs: `[Nombre]DTO`
78
+ - Ejemplo: `ObraENTITY`, `TrabajoENTITY`, `CubicacionENTITY`, `ReservaManoObraENTITY`
79
+
80
+ ## Patrón por país
81
+
82
+ Muchos módulos tienen variantes por país dentro del mismo proceso:
83
+
84
+ ```
85
+ procesos/obra/
86
+ ├── alemania/AL02/ ← contrato alemán AL02
87
+ ├── alemania/AL04/ ← contrato alemán AL04
88
+ ├── chile/9512/ ← contrato chileno 9512
89
+ ├── colombia/9612/ ← contrato colombiano 9612
90
+ ├── peru/9112/ ← contrato peruano 9112
91
+ └── shared/ ← estructura base compartida
92
+ ```
93
+
94
+ ## Ubicación de archivos
95
+
96
+ ```
97
+ src/programados/
98
+ ├── Reportes/[nombre]/shared/(dto|request_dto)/
99
+ ├── mantenimientos/[nombre]/shared/(entity|dto)/
100
+ └── procesos/[nombre]/
101
+ ├── shared/
102
+ │ ├── [nombre].entity.ts
103
+ │ ├── dto/
104
+ │ └── requestDto/
105
+ └── [pais]/dto/
106
+ ```
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: shared-dtos
3
+ description: >
4
+ Dominio shared/ — DTOs, enums, types y utils reutilizables en todos los dominios.
5
+ Usar cuando se necesite un DTO transversal como CodigoNombre, UsuarioDTO, o cualquier
6
+ estructura que se repite en múltiples colecciones/módulos. También contiene enums
7
+ globales, tipos TypeScript y utilidades de transformación.
8
+ ---
9
+
10
+ # Skill: Shared DTOs
11
+
12
+ Carpeta: `src/shared/`
13
+ **No tiene base de datos propia** — es código reutilizado por todos los dominios.
14
+
15
+ ## Sub-carpetas
16
+
17
+ ### `dto/`
18
+ DTOs transversales usados en múltiples entidades y dominios.
19
+
20
+ Ejemplos clave:
21
+
22
+ | DTO | Forma | Uso |
23
+ |---|---|---|
24
+ | `CodigoNombre` | `{ Codigo: string, Nombre: string }` | Referencia genérica a catálogos |
25
+ | `UsuarioDTO` | datos del usuario | Auditoría, asignaciones |
26
+ | `AlmacenDTO` | datos de almacén | Referencia a almacenes en otros módulos |
27
+ | `AutoinventarioDTO` | — | Inventario en múltiples dominios |
28
+ | `ZonasDTO` | — | Zonas de trabajo transversales |
29
+
30
+ > Si una estructura `{ Codigo, Nombre }` aparece en varios módulos, usar `CodigoNombre` de shared en vez de redefinirla.
31
+
32
+ ### `enums/`
33
+ Enums globales del sistema:
34
+
35
+ | Archivo | Contenido |
36
+ |---|---|
37
+ | `RequeridoEnum.ts` | Enum de campos requeridos |
38
+ | `StateInternalOrder.ts` | Estados de órdenes internas |
39
+ | `StateInternalOrderTOA.ts` | Estados de órdenes TOA |
40
+
41
+ ### `types/`
42
+ Tipos TypeScript globales:
43
+
44
+ | Archivo | Contenido |
45
+ |---|---|
46
+ | `sistema-recurso.ts` | Tipo de recurso del sistema |
47
+ | `state-inventory.ts` | Tipo de estado de inventario |
48
+
49
+ ### `utils/`
50
+ Utilidades de transformación usadas en decoradores `@Transform`:
51
+
52
+ | Utilidad | Función |
53
+ |---|---|
54
+ | `trimAndUpperCaseString` | `.trim().toUpperCase()` — la más usada |
55
+ | `smartDateTransformer` | Transforma strings a Date de forma segura |
56
+ | `convertStringsToDates` | Convierte strings ISO a Date en objetos |
57
+ | `convertTypeNumber` | Fuerza conversión a número |
58
+ | `forceString` | Fuerza conversión a string |
59
+ | `transformToDateIfEmpty` | Date con fallback si vacío |
60
+ | `enumToArray` | Convierte enum a array |
61
+ | `entity_generator` | Genera instancias de entidad con defaults |
62
+ | `entity_generator_under_hyphen` | Variante con naming hyphen |
63
+ | `validarYFormatearDatos` | Valida y formatea datos |
64
+ | `validateArrayBody` | Valida arrays en body |
65
+
66
+ ## Path aliases
67
+
68
+ ```ts
69
+ import { ... } from '@shared-dto/nombre-dto' // src/shared/dto/
70
+ import { ... } from '@shared-types/nombre-type' // src/shared/types/
71
+ import { ... } from '@shared-enums/nombre-enum' // src/shared/enums/
72
+ ```
73
+
74
+ ## Regla
75
+
76
+ Antes de crear un DTO nuevo, revisar si ya existe en `shared/dto/`. Si la misma forma de datos aparece en ≥2 módulos distintos, pertenece a `shared/`.
package/dist/index.d.mts CHANGED
@@ -861,7 +861,8 @@ declare enum EstadoActividad {
861
861
 
862
862
  declare enum AddressClassification {
863
863
  UNIFAMILIAR = "UNIFAMILIAR",
864
- MULTIFAMILIAR = "MULTIFAMILIAR"
864
+ MULTIFAMILIAR = "MULTIFAMILIAR",
865
+ NO_DEFINIDO = "NO DEFINIDO"
865
866
  }
866
867
 
867
868
  declare class MailStructureENTITY {
package/dist/index.d.ts CHANGED
@@ -861,7 +861,8 @@ declare enum EstadoActividad {
861
861
 
862
862
  declare enum AddressClassification {
863
863
  UNIFAMILIAR = "UNIFAMILIAR",
864
- MULTIFAMILIAR = "MULTIFAMILIAR"
864
+ MULTIFAMILIAR = "MULTIFAMILIAR",
865
+ NO_DEFINIDO = "NO DEFINIDO"
865
866
  }
866
867
 
867
868
  declare class MailStructureENTITY {
package/dist/index.js CHANGED
@@ -4704,6 +4704,7 @@ var EstadoActividad = /* @__PURE__ */ ((EstadoActividad2) => {
4704
4704
  var AddressClassification = /* @__PURE__ */ ((AddressClassification2) => {
4705
4705
  AddressClassification2["UNIFAMILIAR"] = "UNIFAMILIAR";
4706
4706
  AddressClassification2["MULTIFAMILIAR"] = "MULTIFAMILIAR";
4707
+ AddressClassification2["NO_DEFINIDO"] = "NO DEFINIDO";
4707
4708
  return AddressClassification2;
4708
4709
  })(AddressClassification || {});
4709
4710
 
@@ -49285,6 +49286,35 @@ var itemsCanalizacion = [
49285
49286
  "47112939",
49286
49287
  "40266013"
49287
49288
  ];
49289
+ function IsValidCantidad(itemsCanalizacion2, validationOptions) {
49290
+ return function(object, propertyName) {
49291
+ (0, import_class_validator772.registerDecorator)({
49292
+ name: "isValidCantidad",
49293
+ target: object.constructor,
49294
+ propertyName,
49295
+ constraints: [itemsCanalizacion2],
49296
+ options: validationOptions,
49297
+ validator: {
49298
+ validate(value, args) {
49299
+ const [items] = args.constraints;
49300
+ const dto = args.object;
49301
+ if (items.includes(dto.codigo)) {
49302
+ return value >= 1;
49303
+ }
49304
+ return value === 1;
49305
+ },
49306
+ defaultMessage(args) {
49307
+ const [items] = args.constraints;
49308
+ const dto = args.object;
49309
+ if (items.includes(dto.codigo)) {
49310
+ return "La cantidad m\xEDnima es 1";
49311
+ }
49312
+ return "La cantidad debe ser exactamente 1";
49313
+ }
49314
+ }
49315
+ });
49316
+ };
49317
+ }
49288
49318
  var MaterialesAltasNVTDTO = class {
49289
49319
  codigo = "";
49290
49320
  descripcion = "";
@@ -49307,10 +49337,7 @@ __decorateClass([
49307
49337
  (0, import_class_validator772.IsDefined)({ message: "El campo quantity es obligatorio" }),
49308
49338
  (0, import_class_transformer795.Type)(() => Number),
49309
49339
  (0, import_class_validator772.IsNumber)(),
49310
- (0, import_class_validator772.ValidateIf)((o) => itemsCanalizacion.includes(o.codigo)),
49311
- (0, import_class_validator772.Min)(1, { message: "La cantidad m\xEDnima es 1" }),
49312
- (0, import_class_validator772.ValidateIf)((o) => !itemsCanalizacion.includes(o.codigo)),
49313
- (0, import_class_validator772.Equals)(1, { message: "La cantidad debe ser exactamente 1" })
49340
+ IsValidCantidad(itemsCanalizacion)
49314
49341
  ], MaterialesAltasNVTDTO.prototype, "cantidad", 2);
49315
49342
  __decorateClass([
49316
49343
  (0, import_class_transformer795.Expose)(),
package/dist/index.mjs CHANGED
@@ -3801,6 +3801,7 @@ var EstadoActividad = /* @__PURE__ */ ((EstadoActividad2) => {
3801
3801
  var AddressClassification = /* @__PURE__ */ ((AddressClassification2) => {
3802
3802
  AddressClassification2["UNIFAMILIAR"] = "UNIFAMILIAR";
3803
3803
  AddressClassification2["MULTIFAMILIAR"] = "MULTIFAMILIAR";
3804
+ AddressClassification2["NO_DEFINIDO"] = "NO DEFINIDO";
3804
3805
  return AddressClassification2;
3805
3806
  })(AddressClassification || {});
3806
3807
 
@@ -48718,12 +48719,41 @@ __decorateClass([
48718
48719
 
48719
48720
  // src/operativa/procesos/altas_nvt_order/shared/dto/materiales-altas-nvt-dto.ts
48720
48721
  import { Expose as Expose768, Type as Type477 } from "class-transformer";
48721
- import { IsDefined as IsDefined263, IsString as IsString636, IsNumber as IsNumber506, Min as Min342, ValidateIf as ValidateIf7, Equals } from "class-validator";
48722
+ import { IsDefined as IsDefined263, IsString as IsString636, IsNumber as IsNumber506, registerDecorator } from "class-validator";
48722
48723
  var itemsCanalizacion = [
48723
48724
  "40261082",
48724
48725
  "47112939",
48725
48726
  "40266013"
48726
48727
  ];
48728
+ function IsValidCantidad(itemsCanalizacion2, validationOptions) {
48729
+ return function(object, propertyName) {
48730
+ registerDecorator({
48731
+ name: "isValidCantidad",
48732
+ target: object.constructor,
48733
+ propertyName,
48734
+ constraints: [itemsCanalizacion2],
48735
+ options: validationOptions,
48736
+ validator: {
48737
+ validate(value, args) {
48738
+ const [items] = args.constraints;
48739
+ const dto = args.object;
48740
+ if (items.includes(dto.codigo)) {
48741
+ return value >= 1;
48742
+ }
48743
+ return value === 1;
48744
+ },
48745
+ defaultMessage(args) {
48746
+ const [items] = args.constraints;
48747
+ const dto = args.object;
48748
+ if (items.includes(dto.codigo)) {
48749
+ return "La cantidad m\xEDnima es 1";
48750
+ }
48751
+ return "La cantidad debe ser exactamente 1";
48752
+ }
48753
+ }
48754
+ });
48755
+ };
48756
+ }
48727
48757
  var MaterialesAltasNVTDTO = class {
48728
48758
  codigo = "";
48729
48759
  descripcion = "";
@@ -48746,10 +48776,7 @@ __decorateClass([
48746
48776
  IsDefined263({ message: "El campo quantity es obligatorio" }),
48747
48777
  Type477(() => Number),
48748
48778
  IsNumber506(),
48749
- ValidateIf7((o) => itemsCanalizacion.includes(o.codigo)),
48750
- Min342(1, { message: "La cantidad m\xEDnima es 1" }),
48751
- ValidateIf7((o) => !itemsCanalizacion.includes(o.codigo)),
48752
- Equals(1, { message: "La cantidad debe ser exactamente 1" })
48779
+ IsValidCantidad(itemsCanalizacion)
48753
48780
  ], MaterialesAltasNVTDTO.prototype, "cantidad", 2);
48754
48781
  __decorateClass([
48755
48782
  Expose768(),
@@ -49043,7 +49070,7 @@ __decorateClass([
49043
49070
  ], BitacoraAltasNVTDTO.prototype, "usuario", 2);
49044
49071
 
49045
49072
  // src/operativa/procesos/altas_nvt_order/shared/dto/mo-altas-nvt-dto.ts
49046
- import { IsDefined as IsDefined270, IsNotEmpty as IsNotEmpty461, IsNumber as IsNumber510, IsString as IsString642, Min as Min343 } from "class-validator";
49073
+ import { IsDefined as IsDefined270, IsNotEmpty as IsNotEmpty461, IsNumber as IsNumber510, IsString as IsString642, Min as Min342 } from "class-validator";
49047
49074
  import { Expose as Expose776, Type as Type480 } from "class-transformer";
49048
49075
  var MOAltasNVTDTO = class {
49049
49076
  code;
@@ -49067,14 +49094,14 @@ __decorateClass([
49067
49094
  Expose776(),
49068
49095
  IsDefined270(),
49069
49096
  IsNumber510(),
49070
- Min343(0),
49097
+ Min342(0),
49071
49098
  Type480(() => Number)
49072
49099
  ], MOAltasNVTDTO.prototype, "price", 2);
49073
49100
  __decorateClass([
49074
49101
  Expose776(),
49075
49102
  IsDefined270(),
49076
49103
  IsNumber510(),
49077
- Min343(0),
49104
+ Min342(0),
49078
49105
  Type480(() => Number)
49079
49106
  ], MOAltasNVTDTO.prototype, "quantity", 2);
49080
49107
 
@@ -50338,7 +50365,7 @@ import {
50338
50365
  IsNumber as IsNumber514,
50339
50366
  IsDate as IsDate185,
50340
50367
  IsEnum as IsEnum50,
50341
- Min as Min344
50368
+ Min as Min343
50342
50369
  } from "class-validator";
50343
50370
  import "reflect-metadata";
50344
50371
  var UbicacionBantelDTO = class {
@@ -50438,7 +50465,7 @@ __decorateClass([
50438
50465
  IsDefined274({ message: "El campo quantity es obligatorio" }),
50439
50466
  Type484(() => Number),
50440
50467
  IsNumber514(),
50441
- Min344(1, { message: "La cantidad minima es $constraint1" })
50468
+ Min343(1, { message: "La cantidad minima es $constraint1" })
50442
50469
  ], MaterialesBantelDTO.prototype, "cantidad", 2);
50443
50470
  __decorateClass([
50444
50471
  Expose782(),
@@ -51547,7 +51574,7 @@ __decorateClass([
51547
51574
 
51548
51575
  // src/operativa/procesos/claro_peru9112/shared/dto/materiales-peru9112-claro-dto.ts
51549
51576
  import { Expose as Expose790, Type as Type487 } from "class-transformer";
51550
- import { IsDefined as IsDefined280, IsString as IsString656, IsNumber as IsNumber519, Min as Min345, IsEnum as IsEnum53 } from "class-validator";
51577
+ import { IsDefined as IsDefined280, IsString as IsString656, IsNumber as IsNumber519, Min as Min344, IsEnum as IsEnum53 } from "class-validator";
51551
51578
  import "reflect-metadata";
51552
51579
  var MaterialesPeru9112ClaroDTO = class {
51553
51580
  codigo = "";
@@ -51572,7 +51599,7 @@ __decorateClass([
51572
51599
  IsDefined280({ message: "El campo quantity es obligatorio" }),
51573
51600
  Type487(() => Number),
51574
51601
  IsNumber519(),
51575
- Min345(1, { message: "La cantidad minima es $constraint1" })
51602
+ Min344(1, { message: "La cantidad minima es $constraint1" })
51576
51603
  ], MaterialesPeru9112ClaroDTO.prototype, "cantidad", 2);
51577
51604
  __decorateClass([
51578
51605
  Expose790(),
@@ -52207,7 +52234,7 @@ import { IsDefined as IsDefined288, IsEnum as IsEnum56, IsObject as IsObject15,
52207
52234
  import { Expose as Expose800, Type as Type490 } from "class-transformer";
52208
52235
 
52209
52236
  // src/v2/dtos/AuthUser.ts
52210
- import { IsBoolean as IsBoolean68, IsDefined as IsDefined286, IsEmail as IsEmail6, IsString as IsString662, IsUUID as IsUUID23, ValidateIf as ValidateIf8 } from "class-validator";
52237
+ import { IsBoolean as IsBoolean68, IsDefined as IsDefined286, IsEmail as IsEmail6, IsString as IsString662, IsUUID as IsUUID23, ValidateIf as ValidateIf7 } from "class-validator";
52211
52238
  import { Expose as Expose798, Transform as Transform114 } from "class-transformer";
52212
52239
  var AuthUserDto = class {
52213
52240
  email;
@@ -52255,7 +52282,7 @@ __decorateClass([
52255
52282
  ], AuthUserDto.prototype, "root", 2);
52256
52283
  __decorateClass([
52257
52284
  IsDefined286({ message: "El campo Perfil es obligatorio" }),
52258
- ValidateIf8((_, value) => value !== ""),
52285
+ ValidateIf7((_, value) => value !== ""),
52259
52286
  IsUUID23("4", { message: "El campo Perfil debe ser un UUID v4 v\xE1lido." }),
52260
52287
  Expose798()
52261
52288
  ], AuthUserDto.prototype, "profileId", 2);
@@ -52548,7 +52575,7 @@ __decorateClass([
52548
52575
  ], CompanyDto.prototype, "countryId", 2);
52549
52576
 
52550
52577
  // src/v2/dtos/UpdateUser.ts
52551
- import { IsDefined as IsDefined295, IsUUID as IsUUID29, ValidateIf as ValidateIf9 } from "class-validator";
52578
+ import { IsDefined as IsDefined295, IsUUID as IsUUID29, ValidateIf as ValidateIf8 } from "class-validator";
52552
52579
  import { Expose as Expose808 } from "class-transformer";
52553
52580
  var UpdateUserDto = class {
52554
52581
  _id;
@@ -52561,7 +52588,7 @@ __decorateClass([
52561
52588
  ], UpdateUserDto.prototype, "_id", 2);
52562
52589
  __decorateClass([
52563
52590
  IsDefined295({ message: "El campo Perfil es obligatorio" }),
52564
- ValidateIf9((_, value) => value !== ""),
52591
+ ValidateIf8((_, value) => value !== ""),
52565
52592
  IsUUID29("4", { message: "El campo Perfil debe ser un UUID v4 v\xE1lido." }),
52566
52593
  Expose808()
52567
52594
  ], UpdateUserDto.prototype, "profileId", 2);
@@ -52576,7 +52603,7 @@ import {
52576
52603
  IsNotEmpty as IsNotEmpty465,
52577
52604
  IsNumber as IsNumber523,
52578
52605
  IsString as IsString670,
52579
- Min as Min346,
52606
+ Min as Min345,
52580
52607
  ValidateNested as ValidateNested426
52581
52608
  } from "class-validator";
52582
52609
 
@@ -52631,13 +52658,13 @@ __decorateClass([
52631
52658
  __decorateClass([
52632
52659
  IsDefined296({ message: "El n\xFAmero m\xEDnimo de archivos es requerido" }),
52633
52660
  IsNumber523({}, { message: "El n\xFAmero m\xEDnimo de archivos debe ser un n\xFAmero" }),
52634
- Min346(0, { message: "El n\xFAmero m\xEDnimo de archivos debe ser mayor o igual a $constraint1" }),
52661
+ Min345(0, { message: "El n\xFAmero m\xEDnimo de archivos debe ser mayor o igual a $constraint1" }),
52635
52662
  Expose809()
52636
52663
  ], _DocumentRequirementDto.prototype, "minFiles", 2);
52637
52664
  __decorateClass([
52638
52665
  IsDefined296({ message: "El n\xFAmero m\xE1ximo de archivos es requerido" }),
52639
52666
  IsNumber523({}, { message: "El n\xFAmero m\xE1ximo de archivos debe ser un n\xFAmero" }),
52640
- Min346(1, { message: "El n\xFAmero m\xE1ximo de archivos debe ser mayor o igual a $constraint1" }),
52667
+ Min345(1, { message: "El n\xFAmero m\xE1ximo de archivos debe ser mayor o igual a $constraint1" }),
52641
52668
  Expose809()
52642
52669
  ], _DocumentRequirementDto.prototype, "maxFiles", 2);
52643
52670
  __decorateClass([
@@ -52648,7 +52675,7 @@ __decorateClass([
52648
52675
  __decorateClass([
52649
52676
  IsDefined296({ message: "El tama\xF1o m\xE1ximo de archivo es requerido" }),
52650
52677
  IsNumber523({}, { message: "El tama\xF1o m\xE1ximo de archivo debe ser un n\xFAmero" }),
52651
- Min346(0, { message: "El tama\xF1o m\xE1ximo de archivo debe ser mayor o igual a $constraint1" }),
52678
+ Min345(0, { message: "El tama\xF1o m\xE1ximo de archivo debe ser mayor o igual a $constraint1" }),
52652
52679
  Expose809()
52653
52680
  ], _DocumentRequirementDto.prototype, "maxFileSize", 2);
52654
52681
  var DocumentRequirementDto = _DocumentRequirementDto;
@@ -52937,7 +52964,7 @@ __decorateClass([
52937
52964
  ], UpdateCompanyDto.prototype, "countryId", 2);
52938
52965
 
52939
52966
  // src/v2/dtos/CreateUser.ts
52940
- import { IsArray as IsArray259, IsBoolean as IsBoolean77, IsDefined as IsDefined304, IsEmail as IsEmail11, IsString as IsString678, IsUUID as IsUUID36, ValidateIf as ValidateIf10, ValidateNested as ValidateNested427 } from "class-validator";
52967
+ import { IsArray as IsArray259, IsBoolean as IsBoolean77, IsDefined as IsDefined304, IsEmail as IsEmail11, IsString as IsString678, IsUUID as IsUUID36, ValidateIf as ValidateIf9, ValidateNested as ValidateNested427 } from "class-validator";
52941
52968
  import { Expose as Expose817, Transform as Transform121, Type as Type494 } from "class-transformer";
52942
52969
 
52943
52970
  // src/v2/dtos/ResourceSystemDto.ts
@@ -53061,7 +53088,7 @@ __decorateClass([
53061
53088
  ], CreateUserDto.prototype, "root", 2);
53062
53089
  __decorateClass([
53063
53090
  IsDefined304({ message: "El campo Perfil es obligatorio" }),
53064
- ValidateIf10((_, value) => value !== ""),
53091
+ ValidateIf9((_, value) => value !== ""),
53065
53092
  IsUUID36("4", { message: "El campo Perfil debe ser un UUID v4 v\xE1lido." }),
53066
53093
  Expose817()
53067
53094
  ], CreateUserDto.prototype, "profileId", 2);
@@ -53460,7 +53487,7 @@ __decorateClass([
53460
53487
  ], DelegationEntity.prototype, "name", 2);
53461
53488
 
53462
53489
  // src/v2/entities/User.ts
53463
- import { IsArray as IsArray262, IsBoolean as IsBoolean79, IsDefined as IsDefined311, IsEmail as IsEmail12, IsString as IsString689, IsUUID as IsUUID41, ValidateIf as ValidateIf11, ValidateNested as ValidateNested433 } from "class-validator";
53490
+ import { IsArray as IsArray262, IsBoolean as IsBoolean79, IsDefined as IsDefined311, IsEmail as IsEmail12, IsString as IsString689, IsUUID as IsUUID41, ValidateIf as ValidateIf10, ValidateNested as ValidateNested433 } from "class-validator";
53464
53491
  import { Expose as Expose829, Transform as Transform122, Type as Type500 } from "class-transformer";
53465
53492
  var UserEntity = class extends BaseEntity {
53466
53493
  email;
@@ -53531,7 +53558,7 @@ __decorateClass([
53531
53558
  ], UserEntity.prototype, "root", 2);
53532
53559
  __decorateClass([
53533
53560
  IsDefined311({ message: "El campo Perfil es obligatorio" }),
53534
- ValidateIf11((_, value) => value !== ""),
53561
+ ValidateIf10((_, value) => value !== ""),
53535
53562
  IsUUID41("4", { message: "El campo Perfil debe ser un UUID v4 v\xE1lido." }),
53536
53563
  Expose829()
53537
53564
  ], UserEntity.prototype, "profileId", 2);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sigo-entities",
3
- "version": "1.2.465",
3
+ "version": "1.2.467",
4
4
  "description": "Desarrollo de modelos de datos SIGO",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",