25 lines
660 B
TypeScript
25 lines
660 B
TypeScript
/**
|
|
* Computes coverage: funded paid hours ÷ target hours
|
|
*/
|
|
export const useCoverage = () => {
|
|
const calculateCoverage = (fundedPaidHours: number, targetHours: number): number => {
|
|
if (targetHours <= 0) return 0
|
|
return (fundedPaidHours / targetHours) * 100
|
|
}
|
|
|
|
const getCoverageStatus = (coveragePct: number): 'green' | 'yellow' | 'red' => {
|
|
if (coveragePct >= 80) return 'green'
|
|
if (coveragePct >= 60) return 'yellow'
|
|
return 'red'
|
|
}
|
|
|
|
const formatCoverage = (coveragePct: number): string => {
|
|
return `${Math.round(coveragePct)}%`
|
|
}
|
|
|
|
return {
|
|
calculateCoverage,
|
|
getCoverageStatus,
|
|
formatCoverage
|
|
}
|
|
}
|