game_manager_lib\services/
recommendation.rs

1//! Sistema de Recomendação v4.0 - Content-Based com Role-Based Tag System
2//!
3//! Este módulo implementa um sistema de recomendação híbrido que combina
4//! filtragem baseada em conteúdo (content-based) com filtragem colaborativa (collaborative).
5//!
6//! **Organização dos Módulos:**
7//! - `core`: Estruturas e tipos fundamentais
8//! - `profile`: Cálculo de perfil de usuário
9//! - `scoring`: Lógica de cálculo de scores
10//! - `filtering`: Filtros e regras de diversidade
11//! - `ranking`: Algoritmos de ranqueamento
12//! - `analysis`: Análise detalhada e debugging
13//! - `reports`: Exportação de relatórios
14//!
15//! **Melhorias v4.0:**
16//! - Sistema de roles para tags (Affinity, Context, Filter, Diversity)
17//! - Separação de estágios de recomendação
18//! - Filtros duros antes do ranqueamento
19//! - Penalização de séries/gêneros por seleção estrutural, não score
20//! - CF puro sem penalizações matemáticas
21//! - Cap individual por tag affinity
22//! - Aumento de peso dos gêneros
23
24pub mod analysis;
25pub mod core;
26pub mod filtering;
27pub mod profile;
28pub mod ranking;
29pub mod reports;
30pub mod scoring;
31
32// Reexportar os tipos e funções mais usados
33pub use analysis::{
34    generate_analysis_report, AnalysisStats, DetailedScoreBreakdown, GenreInfluence, ProfileStats,
35    RecommendationAnalysisReport, TagInfluence, UserSettingsReport,
36};
37pub use core::{
38    calculate_game_weight, parse_release_year, GameWithDetails, RecommendationConfig,
39    RecommendationReason, SeriesLimit, UserPreferenceVector, UserSettings, MAX_TAG_CONTRIBUTION,
40    WEIGHT_FAVORITE, WEIGHT_GENRE, WEIGHT_PLAYTIME_HOUR, WEIGHT_SERIES, WEIGHT_USER_RATING,
41};
42pub use filtering::{apply_diversity_rules, apply_hard_filters};
43pub use profile::calculate_user_profile;
44pub use ranking::{rank_games_collaborative, rank_games_content_based, rank_games_hybrid};
45pub use reports::{export_games_csv, export_report_json, export_report_txt};
46pub use scoring::{
47    normalize_score, score_game_cb, score_game_cb_detailed, DetailedScoreComponents,
48};