sigo-package 1.2.178 → 1.2.179

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/dist/index.d.mts CHANGED
@@ -210,6 +210,129 @@ interface ILineaValidacion {
210
210
  declare function ValidarRelacionMOHijasAL04(moUo: MoUoType$2[], manoObraDB: any): IResultadoValidacionMOHijas[];
211
211
  declare function FormatearErrorValidacionMOHijas(violaciones: IResultadoValidacionMOHijas[]): string | null;
212
212
 
213
+ /**
214
+ * Reglas de Preliquidar AL04 compartidas por la PWA (formulario) y pex-procesos (motor en el servidor).
215
+ * Legacy: sigo-pwa-mobile TrabajosDEAL04/Preliquidar y TrabajosDEAL04/DocHP; sic-backend TrabajosService/UpdateTrabajo.js.
216
+ * Son reglas propias de AL04: no se mezclan con las de AL02.
217
+ */
218
+ /** Tipo de preliquidación: troncal o por HomePass (Clientes = Residential, No Clientes = Business) */
219
+ type TipoPreliquidacionAL04 = 'Troncal' | 'Residential' | 'Business';
220
+ /** Material consumido del almacén (todo lo que no es ducto) */
221
+ declare const motivoConsumoAlmacenAL04 = "CONSUMO_MATERIAL_AUTOMATICO_DUCTOS";
222
+ declare const estadoRechazadaPorMetrajeAL04 = "RECHAZADA POR METRAJE";
223
+ /** Asignaciones que no se preliquidan (getDataAsignaciones: UseCasePreLiquidationProcesses.ts L28) */
224
+ declare const codMONoPreliquidablesAL04: string[];
225
+ /** Baliza: una por AddressID entre los trabajos de la GOM (verificarUnaBalizaXDireccion.js) */
226
+ declare const codBalizaPreliquidarAL04 = "HP01";
227
+ /** Baremo único por DP: solo una valorización activa entre los trabajos de la GOM (verificarBaremoUnicoXDP.js) */
228
+ declare const codBaremoUnicoDPAL04: string[];
229
+ /** AP02 y ExtraWide no pueden superar lo preliquidado de AP01 en la obra (UpdateTrabajo.js L10-29, L330-347) */
230
+ declare const codMOAsfaltoMadreAL04 = "AP01";
231
+ declare const codMOAsfaltoHijasAL04: string[];
232
+ /** MO que se puede preliquidar en troncal (Preliquidar/Components/View.tsx L143) */
233
+ declare const codMOPreliquidarTroncalAL04: string[];
234
+ /** MO permitida por HomePass: No Clientes codMOFTTFAL04 (HP01); Clientes codMODROPAL04 (DocHP/Components/Documentacion.tsx L179-187) */
235
+ declare function obtenerCodMOHomePassAL04(tipo: Exclude<TipoPreliquidacionAL04, 'Troncal'>): string[];
236
+ type EstadoCierreAL04 = {
237
+ Estado: unknown;
238
+ Especialidad: string;
239
+ } | undefined;
240
+ /** Cierres OC / ASPH / SOP del trabajo (Ultima_PreLiquidacion) o del HomePass */
241
+ interface CierresPreliquidarAL04 {
242
+ Asfaltado?: EstadoCierreAL04;
243
+ OC?: EstadoCierreAL04;
244
+ Soplado?: EstadoCierreAL04;
245
+ }
246
+ /** Especialidades ocultas tras un cierre: solo si OC está cerrada (filtro `arr[1]`, Preliquidar/Components/View.tsx L144-151) */
247
+ declare function obtenerEspecialidadesCerradasAL04(cierres: CierresPreliquidarAL04): string[];
248
+ /**
249
+ * La asignación se puede preliquidar en ese tipo: MO troncal o permitida para el HomePass y sin especialidad cerrada.
250
+ * El estado de la asignación y codMONoPreliquidablesAL04 se comprueban aparte (getDataAsignaciones del legacy).
251
+ */
252
+ declare function esAsignacionPreliquidableAL04(asignacion: {
253
+ ManoObra: {
254
+ Codigo: string;
255
+ };
256
+ Especialidad: {
257
+ Codigo: string;
258
+ };
259
+ }, tipo: TipoPreliquidacionAL04, especialidadesCerradas: string[]): boolean;
260
+ /** Ductos: se consumen del stock personal (técnico); el resto, del almacén */
261
+ declare const esMaterialDuctoAL04: (codigo: string) => boolean;
262
+ /** Materiales que no se muestran en el stock personal porque se añaden como hijos de un ducto (generarDataMaterial.ts L15) */
263
+ declare const codMaterialesOcultosAL04: string[];
264
+ /**
265
+ * Cómo se informan los materiales de la MO:
266
+ * - automatico: el mapa fija los materiales (GD01, HP01, NVT01) y se añaden solos
267
+ * - elegir: solo se pueden elegir los materiales del mapa (ductos de obra civil y soplado)
268
+ * - sinMaterial: la MO no lleva materiales (AP02, EXTRA01, PP01…)
269
+ * - libre: la MO no está en el mapa; se puede elegir cualquier material (p. ej. ExtraWide AP02_*)
270
+ */
271
+ type ModoMaterialesAL04 = 'automatico' | 'elegir' | 'sinMaterial' | 'libre';
272
+ declare function modoMaterialesAL04(codMO: string): ModoMaterialesAL04;
273
+ /** Cantidad fija de la MO (HP01, NVT01 = 1): el campo queda deshabilitado (FormAdd.tsx L366-367, L474-479) */
274
+ declare function cantidadFijaMOAL04(codMO: string): number | undefined;
275
+ interface MaterialRequeridoAL04 {
276
+ Codigo: string;
277
+ Cantidad: number;
278
+ /** Ducto: stock personal; si no, stock de almacén */
279
+ StockPersonal: boolean;
280
+ }
281
+ /** Materiales automáticos: (CantidadFija ? Cantidad : cantidad de MO) × Factor (verificarReglas, FormAdd.tsx L255-297) */
282
+ declare function materialesAutomaticosAL04(codMO: string, cantidadMO: number): MaterialRequeridoAL04[];
283
+ /** Códigos que se pueden elegir; undefined si la MO no restringe los materiales (AddedMaterial.tsx L263-271) */
284
+ declare function materialesSeleccionablesAL04(codMO: string): string[] | undefined;
285
+ interface CantidadMaterialAL04 {
286
+ /** Cantidad que se fija al elegir el material; undefined si la informa el usuario */
287
+ Cantidad?: number;
288
+ Bloqueada: boolean;
289
+ /** El material lleva hijos (conectores / empalmes) cuya cantidad son los empalmes × Factor */
290
+ PideEmpalmes: boolean;
291
+ }
292
+ /**
293
+ * Cantidad del material elegido (AddedMaterial.tsx L194-219): CantidadPadre = cantidad de MO × Factor;
294
+ * CantidadFija = Cantidad × Factor. Si sus hijos no tienen cantidad fija, se piden los empalmes.
295
+ */
296
+ declare function cantidadMaterialAL04(codMO: string, codMaterial: string, cantidadMO: number): CantidadMaterialAL04;
297
+ /**
298
+ * Hijos del material elegido (agregarSubMateriales, AddedMaterial.tsx L113-156):
299
+ * (CantidadFija ? Cantidad : CantidadPadre ? cantidad del material : empalmes) × Factor.
300
+ * Sin empalmes no se añaden; si no hay forma de obtener la cantidad es error.
301
+ */
302
+ declare function subMaterialesAL04(codMO: string, codMaterial: string, cantidadMaterial: number, empalmes: number): MaterialRequeridoAL04[];
303
+ /**
304
+ * División por exceso (UseCasePreliquidar.ts L438-469): los ductos se reparten entre la valorización padre y la hija
305
+ * según la cantidad de cada una; el resto de materiales queda en el padre.
306
+ * Decisión 2026-10-14: el padre se redondea a 2 decimales y la hija lleva el total menos el padre.
307
+ */
308
+ declare function prorratearMaterialesAL04<T extends {
309
+ Codigo: string;
310
+ Cantidad: number;
311
+ CantidadInformada: number;
312
+ }>(materiales: T[], cantidadPadre: number, cantidadTotal: number): {
313
+ padre: T[];
314
+ hija: T[];
315
+ };
316
+ /**
317
+ * Lo preliquidado en la obra de AP02 + ExtraWide no puede superar a AP01 (tolerancia 0.001). Solo se valida si
318
+ * la preliquidación incluye alguno de esos códigos. Devuelve el mensaje de error o null.
319
+ * @param moUo resumen de todos los trabajos de la obra (CalcularResumenValorizacionesAlemania)
320
+ * @param manoObra ManoObra de la GOM: diccionario LineaCodigoCub → código de la MO
321
+ * @param codigosNuevos códigos de MO de las valorizaciones nuevas
322
+ */
323
+ declare function validarAsfaltoAL04(moUo: {
324
+ LineaCodigoCub: string;
325
+ Cantidad: number;
326
+ }[], manoObra: {
327
+ Valorizacion: {
328
+ Codigo: string;
329
+ Descripcion?: string;
330
+ DetalleChile?: {
331
+ LineaCodigoCub?: string;
332
+ };
333
+ }[];
334
+ }, codigosNuevos: string[]): string | null;
335
+
213
336
  declare const codMOTroncalAL02OC: never[];
214
337
  declare const codMOTroncalAL02Soplado: never[];
215
338
  declare const codMOTroncalAL02Asfaltado: never[];
@@ -973,4 +1096,4 @@ declare function getCookieToken(req: Request<any>, webOrigins: string[]): string
973
1096
 
974
1097
  declare function validateUUIDv4Param(BadRequestException: ClassConstructor<Error>, req: Request<any>, _res: Response, next: NextFunction): Promise<void>;
975
1098
 
976
- export { ActualizarDataManoObra, ActualizarDataReserva, ActualizarDataResumenLiquidaciones, ActualizarDataResumenLiquidacionesColombia, ActualizarDataResumenValorizacionesAlemania, ActualizarDataTrabajos, AsignacionHelper, BuscarZonaContratista, CalcularResumenHPMOLiquidado, CalcularResumenLiquidaciones, CalcularResumenLiquidacionesColombia, CalcularResumenValorizacionesAlemania, type CierresPreliquidarAL02, CodigosMaterialDuctosAL02, CodigosMaterialDuctosAL04, CodigosMaterialSoplado, CodsMapeoMOMaterial, CodsMapeoMOMaterialNVT01, CodsMapeoMOMaterialSopladoClientes, CodsMapeoMOMaterialSopladoTroncal, CodsMapeoMO_Material_Arquertas, CompararFechas, CurrencyFormat, DocumentacionReplanteo, EstadoEspecialidad9612, FormatearErrorValidacionMOHijas, GemeindeChangeNomenclatura, GetCodigoFechaActual, type IDPContrato, type IDocumentacion, type ILineaValidacion, type IMOAndMaterialsRules, type IMORules, type IMateriales, type IResultadoValidacionMOHijas, MOCantidadNVT01, MOHijasAL04, MOHijasDEPTH, MapeoEspecialidades9612, MapeoMOBOMAL04, MapeoMatBOMAL04, type MatRetiradosType, type MatStockAlmacenType, type MatStockPersonalType$2 as MatStockPersonalType, type MatUtilizadosType$2 as MatUtilizadosType, type MoUoType$2 as MoUoType, ModelDataFlujosDocumentacionReplanteo, ObtenerMONoReservada, ObtenerPrecioContratistaVigente, ObtenerZonaAsignada, type ResumenLiquidacionesType, type ResumenLiquidacionesTypeChile, type ResumenLiquidacionesTypeColombia, SEGMENT_TY, SOMACYL_CODIGO_CONTADOR_RETIRADO, SOMACYL_PHOTO_POSITIONS, type SomacylPhotoKey, type TARGET, type TipoPreliquidacionAL02, UpdateNodosDocDP, ValidarRelacionMOHijasAL04, ValorizacionHelper, builSystemOption, buildDataMOFromMaterialRules, buildDataMaterialsRule, buildKeyMO, buildMenu, buildReservaMOJobMajorProjectsAlemaniaAL02, buildReservaMOJobMajorProjectsAlemaniaAL04, buildTenantCollectionName, calcularTotalMaterialValorizacionPeru9112, checkAndBuildMaterialsFromStock, checkMaterialAvailability, codBalizaAL02, codBalizaAL04, codClientes, codIssueByPeriodoAL02, codMOClientesAL02, codMOClientesAL02Asfaltado, codMOClientesAL02OC, codMOClientesAL02Soplado, codMOClientes_ReglaLiquidacion1, codMODROPAL04, codMODROPAL04OC, codMODROPAL04Soplado, codMOExcluidos, codMOFTTFAL04, codMONoClientesAL02, codMONoClientesAL02Asfaltado, codMONoClientesAL02OC, codMONoClientesAL02Soplado, codMONoClientes_ReglaLiquidacion1, codMOOcultosAL04, codMOPreliquidarTroncalAL02, codMOPublico, codMOTroncalAL02, codMOTroncalAL02Asfaltado, codMOTroncalAL02OC, codMOTroncalAL02Soplado, codMOTroncalAL04, codMOTroncalAL04Asfaltado, codMOTroncalAL04Issue, codMOTroncalAL04OC, codMOTroncalAL04Soplado, codMOTroncalHistoricoAL02, codMOTroncal_ReglaLiquidacion1, codNoCliente, codSopladoRD, codigosBaremosSubcontrataAL02, codigosMOT1_F2, codigosMaterialDuctos, codigosMaterialUGG, codigosSopladoHP, collections, consumirStockPersonal, convertDates, dataFlujosHomePass, db_default, db_root, documentRequirementAltasNVT, empresas, esAsignacionPreliquidableAL02, esCadenaFechaISOValida, esObjetoFecha, estadoRechazadaPorMetraje, formatCurrencyV1, formatNumberSmart, formatNumberV1, formatPercentageV1, generateUniqueNumber, generateUniqueNumberArray, getCaptureDateSomacyl, getChannelName, getContainerName, getCookieToken, getDBName, getDateInTimeZone, getKeyRedisSortedSet, getModelDataAdicional, getNextID_Amap, getNextID_AsignacionValorizacion, getNextID_Valorizacion, getPrecioContratista, getPriceMaterial, getQueueName, getQueueNameSaveOneNotification, getRequestOrigin, hashCode, isValidDate, isValidPartialEntity, logTiempoProceso, mapaDPContratoPrecioFullAL02, mapaEstadoObraFaseAL02, mapaMOMaterialAL02, mapaMOMaterialAL04, mapaReglaSopladoClientes, mapaReglaSopladoTroncal, mapeoZonasSimilares, motivoConsumoMaterialAutomaticoDuctos, newCodMOTroncalReglaLiquidacion1, obtenerCodMOHomePass, obtenerDocumentacionClientes, obtenerDocumentacionNoClientes, obtenerEspecialidadesCerradas, obtenerPrecioContratistaMaterial, obtenerPrecioManoObraAL02, obtenerPrecioManoObraAL04, obtenerTipoYCodigoMO, paisMap, parseDuplicateKeyError, roundNumber, searchCurrentContractorSpecialtyPrice, setColModels, setContext, throwSomacylError, updatePriceContractorMOAL02, updatePriceContractorMOAL04, updatePriceMOAL02, updatePriceMOAL04, updatePricePBBudgetAlemaniaAL02, updatePricePBBudgetAlemaniaAL04, uuidRegex, validateNoLookup, validateUUIDv4Param, verifyDetailsFinalizeSomacyl, verifyFiles, verifyInventoryFinalize, verifyInventoryFinalizeSomacyl, verifyInventoryLimitsSomacyl, verifyPhotosFinalizeSomacyl, verifyPhotosNotFinalizedSomacyl };
1099
+ export { ActualizarDataManoObra, ActualizarDataReserva, ActualizarDataResumenLiquidaciones, ActualizarDataResumenLiquidacionesColombia, ActualizarDataResumenValorizacionesAlemania, ActualizarDataTrabajos, AsignacionHelper, BuscarZonaContratista, CalcularResumenHPMOLiquidado, CalcularResumenLiquidaciones, CalcularResumenLiquidacionesColombia, CalcularResumenValorizacionesAlemania, type CantidadMaterialAL04, type CierresPreliquidarAL02, type CierresPreliquidarAL04, CodigosMaterialDuctosAL02, CodigosMaterialDuctosAL04, CodigosMaterialSoplado, CodsMapeoMOMaterial, CodsMapeoMOMaterialNVT01, CodsMapeoMOMaterialSopladoClientes, CodsMapeoMOMaterialSopladoTroncal, CodsMapeoMO_Material_Arquertas, CompararFechas, CurrencyFormat, DocumentacionReplanteo, EstadoEspecialidad9612, FormatearErrorValidacionMOHijas, GemeindeChangeNomenclatura, GetCodigoFechaActual, type IDPContrato, type IDocumentacion, type ILineaValidacion, type IMOAndMaterialsRules, type IMORules, type IMateriales, type IResultadoValidacionMOHijas, MOCantidadNVT01, MOHijasAL04, MOHijasDEPTH, MapeoEspecialidades9612, MapeoMOBOMAL04, MapeoMatBOMAL04, type MatRetiradosType, type MatStockAlmacenType, type MatStockPersonalType$2 as MatStockPersonalType, type MatUtilizadosType$2 as MatUtilizadosType, type MaterialRequeridoAL04, type MoUoType$2 as MoUoType, ModelDataFlujosDocumentacionReplanteo, type ModoMaterialesAL04, ObtenerMONoReservada, ObtenerPrecioContratistaVigente, ObtenerZonaAsignada, type ResumenLiquidacionesType, type ResumenLiquidacionesTypeChile, type ResumenLiquidacionesTypeColombia, SEGMENT_TY, SOMACYL_CODIGO_CONTADOR_RETIRADO, SOMACYL_PHOTO_POSITIONS, type SomacylPhotoKey, type TARGET, type TipoPreliquidacionAL02, type TipoPreliquidacionAL04, UpdateNodosDocDP, ValidarRelacionMOHijasAL04, ValorizacionHelper, builSystemOption, buildDataMOFromMaterialRules, buildDataMaterialsRule, buildKeyMO, buildMenu, buildReservaMOJobMajorProjectsAlemaniaAL02, buildReservaMOJobMajorProjectsAlemaniaAL04, buildTenantCollectionName, calcularTotalMaterialValorizacionPeru9112, cantidadFijaMOAL04, cantidadMaterialAL04, checkAndBuildMaterialsFromStock, checkMaterialAvailability, codBalizaAL02, codBalizaAL04, codBalizaPreliquidarAL04, codBaremoUnicoDPAL04, codClientes, codIssueByPeriodoAL02, codMOAsfaltoHijasAL04, codMOAsfaltoMadreAL04, codMOClientesAL02, codMOClientesAL02Asfaltado, codMOClientesAL02OC, codMOClientesAL02Soplado, codMOClientes_ReglaLiquidacion1, codMODROPAL04, codMODROPAL04OC, codMODROPAL04Soplado, codMOExcluidos, codMOFTTFAL04, codMONoClientesAL02, codMONoClientesAL02Asfaltado, codMONoClientesAL02OC, codMONoClientesAL02Soplado, codMONoClientes_ReglaLiquidacion1, codMONoPreliquidablesAL04, codMOOcultosAL04, codMOPreliquidarTroncalAL02, codMOPreliquidarTroncalAL04, codMOPublico, codMOTroncalAL02, codMOTroncalAL02Asfaltado, codMOTroncalAL02OC, codMOTroncalAL02Soplado, codMOTroncalAL04, codMOTroncalAL04Asfaltado, codMOTroncalAL04Issue, codMOTroncalAL04OC, codMOTroncalAL04Soplado, codMOTroncalHistoricoAL02, codMOTroncal_ReglaLiquidacion1, codMaterialesOcultosAL04, codNoCliente, codSopladoRD, codigosBaremosSubcontrataAL02, codigosMOT1_F2, codigosMaterialDuctos, codigosMaterialUGG, codigosSopladoHP, collections, consumirStockPersonal, convertDates, dataFlujosHomePass, db_default, db_root, documentRequirementAltasNVT, empresas, esAsignacionPreliquidableAL02, esAsignacionPreliquidableAL04, esCadenaFechaISOValida, esMaterialDuctoAL04, esObjetoFecha, estadoRechazadaPorMetraje, estadoRechazadaPorMetrajeAL04, formatCurrencyV1, formatNumberSmart, formatNumberV1, formatPercentageV1, generateUniqueNumber, generateUniqueNumberArray, getCaptureDateSomacyl, getChannelName, getContainerName, getCookieToken, getDBName, getDateInTimeZone, getKeyRedisSortedSet, getModelDataAdicional, getNextID_Amap, getNextID_AsignacionValorizacion, getNextID_Valorizacion, getPrecioContratista, getPriceMaterial, getQueueName, getQueueNameSaveOneNotification, getRequestOrigin, hashCode, isValidDate, isValidPartialEntity, logTiempoProceso, mapaDPContratoPrecioFullAL02, mapaEstadoObraFaseAL02, mapaMOMaterialAL02, mapaMOMaterialAL04, mapaReglaSopladoClientes, mapaReglaSopladoTroncal, mapeoZonasSimilares, materialesAutomaticosAL04, materialesSeleccionablesAL04, modoMaterialesAL04, motivoConsumoAlmacenAL04, motivoConsumoMaterialAutomaticoDuctos, newCodMOTroncalReglaLiquidacion1, obtenerCodMOHomePass, obtenerCodMOHomePassAL04, obtenerDocumentacionClientes, obtenerDocumentacionNoClientes, obtenerEspecialidadesCerradas, obtenerEspecialidadesCerradasAL04, obtenerPrecioContratistaMaterial, obtenerPrecioManoObraAL02, obtenerPrecioManoObraAL04, obtenerTipoYCodigoMO, paisMap, parseDuplicateKeyError, prorratearMaterialesAL04, roundNumber, searchCurrentContractorSpecialtyPrice, setColModels, setContext, subMaterialesAL04, throwSomacylError, updatePriceContractorMOAL02, updatePriceContractorMOAL04, updatePriceMOAL02, updatePriceMOAL04, updatePricePBBudgetAlemaniaAL02, updatePricePBBudgetAlemaniaAL04, uuidRegex, validarAsfaltoAL04, validateNoLookup, validateUUIDv4Param, verifyDetailsFinalizeSomacyl, verifyFiles, verifyInventoryFinalize, verifyInventoryFinalizeSomacyl, verifyInventoryLimitsSomacyl, verifyPhotosFinalizeSomacyl, verifyPhotosNotFinalizedSomacyl };
package/dist/index.d.ts CHANGED
@@ -210,6 +210,129 @@ interface ILineaValidacion {
210
210
  declare function ValidarRelacionMOHijasAL04(moUo: MoUoType$2[], manoObraDB: any): IResultadoValidacionMOHijas[];
211
211
  declare function FormatearErrorValidacionMOHijas(violaciones: IResultadoValidacionMOHijas[]): string | null;
212
212
 
213
+ /**
214
+ * Reglas de Preliquidar AL04 compartidas por la PWA (formulario) y pex-procesos (motor en el servidor).
215
+ * Legacy: sigo-pwa-mobile TrabajosDEAL04/Preliquidar y TrabajosDEAL04/DocHP; sic-backend TrabajosService/UpdateTrabajo.js.
216
+ * Son reglas propias de AL04: no se mezclan con las de AL02.
217
+ */
218
+ /** Tipo de preliquidación: troncal o por HomePass (Clientes = Residential, No Clientes = Business) */
219
+ type TipoPreliquidacionAL04 = 'Troncal' | 'Residential' | 'Business';
220
+ /** Material consumido del almacén (todo lo que no es ducto) */
221
+ declare const motivoConsumoAlmacenAL04 = "CONSUMO_MATERIAL_AUTOMATICO_DUCTOS";
222
+ declare const estadoRechazadaPorMetrajeAL04 = "RECHAZADA POR METRAJE";
223
+ /** Asignaciones que no se preliquidan (getDataAsignaciones: UseCasePreLiquidationProcesses.ts L28) */
224
+ declare const codMONoPreliquidablesAL04: string[];
225
+ /** Baliza: una por AddressID entre los trabajos de la GOM (verificarUnaBalizaXDireccion.js) */
226
+ declare const codBalizaPreliquidarAL04 = "HP01";
227
+ /** Baremo único por DP: solo una valorización activa entre los trabajos de la GOM (verificarBaremoUnicoXDP.js) */
228
+ declare const codBaremoUnicoDPAL04: string[];
229
+ /** AP02 y ExtraWide no pueden superar lo preliquidado de AP01 en la obra (UpdateTrabajo.js L10-29, L330-347) */
230
+ declare const codMOAsfaltoMadreAL04 = "AP01";
231
+ declare const codMOAsfaltoHijasAL04: string[];
232
+ /** MO que se puede preliquidar en troncal (Preliquidar/Components/View.tsx L143) */
233
+ declare const codMOPreliquidarTroncalAL04: string[];
234
+ /** MO permitida por HomePass: No Clientes codMOFTTFAL04 (HP01); Clientes codMODROPAL04 (DocHP/Components/Documentacion.tsx L179-187) */
235
+ declare function obtenerCodMOHomePassAL04(tipo: Exclude<TipoPreliquidacionAL04, 'Troncal'>): string[];
236
+ type EstadoCierreAL04 = {
237
+ Estado: unknown;
238
+ Especialidad: string;
239
+ } | undefined;
240
+ /** Cierres OC / ASPH / SOP del trabajo (Ultima_PreLiquidacion) o del HomePass */
241
+ interface CierresPreliquidarAL04 {
242
+ Asfaltado?: EstadoCierreAL04;
243
+ OC?: EstadoCierreAL04;
244
+ Soplado?: EstadoCierreAL04;
245
+ }
246
+ /** Especialidades ocultas tras un cierre: solo si OC está cerrada (filtro `arr[1]`, Preliquidar/Components/View.tsx L144-151) */
247
+ declare function obtenerEspecialidadesCerradasAL04(cierres: CierresPreliquidarAL04): string[];
248
+ /**
249
+ * La asignación se puede preliquidar en ese tipo: MO troncal o permitida para el HomePass y sin especialidad cerrada.
250
+ * El estado de la asignación y codMONoPreliquidablesAL04 se comprueban aparte (getDataAsignaciones del legacy).
251
+ */
252
+ declare function esAsignacionPreliquidableAL04(asignacion: {
253
+ ManoObra: {
254
+ Codigo: string;
255
+ };
256
+ Especialidad: {
257
+ Codigo: string;
258
+ };
259
+ }, tipo: TipoPreliquidacionAL04, especialidadesCerradas: string[]): boolean;
260
+ /** Ductos: se consumen del stock personal (técnico); el resto, del almacén */
261
+ declare const esMaterialDuctoAL04: (codigo: string) => boolean;
262
+ /** Materiales que no se muestran en el stock personal porque se añaden como hijos de un ducto (generarDataMaterial.ts L15) */
263
+ declare const codMaterialesOcultosAL04: string[];
264
+ /**
265
+ * Cómo se informan los materiales de la MO:
266
+ * - automatico: el mapa fija los materiales (GD01, HP01, NVT01) y se añaden solos
267
+ * - elegir: solo se pueden elegir los materiales del mapa (ductos de obra civil y soplado)
268
+ * - sinMaterial: la MO no lleva materiales (AP02, EXTRA01, PP01…)
269
+ * - libre: la MO no está en el mapa; se puede elegir cualquier material (p. ej. ExtraWide AP02_*)
270
+ */
271
+ type ModoMaterialesAL04 = 'automatico' | 'elegir' | 'sinMaterial' | 'libre';
272
+ declare function modoMaterialesAL04(codMO: string): ModoMaterialesAL04;
273
+ /** Cantidad fija de la MO (HP01, NVT01 = 1): el campo queda deshabilitado (FormAdd.tsx L366-367, L474-479) */
274
+ declare function cantidadFijaMOAL04(codMO: string): number | undefined;
275
+ interface MaterialRequeridoAL04 {
276
+ Codigo: string;
277
+ Cantidad: number;
278
+ /** Ducto: stock personal; si no, stock de almacén */
279
+ StockPersonal: boolean;
280
+ }
281
+ /** Materiales automáticos: (CantidadFija ? Cantidad : cantidad de MO) × Factor (verificarReglas, FormAdd.tsx L255-297) */
282
+ declare function materialesAutomaticosAL04(codMO: string, cantidadMO: number): MaterialRequeridoAL04[];
283
+ /** Códigos que se pueden elegir; undefined si la MO no restringe los materiales (AddedMaterial.tsx L263-271) */
284
+ declare function materialesSeleccionablesAL04(codMO: string): string[] | undefined;
285
+ interface CantidadMaterialAL04 {
286
+ /** Cantidad que se fija al elegir el material; undefined si la informa el usuario */
287
+ Cantidad?: number;
288
+ Bloqueada: boolean;
289
+ /** El material lleva hijos (conectores / empalmes) cuya cantidad son los empalmes × Factor */
290
+ PideEmpalmes: boolean;
291
+ }
292
+ /**
293
+ * Cantidad del material elegido (AddedMaterial.tsx L194-219): CantidadPadre = cantidad de MO × Factor;
294
+ * CantidadFija = Cantidad × Factor. Si sus hijos no tienen cantidad fija, se piden los empalmes.
295
+ */
296
+ declare function cantidadMaterialAL04(codMO: string, codMaterial: string, cantidadMO: number): CantidadMaterialAL04;
297
+ /**
298
+ * Hijos del material elegido (agregarSubMateriales, AddedMaterial.tsx L113-156):
299
+ * (CantidadFija ? Cantidad : CantidadPadre ? cantidad del material : empalmes) × Factor.
300
+ * Sin empalmes no se añaden; si no hay forma de obtener la cantidad es error.
301
+ */
302
+ declare function subMaterialesAL04(codMO: string, codMaterial: string, cantidadMaterial: number, empalmes: number): MaterialRequeridoAL04[];
303
+ /**
304
+ * División por exceso (UseCasePreliquidar.ts L438-469): los ductos se reparten entre la valorización padre y la hija
305
+ * según la cantidad de cada una; el resto de materiales queda en el padre.
306
+ * Decisión 2026-10-14: el padre se redondea a 2 decimales y la hija lleva el total menos el padre.
307
+ */
308
+ declare function prorratearMaterialesAL04<T extends {
309
+ Codigo: string;
310
+ Cantidad: number;
311
+ CantidadInformada: number;
312
+ }>(materiales: T[], cantidadPadre: number, cantidadTotal: number): {
313
+ padre: T[];
314
+ hija: T[];
315
+ };
316
+ /**
317
+ * Lo preliquidado en la obra de AP02 + ExtraWide no puede superar a AP01 (tolerancia 0.001). Solo se valida si
318
+ * la preliquidación incluye alguno de esos códigos. Devuelve el mensaje de error o null.
319
+ * @param moUo resumen de todos los trabajos de la obra (CalcularResumenValorizacionesAlemania)
320
+ * @param manoObra ManoObra de la GOM: diccionario LineaCodigoCub → código de la MO
321
+ * @param codigosNuevos códigos de MO de las valorizaciones nuevas
322
+ */
323
+ declare function validarAsfaltoAL04(moUo: {
324
+ LineaCodigoCub: string;
325
+ Cantidad: number;
326
+ }[], manoObra: {
327
+ Valorizacion: {
328
+ Codigo: string;
329
+ Descripcion?: string;
330
+ DetalleChile?: {
331
+ LineaCodigoCub?: string;
332
+ };
333
+ }[];
334
+ }, codigosNuevos: string[]): string | null;
335
+
213
336
  declare const codMOTroncalAL02OC: never[];
214
337
  declare const codMOTroncalAL02Soplado: never[];
215
338
  declare const codMOTroncalAL02Asfaltado: never[];
@@ -973,4 +1096,4 @@ declare function getCookieToken(req: Request<any>, webOrigins: string[]): string
973
1096
 
974
1097
  declare function validateUUIDv4Param(BadRequestException: ClassConstructor<Error>, req: Request<any>, _res: Response, next: NextFunction): Promise<void>;
975
1098
 
976
- export { ActualizarDataManoObra, ActualizarDataReserva, ActualizarDataResumenLiquidaciones, ActualizarDataResumenLiquidacionesColombia, ActualizarDataResumenValorizacionesAlemania, ActualizarDataTrabajos, AsignacionHelper, BuscarZonaContratista, CalcularResumenHPMOLiquidado, CalcularResumenLiquidaciones, CalcularResumenLiquidacionesColombia, CalcularResumenValorizacionesAlemania, type CierresPreliquidarAL02, CodigosMaterialDuctosAL02, CodigosMaterialDuctosAL04, CodigosMaterialSoplado, CodsMapeoMOMaterial, CodsMapeoMOMaterialNVT01, CodsMapeoMOMaterialSopladoClientes, CodsMapeoMOMaterialSopladoTroncal, CodsMapeoMO_Material_Arquertas, CompararFechas, CurrencyFormat, DocumentacionReplanteo, EstadoEspecialidad9612, FormatearErrorValidacionMOHijas, GemeindeChangeNomenclatura, GetCodigoFechaActual, type IDPContrato, type IDocumentacion, type ILineaValidacion, type IMOAndMaterialsRules, type IMORules, type IMateriales, type IResultadoValidacionMOHijas, MOCantidadNVT01, MOHijasAL04, MOHijasDEPTH, MapeoEspecialidades9612, MapeoMOBOMAL04, MapeoMatBOMAL04, type MatRetiradosType, type MatStockAlmacenType, type MatStockPersonalType$2 as MatStockPersonalType, type MatUtilizadosType$2 as MatUtilizadosType, type MoUoType$2 as MoUoType, ModelDataFlujosDocumentacionReplanteo, ObtenerMONoReservada, ObtenerPrecioContratistaVigente, ObtenerZonaAsignada, type ResumenLiquidacionesType, type ResumenLiquidacionesTypeChile, type ResumenLiquidacionesTypeColombia, SEGMENT_TY, SOMACYL_CODIGO_CONTADOR_RETIRADO, SOMACYL_PHOTO_POSITIONS, type SomacylPhotoKey, type TARGET, type TipoPreliquidacionAL02, UpdateNodosDocDP, ValidarRelacionMOHijasAL04, ValorizacionHelper, builSystemOption, buildDataMOFromMaterialRules, buildDataMaterialsRule, buildKeyMO, buildMenu, buildReservaMOJobMajorProjectsAlemaniaAL02, buildReservaMOJobMajorProjectsAlemaniaAL04, buildTenantCollectionName, calcularTotalMaterialValorizacionPeru9112, checkAndBuildMaterialsFromStock, checkMaterialAvailability, codBalizaAL02, codBalizaAL04, codClientes, codIssueByPeriodoAL02, codMOClientesAL02, codMOClientesAL02Asfaltado, codMOClientesAL02OC, codMOClientesAL02Soplado, codMOClientes_ReglaLiquidacion1, codMODROPAL04, codMODROPAL04OC, codMODROPAL04Soplado, codMOExcluidos, codMOFTTFAL04, codMONoClientesAL02, codMONoClientesAL02Asfaltado, codMONoClientesAL02OC, codMONoClientesAL02Soplado, codMONoClientes_ReglaLiquidacion1, codMOOcultosAL04, codMOPreliquidarTroncalAL02, codMOPublico, codMOTroncalAL02, codMOTroncalAL02Asfaltado, codMOTroncalAL02OC, codMOTroncalAL02Soplado, codMOTroncalAL04, codMOTroncalAL04Asfaltado, codMOTroncalAL04Issue, codMOTroncalAL04OC, codMOTroncalAL04Soplado, codMOTroncalHistoricoAL02, codMOTroncal_ReglaLiquidacion1, codNoCliente, codSopladoRD, codigosBaremosSubcontrataAL02, codigosMOT1_F2, codigosMaterialDuctos, codigosMaterialUGG, codigosSopladoHP, collections, consumirStockPersonal, convertDates, dataFlujosHomePass, db_default, db_root, documentRequirementAltasNVT, empresas, esAsignacionPreliquidableAL02, esCadenaFechaISOValida, esObjetoFecha, estadoRechazadaPorMetraje, formatCurrencyV1, formatNumberSmart, formatNumberV1, formatPercentageV1, generateUniqueNumber, generateUniqueNumberArray, getCaptureDateSomacyl, getChannelName, getContainerName, getCookieToken, getDBName, getDateInTimeZone, getKeyRedisSortedSet, getModelDataAdicional, getNextID_Amap, getNextID_AsignacionValorizacion, getNextID_Valorizacion, getPrecioContratista, getPriceMaterial, getQueueName, getQueueNameSaveOneNotification, getRequestOrigin, hashCode, isValidDate, isValidPartialEntity, logTiempoProceso, mapaDPContratoPrecioFullAL02, mapaEstadoObraFaseAL02, mapaMOMaterialAL02, mapaMOMaterialAL04, mapaReglaSopladoClientes, mapaReglaSopladoTroncal, mapeoZonasSimilares, motivoConsumoMaterialAutomaticoDuctos, newCodMOTroncalReglaLiquidacion1, obtenerCodMOHomePass, obtenerDocumentacionClientes, obtenerDocumentacionNoClientes, obtenerEspecialidadesCerradas, obtenerPrecioContratistaMaterial, obtenerPrecioManoObraAL02, obtenerPrecioManoObraAL04, obtenerTipoYCodigoMO, paisMap, parseDuplicateKeyError, roundNumber, searchCurrentContractorSpecialtyPrice, setColModels, setContext, throwSomacylError, updatePriceContractorMOAL02, updatePriceContractorMOAL04, updatePriceMOAL02, updatePriceMOAL04, updatePricePBBudgetAlemaniaAL02, updatePricePBBudgetAlemaniaAL04, uuidRegex, validateNoLookup, validateUUIDv4Param, verifyDetailsFinalizeSomacyl, verifyFiles, verifyInventoryFinalize, verifyInventoryFinalizeSomacyl, verifyInventoryLimitsSomacyl, verifyPhotosFinalizeSomacyl, verifyPhotosNotFinalizedSomacyl };
1099
+ export { ActualizarDataManoObra, ActualizarDataReserva, ActualizarDataResumenLiquidaciones, ActualizarDataResumenLiquidacionesColombia, ActualizarDataResumenValorizacionesAlemania, ActualizarDataTrabajos, AsignacionHelper, BuscarZonaContratista, CalcularResumenHPMOLiquidado, CalcularResumenLiquidaciones, CalcularResumenLiquidacionesColombia, CalcularResumenValorizacionesAlemania, type CantidadMaterialAL04, type CierresPreliquidarAL02, type CierresPreliquidarAL04, CodigosMaterialDuctosAL02, CodigosMaterialDuctosAL04, CodigosMaterialSoplado, CodsMapeoMOMaterial, CodsMapeoMOMaterialNVT01, CodsMapeoMOMaterialSopladoClientes, CodsMapeoMOMaterialSopladoTroncal, CodsMapeoMO_Material_Arquertas, CompararFechas, CurrencyFormat, DocumentacionReplanteo, EstadoEspecialidad9612, FormatearErrorValidacionMOHijas, GemeindeChangeNomenclatura, GetCodigoFechaActual, type IDPContrato, type IDocumentacion, type ILineaValidacion, type IMOAndMaterialsRules, type IMORules, type IMateriales, type IResultadoValidacionMOHijas, MOCantidadNVT01, MOHijasAL04, MOHijasDEPTH, MapeoEspecialidades9612, MapeoMOBOMAL04, MapeoMatBOMAL04, type MatRetiradosType, type MatStockAlmacenType, type MatStockPersonalType$2 as MatStockPersonalType, type MatUtilizadosType$2 as MatUtilizadosType, type MaterialRequeridoAL04, type MoUoType$2 as MoUoType, ModelDataFlujosDocumentacionReplanteo, type ModoMaterialesAL04, ObtenerMONoReservada, ObtenerPrecioContratistaVigente, ObtenerZonaAsignada, type ResumenLiquidacionesType, type ResumenLiquidacionesTypeChile, type ResumenLiquidacionesTypeColombia, SEGMENT_TY, SOMACYL_CODIGO_CONTADOR_RETIRADO, SOMACYL_PHOTO_POSITIONS, type SomacylPhotoKey, type TARGET, type TipoPreliquidacionAL02, type TipoPreliquidacionAL04, UpdateNodosDocDP, ValidarRelacionMOHijasAL04, ValorizacionHelper, builSystemOption, buildDataMOFromMaterialRules, buildDataMaterialsRule, buildKeyMO, buildMenu, buildReservaMOJobMajorProjectsAlemaniaAL02, buildReservaMOJobMajorProjectsAlemaniaAL04, buildTenantCollectionName, calcularTotalMaterialValorizacionPeru9112, cantidadFijaMOAL04, cantidadMaterialAL04, checkAndBuildMaterialsFromStock, checkMaterialAvailability, codBalizaAL02, codBalizaAL04, codBalizaPreliquidarAL04, codBaremoUnicoDPAL04, codClientes, codIssueByPeriodoAL02, codMOAsfaltoHijasAL04, codMOAsfaltoMadreAL04, codMOClientesAL02, codMOClientesAL02Asfaltado, codMOClientesAL02OC, codMOClientesAL02Soplado, codMOClientes_ReglaLiquidacion1, codMODROPAL04, codMODROPAL04OC, codMODROPAL04Soplado, codMOExcluidos, codMOFTTFAL04, codMONoClientesAL02, codMONoClientesAL02Asfaltado, codMONoClientesAL02OC, codMONoClientesAL02Soplado, codMONoClientes_ReglaLiquidacion1, codMONoPreliquidablesAL04, codMOOcultosAL04, codMOPreliquidarTroncalAL02, codMOPreliquidarTroncalAL04, codMOPublico, codMOTroncalAL02, codMOTroncalAL02Asfaltado, codMOTroncalAL02OC, codMOTroncalAL02Soplado, codMOTroncalAL04, codMOTroncalAL04Asfaltado, codMOTroncalAL04Issue, codMOTroncalAL04OC, codMOTroncalAL04Soplado, codMOTroncalHistoricoAL02, codMOTroncal_ReglaLiquidacion1, codMaterialesOcultosAL04, codNoCliente, codSopladoRD, codigosBaremosSubcontrataAL02, codigosMOT1_F2, codigosMaterialDuctos, codigosMaterialUGG, codigosSopladoHP, collections, consumirStockPersonal, convertDates, dataFlujosHomePass, db_default, db_root, documentRequirementAltasNVT, empresas, esAsignacionPreliquidableAL02, esAsignacionPreliquidableAL04, esCadenaFechaISOValida, esMaterialDuctoAL04, esObjetoFecha, estadoRechazadaPorMetraje, estadoRechazadaPorMetrajeAL04, formatCurrencyV1, formatNumberSmart, formatNumberV1, formatPercentageV1, generateUniqueNumber, generateUniqueNumberArray, getCaptureDateSomacyl, getChannelName, getContainerName, getCookieToken, getDBName, getDateInTimeZone, getKeyRedisSortedSet, getModelDataAdicional, getNextID_Amap, getNextID_AsignacionValorizacion, getNextID_Valorizacion, getPrecioContratista, getPriceMaterial, getQueueName, getQueueNameSaveOneNotification, getRequestOrigin, hashCode, isValidDate, isValidPartialEntity, logTiempoProceso, mapaDPContratoPrecioFullAL02, mapaEstadoObraFaseAL02, mapaMOMaterialAL02, mapaMOMaterialAL04, mapaReglaSopladoClientes, mapaReglaSopladoTroncal, mapeoZonasSimilares, materialesAutomaticosAL04, materialesSeleccionablesAL04, modoMaterialesAL04, motivoConsumoAlmacenAL04, motivoConsumoMaterialAutomaticoDuctos, newCodMOTroncalReglaLiquidacion1, obtenerCodMOHomePass, obtenerCodMOHomePassAL04, obtenerDocumentacionClientes, obtenerDocumentacionNoClientes, obtenerEspecialidadesCerradas, obtenerEspecialidadesCerradasAL04, obtenerPrecioContratistaMaterial, obtenerPrecioManoObraAL02, obtenerPrecioManoObraAL04, obtenerTipoYCodigoMO, paisMap, parseDuplicateKeyError, prorratearMaterialesAL04, roundNumber, searchCurrentContractorSpecialtyPrice, setColModels, setContext, subMaterialesAL04, throwSomacylError, updatePriceContractorMOAL02, updatePriceContractorMOAL04, updatePriceMOAL02, updatePriceMOAL04, updatePricePBBudgetAlemaniaAL02, updatePricePBBudgetAlemaniaAL04, uuidRegex, validarAsfaltoAL04, validateNoLookup, validateUUIDv4Param, verifyDetailsFinalizeSomacyl, verifyFiles, verifyInventoryFinalize, verifyInventoryFinalizeSomacyl, verifyInventoryLimitsSomacyl, verifyPhotosFinalizeSomacyl, verifyPhotosNotFinalizedSomacyl };
package/dist/index.js CHANGED
@@ -73,12 +73,18 @@ __export(index_exports, {
73
73
  buildReservaMOJobMajorProjectsAlemaniaAL04: () => buildReservaMOJobMajorProjectsAlemaniaAL04,
74
74
  buildTenantCollectionName: () => buildTenantCollectionName,
75
75
  calcularTotalMaterialValorizacionPeru9112: () => calcularTotalMaterialValorizacionPeru9112,
76
+ cantidadFijaMOAL04: () => cantidadFijaMOAL04,
77
+ cantidadMaterialAL04: () => cantidadMaterialAL04,
76
78
  checkAndBuildMaterialsFromStock: () => checkAndBuildMaterialsFromStock,
77
79
  checkMaterialAvailability: () => checkMaterialAvailability,
78
80
  codBalizaAL02: () => codBalizaAL02,
79
81
  codBalizaAL04: () => codBalizaAL04,
82
+ codBalizaPreliquidarAL04: () => codBalizaPreliquidarAL04,
83
+ codBaremoUnicoDPAL04: () => codBaremoUnicoDPAL04,
80
84
  codClientes: () => codClientes,
81
85
  codIssueByPeriodoAL02: () => codIssueByPeriodoAL02,
86
+ codMOAsfaltoHijasAL04: () => codMOAsfaltoHijasAL04,
87
+ codMOAsfaltoMadreAL04: () => codMOAsfaltoMadreAL04,
82
88
  codMOClientesAL02: () => codMOClientesAL02,
83
89
  codMOClientesAL02Asfaltado: () => codMOClientesAL02Asfaltado,
84
90
  codMOClientesAL02OC: () => codMOClientesAL02OC,
@@ -94,8 +100,10 @@ __export(index_exports, {
94
100
  codMONoClientesAL02OC: () => codMONoClientesAL02OC,
95
101
  codMONoClientesAL02Soplado: () => codMONoClientesAL02Soplado,
96
102
  codMONoClientes_ReglaLiquidacion1: () => codMONoClientes_ReglaLiquidacion1,
103
+ codMONoPreliquidablesAL04: () => codMONoPreliquidablesAL04,
97
104
  codMOOcultosAL04: () => codMOOcultosAL04,
98
105
  codMOPreliquidarTroncalAL02: () => codMOPreliquidarTroncalAL02,
106
+ codMOPreliquidarTroncalAL04: () => codMOPreliquidarTroncalAL04,
99
107
  codMOPublico: () => codMOPublico,
100
108
  codMOTroncalAL02: () => codMOTroncalAL02,
101
109
  codMOTroncalAL02Asfaltado: () => codMOTroncalAL02Asfaltado,
@@ -108,6 +116,7 @@ __export(index_exports, {
108
116
  codMOTroncalAL04Soplado: () => codMOTroncalAL04Soplado,
109
117
  codMOTroncalHistoricoAL02: () => codMOTroncalHistoricoAL02,
110
118
  codMOTroncal_ReglaLiquidacion1: () => codMOTroncal_ReglaLiquidacion1,
119
+ codMaterialesOcultosAL04: () => codMaterialesOcultosAL04,
111
120
  codNoCliente: () => codNoCliente,
112
121
  codSopladoRD: () => codSopladoRD,
113
122
  codigosBaremosSubcontrataAL02: () => codigosBaremosSubcontrataAL02,
@@ -124,9 +133,12 @@ __export(index_exports, {
124
133
  documentRequirementAltasNVT: () => documentRequirementAltasNVT,
125
134
  empresas: () => empresas,
126
135
  esAsignacionPreliquidableAL02: () => esAsignacionPreliquidableAL02,
136
+ esAsignacionPreliquidableAL04: () => esAsignacionPreliquidableAL04,
127
137
  esCadenaFechaISOValida: () => esCadenaFechaISOValida,
138
+ esMaterialDuctoAL04: () => esMaterialDuctoAL04,
128
139
  esObjetoFecha: () => esObjetoFecha,
129
140
  estadoRechazadaPorMetraje: () => estadoRechazadaPorMetraje,
141
+ estadoRechazadaPorMetrajeAL04: () => estadoRechazadaPorMetrajeAL04,
130
142
  formatCurrencyV1: () => formatCurrencyV1,
131
143
  formatNumberSmart: () => formatNumberSmart,
132
144
  formatNumberV1: () => formatNumberV1,
@@ -160,22 +172,30 @@ __export(index_exports, {
160
172
  mapaReglaSopladoClientes: () => mapaReglaSopladoClientes,
161
173
  mapaReglaSopladoTroncal: () => mapaReglaSopladoTroncal,
162
174
  mapeoZonasSimilares: () => mapeoZonasSimilares,
175
+ materialesAutomaticosAL04: () => materialesAutomaticosAL04,
176
+ materialesSeleccionablesAL04: () => materialesSeleccionablesAL04,
177
+ modoMaterialesAL04: () => modoMaterialesAL04,
178
+ motivoConsumoAlmacenAL04: () => motivoConsumoAlmacenAL04,
163
179
  motivoConsumoMaterialAutomaticoDuctos: () => motivoConsumoMaterialAutomaticoDuctos,
164
180
  newCodMOTroncalReglaLiquidacion1: () => newCodMOTroncalReglaLiquidacion1,
165
181
  obtenerCodMOHomePass: () => obtenerCodMOHomePass,
182
+ obtenerCodMOHomePassAL04: () => obtenerCodMOHomePassAL04,
166
183
  obtenerDocumentacionClientes: () => obtenerDocumentacionClientes,
167
184
  obtenerDocumentacionNoClientes: () => obtenerDocumentacionNoClientes,
168
185
  obtenerEspecialidadesCerradas: () => obtenerEspecialidadesCerradas,
186
+ obtenerEspecialidadesCerradasAL04: () => obtenerEspecialidadesCerradasAL04,
169
187
  obtenerPrecioContratistaMaterial: () => obtenerPrecioContratistaMaterial,
170
188
  obtenerPrecioManoObraAL02: () => obtenerPrecioManoObraAL02,
171
189
  obtenerPrecioManoObraAL04: () => obtenerPrecioManoObraAL04,
172
190
  obtenerTipoYCodigoMO: () => obtenerTipoYCodigoMO,
173
191
  paisMap: () => paisMap,
174
192
  parseDuplicateKeyError: () => parseDuplicateKeyError,
193
+ prorratearMaterialesAL04: () => prorratearMaterialesAL04,
175
194
  roundNumber: () => roundNumber,
176
195
  searchCurrentContractorSpecialtyPrice: () => searchCurrentContractorSpecialtyPrice,
177
196
  setColModels: () => setColModels,
178
197
  setContext: () => setContext,
198
+ subMaterialesAL04: () => subMaterialesAL04,
179
199
  throwSomacylError: () => throwSomacylError,
180
200
  updatePriceContractorMOAL02: () => updatePriceContractorMOAL02,
181
201
  updatePriceContractorMOAL04: () => updatePriceContractorMOAL04,
@@ -184,6 +204,7 @@ __export(index_exports, {
184
204
  updatePricePBBudgetAlemaniaAL02: () => updatePricePBBudgetAlemaniaAL02,
185
205
  updatePricePBBudgetAlemaniaAL04: () => updatePricePBBudgetAlemaniaAL04,
186
206
  uuidRegex: () => uuidRegex,
207
+ validarAsfaltoAL04: () => validarAsfaltoAL04,
187
208
  validateNoLookup: () => validateNoLookup,
188
209
  validateUUIDv4Param: () => validateUUIDv4Param,
189
210
  verifyDetailsFinalizeSomacyl: () => verifyDetailsFinalizeSomacyl,
@@ -4126,6 +4147,196 @@ Debe preliquidar primero al menos ${v.DiferenciaExcedida.toFixed(2)} de ${v.Codi
4126
4147
  }
4127
4148
  __name(FormatearErrorValidacionMOHijas, "FormatearErrorValidacionMOHijas");
4128
4149
 
4150
+ // src/Programados/Alemania/AL02/codigosMOT1_F2.ts
4151
+ var codigosMOT1_F2 = [
4152
+ "010601600",
4153
+ "010600500",
4154
+ "031406300",
4155
+ "T13",
4156
+ "052208800",
4157
+ "010601300",
4158
+ "010600700",
4159
+ "073100600",
4160
+ "073101000",
4161
+ "073101300",
4162
+ "073101600",
4163
+ "010600600",
4164
+ "073100500",
4165
+ "010601000",
4166
+ "073100700"
4167
+ ];
4168
+
4169
+ // src/Programados/Alemania/AL04/reglasPreliquidarAL04.ts
4170
+ var motivoConsumoAlmacenAL04 = "CONSUMO_MATERIAL_AUTOMATICO_DUCTOS";
4171
+ var estadoRechazadaPorMetrajeAL04 = "RECHAZADA POR METRAJE";
4172
+ var codMONoPreliquidablesAL04 = codigosMOT1_F2;
4173
+ var codBalizaPreliquidarAL04 = codBalizaAL04;
4174
+ var codBaremoUnicoDPAL04 = [
4175
+ "NVT01"
4176
+ ];
4177
+ var codMOAsfaltoMadreAL04 = "AP01";
4178
+ var codMOAsfaltoHijasAL04 = codMOTroncalAL04Asfaltado;
4179
+ var codMOPreliquidarTroncalAL04 = codMOTroncalAL04;
4180
+ function obtenerCodMOHomePassAL04(tipo) {
4181
+ return tipo === "Business" ? codMOFTTFAL04 : codMODROPAL04;
4182
+ }
4183
+ __name(obtenerCodMOHomePassAL04, "obtenerCodMOHomePassAL04");
4184
+ function obtenerEspecialidadesCerradasAL04(cierres) {
4185
+ return [
4186
+ cierres.Asfaltado,
4187
+ cierres.OC,
4188
+ cierres.Soplado
4189
+ ].filter((e, _i, arr) => arr[1]?.Estado && e?.Estado).map((e) => e?.Especialidad ?? "");
4190
+ }
4191
+ __name(obtenerEspecialidadesCerradasAL04, "obtenerEspecialidadesCerradasAL04");
4192
+ function esAsignacionPreliquidableAL04(asignacion, tipo, especialidadesCerradas) {
4193
+ const codMO = asignacion.ManoObra.Codigo;
4194
+ const permitida = tipo === "Troncal" ? codMOPreliquidarTroncalAL04.includes(codMO.trim()) : obtenerCodMOHomePassAL04(tipo).includes(codMO);
4195
+ return permitida && !especialidadesCerradas.includes(asignacion.Especialidad.Codigo);
4196
+ }
4197
+ __name(esAsignacionPreliquidableAL04, "esAsignacionPreliquidableAL04");
4198
+ var esMaterialDuctoAL04 = /* @__PURE__ */ __name((codigo) => CodigosMaterialDuctosAL04.includes(codigo), "esMaterialDuctoAL04");
4199
+ var codMaterialesOcultosAL04 = codMOOcultosAL04;
4200
+ function modoMaterialesAL04(codMO) {
4201
+ const regla = mapaMOMaterialAL04.get(codMO);
4202
+ if (!regla) return "libre";
4203
+ if (regla.Materiales instanceof Map) return "elegir";
4204
+ return regla.Materiales.length ? "automatico" : "sinMaterial";
4205
+ }
4206
+ __name(modoMaterialesAL04, "modoMaterialesAL04");
4207
+ function cantidadFijaMOAL04(codMO) {
4208
+ const regla = mapaMOMaterialAL04.get(codMO);
4209
+ return regla?.CantidadFija ? regla.Cantidad : void 0;
4210
+ }
4211
+ __name(cantidadFijaMOAL04, "cantidadFijaMOAL04");
4212
+ function materialesAutomaticosAL04(codMO, cantidadMO) {
4213
+ const regla = mapaMOMaterialAL04.get(codMO);
4214
+ if (!regla || !Array.isArray(regla.Materiales)) return [];
4215
+ return regla.Materiales.map((material) => ({
4216
+ Codigo: material.Codigo,
4217
+ Cantidad: (material.CantidadFija ? material.Cantidad : cantidadMO) * material.Factor,
4218
+ StockPersonal: esMaterialDuctoAL04(material.Codigo)
4219
+ }));
4220
+ }
4221
+ __name(materialesAutomaticosAL04, "materialesAutomaticosAL04");
4222
+ function materialesSeleccionablesAL04(codMO) {
4223
+ const regla = mapaMOMaterialAL04.get(codMO);
4224
+ if (!regla) return void 0;
4225
+ return regla.Materiales instanceof Map ? [
4226
+ ...regla.Materiales.keys()
4227
+ ] : regla.Materiales.map((e) => e.Codigo);
4228
+ }
4229
+ __name(materialesSeleccionablesAL04, "materialesSeleccionablesAL04");
4230
+ var reglaMaterialAL04 = /* @__PURE__ */ __name((codMO, codMaterial) => {
4231
+ const regla = mapaMOMaterialAL04.get(codMO);
4232
+ return regla && regla.Materiales instanceof Map ? regla.Materiales.get(codMaterial) : void 0;
4233
+ }, "reglaMaterialAL04");
4234
+ function cantidadMaterialAL04(codMO, codMaterial, cantidadMO) {
4235
+ const regla = reglaMaterialAL04(codMO, codMaterial);
4236
+ if (!regla || !Array.isArray(regla.Materiales)) return {
4237
+ Bloqueada: false,
4238
+ PideEmpalmes: false
4239
+ };
4240
+ const PideEmpalmes = regla.Materiales.some((e) => !e.CantidadFija);
4241
+ if (regla.CantidadPadre) return {
4242
+ Cantidad: cantidadMO * regla.Factor,
4243
+ Bloqueada: true,
4244
+ PideEmpalmes
4245
+ };
4246
+ if (regla.CantidadFija) return {
4247
+ Cantidad: regla.Cantidad * regla.Factor,
4248
+ Bloqueada: true,
4249
+ PideEmpalmes
4250
+ };
4251
+ return {
4252
+ Bloqueada: false,
4253
+ PideEmpalmes
4254
+ };
4255
+ }
4256
+ __name(cantidadMaterialAL04, "cantidadMaterialAL04");
4257
+ function subMaterialesAL04(codMO, codMaterial, cantidadMaterial, empalmes) {
4258
+ const regla = reglaMaterialAL04(codMO, codMaterial);
4259
+ if (!regla || !Array.isArray(regla.Materiales)) return [];
4260
+ const pideEmpalmes = regla.Materiales.some((e) => !e.CantidadFija);
4261
+ const result = [];
4262
+ for (const material of regla.Materiales) {
4263
+ const cantidad = (material.CantidadFija ? material.Cantidad : material.CantidadPadre ? cantidadMaterial : pideEmpalmes ? empalmes : 0) * material.Factor;
4264
+ if (cantidad === 0 && pideEmpalmes) continue;
4265
+ if (cantidad === 0) throw new Error("Error al obtener cantidad");
4266
+ result.push({
4267
+ Codigo: material.Codigo,
4268
+ Cantidad: cantidad,
4269
+ StockPersonal: esMaterialDuctoAL04(material.Codigo)
4270
+ });
4271
+ }
4272
+ return result;
4273
+ }
4274
+ __name(subMaterialesAL04, "subMaterialesAL04");
4275
+ function prorratearMaterialesAL04(materiales, cantidadPadre, cantidadTotal) {
4276
+ const porcentaje = cantidadPadre / cantidadTotal;
4277
+ const padre = [];
4278
+ const hija = [];
4279
+ for (const material of materiales) {
4280
+ if (!esMaterialDuctoAL04(material.Codigo)) {
4281
+ padre.push(material);
4282
+ continue;
4283
+ }
4284
+ const cantidad = round2(material.Cantidad * porcentaje);
4285
+ const informada = round2(material.CantidadInformada * porcentaje);
4286
+ padre.push({
4287
+ ...material,
4288
+ Cantidad: cantidad,
4289
+ CantidadInformada: informada
4290
+ });
4291
+ hija.push({
4292
+ ...material,
4293
+ Cantidad: resta(material.Cantidad, cantidad),
4294
+ CantidadInformada: resta(material.CantidadInformada, informada)
4295
+ });
4296
+ }
4297
+ return {
4298
+ padre,
4299
+ hija
4300
+ };
4301
+ }
4302
+ __name(prorratearMaterialesAL04, "prorratearMaterialesAL04");
4303
+ var round2 = /* @__PURE__ */ __name((value) => Number(value.toFixed(2)), "round2");
4304
+ var resta = /* @__PURE__ */ __name((total, parte) => Math.round((total - parte) * 1e6) / 1e6, "resta");
4305
+ function validarAsfaltoAL04(moUo, manoObra, codigosNuevos) {
4306
+ const codigos = [
4307
+ codMOAsfaltoMadreAL04,
4308
+ ...codMOAsfaltoHijasAL04
4309
+ ];
4310
+ if (!codigosNuevos.some((e) => codigos.includes(e))) return null;
4311
+ const lineas = /* @__PURE__ */ new Map();
4312
+ for (const val of manoObra.Valorizacion ?? []) {
4313
+ const lcc = val.DetalleChile?.LineaCodigoCub;
4314
+ if (lcc) lineas.set(lcc, {
4315
+ codigo: val.Codigo,
4316
+ descripcion: val.Descripcion || ""
4317
+ });
4318
+ }
4319
+ let totalMadre = 0;
4320
+ let totalHija = 0;
4321
+ let descMadre = "";
4322
+ for (const item of moUo) {
4323
+ const info = lineas.get(item.LineaCodigoCub);
4324
+ if (!info) continue;
4325
+ if (info.codigo === codMOAsfaltoMadreAL04) {
4326
+ totalMadre += item.Cantidad;
4327
+ descMadre ||= info.descripcion;
4328
+ }
4329
+ if (codMOAsfaltoHijasAL04.includes(info.codigo)) totalHija += item.Cantidad;
4330
+ }
4331
+ if (totalHija - totalMadre <= 1e-3) return null;
4332
+ const grupo = "Asfalto (AP02 / ExtraWide)";
4333
+ const excedente = (totalHija - totalMadre).toFixed(2);
4334
+ return `No se puede preliquidar porque la cantidad total de ${grupo} (${totalHija.toFixed(2)} m) supera la cantidad de ${descMadre || codMOAsfaltoMadreAL04} (${codMOAsfaltoMadreAL04}: ${totalMadre.toFixed(2)} m) preliquidada en esta obra.
4335
+ Excedente: ${excedente} m.
4336
+ Debe preliquidar primero al menos ${excedente} m de ${codMOAsfaltoMadreAL04} antes de agregar m\xE1s ${grupo}.`;
4337
+ }
4338
+ __name(validarAsfaltoAL04, "validarAsfaltoAL04");
4339
+
4129
4340
  // src/Programados/Alemania/codMOTroncal_ReglaLiquidacion1.ts
4130
4341
  var codMOTroncal_ReglaLiquidacion1 = [
4131
4342
  "011304100",
@@ -4272,25 +4483,6 @@ var codMOPublico = [
4272
4483
  "073101500"
4273
4484
  ];
4274
4485
 
4275
- // src/Programados/Alemania/AL02/codigosMOT1_F2.ts
4276
- var codigosMOT1_F2 = [
4277
- "010601600",
4278
- "010600500",
4279
- "031406300",
4280
- "T13",
4281
- "052208800",
4282
- "010601300",
4283
- "010600700",
4284
- "073100600",
4285
- "073101000",
4286
- "073101300",
4287
- "073101600",
4288
- "010600600",
4289
- "073100500",
4290
- "010601000",
4291
- "073100700"
4292
- ];
4293
-
4294
4486
  // src/Programados/Alemania/codigosMOHP.ts
4295
4487
  var codClientes = [
4296
4488
  "031406300",
@@ -17579,12 +17771,18 @@ __name(validateUUIDv4Param, "validateUUIDv4Param");
17579
17771
  buildReservaMOJobMajorProjectsAlemaniaAL04,
17580
17772
  buildTenantCollectionName,
17581
17773
  calcularTotalMaterialValorizacionPeru9112,
17774
+ cantidadFijaMOAL04,
17775
+ cantidadMaterialAL04,
17582
17776
  checkAndBuildMaterialsFromStock,
17583
17777
  checkMaterialAvailability,
17584
17778
  codBalizaAL02,
17585
17779
  codBalizaAL04,
17780
+ codBalizaPreliquidarAL04,
17781
+ codBaremoUnicoDPAL04,
17586
17782
  codClientes,
17587
17783
  codIssueByPeriodoAL02,
17784
+ codMOAsfaltoHijasAL04,
17785
+ codMOAsfaltoMadreAL04,
17588
17786
  codMOClientesAL02,
17589
17787
  codMOClientesAL02Asfaltado,
17590
17788
  codMOClientesAL02OC,
@@ -17600,8 +17798,10 @@ __name(validateUUIDv4Param, "validateUUIDv4Param");
17600
17798
  codMONoClientesAL02OC,
17601
17799
  codMONoClientesAL02Soplado,
17602
17800
  codMONoClientes_ReglaLiquidacion1,
17801
+ codMONoPreliquidablesAL04,
17603
17802
  codMOOcultosAL04,
17604
17803
  codMOPreliquidarTroncalAL02,
17804
+ codMOPreliquidarTroncalAL04,
17605
17805
  codMOPublico,
17606
17806
  codMOTroncalAL02,
17607
17807
  codMOTroncalAL02Asfaltado,
@@ -17614,6 +17814,7 @@ __name(validateUUIDv4Param, "validateUUIDv4Param");
17614
17814
  codMOTroncalAL04Soplado,
17615
17815
  codMOTroncalHistoricoAL02,
17616
17816
  codMOTroncal_ReglaLiquidacion1,
17817
+ codMaterialesOcultosAL04,
17617
17818
  codNoCliente,
17618
17819
  codSopladoRD,
17619
17820
  codigosBaremosSubcontrataAL02,
@@ -17630,9 +17831,12 @@ __name(validateUUIDv4Param, "validateUUIDv4Param");
17630
17831
  documentRequirementAltasNVT,
17631
17832
  empresas,
17632
17833
  esAsignacionPreliquidableAL02,
17834
+ esAsignacionPreliquidableAL04,
17633
17835
  esCadenaFechaISOValida,
17836
+ esMaterialDuctoAL04,
17634
17837
  esObjetoFecha,
17635
17838
  estadoRechazadaPorMetraje,
17839
+ estadoRechazadaPorMetrajeAL04,
17636
17840
  formatCurrencyV1,
17637
17841
  formatNumberSmart,
17638
17842
  formatNumberV1,
@@ -17666,22 +17870,30 @@ __name(validateUUIDv4Param, "validateUUIDv4Param");
17666
17870
  mapaReglaSopladoClientes,
17667
17871
  mapaReglaSopladoTroncal,
17668
17872
  mapeoZonasSimilares,
17873
+ materialesAutomaticosAL04,
17874
+ materialesSeleccionablesAL04,
17875
+ modoMaterialesAL04,
17876
+ motivoConsumoAlmacenAL04,
17669
17877
  motivoConsumoMaterialAutomaticoDuctos,
17670
17878
  newCodMOTroncalReglaLiquidacion1,
17671
17879
  obtenerCodMOHomePass,
17880
+ obtenerCodMOHomePassAL04,
17672
17881
  obtenerDocumentacionClientes,
17673
17882
  obtenerDocumentacionNoClientes,
17674
17883
  obtenerEspecialidadesCerradas,
17884
+ obtenerEspecialidadesCerradasAL04,
17675
17885
  obtenerPrecioContratistaMaterial,
17676
17886
  obtenerPrecioManoObraAL02,
17677
17887
  obtenerPrecioManoObraAL04,
17678
17888
  obtenerTipoYCodigoMO,
17679
17889
  paisMap,
17680
17890
  parseDuplicateKeyError,
17891
+ prorratearMaterialesAL04,
17681
17892
  roundNumber,
17682
17893
  searchCurrentContractorSpecialtyPrice,
17683
17894
  setColModels,
17684
17895
  setContext,
17896
+ subMaterialesAL04,
17685
17897
  throwSomacylError,
17686
17898
  updatePriceContractorMOAL02,
17687
17899
  updatePriceContractorMOAL04,
@@ -17690,6 +17902,7 @@ __name(validateUUIDv4Param, "validateUUIDv4Param");
17690
17902
  updatePricePBBudgetAlemaniaAL02,
17691
17903
  updatePricePBBudgetAlemaniaAL04,
17692
17904
  uuidRegex,
17905
+ validarAsfaltoAL04,
17693
17906
  validateNoLookup,
17694
17907
  validateUUIDv4Param,
17695
17908
  verifyDetailsFinalizeSomacyl,
package/dist/index.mjs CHANGED
@@ -3931,6 +3931,196 @@ Debe preliquidar primero al menos ${v.DiferenciaExcedida.toFixed(2)} de ${v.Codi
3931
3931
  }
3932
3932
  __name(FormatearErrorValidacionMOHijas, "FormatearErrorValidacionMOHijas");
3933
3933
 
3934
+ // src/Programados/Alemania/AL02/codigosMOT1_F2.ts
3935
+ var codigosMOT1_F2 = [
3936
+ "010601600",
3937
+ "010600500",
3938
+ "031406300",
3939
+ "T13",
3940
+ "052208800",
3941
+ "010601300",
3942
+ "010600700",
3943
+ "073100600",
3944
+ "073101000",
3945
+ "073101300",
3946
+ "073101600",
3947
+ "010600600",
3948
+ "073100500",
3949
+ "010601000",
3950
+ "073100700"
3951
+ ];
3952
+
3953
+ // src/Programados/Alemania/AL04/reglasPreliquidarAL04.ts
3954
+ var motivoConsumoAlmacenAL04 = "CONSUMO_MATERIAL_AUTOMATICO_DUCTOS";
3955
+ var estadoRechazadaPorMetrajeAL04 = "RECHAZADA POR METRAJE";
3956
+ var codMONoPreliquidablesAL04 = codigosMOT1_F2;
3957
+ var codBalizaPreliquidarAL04 = codBalizaAL04;
3958
+ var codBaremoUnicoDPAL04 = [
3959
+ "NVT01"
3960
+ ];
3961
+ var codMOAsfaltoMadreAL04 = "AP01";
3962
+ var codMOAsfaltoHijasAL04 = codMOTroncalAL04Asfaltado;
3963
+ var codMOPreliquidarTroncalAL04 = codMOTroncalAL04;
3964
+ function obtenerCodMOHomePassAL04(tipo) {
3965
+ return tipo === "Business" ? codMOFTTFAL04 : codMODROPAL04;
3966
+ }
3967
+ __name(obtenerCodMOHomePassAL04, "obtenerCodMOHomePassAL04");
3968
+ function obtenerEspecialidadesCerradasAL04(cierres) {
3969
+ return [
3970
+ cierres.Asfaltado,
3971
+ cierres.OC,
3972
+ cierres.Soplado
3973
+ ].filter((e, _i, arr) => arr[1]?.Estado && e?.Estado).map((e) => e?.Especialidad ?? "");
3974
+ }
3975
+ __name(obtenerEspecialidadesCerradasAL04, "obtenerEspecialidadesCerradasAL04");
3976
+ function esAsignacionPreliquidableAL04(asignacion, tipo, especialidadesCerradas) {
3977
+ const codMO = asignacion.ManoObra.Codigo;
3978
+ const permitida = tipo === "Troncal" ? codMOPreliquidarTroncalAL04.includes(codMO.trim()) : obtenerCodMOHomePassAL04(tipo).includes(codMO);
3979
+ return permitida && !especialidadesCerradas.includes(asignacion.Especialidad.Codigo);
3980
+ }
3981
+ __name(esAsignacionPreliquidableAL04, "esAsignacionPreliquidableAL04");
3982
+ var esMaterialDuctoAL04 = /* @__PURE__ */ __name((codigo) => CodigosMaterialDuctosAL04.includes(codigo), "esMaterialDuctoAL04");
3983
+ var codMaterialesOcultosAL04 = codMOOcultosAL04;
3984
+ function modoMaterialesAL04(codMO) {
3985
+ const regla = mapaMOMaterialAL04.get(codMO);
3986
+ if (!regla) return "libre";
3987
+ if (regla.Materiales instanceof Map) return "elegir";
3988
+ return regla.Materiales.length ? "automatico" : "sinMaterial";
3989
+ }
3990
+ __name(modoMaterialesAL04, "modoMaterialesAL04");
3991
+ function cantidadFijaMOAL04(codMO) {
3992
+ const regla = mapaMOMaterialAL04.get(codMO);
3993
+ return regla?.CantidadFija ? regla.Cantidad : void 0;
3994
+ }
3995
+ __name(cantidadFijaMOAL04, "cantidadFijaMOAL04");
3996
+ function materialesAutomaticosAL04(codMO, cantidadMO) {
3997
+ const regla = mapaMOMaterialAL04.get(codMO);
3998
+ if (!regla || !Array.isArray(regla.Materiales)) return [];
3999
+ return regla.Materiales.map((material) => ({
4000
+ Codigo: material.Codigo,
4001
+ Cantidad: (material.CantidadFija ? material.Cantidad : cantidadMO) * material.Factor,
4002
+ StockPersonal: esMaterialDuctoAL04(material.Codigo)
4003
+ }));
4004
+ }
4005
+ __name(materialesAutomaticosAL04, "materialesAutomaticosAL04");
4006
+ function materialesSeleccionablesAL04(codMO) {
4007
+ const regla = mapaMOMaterialAL04.get(codMO);
4008
+ if (!regla) return void 0;
4009
+ return regla.Materiales instanceof Map ? [
4010
+ ...regla.Materiales.keys()
4011
+ ] : regla.Materiales.map((e) => e.Codigo);
4012
+ }
4013
+ __name(materialesSeleccionablesAL04, "materialesSeleccionablesAL04");
4014
+ var reglaMaterialAL04 = /* @__PURE__ */ __name((codMO, codMaterial) => {
4015
+ const regla = mapaMOMaterialAL04.get(codMO);
4016
+ return regla && regla.Materiales instanceof Map ? regla.Materiales.get(codMaterial) : void 0;
4017
+ }, "reglaMaterialAL04");
4018
+ function cantidadMaterialAL04(codMO, codMaterial, cantidadMO) {
4019
+ const regla = reglaMaterialAL04(codMO, codMaterial);
4020
+ if (!regla || !Array.isArray(regla.Materiales)) return {
4021
+ Bloqueada: false,
4022
+ PideEmpalmes: false
4023
+ };
4024
+ const PideEmpalmes = regla.Materiales.some((e) => !e.CantidadFija);
4025
+ if (regla.CantidadPadre) return {
4026
+ Cantidad: cantidadMO * regla.Factor,
4027
+ Bloqueada: true,
4028
+ PideEmpalmes
4029
+ };
4030
+ if (regla.CantidadFija) return {
4031
+ Cantidad: regla.Cantidad * regla.Factor,
4032
+ Bloqueada: true,
4033
+ PideEmpalmes
4034
+ };
4035
+ return {
4036
+ Bloqueada: false,
4037
+ PideEmpalmes
4038
+ };
4039
+ }
4040
+ __name(cantidadMaterialAL04, "cantidadMaterialAL04");
4041
+ function subMaterialesAL04(codMO, codMaterial, cantidadMaterial, empalmes) {
4042
+ const regla = reglaMaterialAL04(codMO, codMaterial);
4043
+ if (!regla || !Array.isArray(regla.Materiales)) return [];
4044
+ const pideEmpalmes = regla.Materiales.some((e) => !e.CantidadFija);
4045
+ const result = [];
4046
+ for (const material of regla.Materiales) {
4047
+ const cantidad = (material.CantidadFija ? material.Cantidad : material.CantidadPadre ? cantidadMaterial : pideEmpalmes ? empalmes : 0) * material.Factor;
4048
+ if (cantidad === 0 && pideEmpalmes) continue;
4049
+ if (cantidad === 0) throw new Error("Error al obtener cantidad");
4050
+ result.push({
4051
+ Codigo: material.Codigo,
4052
+ Cantidad: cantidad,
4053
+ StockPersonal: esMaterialDuctoAL04(material.Codigo)
4054
+ });
4055
+ }
4056
+ return result;
4057
+ }
4058
+ __name(subMaterialesAL04, "subMaterialesAL04");
4059
+ function prorratearMaterialesAL04(materiales, cantidadPadre, cantidadTotal) {
4060
+ const porcentaje = cantidadPadre / cantidadTotal;
4061
+ const padre = [];
4062
+ const hija = [];
4063
+ for (const material of materiales) {
4064
+ if (!esMaterialDuctoAL04(material.Codigo)) {
4065
+ padre.push(material);
4066
+ continue;
4067
+ }
4068
+ const cantidad = round2(material.Cantidad * porcentaje);
4069
+ const informada = round2(material.CantidadInformada * porcentaje);
4070
+ padre.push({
4071
+ ...material,
4072
+ Cantidad: cantidad,
4073
+ CantidadInformada: informada
4074
+ });
4075
+ hija.push({
4076
+ ...material,
4077
+ Cantidad: resta(material.Cantidad, cantidad),
4078
+ CantidadInformada: resta(material.CantidadInformada, informada)
4079
+ });
4080
+ }
4081
+ return {
4082
+ padre,
4083
+ hija
4084
+ };
4085
+ }
4086
+ __name(prorratearMaterialesAL04, "prorratearMaterialesAL04");
4087
+ var round2 = /* @__PURE__ */ __name((value) => Number(value.toFixed(2)), "round2");
4088
+ var resta = /* @__PURE__ */ __name((total, parte) => Math.round((total - parte) * 1e6) / 1e6, "resta");
4089
+ function validarAsfaltoAL04(moUo, manoObra, codigosNuevos) {
4090
+ const codigos = [
4091
+ codMOAsfaltoMadreAL04,
4092
+ ...codMOAsfaltoHijasAL04
4093
+ ];
4094
+ if (!codigosNuevos.some((e) => codigos.includes(e))) return null;
4095
+ const lineas = /* @__PURE__ */ new Map();
4096
+ for (const val of manoObra.Valorizacion ?? []) {
4097
+ const lcc = val.DetalleChile?.LineaCodigoCub;
4098
+ if (lcc) lineas.set(lcc, {
4099
+ codigo: val.Codigo,
4100
+ descripcion: val.Descripcion || ""
4101
+ });
4102
+ }
4103
+ let totalMadre = 0;
4104
+ let totalHija = 0;
4105
+ let descMadre = "";
4106
+ for (const item of moUo) {
4107
+ const info = lineas.get(item.LineaCodigoCub);
4108
+ if (!info) continue;
4109
+ if (info.codigo === codMOAsfaltoMadreAL04) {
4110
+ totalMadre += item.Cantidad;
4111
+ descMadre ||= info.descripcion;
4112
+ }
4113
+ if (codMOAsfaltoHijasAL04.includes(info.codigo)) totalHija += item.Cantidad;
4114
+ }
4115
+ if (totalHija - totalMadre <= 1e-3) return null;
4116
+ const grupo = "Asfalto (AP02 / ExtraWide)";
4117
+ const excedente = (totalHija - totalMadre).toFixed(2);
4118
+ return `No se puede preliquidar porque la cantidad total de ${grupo} (${totalHija.toFixed(2)} m) supera la cantidad de ${descMadre || codMOAsfaltoMadreAL04} (${codMOAsfaltoMadreAL04}: ${totalMadre.toFixed(2)} m) preliquidada en esta obra.
4119
+ Excedente: ${excedente} m.
4120
+ Debe preliquidar primero al menos ${excedente} m de ${codMOAsfaltoMadreAL04} antes de agregar m\xE1s ${grupo}.`;
4121
+ }
4122
+ __name(validarAsfaltoAL04, "validarAsfaltoAL04");
4123
+
3934
4124
  // src/Programados/Alemania/codMOTroncal_ReglaLiquidacion1.ts
3935
4125
  var codMOTroncal_ReglaLiquidacion1 = [
3936
4126
  "011304100",
@@ -4077,25 +4267,6 @@ var codMOPublico = [
4077
4267
  "073101500"
4078
4268
  ];
4079
4269
 
4080
- // src/Programados/Alemania/AL02/codigosMOT1_F2.ts
4081
- var codigosMOT1_F2 = [
4082
- "010601600",
4083
- "010600500",
4084
- "031406300",
4085
- "T13",
4086
- "052208800",
4087
- "010601300",
4088
- "010600700",
4089
- "073100600",
4090
- "073101000",
4091
- "073101300",
4092
- "073101600",
4093
- "010600600",
4094
- "073100500",
4095
- "010601000",
4096
- "073100700"
4097
- ];
4098
-
4099
4270
  // src/Programados/Alemania/codigosMOHP.ts
4100
4271
  var codClientes = [
4101
4272
  "031406300",
@@ -17383,12 +17554,18 @@ export {
17383
17554
  buildReservaMOJobMajorProjectsAlemaniaAL04,
17384
17555
  buildTenantCollectionName,
17385
17556
  calcularTotalMaterialValorizacionPeru9112,
17557
+ cantidadFijaMOAL04,
17558
+ cantidadMaterialAL04,
17386
17559
  checkAndBuildMaterialsFromStock,
17387
17560
  checkMaterialAvailability,
17388
17561
  codBalizaAL02,
17389
17562
  codBalizaAL04,
17563
+ codBalizaPreliquidarAL04,
17564
+ codBaremoUnicoDPAL04,
17390
17565
  codClientes,
17391
17566
  codIssueByPeriodoAL02,
17567
+ codMOAsfaltoHijasAL04,
17568
+ codMOAsfaltoMadreAL04,
17392
17569
  codMOClientesAL02,
17393
17570
  codMOClientesAL02Asfaltado,
17394
17571
  codMOClientesAL02OC,
@@ -17404,8 +17581,10 @@ export {
17404
17581
  codMONoClientesAL02OC,
17405
17582
  codMONoClientesAL02Soplado,
17406
17583
  codMONoClientes_ReglaLiquidacion1,
17584
+ codMONoPreliquidablesAL04,
17407
17585
  codMOOcultosAL04,
17408
17586
  codMOPreliquidarTroncalAL02,
17587
+ codMOPreliquidarTroncalAL04,
17409
17588
  codMOPublico,
17410
17589
  codMOTroncalAL02,
17411
17590
  codMOTroncalAL02Asfaltado,
@@ -17418,6 +17597,7 @@ export {
17418
17597
  codMOTroncalAL04Soplado,
17419
17598
  codMOTroncalHistoricoAL02,
17420
17599
  codMOTroncal_ReglaLiquidacion1,
17600
+ codMaterialesOcultosAL04,
17421
17601
  codNoCliente,
17422
17602
  codSopladoRD,
17423
17603
  codigosBaremosSubcontrataAL02,
@@ -17434,9 +17614,12 @@ export {
17434
17614
  documentRequirementAltasNVT,
17435
17615
  empresas,
17436
17616
  esAsignacionPreliquidableAL02,
17617
+ esAsignacionPreliquidableAL04,
17437
17618
  esCadenaFechaISOValida,
17619
+ esMaterialDuctoAL04,
17438
17620
  esObjetoFecha,
17439
17621
  estadoRechazadaPorMetraje,
17622
+ estadoRechazadaPorMetrajeAL04,
17440
17623
  formatCurrencyV1,
17441
17624
  formatNumberSmart,
17442
17625
  formatNumberV1,
@@ -17470,22 +17653,30 @@ export {
17470
17653
  mapaReglaSopladoClientes,
17471
17654
  mapaReglaSopladoTroncal,
17472
17655
  mapeoZonasSimilares,
17656
+ materialesAutomaticosAL04,
17657
+ materialesSeleccionablesAL04,
17658
+ modoMaterialesAL04,
17659
+ motivoConsumoAlmacenAL04,
17473
17660
  motivoConsumoMaterialAutomaticoDuctos,
17474
17661
  newCodMOTroncalReglaLiquidacion1,
17475
17662
  obtenerCodMOHomePass,
17663
+ obtenerCodMOHomePassAL04,
17476
17664
  obtenerDocumentacionClientes,
17477
17665
  obtenerDocumentacionNoClientes,
17478
17666
  obtenerEspecialidadesCerradas,
17667
+ obtenerEspecialidadesCerradasAL04,
17479
17668
  obtenerPrecioContratistaMaterial,
17480
17669
  obtenerPrecioManoObraAL02,
17481
17670
  obtenerPrecioManoObraAL04,
17482
17671
  obtenerTipoYCodigoMO,
17483
17672
  paisMap,
17484
17673
  parseDuplicateKeyError,
17674
+ prorratearMaterialesAL04,
17485
17675
  roundNumber,
17486
17676
  searchCurrentContractorSpecialtyPrice,
17487
17677
  setColModels,
17488
17678
  setContext,
17679
+ subMaterialesAL04,
17489
17680
  throwSomacylError,
17490
17681
  updatePriceContractorMOAL02,
17491
17682
  updatePriceContractorMOAL04,
@@ -17494,6 +17685,7 @@ export {
17494
17685
  updatePricePBBudgetAlemaniaAL02,
17495
17686
  updatePricePBBudgetAlemaniaAL04,
17496
17687
  uuidRegex,
17688
+ validarAsfaltoAL04,
17497
17689
  validateNoLookup,
17498
17690
  validateUUIDv4Param,
17499
17691
  verifyDetailsFinalizeSomacyl,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sigo-package",
3
- "version": "1.2.178",
3
+ "version": "1.2.179",
4
4
  "description": "Funciones compartidas sigo",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",