feat(f4): adopt institutional INSP numbering
This commit is contained in:
@@ -4,12 +4,14 @@ export async function nextInspectionVisitCode(
|
|||||||
manager: EntityManager,
|
manager: EntityManager,
|
||||||
plannedStartAt: Date,
|
plannedStartAt: Date,
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const [yearRow] = (await manager.query(`
|
const [dateRow] = (await manager.query(`
|
||||||
SELECT EXTRACT(
|
SELECT
|
||||||
YEAR FROM $1::timestamptz AT TIME ZONE 'America/Argentina/Mendoza'
|
EXTRACT(YEAR FROM $1::timestamptz AT TIME ZONE 'America/Argentina/Mendoza')::integer AS year,
|
||||||
)::integer AS year
|
TO_CHAR($1::timestamptz AT TIME ZONE 'America/Argentina/Mendoza', 'DD') AS day,
|
||||||
`, [plannedStartAt])) as Array<{ year: number }>;
|
TO_CHAR($1::timestamptz AT TIME ZONE 'America/Argentina/Mendoza', 'MM') AS month,
|
||||||
const year = Number(yearRow?.year);
|
TO_CHAR($1::timestamptz AT TIME ZONE 'America/Argentina/Mendoza', 'YY') AS short_year
|
||||||
|
`, [plannedStartAt])) as Array<{ year: number; day: string; month: string; short_year: string }>;
|
||||||
|
const year = Number(dateRow?.year);
|
||||||
if (!Number.isInteger(year) || year < 2000 || year > 9999) {
|
if (!Number.isInteger(year) || year < 2000 || year > 9999) {
|
||||||
throw new Error('Unable to derive inspection visit year');
|
throw new Error('Unable to derive inspection visit year');
|
||||||
}
|
}
|
||||||
@@ -20,15 +22,15 @@ export async function nextInspectionVisitCode(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const [sequenceRow] = (await manager.query(`
|
const [sequenceRow] = (await manager.query(`
|
||||||
SELECT COALESCE(MAX(RIGHT(code, 6)::integer), 0)::integer AS sequence
|
SELECT COALESCE(MAX(SUBSTRING(code FROM 6 FOR 5)::integer), 0)::integer AS sequence
|
||||||
FROM inspection_visits
|
FROM inspection_visits
|
||||||
WHERE code LIKE $1
|
WHERE code ~ '^INSP-[0-9]{5}-[0-9]{2}-[0-9]{2}-[0-9]{2}$'
|
||||||
AND code ~ ('^INS-' || $2::text || '-[0-9]{6}$')
|
AND RIGHT(code, 2) = $1
|
||||||
`, [`INS-${year}-%`, year])) as Array<{ sequence: number }>;
|
`, [dateRow.short_year])) as Array<{ sequence: number }>;
|
||||||
|
|
||||||
const sequence = Number(sequenceRow?.sequence ?? 0) + 1;
|
const sequence = Number(sequenceRow?.sequence ?? 0) + 1;
|
||||||
if (sequence > 999999) {
|
if (sequence > 99999) {
|
||||||
throw new Error(`Inspection visit sequence exhausted for ${year}`);
|
throw new Error(`Inspection visit sequence exhausted for ${year}`);
|
||||||
}
|
}
|
||||||
return `INS-${year}-${String(sequence).padStart(6, '0')}`;
|
return `INSP-${String(sequence).padStart(5, '0')}-${dateRow.day}-${dateRow.month}-${dateRow.short_year}`;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user