sdac-fringe-analysis
Purpose
Analyzes fringe benefit costs between two reporting periods. Calculates differentials, identifies contributing factors (new positions, removed positions, rate changes), assesses proportionality against salary movement, and evaluates the adequacy of any district-provided justification.
Tool type
AI-assisted (deterministic computation + narrative generation)
Tool ID
fringe_analysis
Inputs
currentFringe(number, required) -- Current quarter total fringe benefits in dollarspreviousFringe(number, required) -- Previous quarter total fringe benefits in dollarscurrentSalary(number, required) -- Current quarter total salary in dollarspreviousSalary(number, required) -- Previous quarter total salary in dollarspersonnelData(array, optional) -- Detailed personnel records for granular factor analysisid(number)name(string)title(string)salary(number)fringe(number)isNew(boolean, optional) -- True if new position this quarterisRemoved(boolean, optional) -- True if position was removed this quarter
districtJustification(string, optional) -- District-provided justification to assess
Outputs
fringeDifferential(number) -- Percentage change in fringe benefitssalaryDifferential(number) -- Percentage change in salary for comparisontotalFringeIncrease(number) -- Dollar amount of fringe changetotalSalaryIncrease(number) -- Dollar amount of salary changecurrentFringeRate(number) -- Current fringe as percentage of salarypreviousFringeRate(number) -- Previous fringe as percentage of salaryfringeRateChange(number) -- Change in fringe rate (percentage points)isProportional(boolean) -- Whether fringe change is proportional to salary change (within 2pp)analysis(string) -- Detailed narrative analysis with factor breakdownfactors(array) -- Contributing factors with dollar impact and percentage of variancejustificationAssessment(object, optional) -- Adequacy assessment when justification providedisAdequate(boolean)missingElements(array of strings)recommendation(string)
recommendedAction(string, optional) -- Suggested next steps for the auditor
Example output
{
"fringeDifferential": 10.25,
"salaryDifferential": 8.41,
"totalFringeIncrease": 29000,
"totalSalaryIncrease": 97000,
"currentFringeRate": 24.96,
"previousFringeRate": 24.54,
"fringeRateChange": 0.42,
"isProportional": true,
"analysis": "Fringe increased slightly more than salary, but the fringe rate changed by less than two percentage points.",
"factors": [
{
"name": "Added positions",
"dollarImpact": 18000,
"percentOfVariance": 62.1
}
],
"justificationAssessment": {
"isAdequate": true,
"missingElements": [],
"recommendation": "No follow-up needed based on the supplied justification."
},
"recommendedAction": "Accept the fringe explanation if no row-level fringe errors are present."
}
Functional details
- Computes fringe and salary differentials, fringe rate, and rate change purely from numeric inputs.
- When
personnelDatais provided, breaks the variance into new positions, removed positions, and general rate change factors. - Proportionality threshold is 2 percentage points -- fringe and salary differentials within this band are considered proportional.
- Justification adequacy check looks for mention of new positions, rate changes, and specific dollar/percentage figures.
Usage notes
- Used by the SDAC Fringe Analysis Agent and the SDAC Source Code Reviewer.
- Supply
personnelDatafor granular factor attribution; omit for aggregate-only analysis. - When a district justification is available, pass it via
districtJustificationto get a recommendation on whether to accept or request revision.
Code Location: packages/domain-sdac/src/tools/fringe-analysis.tool.ts