mcpField
O
osint-methodologies

osint-methodologies

github.com/hack23データ・データベース1346 回インストール今日更新
リポジトリ

osint-methodologies について

Riksdagsmonitor向けのOSINT手法スキルです。スウェーデン政治の公開情報を扱うチームを対象に、情報源の評価、照合、データ品質、法令・プライバシーへの配慮を扱います。

主な機能

  1. 014種の公開データソース枠組み
  2. 02情報源の信頼性と網羅性の評価
  3. 03複数ソースの照合手法
  4. 04鮮度と正確性のデータ検査
  5. 05GDPRとプライバシーの確認指針

活用シーン

  1. 01政治情報の公開データ収集計画
  2. 02情報源の信頼性と網羅性の確認
  3. 03独立した情報源間での記録照合
  4. 04収集パイプラインの品質管理設計

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hack23/riksdagsmonitor --skill osint-methodologies

インストール後、Claude Code で/osint-methodologiesを入力して読み込まれたか確認します。

詳細

OSINT 手法スキル

🔴 AI FIRST 品質原則

AI FIRST 原則を適用してください。初回の品質で決して満足しないでください。最低 2 回は反復してください。すべての出力を読み、すべてのセクションを改善してください。近道はしないでください。

目的

このスキルは、スウェーデンにおける民主主義の透明性と政治的説明責任という Riksdagsmonitor(Riksdagsmonitor)プラットフォームの使命に特化した、包括的なオープンソースインテリジェンス(OSINT)の収集手法を提供します。GDPR を遵守し、プライバシーの原則を尊重しながら、公開情報源から倫理的、合法的かつ効果的にインテリジェンスを収集できるようにします。

このスキルを使用する場面

次の場合にこのスキルを適用してください:

  • ✅ 新しい公開データソース(政府 API、オープンデータセット)を統合する
  • ✅ データソースの信頼性と網羅性を評価する
  • ✅ 政治インテリジェンス向けのデータ収集パイプラインを実装する
  • ✅ 複数の独立した情報源から情報を検証する
  • ✅ 正確性を検証するための情報源の三角測量を行う
  • ✅ 新たなインテリジェンス要件に向けた OSINT 収集戦略を設計する
  • ✅ データ品質を評価し、品質指標を定める
  • ✅ 自動データ収集および検証ワークフローを作成する

次の用途には使用しないでください:

  • ❌ 非公開または機密情報を収集する
  • ❌ 明確な公益上の正当性なく、ソーシャルメディアをスクレイピングする
  • ❌ 公職者として公に活動している範囲を超えて個人データを収集する
  • ❌ GDPR またはスウェーデンのプライバシー法に違反するインテリジェンス収集を行う

OSINT 収集フレームワーク

4 つの主要情報源アーキテクチャ

Riksdagsmonitor プラットフォームは、包括的な政治インテリジェンスを構築するため、完全性の高い 4 つの OSINT 情報源を統合します。

graph TB
    subgraph "OSINT Sources"
        A1[📡 Riksdagen API<br/>98.5% completeness<br/>3.5M+ votes, 89K documents]
        A2[📊 Election Authority<br/>99.2% completeness<br/>1970-present electoral data]
        A3[💰 World Bank<br/>94.1% completeness<br/>598K indicators, 211 countries]
        A4[🏛️ Financial Authority ESV<br/>97.8% completeness<br/>Monthly updates]
    end
    
    subgraph "Collection Layer"
        A1 --> B[Data Ingestion Pipeline]
        A2 --> B
        A3 --> B
        A4 --> B
    end
    
    subgraph "Quality Assurance"
        B --> C{Source Verification}
        C --> D[Completeness Check]
        C --> E[Consistency Validation]
        C --> F[Temporal Continuity]
        C --> G[Cross-Reference Check]
    end
    
    subgraph "Data Integration"
        D & E & F & G --> H[(Integrated Dataset)]
        H --> I[Entity Resolution]
        I --> J[Data Enrichment]
    end
    
    subgraph "Quality Metrics"
        J --> K[📊 Quality Dashboard]
        K --> L[Completeness: 97.4%]
        K --> M[Accuracy: 99.1%]
        K --> N[Timeliness: 24h lag]
    end
    
    style A1 fill:#e1f5ff
    style A2 fill:#e1f5ff
    style A3 fill:#e1f5ff
    style A4 fill:#e1f5ff
    style C fill:#ffeb99
    style H fill:#ccffcc
    style K fill:#ffe6cc

