Files
dh-inspeccion-v2/api-v3/test/unit/asset-import-profiles.test.ts

54 lines
3.2 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { analyzeImportWorkbook, detectImportProfile } from '../../src/asset-imports/asset-import-profiles';
import type { ParsedWorkbook } from '../../src/asset-imports/asset-import-parser';
function workbook(rows: string[][], name = 'Inventario'): ParsedWorkbook {
return { kind: 'XLSX', sheets: [{ name, rows }] };
}
test('D5.3.5 detects the Mendoza inventory layout and preserves source semantics', () => {
const input = workbook([
['Item','Area/ Yacimiento','Instalacion','Sub instalacion','Equipo','Denominación del equipo','Ubicación del equipo o instalación','N° ID/ Inventario','Cantidad','Especificaciones técnicas','Estado (en servicio/ fuera de servicio)'],
['1','REFUGIO TUPUNGATO','TUP-PIAS','ZONA BOMBAS PIAS','Bomba Centrífuga','Clase: BBA; Tipo: CEN','N/A','BBA-050','1','Fabricante; GOULD; Modelo: 3196','NO'],
]);
const detection = detectImportProfile(input);
assert.equal(detection.profileCode, 'MENDOZA_INVENTORY_V1');
const analysis = analyzeImportWorkbook(input);
assert.equal(analysis.summary.totalRows, 1);
assert.equal(analysis.rows[0]?.normalized.areaOrField, 'REFUGIO TUPUNGATO');
assert.equal(analysis.rows[0]?.normalized.inventoryId, 'BBA-050');
assert.equal(analysis.rows[0]?.normalized.sourceClass, 'BBA');
assert.equal(analysis.rows[0]?.normalized.sourceSubtype, 'CEN');
assert.equal(analysis.rows[0]?.normalized.manufacturer, 'GOULD');
assert.equal(analysis.rows[0]?.normalized.model, '3196');
assert.equal(analysis.rows[0]?.normalized.sourceStatus, 'NO');
assert.ok(analysis.rows[0]?.issues.includes('SOURCE_STATUS_REQUIRES_MAPPING'));
});
test('D5.3.5 treats grouped quantity and repeated inventory IDs as review signals', () => {
const input = workbook([
['Item','Area/ Yacimiento','Instalacion','Sub instalacion','Equipo','Denominación del equipo','Ubicación del equipo o instalación','N° ID/ Inventario','Cantidad','Especificaciones técnicas','Estado'],
['1','Loma de La Mina','PTC','Playa Tanques','Bomba','','Pozo 1','MEX000062','2','','en servicio'],
['2','Loma de La Mina','PTC','Playa Tanques','Bomba','','Pozo 2','MEX000062','1','','fuera de servicio'],
]);
const analysis = analyzeImportWorkbook(input);
assert.equal(analysis.summary.totalRows, 2);
assert.ok(analysis.rows[0]?.issues.includes('GROUPED_QUANTITY'));
assert.ok(analysis.rows.every((row) => row.issues.includes('INVENTORY_ID_MULTIPLE_LOCATIONS')));
assert.equal(analysis.summary.conflictRows, 2);
});
test('D5.3.5 detects the Mendoza Yacimiento-Area reference table separately', () => {
const input = workbook([
['Yacimiento','Área','Departamento','Tipo Concesión','Operadora'],
['Cañada Dura','Vizcacheras','San Carlos','Explotación','Petróleos Sudamericanos Energy S.A.'],
], 'Tabla yacimientos');
const analysis = analyzeImportWorkbook(input);
assert.equal(analysis.detection.profileCode, 'MENDOZA_YACIMIENTOS_V1');
assert.equal(analysis.rows[0]?.normalized.field, 'Cañada Dura');
assert.equal(analysis.rows[0]?.normalized.area, 'Vizcacheras');
assert.equal(analysis.rows[0]?.normalized.rightType, 'Explotación');
assert.equal(analysis.rows[0]?.normalized.operator, 'Petróleos Sudamericanos Energy S.A.');
});