49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { QuestionType } from "@/types";
|
|
|
|
interface ISICalculatorProps {
|
|
answers: { [key: number]: string };
|
|
questions: QuestionType[];
|
|
}
|
|
|
|
export const calculateISIResults = ({ answers }: ISICalculatorProps): any => {
|
|
// ISI calculation logic
|
|
let totalScore = 0;
|
|
|
|
// Calculate total score (simple sum)
|
|
Object.entries(answers).forEach(([, score]) => {
|
|
const scoreValue = parseInt(score);
|
|
totalScore += scoreValue;
|
|
});
|
|
|
|
// Determine insomnia severity level
|
|
let severity = "no_insomnia";
|
|
if (totalScore >= 22) {
|
|
severity = "severe";
|
|
} else if (totalScore >= 15) {
|
|
severity = "moderate";
|
|
} else if (totalScore >= 8) {
|
|
severity = "subthreshold";
|
|
}
|
|
|
|
// Analyze item scores
|
|
const itemAnalysis = Object.entries(answers).map(([questionId, score]) => ({
|
|
questionId: parseInt(questionId),
|
|
score: parseInt(score),
|
|
isHigh: parseInt(score) >= 3 // Scores of 3 or above are considered high score items
|
|
}));
|
|
|
|
const highScoreItems = itemAnalysis.filter(item => item.isHigh);
|
|
|
|
return {
|
|
totalScore,
|
|
severity,
|
|
itemAnalysis,
|
|
highScoreItemCount: highScoreItems.length,
|
|
factorScores: {},
|
|
positiveItemCount: highScoreItems.length,
|
|
positiveItemAverage: highScoreItems.length > 0
|
|
? highScoreItems.reduce((sum, item) => sum + item.score, 0) / highScoreItems.length
|
|
: 0,
|
|
isSevere: severity === "severe" || severity === "moderate"
|
|
};
|
|
}; |