情報源評価マトリックス

1. Riksdagen API(スウェーデン議会)

情報源の概要:

  • URL:https://data.riksdagen.se/
  • 権威性:スウェーデン議会(立法府)
  • 分類:一次情報源、政府公式
  • 網羅性:98.5%
  • 更新頻度:毎日(投票はリアルタイム)
  • 過去の対象期間:1971 年~現在(54 年間)
  • データ量:350 万件以上の投票、8 万 9,000 件の文書、2,500 人の政治家

品質指標:

@Component
public class RiksdagenSourceQualityMetrics {
    
    public SourceQualityReport evaluateRiksdagenAPI() {
        return SourceQualityReport.builder()
            .sourceName("Riksdagen API")
            .completeness(98.5)  // Measured against expected records
            .accuracy(99.8)       // Verified via manual audit sampling
            .timeliness(1.0)      // Hours lag for new data
            .reliability(5)       // 1-5 scale, 5 = highest
            .trustLevel("PRIMARY_SOURCE")
            .legalBasis("Public Records Act (Offentlighetsprincipen)")
            .gdprCompliance(true)
            .updateFrequency("DAILY")
            .build();
    }
    
    public List<DataGap> identifyDataGaps() {
        // Example: Check for missing voting records
        String sql = """
            SELECT 
                COUNT(*) as expected_votes,
                COUNT(DISTINCT ballot_id) as actual_votes,
                COUNT(*) - COUNT(DISTINCT ballot_id) as missing_votes
            FROM view_riksdagen_vote_daily_summary
            WHERE created_date >= CURRENT_DATE - INTERVAL '30 days'
        """;
        
        // Calculate completeness percentage
        return jdbcTemplate.query(sql, (rs, rowNum) -> 
            DataGap.builder()
                .expectedRecords(rs.getInt("expected_votes"))
                .actualRecords(rs.getInt("actual_votes"))
                .missingRecords(rs.getInt("missing_votes"))
                .completeness((double) rs.getInt("actual_votes") / 
                              rs.getInt("expected_votes") * 100)
                .build()
        );
    }
}

データカテゴリ:

  1. 投票記録(vote_data テーブル)

    • 投票での個人別投票
    • 党議拘束の指標
    • 連立政権の投票パターン
    • 時系列の投票傾向
  2. 文書(document_element、document_status_container)

    • 立法提案(motioner)
    • 政府法案(propositioner)
    • 委員会報告書(utskottsbetänkanden)
    • 議会質問(interpellationer)
  3. 政治家(person_data、assignment_data)

    • 議会での役割と職務
    • 委員会への所属
    • 政党への所属
    • 経歴の推移
  4. 議会活動

    • 討論への参加
    • 委員会活動
    • 政府への質問
    • 発言時間

OSINT 手法:

-- Source Triangulation: Verify politician voting record completeness
WITH expected_votes AS (
    SELECT 
        person_id,
        COUNT(DISTINCT ballot_id) as riksdagen_vote_count
    FROM vote_data
    WHERE vote_date >= '2022-09-11'  -- Current parliament
    GROUP BY person_id
),
document_activity AS (
    SELECT 
        person_id,
        COUNT(DISTINCT document_id) as document_count
    FROM document_person_reference_data
    WHERE document_type IN ('mot', 'ip')  -- Motions & Questions
    GROUP BY person_id
)
SELECT 
    p.first_name || ' ' || p.last_name as politician_name,
    p.party as party_affiliation,
    ev.riksdagen_vote_count,
    da.document_count,
    CASE 
        WHEN ev.riksdagen_vote_count > 500 THEN 'ACTIVE'
        WHEN ev.riksdagen_vote_count BETWEEN 100 AND 500 THEN 'MODERATE'
        WHEN ev.riksdagen_vote_count < 100 THEN 'INACTIVE'
    END as engagement_level
