406 lines
14 KiB
TypeScript
406 lines
14 KiB
TypeScript
import {
|
|
AssetAttributeDataType,
|
|
AssetTypeOperationalRole,
|
|
} from '../database/entities';
|
|
|
|
export interface MasterBootstrapAttributePreset {
|
|
code: string;
|
|
name: string;
|
|
dataType: AssetAttributeDataType;
|
|
isRequired: boolean;
|
|
unit: string | null;
|
|
options: string[] | null;
|
|
sortOrder: number;
|
|
}
|
|
|
|
export interface MasterBootstrapTypePreset {
|
|
code: string;
|
|
name: string;
|
|
description: string;
|
|
canBeRoot: boolean;
|
|
operationalRole: AssetTypeOperationalRole;
|
|
allowedParentCodes: string[];
|
|
attributes: MasterBootstrapAttributePreset[];
|
|
}
|
|
|
|
const text = (code: string, name: string, sortOrder: number, unit: string | null = null): MasterBootstrapAttributePreset => ({
|
|
code,
|
|
name,
|
|
dataType: AssetAttributeDataType.TEXT,
|
|
isRequired: false,
|
|
unit,
|
|
options: null,
|
|
sortOrder,
|
|
});
|
|
|
|
const number = (code: string, name: string, sortOrder: number, unit: string | null = null): MasterBootstrapAttributePreset => ({
|
|
code,
|
|
name,
|
|
dataType: AssetAttributeDataType.NUMBER,
|
|
isRequired: false,
|
|
unit,
|
|
options: null,
|
|
sortOrder,
|
|
});
|
|
|
|
const date = (code: string, name: string, sortOrder: number): MasterBootstrapAttributePreset => ({
|
|
code,
|
|
name,
|
|
dataType: AssetAttributeDataType.DATE,
|
|
isRequired: false,
|
|
unit: null,
|
|
options: null,
|
|
sortOrder,
|
|
});
|
|
|
|
const select = (code: string, name: string, options: string[], sortOrder: number): MasterBootstrapAttributePreset => ({
|
|
code,
|
|
name,
|
|
dataType: AssetAttributeDataType.SELECT,
|
|
isRequired: false,
|
|
unit: null,
|
|
options,
|
|
sortOrder,
|
|
});
|
|
|
|
export const MASTER_BOOTSTRAP_PRESET_CODE = 'mendoza-hidrocarburos-v2';
|
|
export const MASTER_BOOTSTRAP_PRESET_NAME = 'Hidrocarburos · Mendoza';
|
|
|
|
export const MASTER_BOOTSTRAP_CORE_CODES = [
|
|
'area',
|
|
'empresa',
|
|
'yacimiento',
|
|
'instalacion',
|
|
'estacion',
|
|
'subestacion',
|
|
'pozo',
|
|
'equipo',
|
|
'ducto',
|
|
] as const;
|
|
|
|
export const MASTER_BOOTSTRAP_TYPES: MasterBootstrapTypePreset[] = [
|
|
{
|
|
code: 'area',
|
|
name: 'Área',
|
|
description: 'Área hidrocarburífera administrada como ancla territorial. Concesiones, permisos y titulares se registran por separado en la capa legal.',
|
|
canBeRoot: true,
|
|
operationalRole: AssetTypeOperationalRole.AREA,
|
|
allowedParentCodes: [],
|
|
attributes: [
|
|
text('identificacion_oficial', 'Identificación oficial', 10),
|
|
text('cuenca', 'Cuenca', 20),
|
|
text('departamento', 'Departamento', 30),
|
|
],
|
|
},
|
|
{
|
|
code: 'empresa',
|
|
name: 'Organización',
|
|
description: 'Entidad jurídica u organización administrada (empresa, UTE u otra figura). Su rol como operadora, titular o participante se registra mediante relaciones históricas.',
|
|
canBeRoot: true,
|
|
operationalRole: AssetTypeOperationalRole.COMPANY,
|
|
allowedParentCodes: [],
|
|
attributes: [
|
|
text('cuit', 'CUIT', 10),
|
|
text('razon_social', 'Razón social', 20),
|
|
],
|
|
},
|
|
{
|
|
code: 'yacimiento',
|
|
name: 'Yacimiento',
|
|
description: 'Unidad territorial u operativa dentro de un Área. Es opcional porque la documentación también utiliza el campo combinado Área/Yacimiento.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area'],
|
|
attributes: [text('identificacion_oficial', 'Identificación oficial', 10)],
|
|
},
|
|
{
|
|
code: 'estructura_local',
|
|
name: 'Estructura local (fuente)',
|
|
description: 'Nodo estructural provisional que conserva la nomenclatura propia de cada operadora o Área/Yacimiento. No implica una clasificación física normalizada por DH hasta su revisión.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento', 'locacion'],
|
|
attributes: [
|
|
text('nivel_fuente', 'Nivel informado por la fuente', 10),
|
|
text('clasificacion_fuente', 'Clasificación local informada', 20),
|
|
text('ruta_fuente', 'Ruta / nomenclatura de origen', 30),
|
|
],
|
|
},
|
|
{
|
|
code: 'locacion',
|
|
name: 'Locación',
|
|
description: 'Sitio físico dentro de un área o yacimiento que puede agrupar pozos, instalaciones o equipos.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'instalacion',
|
|
name: 'Instalación de superficie',
|
|
description: 'Tipo genérico de instalación de proceso, tratamiento, almacenamiento o apoyo. Se conserva como alternativa cuando no exista un tipo técnico más específico.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento', 'locacion'],
|
|
attributes: [text('tipo_instalacion', 'Tipo de instalación', 10)],
|
|
},
|
|
{
|
|
code: 'planta',
|
|
name: 'Planta',
|
|
description: 'Instalación de superficie administrada como unidad de proceso, tratamiento, entrega o almacenamiento.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento', 'locacion'],
|
|
attributes: [text('funcion_planta', 'Función / denominación operativa', 10)],
|
|
},
|
|
{
|
|
code: 'bateria',
|
|
name: 'Batería',
|
|
description: 'Batería hidrocarburífera administrada como instalación y contenedor de sistemas/equipos.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento', 'locacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'estacion',
|
|
name: 'Estación',
|
|
description: 'Estación operativa perteneciente a un área, yacimiento, locación o instalación.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento', 'locacion', 'instalacion', 'planta', 'bateria'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'subestacion',
|
|
name: 'Subestación',
|
|
description: 'Subestación o unidad subordinada dentro de una instalación o estación.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento', 'locacion', 'instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'zona_bombas',
|
|
name: 'Zona de bombas',
|
|
description: 'Sector o conjunto físico donde se agrupan bombas. Se distingue de cada equipo Bomba individual.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'sistema_drenaje',
|
|
name: 'Sistema de drenaje',
|
|
description: 'Sistema de drenaje de una instalación. Puede contener piletas u otros elementos que requieran identidad propia.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'sistema_electrico_iluminacion',
|
|
name: 'Sistema eléctrico / iluminación',
|
|
description: 'Sistema eléctrico y de iluminación administrable cuando requiere historial e inspección propios.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'sistema_defensa_incendios',
|
|
name: 'Defensa contra incendios',
|
|
description: 'Sistema de defensa contra incendios, incluyendo red y equipos asociados cuando corresponda.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'cargadero_descargadero',
|
|
name: 'Cargadero / descargadero de camiones',
|
|
description: 'Instalación utilizada para carga o descarga de camiones, inspeccionable como unidad.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento', 'locacion', 'instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'pileta_api',
|
|
name: 'Pileta API',
|
|
description: 'Pileta API identificable dentro de una instalación o sistema de drenaje.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['sistema_drenaje', 'instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'pozo',
|
|
name: 'Pozo',
|
|
description: 'Pozo hidrocarburífero. El método o función se administra como atributo para no duplicar el Maestro en varios tipos de pozo.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento', 'locacion'],
|
|
attributes: [
|
|
text('identificacion_oficial', 'Identificación oficial', 10),
|
|
text('tipo_pozo', 'Tipo de pozo informado', 20),
|
|
select('metodo_extraccion', 'Método / función operativa', [
|
|
'Bombeo mecánico',
|
|
'Bombeo electrosumergible',
|
|
'Bombeo de cavidad progresiva (PCP)',
|
|
'Surgente / productor de gas',
|
|
'Inyector de agua',
|
|
'Otro / a validar',
|
|
], 30),
|
|
number('profundidad', 'Profundidad', 40, 'm'),
|
|
text('estado_operativo', 'Estado operativo informado', 50),
|
|
date('ultima_intervencion', 'Última intervención informada', 60),
|
|
],
|
|
},
|
|
{
|
|
code: 'equipo',
|
|
name: 'Equipo',
|
|
description: 'Equipo físico genérico. Se conserva como alternativa cuando el inventario no permita clasificarlo todavía en una familia técnica específica.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion', 'subestacion', 'pozo', 'zona_bombas', 'sistema_defensa_incendios', 'cargadero_descargadero'],
|
|
attributes: [
|
|
text('fabricante', 'Fabricante', 10),
|
|
text('modelo', 'Modelo', 20),
|
|
text('numero_serie', 'Número de serie', 30),
|
|
],
|
|
},
|
|
{
|
|
code: 'tanque',
|
|
name: 'Tanque',
|
|
description: 'Tanque de almacenamiento o proceso administrado como equipo individual.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [
|
|
number('capacidad_nominal', 'Capacidad nominal', 10, 'm³'),
|
|
text('producto_servicio', 'Producto / servicio', 20),
|
|
text('fabricante', 'Fabricante', 30),
|
|
text('modelo', 'Modelo', 40),
|
|
text('numero_serie', 'Número de serie', 50),
|
|
],
|
|
},
|
|
{
|
|
code: 'separador',
|
|
name: 'Separador',
|
|
description: 'Separador de proceso administrado como equipo individual.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'bomba',
|
|
name: 'Bomba',
|
|
description: 'Bomba individual. Puede pertenecer a una zona de bombas, sistema contra incendios, pozo u otra instalación.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion', 'zona_bombas', 'sistema_defensa_incendios', 'cargadero_descargadero', 'pozo'],
|
|
attributes: [
|
|
text('fabricante', 'Fabricante', 10),
|
|
text('modelo', 'Modelo', 20),
|
|
text('numero_serie', 'Número de serie', 30),
|
|
],
|
|
},
|
|
{
|
|
code: 'caldera',
|
|
name: 'Caldera',
|
|
description: 'Caldera administrada como equipo individual con controles documentales y operativos propios.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'antorcha',
|
|
name: 'Antorcha',
|
|
description: 'Antorcha administrada como equipo o instalación individual.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'colector',
|
|
name: 'Colector',
|
|
description: 'Colector administrado como activo individual cuando requiere trazabilidad propia.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento', 'locacion', 'instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'filtro',
|
|
name: 'Filtro',
|
|
description: 'Filtro administrado como equipo individual.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'equipo_flotacion',
|
|
name: 'Equipo de flotación',
|
|
description: 'Equipo de flotación administrado como activo individual.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'fwko',
|
|
name: 'FWKO',
|
|
description: 'Free Water Knock Out administrado como equipo individual.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'tratador',
|
|
name: 'Tratador',
|
|
description: 'Tratador administrado como equipo individual.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'calentador',
|
|
name: 'Calentador',
|
|
description: 'Calentador administrado como equipo individual.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [],
|
|
},
|
|
{
|
|
code: 'ducto',
|
|
name: 'Ducto / Cañería',
|
|
description: 'Tramo de ducto o cañería administrable e inspeccionable dentro de un área, yacimiento, locación o instalación.',
|
|
canBeRoot: false,
|
|
operationalRole: AssetTypeOperationalRole.GENERIC,
|
|
allowedParentCodes: ['area', 'yacimiento', 'locacion', 'instalacion', 'planta', 'bateria', 'estacion'],
|
|
attributes: [
|
|
text('servicio', 'Servicio / fluido', 10),
|
|
text('diametro_nominal', 'Diámetro nominal', 20),
|
|
],
|
|
},
|
|
];
|
|
|
|
for (const preset of MASTER_BOOTSTRAP_TYPES) {
|
|
if (
|
|
preset.operationalRole === AssetTypeOperationalRole.GENERIC
|
|
&& !['yacimiento', 'locacion', 'estructura_local', 'pozo', 'ducto', 'colector'].includes(preset.code)
|
|
&& !preset.allowedParentCodes.includes('estructura_local')
|
|
) {
|
|
preset.allowedParentCodes.push('estructura_local');
|
|
}
|
|
}
|
|
|