sigo-entities 1.2.528 → 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.
- package/.claude/settings.local.json +8 -0
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +9 -0
- package/dist/index.mjs +26 -17
- package/package.json +2 -2
- package/.claude/CLAUDE.md +0 -70
- package/.claude/settings.json +0 -21
- package/.claude/skills/mdl-administracion/SKILL.md +0 -60
- package/.claude/skills/mdl-configuracion/SKILL.md +0 -49
- package/.claude/skills/ope-im/SKILL.md +0 -71
- package/.claude/skills/ope-logistica/SKILL.md +0 -60
- package/.claude/skills/ope-pex/SKILL.md +0 -106
- package/.claude/skills/shared-dtos/SKILL.md +0 -76
- package/__tests__/asistenciaCuadrilla.test.mjs +0 -67
- package/__tests__/replanteo.test.mjs +0 -44
package/dist/index.d.mts
CHANGED
|
@@ -618,6 +618,7 @@ interface PayloadTokenDTO {
|
|
|
618
618
|
Empresa?: {
|
|
619
619
|
Codigo: string;
|
|
620
620
|
NumeroDocumentoIdentidad: string;
|
|
621
|
+
Propio: boolean;
|
|
621
622
|
};
|
|
622
623
|
}
|
|
623
624
|
|
|
@@ -10881,7 +10882,7 @@ declare class DeleteInventorySomacylOrderDto {
|
|
|
10881
10882
|
/**
|
|
10882
10883
|
* Payload de PUT processes/somacylOrder/finalize/:_id
|
|
10883
10884
|
* Las coordenadas se toman de las fotos (foto después si Finalizada, foto antes si No Finalizada).
|
|
10884
|
-
* 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.
|
|
10885
10886
|
*/
|
|
10886
10887
|
declare class FinalizeSomacylOrderDto {
|
|
10887
10888
|
estado_interno: StateInternalOrderSomacyl.FINALIZADA | StateInternalOrderSomacyl.NO_FINALIZADA;
|
|
@@ -10891,6 +10892,7 @@ declare class FinalizeSomacylOrderDto {
|
|
|
10891
10892
|
lecturaContadorRetirado?: string;
|
|
10892
10893
|
lecturaContadorInstalado?: string;
|
|
10893
10894
|
observaciones?: string;
|
|
10895
|
+
numPrecinto?: string;
|
|
10894
10896
|
}
|
|
10895
10897
|
|
|
10896
10898
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -618,6 +618,7 @@ interface PayloadTokenDTO {
|
|
|
618
618
|
Empresa?: {
|
|
619
619
|
Codigo: string;
|
|
620
620
|
NumeroDocumentoIdentidad: string;
|
|
621
|
+
Propio: boolean;
|
|
621
622
|
};
|
|
622
623
|
}
|
|
623
624
|
|
|
@@ -10881,7 +10882,7 @@ declare class DeleteInventorySomacylOrderDto {
|
|
|
10881
10882
|
/**
|
|
10882
10883
|
* Payload de PUT processes/somacylOrder/finalize/:_id
|
|
10883
10884
|
* Las coordenadas se toman de las fotos (foto después si Finalizada, foto antes si No Finalizada).
|
|
10884
|
-
* 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.
|
|
10885
10886
|
*/
|
|
10886
10887
|
declare class FinalizeSomacylOrderDto {
|
|
10887
10888
|
estado_interno: StateInternalOrderSomacyl.FINALIZADA | StateInternalOrderSomacyl.NO_FINALIZADA;
|
|
@@ -10891,6 +10892,7 @@ declare class FinalizeSomacylOrderDto {
|
|
|
10891
10892
|
lecturaContadorRetirado?: string;
|
|
10892
10893
|
lecturaContadorInstalado?: string;
|
|
10893
10894
|
observaciones?: string;
|
|
10895
|
+
numPrecinto?: string;
|
|
10894
10896
|
}
|
|
10895
10897
|
|
|
10896
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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)
|
package/.claude/settings.json
DELETED
|
@@ -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
|
-
});
|