FROM person_data p
LEFT JOIN expected_votes ev ON p.person_id = ev.person_id
LEFT JOIN document_activity da ON p.person_id = da.person_id
WHERE p.status = 'Tjänstgörande riksdagsledamot'  -- Active MPs
ORDER BY ev.riksdagen_vote_count DESC;
2. 選挙管理局(Valmyndigheten)

情報源の概要:

  • URL:https://www.val.se/
  • 権威性:スウェーデン選挙管理局(独立機関)
  • 分類:一次情報源、政府公式
  • 網羅性:99.2%
  • 更新頻度:選挙後(4 年ごと、および特別選挙後)
  • 過去の対象期間:1970 年~現在(14 回の選挙)
  • データ量:40 政党、全国および地域別の結果

品質指標:

@Component
public class ElectionAuthorityQualityMetrics {
    
    public SourceQualityReport evaluateElectionAuthority() {
        return SourceQualityReport.builder()
            .sourceName("Valmyndigheten")
            .completeness(99.2)
            .accuracy(99.9)  // Official certified results
            .timeliness(168.0)  // Hours post-election for final results
            .reliability(5)
            .trustLevel("PRIMARY_SOURCE")
            .legalBasis("Election Act (Vallagen)")
            .gdprCompliance(true)
            .updateFrequency("ELECTION_CYCLE")
            .build();
    }
    
    public List<ElectionDataValidation> validateElectionData() {
        // Cross-reference with Riksdagen seat assignments
        String sql = """
            SELECT 
                e.party_name,
                e.parliament_seats as election_authority_seats,
                COUNT(DISTINCT a.person_id) as riksdagen_active_mps,
                e.parliament_seats - COUNT(DISTINCT a.person_id) as seat_discrepancy
            FROM sweden_political_party e
            LEFT JOIN assignment_data a 
                ON e.party_id = a.party 
                AND a.role_code = 'Riksdagsledamot'
                AND a.from_date <= CURRENT_DATE
                AND (a.to_date IS NULL OR a.to_date >= CURRENT_DATE)
            WHERE e.parliament_seats > 0
            GROUP BY e.party_name, e.parliament_seats
            HAVING e.parliament_seats != COUNT(DISTINCT a.person_id)
        """;
        
        return jdbcTemplate.query(sql, (rs, rowNum) -> 
            ElectionDataValidation.builder()
                .partyName(rs.getString("party_name"))
                .expectedSeats(rs.getInt("election_authority_seats"))
                .actualSeats(rs.getInt("riksdagen_active_mps"))
                .discrepancy(rs.getInt("seat_discrepancy"))
                .build()
        );
    }
}

OSINT 手法:

-- Historical Election Trend Analysis
SELECT 
    party_name,
    election_year,
    percentage,
    parliament_seats,
    LAG(percentage, 1) OVER (PARTITION BY party_name ORDER BY election_year) as previous_percentage,
    percentage - LAG(percentage, 1) OVER (PARTITION BY party_name ORDER BY election_year) as vote_swing,
    LAG(parliament_seats, 1) OVER (PARTITION BY party_name ORDER BY election_year) as previous_seats,
    parliament_seats - LAG(parliament_seats, 1) OVER (PARTITION BY party_name ORDER BY election_year) as seat_change
FROM sweden_political_party
WHERE parliament_seats IS NOT NULL
ORDER BY party_name, election_year DESC;
3. World Bank オープンデータ

