Sprint 2 Etapas 1-2: modelo recursos utilizationMinutes+units, Dexie v3, ActivityPanel wow
This commit is contained in:
@@ -41,6 +41,44 @@ export class ProcessCostDb extends Dexie {
|
||||
if (proc.automationInvestment === undefined) proc.automationInvestment = 0
|
||||
})
|
||||
})
|
||||
|
||||
// Sprint 2: migra ActivityResourceAssignment.utilizationPercent → utilizationMinutes + units.
|
||||
// Los stores no cambian — assignments están embebidos en Activity, no son tabla propia.
|
||||
this.version(3)
|
||||
.stores({
|
||||
processes: 'id, name, updatedAt',
|
||||
activities: 'id, processId, bpmnElementId',
|
||||
gateways: 'id, processId, bpmnElementId',
|
||||
resources: 'id, processId, name',
|
||||
simulations: 'id, processId, executedAt',
|
||||
})
|
||||
.upgrade(async (tx) => {
|
||||
await tx.table('activities').toCollection().modify((act) => {
|
||||
if (!Array.isArray(act.assignedResources)) {
|
||||
act.assignedResources = []
|
||||
return
|
||||
}
|
||||
act.assignedResources = act.assignedResources.map((assignment: Record<string, unknown>) => {
|
||||
if ('utilizationPercent' in assignment) {
|
||||
// Heurística: minutos = round(executionTimeMinutes × utilizationPercent)
|
||||
// Si executionTimeMinutes no está disponible o es 0, usar 0 (conservador)
|
||||
const execMinutes = typeof act.executionTimeMinutes === 'number' ? act.executionTimeMinutes : 0
|
||||
const utilizationMinutes = Math.round(execMinutes * (assignment.utilizationPercent as number))
|
||||
return { resourceId: assignment.resourceId, utilizationMinutes, units: 1 }
|
||||
}
|
||||
if ('utilizationMinutes' in assignment) {
|
||||
// Ya está en nuevo formato (idempotencia)
|
||||
return {
|
||||
resourceId: assignment.resourceId,
|
||||
utilizationMinutes: assignment.utilizationMinutes ?? 0,
|
||||
units: assignment.units ?? 1,
|
||||
}
|
||||
}
|
||||
// Fallback defensivo
|
||||
return { resourceId: assignment.resourceId, utilizationMinutes: 0, units: 1 }
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user