F2.1: marcar altas y selecciones de campo

This commit is contained in:
2026-09-05 18:00:50 -03:00
parent 823e905aa3
commit ec600a1aff
@@ -26,19 +26,60 @@ export class FieldDiscoveryInspectionLinkService {
[visitId],
)) as Array<{ id: string; status: string }>;
const [existing] = (await manager.query(
`
SELECT included, planning_source AS "planningSource"
FROM inspection_visit_assets
WHERE visit_id = $1 AND asset_id = $2
FOR UPDATE
`,
[visitId, assetId],
)) as Array<{ included: boolean; planningSource: string }>;
await manager.query(
`
INSERT INTO inspection_visit_assets (visit_id, asset_id, included, added_by)
VALUES ($1, $2, true, $3)
INSERT INTO inspection_visit_assets (
visit_id, asset_id, included, planning_source, added_by,
exclusion_reason, excluded_by, excluded_at
)
VALUES ($1, $2, true, 'FIELD', $3, NULL, NULL, NULL)
ON CONFLICT (visit_id, asset_id) DO UPDATE SET
included = true,
planning_source = CASE
WHEN inspection_visit_assets.planning_source IN ('AUTOMATIC','VERIFICATION')
THEN inspection_visit_assets.planning_source
ELSE 'FIELD'
END,
added_by = EXCLUDED.added_by,
exclusion_reason = NULL,
excluded_by = NULL,
excluded_at = NULL,
updated_at = CURRENT_TIMESTAMP
`,
[visitId, assetId, userId],
);
const eventType = existing && existing.included ? null : 'FIELD_INCLUDED';
if (eventType) {
await manager.query(
`
INSERT INTO inspection_visit_asset_events (
visit_id, asset_id, event_type, actor_user_id, metadata
)
VALUES ($1, $2, 'FIELD_INCLUDED', $3, $4::jsonb)
`,
[
visitId,
assetId,
userId,
JSON.stringify({
fieldSelection: true,
previousPlanningSource: existing?.planningSource ?? null,
}),
],
);
}
if (act) {
await manager.query(
`