@mecatoncheir/gaf
Version:
GAF (Global Assessment of Functioning) scale implementation for psychiatric assessment - Limited version with 12 sample episodes
83 lines (74 loc) • 2.35 kB
JavaScript
// index.js (メインエントリーポイント)
const { GAFCalculatorLimited } = require('./lib/gaf-calculator-limited');
const { GAFEpisodeSelector } = require('./lib/episode-selector');
const { sampleEpisodes } = require('./data/sample-episodes');
class MecatoncheirGAF {
constructor(options = {}) {
this.calculator = new GAFCalculatorLimited();
this.episodeSelector = new GAFEpisodeSelector(options.episodes);
this.version = "1.0.0-limited";
}
/**
* 利用可能なエピソード一覧取得
* @returns {Array} エピソード表示用データ
*/
getAvailableEpisodes() {
return this.episodeSelector.getEpisodesForDisplay();
}
/**
* 階層別エピソード取得
* @param {string} tier - 階層名
* @returns {Array} 該当エピソード
*/
getEpisodesByTier(tier) {
return this.episodeSelector.getEpisodesByTier(tier);
}
/**
* エピソード詳細表示
* @param {string} episodeId - エピソードID
* @returns {Object} 詳細情報
*/
displayEpisode(episodeId) {
const episode = this.episodeSelector.getEpisodeById(episodeId);
if (!episode) {
return { error: 'エピソードが見つかりません' };
}
return {
id: episode.id,
tier: episode.tier,
type: episode.type === 'symptoms' ? '症状' : '機能',
title: episode.title,
description: episode.description,
baseScore: episode.baseScore,
severity: episode.severity,
adjustment: episode.tierAdjustment.adjustmentValue,
adjustmentReason: episode.tierAdjustment.position
};
}
/**
* GAF計算実行(制限版: 1エピソード)
* @param {string} episodeId - 選択エピソードID
* @returns {Object} 計算結果
*/
calculateGAF(episodeId) {
const episode = this.episodeSelector.getEpisodeById(episodeId);
if (!episode) {
throw new Error('指定されたエピソードが見つかりません');
}
return this.calculator.calculateSingleEpisodeScore(episode);
}
/**
* アップグレード情報取得
* @returns {Object} アップグレード案内
*/
getUpgradeInfo() {
return this.calculator.getUpgradeInfo();
}
}
// デモ用エクスポート
module.exports = {
MecatoncheirGAF,
GAFCalculatorLimited,
GAFEpisodeSelector,
sampleEpisodes
};