fix(f4): expose recurrence state and close ci type gaps

This commit is contained in:
2026-09-08 13:52:24 -03:00
parent 95a41f39d7
commit 30353c338b
6 changed files with 64 additions and 7 deletions
@@ -26,6 +26,12 @@ interface FindingRecurrenceContext {
visitStatus: string;
}
export interface FindingRecurrenceState {
isRecurrence: boolean;
recurrenceOfFindingId: string | null;
recurrenceOfFindingCode: string | null;
}
function comparable(value: string): string {
return value
.normalize('NFD')
@@ -44,6 +50,25 @@ export class FindingRecurrenceService {
private readonly findings: InspectionFindingsService,
) {}
async state(id: string): Promise<FindingRecurrenceState> {
const [row] = await this.dataSource.query(`
SELECT
finding.is_recurrence AS "isRecurrence",
finding.recurrence_of_finding_id AS "recurrenceOfFindingId",
antecedent.code AS "recurrenceOfFindingCode"
FROM inspection_findings finding
LEFT JOIN inspection_findings antecedent ON antecedent.id = finding.recurrence_of_finding_id
WHERE finding.id = $1
`, [id]) as FindingRecurrenceState[];
if (!row) {
throw new NotFoundException({
code: 'INSPECTION_FINDING_NOT_FOUND',
message: 'Hallazgo no encontrado',
});
}
return row;
}
async candidates(id: string) {
const current = await this.requireFinding(this.dataSource.manager, id, false);
const rows = await this.dataSource.query(`
@@ -138,7 +163,11 @@ export class FindingRecurrenceService {
metadata: { actId: current.actId, visitId: current.visitId, recurrenceAction: 'LINKED' },
}, manager);
});
return this.findings.getById(id);
const [finding, recurrence] = await Promise.all([
this.findings.getById(id),
this.state(id),
]);
return { ...finding, ...recurrence };
}
async clear(
@@ -171,7 +200,11 @@ export class FindingRecurrenceService {
metadata: { actId: current.actId, visitId: current.visitId, recurrenceAction: 'CLEARED' },
}, manager);
});
return this.findings.getById(id);
const [finding, recurrence] = await Promise.all([
this.findings.getById(id),
this.state(id),
]);
return { ...finding, ...recurrence };
}
private async requireFinding(