refactor: remove deprecated components and streamline member coverage calculations, enhance budget management with improved payroll handling, and update UI elements for better clarity

This commit is contained in:
Jennie Robinson Faber 2025-09-06 09:48:57 +01:00
parent 983aeca2dc
commit 09d8794d72
42 changed files with 2166 additions and 2974 deletions

View file

@ -60,6 +60,24 @@ export function useCoopBuilder() {
}
})
const currency = computed({
get: () => {
try {
return store.currency || 'EUR'
} catch (e) {
console.warn('Error accessing currency:', e)
return 'EUR'
}
},
set: (value: string) => {
try {
store.setCurrency(value)
} catch (e) {
console.warn('Error setting currency:', e)
}
}
})
const scenario = computed({
get: () => store.scenario,
set: (value) => store.setScenario(value)
@ -78,12 +96,6 @@ export function useCoopBuilder() {
const baseStreams = [...streams.value]
switch (scenario.value) {
case 'quit-jobs':
return {
members: baseMembers.map(m => ({ ...m, externalMonthlyIncome: 0 })),
streams: baseStreams
}
case 'start-production':
return {
members: baseMembers,
@ -154,25 +166,21 @@ export function useCoopBuilder() {
}
// Coverage calculation for a single member
function coverage(member: Member): { minPct: number; targetPct: number } {
const totalIncome = (member.monthlyPayPlanned || 0) + (member.externalMonthlyIncome || 0)
function coverage(member: Member): { coveragePct: number } {
const coopPay = member.monthlyPayPlanned || 0
const minPct = member.minMonthlyNeeds > 0
? Math.min(200, (totalIncome / member.minMonthlyNeeds) * 100)
: 100
const targetPct = member.targetMonthlyPay > 0
? Math.min(200, (totalIncome / member.targetMonthlyPay) * 100)
const coveragePct = member.minMonthlyNeeds > 0
? Math.min(200, (coopPay / member.minMonthlyNeeds) * 100)
: 100
return { minPct, targetPct }
return { coveragePct }
}
// Team coverage statistics
function teamCoverageStats() {
try {
const allocatedMembers = allocatePayroll() || []
const coverages = allocatedMembers.map(m => coverage(m).minPct).filter(c => !isNaN(c))
const coverages = allocatedMembers.map(m => coverage(m).coveragePct).filter(c => !isNaN(c))
if (coverages.length === 0) {
return { median: 0, under100: 0, over100Pct: 0, gini: 0 }
@ -354,6 +362,7 @@ export function useCoopBuilder() {
streams,
policy,
operatingMode,
currency,
scenario,
stress,
milestones,
@ -380,6 +389,7 @@ export function useCoopBuilder() {
setPolicy: (relationship: "equal-pay" | "needs-weighted" | "hours-weighted" | "role-banded") => store.setPolicy(relationship),
setRoleBands: (bands: Record<string, number>) => store.setRoleBands(bands),
setEqualWage: (wage: number) => store.setEqualWage(wage),
setCurrency: (currency: string) => store.setCurrency(currency),
// Testing helpers
clearAll,