情報源の概要:

  • URL:https://data.worldbank.org/
  • 権威性:World Bank(国際機関)
  • 分類:二次情報源、国際機関の権威ある情報
  • 網羅性:94.1%
  • 更新頻度:四半期ごと
  • 過去の対象期間:1960 年~現在(64 年間)
  • データ量:59 万 8,000 件の指標、211 か国

品質指標:

@Component
public class WorldBankQualityMetrics {
    
    public SourceQualityReport evaluateWorldBankAPI() {
        return SourceQualityReport.builder()
            .sourceName("World Bank Open Data")
            .completeness(94.1)
            .accuracy(97.5)
            .timeliness(2160.0)  // 90 days lag (quarterly updates)
            .reliability(4)  // High but not primary source
            .trustLevel("SECONDARY_SOURCE")
            .legalBasis("Open Data License")
            .gdprCompliance(true)  // Aggregate data only
            .updateFrequency("QUARTERLY")
            .build();
    }
}

ユースケース:

  • 政治的決定の経済的背景
  • 国際比較のベンチマーク
  • 政策の有効性測定
  • 相関分析(GDP と政府支出の比較)
4. 金融庁(ESV)

ソースプロファイル:

  • URL: https://www.esv.se/
  • 機関: スウェーデン金融管理庁
  • 分類: 一次情報源、政府公式
  • 完全性: 97.8%
  • 更新頻度: 毎月
  • 対象期間: 1990年~現在
  • データ量: 機関の財務データ

OSINT 収集チェックリスト

収集前の評価

法務・倫理レビュー:

✅ Data is publicly available under Swedish Public Access Principle (Offentlighetsprincipen)
✅ Collection method complies with GDPR Article 6(1)(e) - public interest
✅ Data processing aligns with purpose limitation (Article 5(1)(b))
✅ Data retention periods defined and documented
✅ Privacy impact assessment completed for personal data
✅ Source attribution and license compliance verified

ソースの信頼性評価:

public enum SourceReliability {
    A("COMPLETELY_RELIABLE", "Primary government source, official records"),
    B("USUALLY_RELIABLE", "Established media, verified aggregators"),
    C("FAIRLY_RELIABLE", "Secondary sources with known limitations"),
    D("NOT_USUALLY_RELIABLE", "Unverified sources, requires corroboration"),
    E("UNRELIABLE", "Known bias, propaganda, unverified claims"),
    F("RELIABILITY_CANNOT_BE_JUDGED", "New source, insufficient track record");
    
    private final String description;
    private final String criteria;
}

public enum InformationCredibility {
    ONE("CONFIRMED", "Verified by multiple independent sources"),
    TWO("PROBABLY_TRUE", "Corroborated by additional source"),
    THREE("POSSIBLY_TRUE", "Not confirmed but consistent with known facts"),
    FOUR("DOUBTFUL", "Contradicts other information"),
    FIVE("IMPROBABLE", "Contradicts established facts"),
    SIX("TRUTH_CANNOT_BE_JUDGED", "Insufficient information to evaluate");
    
    private final String description;
    private final String criteria;
}
データ収集ワークフロー

1. ソースの特定

class OSINTSource:
    def __init__(self, name, url, api_endpoint=None):
        self.name = name
        self.url = url
        self.api_endpoint = api_endpoint
        self.reliability = None  # A-F rating
        self.credibility = None  # 1-6 rating
        self.completeness = None
        self.last_updated = None
    
    def evaluate_reliability(self):
        """NATO Admiralty Code reliability assessment"""
        if self.is_government_official_source():
            self.reliability = SourceReliability.A
        elif self.is_verified_aggregator():
            self.reliability = SourceReliability.B
        # ... additional logic
        
    def verify_completeness(self, expected_records, actual_records):
        """Calculate data completeness percentage"""
        self.completeness = (actual_records / expected_records) * 100
        return self.completeness
    
    def assess_timeliness(self):
        """Calculate data lag from source update to platform availability"""
        time_lag = datetime.now() - self.last_updated
        return time_lag.total_seconds() / 3600  # Hours

