sigo-entities 1.2.529 → 1.2.530

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,8 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Read(//c/Users/Antonio/AppData/Local/Temp/claude/c--Users-Antonio-Documents-github-sigo-entities/2f99285a-2809-4d8e-971e-ccaacf3cfec7/scratchpad/**)",
5
+ "Bash(bash build.sh)"
6
+ ]
7
+ }
8
+ }
package/dist/index.d.mts CHANGED
@@ -10882,7 +10882,7 @@ declare class DeleteInventorySomacylOrderDto {
10882
10882
  /**
10883
10883
  * Payload de PUT processes/somacylOrder/finalize/:_id
10884
10884
  * Las coordenadas se toman de las fotos (foto después si Finalizada, foto antes si No Finalizada).
10885
- * Finalizada exige lecturas del contador retirado e instalado y observaciones.
10885
+ * Finalizada exige lecturas del contador retirado e instalado y observaciones; el número de precinto es opcional.
10886
10886
  */
10887
10887
  declare class FinalizeSomacylOrderDto {
10888
10888
  estado_interno: StateInternalOrderSomacyl.FINALIZADA | StateInternalOrderSomacyl.NO_FINALIZADA;
@@ -10892,6 +10892,7 @@ declare class FinalizeSomacylOrderDto {
10892
10892
  lecturaContadorRetirado?: string;
10893
10893
  lecturaContadorInstalado?: string;
10894
10894
  observaciones?: string;
10895
+ numPrecinto?: string;
10895
10896
  }
10896
10897
 
10897
10898
  /**
package/dist/index.d.ts CHANGED
@@ -10882,7 +10882,7 @@ declare class DeleteInventorySomacylOrderDto {
10882
10882
  /**
10883
10883
  * Payload de PUT processes/somacylOrder/finalize/:_id
10884
10884
  * Las coordenadas se toman de las fotos (foto después si Finalizada, foto antes si No Finalizada).
10885
- * Finalizada exige lecturas del contador retirado e instalado y observaciones.
10885
+ * Finalizada exige lecturas del contador retirado e instalado y observaciones; el número de precinto es opcional.
10886
10886
  */
10887
10887
  declare class FinalizeSomacylOrderDto {
10888
10888
  estado_interno: StateInternalOrderSomacyl.FINALIZADA | StateInternalOrderSomacyl.NO_FINALIZADA;
@@ -10892,6 +10892,7 @@ declare class FinalizeSomacylOrderDto {
10892
10892
  lecturaContadorRetirado?: string;
10893
10893
  lecturaContadorInstalado?: string;
10894
10894
  observaciones?: string;
10895
+ numPrecinto?: string;
10895
10896
  }
10896
10897
 
10897
10898
  /**
package/dist/index.js CHANGED
@@ -56151,6 +56151,7 @@ var FinalizeSomacylOrderDto = class {
56151
56151
  lecturaContadorRetirado;
56152
56152
  lecturaContadorInstalado;
56153
56153
  observaciones;
56154
+ numPrecinto;
56154
56155
  };
56155
56156
  __decorateClass([
56156
56157
  (0, import_class_validator852.IsDefined)({ message: "El estado es requerido" }),
@@ -56205,6 +56206,14 @@ __decorateClass([
56205
56206
  (0, import_class_transformer876.Transform)(trim2),
56206
56207
  (0, import_class_transformer876.Expose)()
56207
56208
  ], FinalizeSomacylOrderDto.prototype, "observaciones", 2);
56209
+ __decorateClass([
56210
+ (0, import_class_validator852.ValidateIf)(isFinalizada),
56211
+ (0, import_class_validator852.IsOptional)(),
56212
+ (0, import_class_validator852.IsString)({ message: "El n\xFAmero de precinto debe ser una cadena de texto" }),
56213
+ (0, import_class_validator852.MaxLength)(50, { message: "El n\xFAmero de precinto no debe superar los 50 caracteres" }),
56214
+ (0, import_class_transformer876.Transform)(trim2),
56215
+ (0, import_class_transformer876.Expose)()
56216
+ ], FinalizeSomacylOrderDto.prototype, "numPrecinto", 2);
56208
56217
 
56209
56218
  // src/v2/dtos/UploadFileSomacylOrder.ts
56210
56219
  var import_class_transformer877 = require("class-transformer");
package/dist/index.mjs CHANGED
@@ -55598,7 +55598,7 @@ __decorateClass([
55598
55598
 
55599
55599
  // src/v2/dtos/FinalizeSomacylOrder.ts
55600
55600
  import { Expose as Expose848, Transform as Transform130 } from "class-transformer";
55601
- import { IsDefined as IsDefined332, IsIn as IsIn9, IsNotEmpty as IsNotEmpty477, IsString as IsString707, MaxLength as MaxLength13, ValidateIf as ValidateIf10 } from "class-validator";
55601
+ import { IsDefined as IsDefined332, IsIn as IsIn9, IsNotEmpty as IsNotEmpty477, IsOptional as IsOptional85, IsString as IsString707, MaxLength as MaxLength13, ValidateIf as ValidateIf10 } from "class-validator";
55602
55602
  var estadosFinalizacion = ["Finalizada" /* FINALIZADA */, "No Finalizada" /* NO_FINALIZADA */];
55603
55603
  var motivosNoFinalizado = Object.values(ReasonNoFinalizedSomacyl).filter((e) => e !== "" /* INICIAL */);
55604
55604
  var trim2 = ({ value }) => typeof value === "string" ? value.trim() : value;
@@ -55612,6 +55612,7 @@ var FinalizeSomacylOrderDto = class {
55612
55612
  lecturaContadorRetirado;
55613
55613
  lecturaContadorInstalado;
55614
55614
  observaciones;
55615
+ numPrecinto;
55615
55616
  };
55616
55617
  __decorateClass([
55617
55618
  IsDefined332({ message: "El estado es requerido" }),
@@ -55666,10 +55667,18 @@ __decorateClass([
55666
55667
  Transform130(trim2),
55667
55668
  Expose848()
55668
55669
  ], FinalizeSomacylOrderDto.prototype, "observaciones", 2);
55670
+ __decorateClass([
55671
+ ValidateIf10(isFinalizada),
55672
+ IsOptional85(),
55673
+ IsString707({ message: "El n\xFAmero de precinto debe ser una cadena de texto" }),
55674
+ MaxLength13(50, { message: "El n\xFAmero de precinto no debe superar los 50 caracteres" }),
55675
+ Transform130(trim2),
55676
+ Expose848()
55677
+ ], FinalizeSomacylOrderDto.prototype, "numPrecinto", 2);
55669
55678
 
55670
55679
  // src/v2/dtos/UploadFileSomacylOrder.ts
55671
55680
  import { Expose as Expose849, Transform as Transform131 } from "class-transformer";
55672
- import { IsDefined as IsDefined333, IsEnum as IsEnum67, IsOptional as IsOptional85, IsString as IsString708, MaxLength as MaxLength14 } from "class-validator";
55681
+ import { IsDefined as IsDefined333, IsEnum as IsEnum67, IsOptional as IsOptional86, IsString as IsString708, MaxLength as MaxLength14 } from "class-validator";
55673
55682
  var UploadFileSomacylOrderDto = class {
55674
55683
  posicion;
55675
55684
  observacion;
@@ -55682,7 +55691,7 @@ __decorateClass([
55682
55691
  Expose849()
55683
55692
  ], UploadFileSomacylOrderDto.prototype, "posicion", 2);
55684
55693
  __decorateClass([
55685
- IsOptional85(),
55694
+ IsOptional86(),
55686
55695
  IsString708({ message: "La observaci\xF3n debe ser una cadena de texto" }),
55687
55696
  MaxLength14(300, { message: "La observaci\xF3n no debe superar los 300 caracteres" }),
55688
55697
  Transform131(({ value }) => typeof value === "string" ? value.trim() : value),
@@ -55753,7 +55762,7 @@ __decorateClass([
55753
55762
 
55754
55763
  // src/v2/dtos/CorrectRejectedValuation.ts
55755
55764
  import { Expose as Expose853, Type as Type515 } from "class-transformer";
55756
- import { IsArray as IsArray268, IsDefined as IsDefined337, IsInt as IsInt5, IsOptional as IsOptional86, Min as Min356, ValidateNested as ValidateNested442 } from "class-validator";
55765
+ import { IsArray as IsArray268, IsDefined as IsDefined337, IsInt as IsInt5, IsOptional as IsOptional87, Min as Min356, ValidateNested as ValidateNested442 } from "class-validator";
55757
55766
  var CorrectRejectedValuationDto = class {
55758
55767
  ID_Valorizacion = 0;
55759
55768
  Anexos;
@@ -55765,7 +55774,7 @@ __decorateClass([
55765
55774
  Expose853()
55766
55775
  ], CorrectRejectedValuationDto.prototype, "ID_Valorizacion", 2);
55767
55776
  __decorateClass([
55768
- IsOptional86(),
55777
+ IsOptional87(),
55769
55778
  IsArray268({ message: "Los anexos deben ser un arreglo" }),
55770
55779
  Type515(() => FilesDocDTO),
55771
55780
  ValidateNested442({ each: true }),
@@ -55782,7 +55791,7 @@ import {
55782
55791
  IsInt as IsInt6,
55783
55792
  IsNotEmpty as IsNotEmpty479,
55784
55793
  IsNumber as IsNumber541,
55785
- IsOptional as IsOptional87,
55794
+ IsOptional as IsOptional88,
55786
55795
  IsString as IsString710,
55787
55796
  Length as Length349,
55788
55797
  Min as Min357,
@@ -55836,12 +55845,12 @@ __decorateClass([
55836
55845
  Expose854()
55837
55846
  ], PreLiquidateMaterialDto.prototype, "Cantidad", 2);
55838
55847
  __decorateClass([
55839
- IsOptional87(),
55848
+ IsOptional88(),
55840
55849
  IsNumber541({}, { message: "La cantidad informada debe ser un n\xFAmero" }),
55841
55850
  Expose854()
55842
55851
  ], PreLiquidateMaterialDto.prototype, "CantidadInformada", 2);
55843
55852
  __decorateClass([
55844
- IsOptional87(),
55853
+ IsOptional88(),
55845
55854
  IsNumber541({}, { message: "El ID del stock personal debe ser un n\xFAmero" }),
55846
55855
  Expose854()
55847
55856
  ], PreLiquidateMaterialDto.prototype, "ID_StockPersonal", 2);
@@ -55852,7 +55861,7 @@ __decorateClass([
55852
55861
  Expose854()
55853
55862
  ], PreLiquidateMaterialDto.prototype, "UnidadMedida", 2);
55854
55863
  __decorateClass([
55855
- IsOptional87(),
55864
+ IsOptional88(),
55856
55865
  Type516(() => CodigoDescripcionDTO),
55857
55866
  ValidateNested443(),
55858
55867
  Expose854()
@@ -55880,7 +55889,7 @@ __decorateClass([
55880
55889
  Expose854()
55881
55890
  ], PreLiquidateLineDto.prototype, "Cantidad", 2);
55882
55891
  __decorateClass([
55883
- IsOptional87(),
55892
+ IsOptional88(),
55884
55893
  IsIn12(BAREMO_SUBCONTRATA_TYPES, { message: `El tipo de baremo debe ser uno de: ${BAREMO_SUBCONTRATA_TYPES.join(", ")}` }),
55885
55894
  Expose854()
55886
55895
  ], PreLiquidateLineDto.prototype, "TipoBaremoSubcontrata", 2);
@@ -55953,7 +55962,7 @@ __decorateClass([
55953
55962
  Expose854()
55954
55963
  ], PreLiquidateValuationDto.prototype, "Tipo", 2);
55955
55964
  __decorateClass([
55956
- IsOptional87(),
55965
+ IsOptional88(),
55957
55966
  IsInt6({ message: "El ID de la valorizaci\xF3n rechazada debe ser un n\xFAmero entero" }),
55958
55967
  Min357(1, { message: "El ID de la valorizaci\xF3n rechazada no es v\xE1lido" }),
55959
55968
  Expose854()
@@ -55980,7 +55989,7 @@ import {
55980
55989
  IsDefined as IsDefined339,
55981
55990
  IsNotEmpty as IsNotEmpty480,
55982
55991
  IsNumber as IsNumber542,
55983
- IsOptional as IsOptional88,
55992
+ IsOptional as IsOptional89,
55984
55993
  IsString as IsString711,
55985
55994
  Matches as Matches6,
55986
55995
  Min as Min358,
@@ -56033,7 +56042,7 @@ __decorateClass([
56033
56042
  Expose855()
56034
56043
  ], PreLiquidateValuationCHILE9512Dto.prototype, "ID_Operacion", 2);
56035
56044
  __decorateClass([
56036
- IsOptional88(),
56045
+ IsOptional89(),
56037
56046
  IsString711({ message: "El c\xF3digo del parte diario debe ser una cadena de texto" }),
56038
56047
  Matches6(/^\d{8}$/, { message: "El c\xF3digo del parte diario debe tener el formato YYYYMMDD" }),
56039
56048
  Expose855()
@@ -56477,7 +56486,7 @@ __decorateClass([
56477
56486
 
56478
56487
  // src/v2/entities/ThemeConfigUser.ts
56479
56488
  import { Expose as Expose867, Type as Type521 } from "class-transformer";
56480
- import { IsNumber as IsNumber544, IsString as IsString721, ValidateNested as ValidateNested448, IsArray as IsArray276, IsOptional as IsOptional89, IsDefined as IsDefined349, IsBoolean as IsBoolean87 } from "class-validator";
56489
+ import { IsNumber as IsNumber544, IsString as IsString721, ValidateNested as ValidateNested448, IsArray as IsArray276, IsOptional as IsOptional90, IsDefined as IsDefined349, IsBoolean as IsBoolean87 } from "class-validator";
56481
56490
  var ThemeConfigUserEntity = class {
56482
56491
  _id;
56483
56492
  active = true;
@@ -56489,7 +56498,7 @@ var ThemeConfigUserEntity = class {
56489
56498
  Favoritos = [];
56490
56499
  };
56491
56500
  __decorateClass([
56492
- IsOptional89(),
56501
+ IsOptional90(),
56493
56502
  Expose867()
56494
56503
  ], ThemeConfigUserEntity.prototype, "_id", 2);
56495
56504
  __decorateClass([
@@ -56510,7 +56519,7 @@ __decorateClass([
56510
56519
  Expose867()
56511
56520
  ], ThemeConfigUserEntity.prototype, "Color", 2);
56512
56521
  __decorateClass([
56513
- IsOptional89(),
56522
+ IsOptional90(),
56514
56523
  IsString721(),
56515
56524
  Expose867()
56516
56525
  ], ThemeConfigUserEntity.prototype, "Language", 2);
@@ -56520,7 +56529,7 @@ __decorateClass([
56520
56529
  Expose867()
56521
56530
  ], ThemeConfigUserEntity.prototype, "Estado", 2);
56522
56531
  __decorateClass([
56523
- IsOptional89(),
56532
+ IsOptional90(),
56524
56533
  IsArray276(),
56525
56534
  ValidateNested448({ each: true }),
56526
56535
  Type521(() => FavoritoDTO2),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sigo-entities",
3
- "version": "1.2.529",
3
+ "version": "1.2.530",
4
4
  "description": "Desarrollo de modelos de datos SIGO",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -36,4 +36,4 @@
36
36
  "overrides": {
37
37
  "esbuild": "^0.28.0"
38
38
  }
39
- }
39
+ }
package/.claude/CLAUDE.md DELETED
@@ -1,70 +0,0 @@
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)
@@ -1,21 +0,0 @@
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
- }
@@ -1,60 +0,0 @@
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
- ```
@@ -1,49 +0,0 @@
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
- ```
@@ -1,71 +0,0 @@
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
- ```
@@ -1,60 +0,0 @@
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
- ```
@@ -1,106 +0,0 @@
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
- ```
@@ -1,76 +0,0 @@
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/`.
@@ -1,67 +0,0 @@
1
- // Ejecutar tras `npm run build`: npm test
2
- import { test } from "node:test";
3
- import assert from "node:assert/strict";
4
- import {
5
- toFechaKey,
6
- mapAsistenciaToCuadrillaOrden,
7
- validateAndFormatData,
8
- CuadrillaBtAlpPluzOrder2DTO,
9
- EstadoIntegranteCuadrilla,
10
- OrigenIntegrante,
11
- AttendanceStatus,
12
- } from "../dist/index.mjs";
13
-
14
- test("toFechaKey: 23:30 hora Lima no corre al día siguiente", () => {
15
- assert.equal(toFechaKey(new Date("2026-10-04T23:30:00-05:00")), "2026-10-04");
16
- });
17
-
18
- test("toFechaKey: medianoche UTC es el día anterior en Lima", () => {
19
- assert.equal(toFechaKey(new Date("2026-10-05T00:00:00Z")), "2026-10-04");
20
- });
21
-
22
- test("toFechaKey: fin de mes y fin de año", () => {
23
- assert.equal(toFechaKey(new Date("2026-11-01T03:00:00Z")), "2026-10-31");
24
- assert.equal(toFechaKey(new Date("2027-01-01T04:59:59Z")), "2026-12-31");
25
- });
26
-
27
- const integrante = (overrides) => ({
28
- Identificacion: "", Apellidos: "AP", Nombres: "NOM", Cargo: "TECNICO", PesoPersonal: 1, IdRecurso: "",
29
- EsJefeTitular: false, EsJefe: false, Origen: OrigenIntegrante.TITULAR,
30
- Estado: EstadoIntegranteCuadrilla.PRESENTE, Motivo: "", Observacion: "",
31
- ...overrides,
32
- });
33
-
34
- const asistencia = {
35
- Cuadrilla: { ID_Cuadrilla: 12, Codigo: "CUA-012", Nombre: "Cuadrilla 12" },
36
- Integrantes: [
37
- integrante({ Identificacion: "1", Cargo: "JEFE DE CUADRILLA", EsJefeTitular: true, Estado: EstadoIntegranteCuadrilla.AUSENTE, Motivo: AttendanceStatus.DescansoMedico }),
38
- integrante({ Identificacion: "2", EsJefe: true, IdRecurso: "R2" }),
39
- integrante({ Identificacion: "3", Estado: EstadoIntegranteCuadrilla.CEDIDO, CuadrillaDestino: { ID_Cuadrilla: 20, Codigo: "CUA-020", Nombre: "" } }),
40
- integrante({ Identificacion: "99", Origen: OrigenIntegrante.PRESTADO, CuadrillaOrigen: { ID_Cuadrilla: 7, Codigo: "CUA-007", Nombre: "" } }),
41
- ],
42
- };
43
-
44
- test("mapAsistenciaToCuadrillaOrden: excluye AUSENTE y CEDIDO", () => {
45
- const cuadrilla = mapAsistenciaToCuadrillaOrden(asistencia);
46
- assert.deepEqual(cuadrilla.map((m) => m.Identificacion), ["2", "99"]);
47
- assert.ok(cuadrilla.every((m) => m instanceof CuadrillaBtAlpPluzOrder2DTO));
48
- });
49
-
50
- test("mapAsistenciaToCuadrillaOrden: marca al suplente", () => {
51
- const suplente = mapAsistenciaToCuadrillaOrden(asistencia).find((m) => m.Identificacion === "2");
52
- assert.equal(suplente.EsJefe, true);
53
- assert.equal(suplente.EsJefeSuplente, true);
54
- assert.equal(suplente.IdRecurso, "R2");
55
- });
56
-
57
- test("mapAsistenciaToCuadrillaOrden: prestado lleva Codigo destino y CodigoCuadrillaOrigen", () => {
58
- const prestado = mapAsistenciaToCuadrillaOrden(asistencia).find((m) => m.Identificacion === "99");
59
- assert.equal(prestado.Codigo, "CUA-012");
60
- assert.equal(prestado.CodigoCuadrillaOrigen, "CUA-007");
61
- assert.equal(prestado.Origen, OrigenIntegrante.PRESTADO);
62
- });
63
-
64
- test("CuadrillaBtAlpPluzOrder2DTO: documento antiguo sin campos nuevos valida", async () => {
65
- const antiguo = { Codigo: "CUA-1", Identificacion: "1", Apellidos: "A", Nombres: "N", Cargo: "TECNICO", PesoPersonal: 1 };
66
- await assert.doesNotReject(validateAndFormatData(antiguo, CuadrillaBtAlpPluzOrder2DTO));
67
- });
@@ -1,44 +0,0 @@
1
- // Ejecutar tras `npm run build`: npm test
2
- import { test } from "node:test";
3
- import assert from "node:assert/strict";
4
- import {
5
- validateAndFormatData,
6
- ReplanteoENTITY,
7
- ReplanteoGomRequestBodyDTO,
8
- ReplanteoGuardarRequestBodyDTO,
9
- } from "../dist/index.mjs";
10
-
11
- const pais = { Codigo: "PE", Nombre: "PERU" };
12
- const delegacion = { Codigo: "9112", Nombre: "LIMA" };
13
- const usuario = { Identificacion: "1", Apellidos: "AP", Nombres: "NOM", Fecha: new Date() };
14
-
15
- const replanteo = (overrides = {}) => ({
16
- _id: "a7c1b6c2-3d0e-4f9b-9a51-0c2f1d3e4b5a", ID_GOM: 10, GOM: "GOM-10", ID_incidencia: 5,
17
- Pais: pais, Delegacion: delegacion, Estado: "BORRADOR",
18
- Foto: { ID_Reserva: 1, ID_ManoObra: 2, Huella: "abc", Fecha: new Date(), Material: [], ManoObra: [] },
19
- Cambios: { Material: [], ManoObra: [] },
20
- Adjunto: null, PDF: null, Firma: null,
21
- UsuarioCreacion: usuario, UsuarioEdicion: usuario,
22
- ...overrides,
23
- });
24
-
25
- test("ReplanteoENTITY: borrador sin adjunto, PDF ni firma es válido", async () => {
26
- await assert.doesNotReject(validateAndFormatData(replanteo(), ReplanteoENTITY));
27
- });
28
-
29
- test("ReplanteoENTITY: estado fuera de BORRADOR/FIRMADO se rechaza", async () => {
30
- await assert.rejects(validateAndFormatData(replanteo({ Estado: "ANULADO" }), ReplanteoENTITY));
31
- });
32
-
33
- test("ReplanteoENTITY: firmado con usuario de firma es válido", async () => {
34
- await assert.doesNotReject(validateAndFormatData(replanteo({ Estado: "FIRMADO", Firma: usuario }), ReplanteoENTITY));
35
- });
36
-
37
- test("ReplanteoGomRequestBodyDTO: ID_GOM 0 se rechaza", async () => {
38
- await assert.rejects(validateAndFormatData({ ID_GOM: 0 }, ReplanteoGomRequestBodyDTO));
39
- });
40
-
41
- test("ReplanteoGuardarRequestBodyDTO: cambios vacíos son válidos", async () => {
42
- const body = { ID_GOM: 10, Cambios: { Material: [], ManoObra: [] } };
43
- await assert.doesNotReject(validateAndFormatData(body, ReplanteoGuardarRequestBodyDTO));
44
- });