54 lines
3.2 KiB
TypeScript
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.');
|
|
});
|