2. データの収集

@Service
public class OSINTDataCollector {
    
    @Scheduled(cron = "0 0 2 * * *")  // Daily at 02:00
    public void collectRiksdagenData() {
        try {
            // 1. Fetch new data
            List<VoteData> newVotes = riksdagenClient.getVotesSince(lastCollectionTimestamp);
            
            // 2. Validate data quality
            DataQualityReport report = validateDataQuality(newVotes);
            if (report.getQualityScore() < 95.0) {
                alertService.sendAlert("Low quality data detected", report);
            }
            
            // 3. Deduplicate
            List<VoteData> uniqueVotes = deduplicateRecords(newVotes);
            
            // 4. Store with audit trail
            voteRepository.saveAll(uniqueVotes);
            
            // 5. Update collection metadata
            updateCollectionMetrics(uniqueVotes.size(), report);
            
            log.info("Collected {} new votes with {}% quality score", 
                     uniqueVotes.size(), report.getQualityScore());
            
        } catch (Exception e) {
            log.error("Data collection failed", e);
            alertService.sendAlert("OSINT collection failure", e);
        }
    }
    
    private DataQualityReport validateDataQuality(List<VoteData> data) {
        DataQualityReport report = new DataQualityReport();
        
        // Completeness check
        long missingFields = data.stream()
            .filter(v -> v.getPersonId() == null || v.getBallotId() == null)
            .count();
        report.setCompleteness(100.0 - (missingFields * 100.0 / data.size()));
        
        // Consistency check
        long invalidVotes = data.stream()
            .filter(v -> !Arrays.asList("Ja", "Nej", "Frånvarande", "Avstår").contains(v.getVote()))
            .count();
        report.setConsistency(100.0 - (invalidVotes * 100.0 / data.size()));
        
        // Temporal validity
        long futureVotes = data.stream()
            .filter(v -> v.getVoteDate().isAfter(LocalDate.now()))
            .count();
        report.setTemporalValidity(100.0 - (futureVotes * 100.0 / data.size()));
        
        report.calculateOverallScore();
        return report;
    }
}

3. ソースの照合

-- Cross-Reference Verification: Validate politician data across sources
WITH riksdagen_politicians AS (
    SELECT 
        person_id,
        first_name,
        last_name,
        party,
        status
    FROM person_data
    WHERE status = 'Tjänstgörande riksdagsledamot'
),
riksdagen_seats AS (
    SELECT 
        party,
        COUNT(DISTINCT person_id) as active_mps
    FROM riksdagen_politicians
    GROUP BY party
),
election_seats AS (
    SELECT 
        party_name,
        parliament_seats
    FROM sweden_political_party
    WHERE parliament_seats > 0
)
SELECT 
    COALESCE(r.party, e.party_name) as party,
    r.active_mps as riksdagen_count,
    e.parliament_seats as election_authority_count,
    ABS(COALESCE(r.active_mps, 0) - COALESCE(e.parliament_seats, 0)) as discrepancy,
    CASE 
        WHEN ABS(COALESCE(r.active_mps, 0) - COALESCE(e.parliament_seats, 0)) = 0 THEN '✅ VERIFIED'
        WHEN ABS(COALESCE(r.active_mps, 0) - COALESCE(e.parliament_seats, 0)) <= 2 THEN '⚠️ MINOR_DISCREPANCY'
        ELSE '🚨 MAJOR_DISCREPANCY'
    END as verification_status
FROM riksdagen_seats r
FULL OUTER JOIN election_seats e ON r.party = e.party_name
ORDER BY discrepancy DESC;

データ品質指標

品質の側面

1. 完全性

-- Calculate field completeness across all tables
SELECT 
    'person_data' as table_name,
    COUNT(*) as total_records,
    SUM(CASE WHEN first_name IS NULL THEN 1 ELSE 0 END) as missing_first_name,
    SUM(CASE WHEN last_name IS NULL THEN 1 ELSE 0 END) as missing_last_name,
    SUM(CASE WHEN party IS NULL THEN 1 ELSE 0 END) as missing_party,
    ROUND(100.0 * (1.0 - (
        SUM(CASE WHEN first_name IS NULL THEN 1 ELSE 0 END)::decimal + 
        SUM(CASE WHEN last_name IS NULL THEN 1 ELSE 0 END) + 
        SUM(CASE WHEN party IS NULL THEN 1 ELSE 0 END)
    ) / (COUNT(*) * 3)), 2) as completeness_percentage
FROM person_data;

2. 正確性

@Component
public class DataAccuracyVerifier {
    
    public AccuracyReport verifyPoliticianData() {
        // Manual audit sampling: Verify 100 random politicians against Riksdagen website
        List<PersonData> sample = personRepository.findRandomSample(100);
        
        int accurate = 0;
        int inaccurate = 0;
        
        for (PersonData person : sample) {
            // Fetch from official Riksdagen website for comparison
            OfficialPersonData official = riksdagenWebScraper.fetchPersonData(person.getPersonId());
            
            if (verifyMatch(person, official)) {
                accurate++;
            } else {
                inaccurate++;
                log.warn("Data mismatch for person_id: {}", person.getPersonId());
            }
        }
        
        return AccuracyReport.builder()
            .sampleSize(sample.size())
            .accurateRecords(accurate)
            .inaccurateRecords(inaccurate)
            .accuracyPercentage((double) accurate / sample.size() * 100)
            .build();
    }
}

3. 適時性

-- Calculate data freshness lag
SELECT 
    'vote_data' as data_type,
    MAX(created_date) as latest_record,
    CURRENT_TIMESTAMP as current_time,
    EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - MAX(created_date))) / 3600 as hours_lag,
    CASE 
        WHEN EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - MAX(created_date))) / 3600 < 24 THEN '✅ CURRENT'
        WHEN EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - MAX(created_date))) / 3600 < 168 THEN '⚠️ RECENT'
        ELSE '🚨 STALE'
    END as freshness_status
FROM vote_data;

4. 一貫性

-- Detect referential integrity violations
SELECT 
    'Vote Data Integrity' as check_name,
    COUNT(DISTINCT v.ballot_id) as total_votes,
    COUNT(DISTINCT CASE WHEN p.person_id IS NULL THEN v.person_id END) as orphaned_person_refs,
    COUNT(DISTINCT CASE WHEN b.ballot_id IS NULL THEN v.ballot_id END) as orphaned_ballot_refs,
    ROUND(100.0 * (1.0 - (
        COUNT(DISTINCT CASE WHEN p.person_id IS NULL THEN v.person_id END)::decimal +
        COUNT(DISTINCT CASE WHEN b.ballot_id IS NULL THEN v.ballot_id END)
    ) / (COUNT(DISTINCT v.ballot_id) * 2)), 2) as consistency_percentage
FROM vote_data v
LEFT JOIN person_data p ON v.person_id = p.person_id
LEFT JOIN ballot_data b ON v.ballot_id = b.ballot_id;

ISMS コンプライアンス対応

ISO 27001:2022 管理策

A.5.10 - 情報の許容される利用

  • OSINT の収集は公益目的に限定
  • データの利用はスウェーデンの情報公開原則に準拠
  • 個人データの処理は公務上の職務に限定

A.5.33 - 記録の保護

  • 収集したすべてのデータについてソースを明記
  • データ収集活動の監査証跡を保持
  • 保存期間は法的要件に準拠

A.8.8 - 技術的脆弱性の管理

  • API エンドポイントの可用性とセキュリティを監視
  • サービスの中断を防ぐためのレート制限
  • API アクセス用認証情報の安全な管理
NIST CSF 2.0 の機能

識別(ID)

  • ID.AM-5: 分類とビジネス価値に基づいてリソースに優先順位を設定
    • 4つの OSINT ソースを信頼性と完全性に基づいて分類
    • データ品質指標を継続的に追跡

防御(PR)

  • PR.DS-5: データ漏えいに対する保護を実装
    • API キーをセキュアな保管庫(AWS Secrets Manager)に保存
    • コードリポジトリに機密認証情報を保存しない

検知(DE)

  • DE.CM-1: 潜在的なサイバーセキュリティイベントを検知するためにネットワークを監視
    • 5分ごとに API のヘルスチェックを実施
    • 通常と異なるデータパターンを検知
CIS Controls v8.1

CIS Control 3: データ保護

  • 3.3: データアクセス制御リストを構成
    • OSINT データを機密性に基づいて分類
    • ロールベースの権限に基づいてアクセスを制御

CIS Control 12: ネットワークインフラストラクチャ管理

  • 12.4: 許可されていないネットワークプロトコルによる通信を拒否
    • すべての API 通信で HTTPS のみを使用
    • Riksdagen API に証明書のピン留めを適用

Hack23 ISMS ポリシーの参照先

データ分類ポリシー

プライバシーポリシー

セキュア開発ポリシー

サードパーティ管理

参考資料

公式ドキュメント:

CIA プラットフォームのドキュメント:

学術資料:

  • NATO OSINT リーダー:インテリジェンス収集の分類体系
  • 情報源の信頼性評価のためのアドミラルティ・コード
  • GDPR 第6条1項(e):公共の利益に関する業務に必要な処理

標準規格:

  • ISO 27001:2022:情報セキュリティマネジメント
  • NIST Special Publication 800-53:セキュリティおよびプライバシー管理策
  • CIS Controls v8.1:重要なセキュリティ管理策

🔗 エージェント型ワークフローおよび分析成果物との統合

このスキルは、.github/workflows/news-*.md にある11個のエージェント型ニュースワークフローで使用されます。正式な仕様は .github/prompts/README.md に記載されており、このスキルはその仕様を補完する専門知識を提供します。


🌐 IMF を経済情報の一次情報源として使用(OSINT 情報源評価の更新)

適用日: 2026-04-24

経済情報源に対するアドミラルティ・コードの評価
情報源信頼性(A–E)信憑性(1–6)用途
IMF WEO / Fiscal MonitorA(一貫して信頼できる)1(他の情報源で確認済み)一次情報源 — マクロ、財政、金融、対外、予測
IMF IFS / BOP / DOTS / GFS_COFOG / PCPS / ER / MFSA2(おそらく真実)一次情報源 — 高頻度の経済指標
SCB(Statistics Sweden)A1一次情報源 — スウェーデン固有の基準データ
RiksbankA1金融政策を補足する情報源
World Bank WGI(ガバナンスのみ)A1ガバナンスの一次情報源(CC.EST、RL.EST、VA.EST、GE.EST、RQ.EST、PV.EST)
World Bank WDI / WGI(経済以外のコンテキスト)A1ガバナンス(*.EST)、環境(EN.*、EG.*、AG.LND.FRST.ZS)、社会・教育の残余項目(SP.*、SH.*、SE.*)、防衛の過去データ(MS.MIL.*)、犯罪(VC.IHR.PSRC.P5)の一次情報源

正規の OSINT ルール: IMF は経済情報(マクロ、財政、金融、対外、貿易、商品、外国為替、金利)について A1/A2 と評価し、すべての経済関連の主張の情報源とします。World Bank は、analysis/worldbank/indicators-inventory.json に収録されたガバナンス、環境、社会・教育、防衛の過去データ、犯罪・司法のコンテキストについて A1 と評価します。.github/aw/ECONOMIC_DATA_CONTRACT.md v3.0 と analysis/imf/ を参照してください。

コメント