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:
parent
983aeca2dc
commit
09d8794d72
42 changed files with 2166 additions and 2974 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue