Matrice di Tracciabilità dei Requisiti¶
Struttura e Metodo¶
La seguente matrice traccia la corrispondenza tra i requisiti funzionali di progetto (RF1 - RF95) e i rispettivi moduli, schermate e ViewModel che li implementano nell'applicazione mobile.
Convenzioni adottate:
- quando una funzionalità coinvolge più componenti omogenei (View, ViewModel, API Client), sono riportati i riferimenti principali;
- eventuali note a margine indicano funzionalità con copertura parziale o con fallback in corso di completamento.
| ID Requisito | Testo Requisito | Moduli e Componenti di Implementazione |
|---|---|---|
| RF1 | L'utente deve poter effettuare il login inserendo le proprie credenziali (email e password). | lib/view/user/auth_screen/SignInPage.dart; lib/viewModel/user/auth/LogIn/LogInViewModel.dart; lib/utils/HapGreeApiContainer.dart |
| RF2 | L'utente deve poter effettuare la registrazione creando un nuovo account. | lib/view/user/auth_screen/SignUpPage.dart; lib/viewModel/user/auth/signUp/SignUpViewModel.dart; lib/viewModel/user/auth/SignUpFormViewModel.dart |
| RF3 | L'utente deve poter richiedere il reset della password in caso di smarrimento. | lib/view/user/auth_screen/ForgotPasswordPage.dart; lib/view/user/auth_screen/ResetPasswordPage.dart; lib/viewModel/user/auth/ForgotPassword/ForgotPasswordViewModel.dart; lib/viewModel/user/auth/ResetPasswordViewModel.dart |
| RF4 | L'utente deve poter visualizzare il proprio profilo e i dati associati (es. nome, avatar). | lib/view/user/home/HomeScreen.dart; lib/view/user/profile/EditPersonalInformationPage.dart; lib/viewModel/user/auth/UserDataViewModel.dart |
| RF5 | L'utente deve poter visualizzare l'andamento settimanale delle proprie emissioni di CO2. | lib/view/user/home/HomeScreen.dart; lib/viewModel/user/homePage/HomePageViewModel.dart |
| RF6 | L'utente deve poter visualizzare un resoconto giornaliero delle proprie emissioni. | lib/view/user/home/HomeScreen.dart; lib/viewModel/user/homePage/HomePageViewModel.dart |
| RF7 | L'utente deve poter visualizzare le emissioni suddivise per categoria (Mobilita, Cibo, Energia). | lib/view/user/home/HomeScreen.dart; lib/viewModel/user/homePage/HomePageViewModel.dart; lib/constants/widgets/user/category/CategoryCard.dart |
| RF8 | L'utente deve poter accedere alla funzione di compensazione delle proprie emissioni. | lib/view/user/home/HomeScreen.dart; lib/view/user/setting/SettingHomePage.dart; lib/Routing/Routes/OffsettingRoutes.dart |
| RF9 | L'utente deve poter visualizzare i dati relativi all'attivita fisica (passi, distanza percorsa). | lib/view/user/home/HomeScreen.dart; lib/viewModel/user/homePage/HomePageViewModel.dart; lib/utils/TodayHealthValues.dart |
| RF10 | L'utente deve poter visualizzare l'andamento delle proprie emissioni di CO2 in un grafico temporale. | lib/view/user/home/RecentActivityPage.dart; lib/constants/widgets/infographic/DynamicLineChart.dart; lib/viewModel/user/homePage/HomePageViewModel.dart |
| RF11 | L'utente deve poter filtrare i dati delle emissioni per intervallo di tempo (giorno, settimana, mese, anno). | lib/view/user/home/RecentActivityPage.dart; lib/constants/widgets/infographic/DynamicLineChart.dart; lib/viewModel/user/homePage/HomePageViewModel.dart |
| RF12 | L'utente deve poter visualizzare i dati storici relativi alle proprie attivita. | lib/view/user/home/RecentActivityPage.dart; lib/viewModel/user/homePage/getRecentActivities/PaginatedRecentActivitiesViewModel.dart; lib/Routing/Routes/ActivityRoutes.dart |
| RF13 | L'utente deve poter visualizzare un feed di notifiche sulle attivita dell'app (es. progressi, sfide). | lib/view/user/home/HomeScreen.dart; lib/view/user/setting/NotificationSocialAndGroupInvitation.dart; lib/Routing/Routes/SettingsRoutes.dart |
| RF14 | L'utente deve accettare inviti di partecipazione ai gruppi. | lib/view/user/setting/NotificationSocialAndGroupInvitation.dart; lib/view/user/setting/GroupInvitationsPage.dart; lib/view/overlays/user/groups/JoinGroupScrollPopUp.dart |
| RF15 | L'utente deve poter esprimere una reazione/like ai contenuti delle notifiche. | lib/view/user/setting/NotificationSocialAndGroupInvitation.dart; lib/view/user/setting/SocialSharingPage.dart; lib/constants/widgets/user/setting/LikeButton.dart |
| RF16 | L'utente deve poter visualizzare e modificare le proprie informazioni personali. | lib/view/user/setting/SettingHomePage.dart; lib/view/user/profile/EditPersonalInformationPage.dart; lib/viewModel/user/settings/editInformation/EditProfileViewModel.dart |
| RF17 | L'utente deve poter accedere alla sezione di compensazione CO2. | lib/view/user/setting/SettingHomePage.dart; lib/view/user/offsetting/OffsettingProjectSelectionPage.dart; lib/Routing/Routes/OffsettingRoutes.dart |
| RF18 | L'utente deve poter inserire o visualizzare un codice di compensazione. | lib/view/user/offsetting/OffsetCodePage.dart; lib/view/user/offsetting/OffsetScannerPage.dart; lib/viewModel/user/offsetting/ScanQrViewModel.dart; lib/Services/offsetting/OffsettingServiceMock.dart |
| RF19 | L'utente deve poter cambiare la propria password. | lib/view/user/auth_screen/ChangePasswordPage.dart; lib/viewModel/user/auth/ChangePasswordViewModel.dart; lib/Routing/Routes/SettingsRoutes.dart |
| RF20 | L'utente deve poter consultare le domande frequenti (FAQ). | lib/view/user/setting/FAQPage.dart; lib/Routing/Routes/SettingsRoutes.dart; lib/utils/HapGreeApiContainer.dart |
| RF21 | L'utente deve poter visualizzare le politiche di privacy dell'app. | lib/view/user/setting/PrivacyPolicyPage.dart; lib/Routing/Routes/SettingsRoutes.dart |
| RF22 | L'utente deve poter visualizzare i propri certificati di compensazione. | lib/view/user/setting/CompensationCertificatesPage.dart; lib/view/user/setting/CertificateDetailPage.dart; lib/viewModel/user/compensation/GetCertificatesViewModel.dart |
| RF23 | L'utente deve poter eliminare il proprio account. | lib/view/user/setting/SettingHomePage.dart; lib/view/overlays/user/account/DelteAccountConfirmationPopUp.dart; lib/viewModel/user/users/DeleteMyAccountViewModel.dart |
| RF24 | L'utente deve poter effettuare il logout dall'applicazione. | lib/view/user/setting/SettingHomePage.dart; lib/view/overlays/user/account/LogOutConfirmationPopUp.dart; lib/viewModel/user/auth/Logout/LogoutViewModel.dart |
| RF25 | L'utente deve poter accedere alla sezione "Bacheca". | lib/view/user/setting/SettingHomePage.dart; lib/view/user/setting/SocialSharingPage.dart; lib/Routing/Routes/SettingsRoutes.dart |
| RF26 | L'utente deve poter accedere alla sezione "Suggerimenti". | lib/view/user/setting/TipsLibraryPage.dart; lib/view/generic/SuggestionsPage.dart; lib/Routing/Routes/SettingsRoutes.dart |
| RF27 | L'utente deve poter creare un nuovo gruppo. | lib/Routing/Routes/GroupsRoutes.dart; lib/view/user/groups/createNewGroup/NewGroupPage.dart; lib/view/overlays/user/groups/CreateNewGroupPopUp.dart |
| RF28 | L'utente deve poter unirsi a un gruppo pubblico o privato tramite codice o link. | lib/view/user/groups/groupsPages/SubPages/PublicGroupsPage/PublicGroupsPage.dart; lib/view/overlays/user/groups/JoinGroupScrollPopUp.dart; lib/view/overlays/user/groups/JoinGroupWithTagScrollPopUp.dart; lib/Routing/Routes/GroupsRoutes.dart (copertura parziale: route joinGroup restituisce Container()) |
| RF29 | L'utente deve poter visualizzare la lista dei propri gruppi e dei gruppi pubblici disponibili. | lib/view/user/groups/groupsPages/GroupsPages.dart; lib/view/user/groups/groupsPages/SubPages/MyGroupsPage.dart; lib/view/user/groups/groupsPages/SubPages/PublicGroupsPage/PublicGroupsPage.dart |
| RF30 | L'utente deve poter cercare un gruppo tramite barra di ricerca. | lib/view/user/groups/groupsPages/SubPages/PublicGroupsPage/PublicGroupsPage.dart; lib/constants/widgets/generic/HapGreeSearchBar.dart; lib/model/generic/searchBar/SearchBarModel.dart |
| RF31 | L'utente deve poter visualizzare le informazioni principali di ciascun gruppo (nome, membri, stato di avanzamento). | lib/view/user/groups/groupPage/GroupPage.dart; lib/view/user/groups/groupsPages/SubPages/PublicGroupsPage/PublicGroupsPage.dart; lib/constants/widgets/user/group/PublicGroupCard.dart |
| RF32 | L'utente deve poter uscire da un gruppo a cui e iscritto. | lib/view/user/groups/groupPage/GroupPage.dart; lib/view/overlays/user/groups/LeaveGroupPopUp.dart; lib/viewModel/user/groups/groupOwnership/GroupOwnershipViewModel.dart |
| RF33 | L'utente deve poter visualizzare la classifica dei gruppi in base ai punteggi ottenuti. | lib/view/user/groups/leaderboard/GroupsLeaderboardPage.dart; lib/Routing/Routes/GroupsRoutes.dart |
| RF34 | L'utente deve poter filtrare la classifica dei gruppi per intervallo temporale (giornaliero, settimanale, mensile, globale). | lib/view/user/groups/leaderboard/GroupsLeaderboardPage.dart; lib/constants/widgets/user/setting/TimeFrameFilter.dart |
| RF35 | L'utente deve poter visualizzare la classifica interna del gruppo con la posizione dei membri in base alle performance. | lib/view/user/groups/groupPage/GroupPage.dart; lib/view/user/groups/teamLeaderboard/TeamLeaderboardSubPage.dart; lib/model/user/leaderboard/TeamLeaderboardModel.dart |
| RF36 | L'utente deve poter filtrare la classifica del gruppo per intervallo temporale (giornaliero, settimanale, mensile, globale). | lib/view/user/groups/teamLeaderboard/TeamLeaderboardSubPage.dart; lib/constants/widgets/user/setting/TimeFrameFilter.dart |
| RF37 | L'utente deve poter visualizzare il proprio posizionamento all'interno della classifica del gruppo. | lib/view/user/groups/teamLeaderboard/TeamLeaderboardSubPage.dart; lib/model/user/leaderboard/TeamLeaderboardModel.dart |
| RF38 | L'utente deve poter visualizzare le challenge del gruppo (obiettivi giornalieri, settimanali e mensili). | lib/view/user/groups/groupPage/GroupPage.dart; lib/view/user/groups/groupPage/GroupChallengesSubPage.dart; lib/Routing/Routes/ChallengesRoutes.dart |
| RF39 | L'utente deve poter monitorare l'avanzamento delle proprie challenge tramite barre di progresso. | lib/view/user/groups/groupPage/GroupChallengesSubPage.dart; lib/constants/widgets/user/challenge/ChallengeCard.dart |
| RF40 | L'utente deve poter visualizzare il tempo rimanente alla conclusione di ogni challenge. | lib/view/user/groups/groupPage/GroupChallengesSubPage.dart; lib/utils/ChallengeTimeUtils.dart |
| RF41 | L'utente deve poter visualizzare i risultati e i progressi degli altri membri del gruppo. | lib/view/user/groups/groupPage/GroupChallengesSubPage.dart; lib/view/user/groups/teamLeaderboard/TeamLeaderboardSubPage.dart |
| RF42 | L'utente deve poter visualizzare le challenge individuali e di gruppo disponibili. | lib/view/user/challenges/ChallengesHomePage.dart; lib/view/user/challenges/challengesHomePage/SubPages/GroupChallengesHomePage.dart; lib/Routing/Routes/ChallengesRoutes.dart |
| RF43 | L'utente deve poter visualizzare le challenge suddivise per periodo (giornaliere, settimanali, mensili). | lib/view/user/challenges/ChallengesHomePage.dart; lib/view/user/challenges/IndividualChallenges/SeeAllIndividualChallenges.dart; lib/view/user/challenges/challengesHomePage/SubPages/GroupChallengesHomePage.dart |
| RF44 | L'utente deve poter monitorare l'avanzamento delle challenge tramite una barra di progresso. | lib/view/user/challenges/ChallengesHomePage.dart; lib/constants/widgets/user/challenge/ChallengeCard.dart |
| RF45 | L'utente deve poter visualizzare il tempo rimanente alla scadenza di ciascuna challenge. | lib/view/user/challenges/ChallengesHomePage.dart; lib/utils/ChallengeTimeUtils.dart |
| RF46 | L'utente deve poter riscattare le challenge completate. | lib/view/user/challenges/ChallengeCompleted.dart; lib/view/user/challenges/CollectableChallengeHomePage/CollectableChallengeHomePage.dart; lib/view/user/challenges/CollectableChallengeHomePage/CollectableIndividualChallenges.dart |
| RF47 | L'utente deve poter visualizzare una classifica individuale basata sui risultati ottenuti nelle challenge. | lib/view/user/challenges/leaderboard/IndividualLeaderboardPage.dart; lib/Routing/Routes/ChallengesRoutes.dart |
| RF48 | L'utente deve poter filtrare la classifica individuale per intervallo temporale (giornaliero, settimanale, mensile, globale). | lib/view/user/challenges/leaderboard/IndividualLeaderboardPage.dart; lib/constants/widgets/user/setting/TimeFrameFilter.dart |
| RF49 | L'utente deve poter accedere alla pagina delle categorie di tracciamento della CO2 per monitorare e analizzare la propria impronta di carbonio. | lib/view/user/category/CategoryHomePage.dart; lib/Routing/Routes/MobilityRoutes.dart; lib/Routing/Routes/EnergyRoutes.dart; lib/Routing/Routes/FoodRoutes.dart |
| RF50 | L'utente deve poter visualizzare le proprie emissioni giornaliere di CO2 derivanti dai trasporti. | lib/view/user/category/mobility/MobilityCategoryHomePage.dart; lib/viewModel/user/category/mobility/getHomeScreenData/GetMobilityHomeScreenDataViewModel.dart |
| RF51 | L'utente deve poter aggiungere manualmente un nuovo percorso o viaggio. | lib/view/user/category/mobility/AddMobilityPage.dart; lib/viewModel/user/category/mobility/createTravel/CreateTravelViewModel.dart; lib/Routing/Routes/MobilityRoutes.dart |
| RF52 | L'utente deve poter inserire i dettagli del viaggio (tipo di veicolo, distanza percorsa, motivazione del viaggio). | lib/view/user/category/mobility/AddMobilityPage.dart; lib/viewModel/user/category/mobility/createTravel/CreateTravelViewModel.dart; lib/model/user/category/mobility/CreateTravelModel.dart (copertura parziale: travelReasonType hardcoded in alcuni salvataggi) |
| RF53 | L'utente deve poter visualizzare lo storico dei viaggi effettuati e le relative emissioni. | lib/view/user/category/mobility/detailsPage/MobilityDetailsPage.dart; lib/view/user/category/mobility/detailsPage/SubPages/RecentActivityDetailsMobilitySubPages.dart; lib/viewModel/user/category/mobility/getMobilityRecentActivities/PaginatedMobilityRecentActivityViewModel.dart |
| RF54 | L'utente deve poter accedere alla sezione di dettaglio per analizzare la distribuzione delle emissioni per tipo di mezzo di trasporto. | lib/view/user/category/mobility/detailsPage/MobilityDetailsPage.dart; lib/view/user/category/mobility/detailsPage/SubPages/OverviewDetailsMobilitySubPages.dart; lib/viewModel/user/category/mobility/getMobilityMoreContributions/GetMobilityMoreContributionsViewModel.dart |
| RF55 | L'utente deve poter visualizzare confronti grafici tra le proprie emissioni e la media degli altri utenti. | lib/view/user/category/mobility/detailsPage/MobilityDetailsPage.dart; lib/view/user/category/mobility/detailsPage/SubPages/OverviewDetailsMobilitySubPages.dart; Specs/OpenApi/OpenApi/src/Models/Stats.ts |
| RF56 | L'utente deve poter ricevere suggerimenti per ridurre le emissioni derivanti dai propri spostamenti. | lib/Routing/Routes/MobilityRoutes.dart; lib/view/generic/SuggestionsPage.dart |
| RF57 | L'utente deve poter attivare o disattivare il tracking automatico dei viaggi. | lib/view/user/category/drivingAnalysis/DrivingAnalysisHomePage.dart; lib/viewModel/user/category/DrivingAnalysis/AnalyzeDrivingViewModel.dart |
| RF58 | L'utente deve poter avviare manualmente il monitoraggio di un viaggio. | lib/view/user/category/drivingAnalysis/DrivingAnalysisHomePage.dart; lib/viewModel/user/category/DrivingAnalysis/AnalyzeDrivingViewModel.dart |
| RF59 | L'utente deve poter visualizzare in tempo reale i dati di guida (velocita, stato di movimento, ecc.). | lib/view/user/category/drivingAnalysis/DrivingAnalysisHomePage.dart; lib/viewModel/user/category/DrivingAnalysis/AnalyzeDrivingViewModel.dart; lib/viewModel/user/category/DrivingAnalysis/AutomaticTrackingMetrics.dart |
| RF60 | L'utente deve poter visualizzare la mappa del percorso durante il monitoraggio. | lib/view/user/category/drivingAnalysis/DrivingAnalysisHomePage.dart; lib/viewModel/user/category/DrivingAnalysis/AnalyzeDrivingViewModel.dart; lib/utils/GpsFilterUtils.dart |
| RF61 | L'utente deve poter accedere all'elenco dei viaggi registrati e salvarli successivamente. | lib/view/user/category/drivingAnalysis/DrivingAnalysisHomePage.dart; lib/viewModel/user/category/DrivingAnalysis/AutomaticTrackingViewModel.dart; lib/viewModel/user/category/mobility/createTravel/CreateTravelViewModel.dart |
| RF62 | L'utente deve poter visualizzare l'emissione giornaliera di CO2 derivante dai consumi energetici. | lib/view/user/category/energy/EnergyHomePage.dart; lib/viewModel/user/category/energy/getHomeScreenData/GetEnergyHomeScreenDataViewModel.dart |
| RF63 | L'utente deve poter aggiungere manualmente una bolletta per il calcolo delle emissioni. | lib/view/user/category/energy/AddEnergyBillPage.dart; lib/viewModel/user/category/energy/createEnergy/CreateEnergyViewModel.dart |
| RF64 | L'utente deve poter visualizzare i contributi di emissione suddivisi per fonte (elettricita, gas, acqua). | lib/view/user/category/energy/detailsPage/EnergyDetailsPage.dart; lib/view/user/category/energy/detailsPage/SubPages/OverviewDetailsEnergySubPages.dart; lib/viewModel/user/category/energy/getEnergyActivity/GetEnergyContributiViewModel.dart |
| RF65 | L'utente deve poter accedere alla schermata di dettaglio per analizzare le emissioni di CO2 relative alle bollette. | lib/view/user/category/energy/detailsPage/EnergyDetailsPage.dart; lib/Routing/Routes/EnergyRoutes.dart |
| RF66 | L'utente deve poter visualizzare i grafici di distribuzione delle emissioni per fonte energetica. | lib/view/user/category/energy/detailsPage/EnergyDetailsPage.dart; lib/view/user/category/energy/detailsPage/SubPages/OverviewDetailsEnergySubPages.dart; lib/view/user/category/energy/SummaryEnergyPage.dart |
| RF67 | L'utente deve poter consultare le attivita energetiche recenti registrate. | lib/view/user/category/energy/detailsPage/SubPages/RecentActivityDetailsEnergySubPages.dart; lib/viewModel/user/category/energy/getEnergyRecentActivities/PaginatedEnergyRecentActivityViewModel.dart |
| RF68 | L'utente deve poter accedere ai suggerimenti per ridurre le emissioni legate ai consumi energetici. | lib/Routing/Routes/EnergyRoutes.dart; lib/view/generic/SuggestionsPage.dart |
| RF69 | L'utente deve poter visualizzare l'emissione giornaliera di CO2 derivante dal consumo alimentare. | lib/view/user/category/food/FoodCategoryHomePage.dart; lib/viewModel/user/category/food/getFoodHomePageInfo/GetFoodHomeScreenDataViewModel.dart |
| RF70 | L'utente deve poter aggiungere alimenti tramite inserimento manuale. | lib/view/user/category/food/AddFoodPage.dart; lib/viewModel/user/category/food/AddManualFoodViewModel.dart |
| RF71 | Il sistema deve poter elaborare automaticamente i dati di uno scontrino per calcolare le emissioni di CO2 associate. | lib/view/user/category/food/ScannerPage/ReceiptScannerPage.dart; lib/viewModel/user/category/food/ReceiptScannerViewModel.dart; lib/Services/Category/food/implementation/GoogleMLKitReceiptOcrService.dart; lib/Services/Category/food/implementation/OpenFoodFactsGetFoodsFromReceiptService.dart (copertura parziale: fallback di test ancora presente) |
| RF72 | L'utente deve poter visualizzare lo stato di elaborazione degli scontrini caricati. | lib/view/user/category/food/ScannerPage/ReceiptScannerResultPage.dart; lib/viewModel/user/category/food/foodRecepits/GetAutomaticFoodReceiptViewModel.dart; Specs/OpenApi/OpenApi/src/Models/FoodReceipt.ts |
| RF73 | L'utente deve poter visualizzare le emissioni di CO2 suddivise per categorie di cibo o punteggio Green-Score (A-E). | lib/view/user/category/food/detailsPage/FoodDetailsPage.dart; lib/view/user/category/food/detailsPage/SubPages/OverviewDetailsFoodSubPages.dart; lib/viewModel/user/category/food/getFoodOverview/GetFoodOverviewStatsViewModel.dart |
| RF74 | L'utente deve poter accedere ai dettagli delle emissioni alimentari, inclusi grafici e percentuali per categoria. | lib/view/user/category/food/detailsPage/FoodDetailsPage.dart; lib/view/user/category/food/detailsPage/SubPages/OverviewDetailsFoodSubPages.dart; lib/view/user/category/food/SummaryFoodPage.dart |
| RF75 | L'utente deve poter consultare la lista delle attivita alimentari recenti. | lib/view/user/category/food/detailsPage/SubPages/RecentActivityDetailsFoodSubPages.dart; lib/viewModel/user/category/food/geFoodRecentActivity/PaginatedFoodRecentActivityViewModel.dart |
| RF76 | L'utente deve poter aggiungere degli alimenti tramite scontrino. | lib/view/user/category/food/ScannerPage/ReceiptScannerPage.dart; lib/view/user/category/food/ScannerPage/ReceiptScannerResultPage.dart; lib/viewModel/user/category/food/foodRecepits/UploadFoodRecepeitViewModel.dart |
| RF77 | L'utente deve poter aggiungere degli alimenti tramite codice a barre. | lib/view/user/category/food/ScannerPage/FoodScannerBarCodePage.dart; lib/viewModel/user/category/food/FoodScannerViewModel.dart |
| RF78 | L'utente deve poter visualizzare la schermata dedicata al monitoraggio automatico delle attivita fisiche. | lib/view/user/category/AutomaticTracking/ConnectableAppTrackingPage.dart; lib/Routing/Routes/AutomaticTrackingRoutes.dart |
| RF79 | L'utente deve poter visualizzare il numero di passi effettuati e i chilometri percorsi giornalmente. | lib/view/user/category/AutomaticTracking/ConnectableAppTrackingPage.dart; lib/viewModel/user/category/automaticTracking/ConnectableAppViewModel.dart; lib/utils/TodayHealthValues.dart |
| RF80 | L'utente deve poter collegare un'app di tracciamento esterna per importare i propri dati di attivita fisica. | lib/view/user/category/AutomaticTracking/trackingAppPages/SingleConnectableAppDetailsPage_GoogleHealthConnect.dart; lib/view/user/category/AutomaticTracking/trackingAppPages/SingleConnectableAppDetailsPage_AppleHealth.dart; lib/viewModel/user/category/automaticTracking/ConnectableAppViewModel.dart |
| RF81 | Il sistema deve poter sincronizzare automaticamente i dati di passi e distanza percorsa con l'app collegata. | lib/utils/TodayHealthValues.dart; lib/viewModel/user/category/automaticTracking/ConnectableAppViewModel.dart; lib/viewModel/user/category/automaticTracking/SaveStepsAndDistanceViewModel.dart; lib/main.dart |
| RF82 | L'utente deve poter connettere o disconnettere il servizio Health Connect per abilitare il tracciamento. | lib/viewModel/user/category/automaticTracking/trackingAppPages/GoogleHealthConnectViewModel.dart; lib/viewModel/user/category/automaticTracking/SingleConnectableAppViewModel.dart; lib/viewModel/user/category/automaticTracking/ConnectableAppViewModel.dart |
| RF83 | L'utente deve poter avviare il tutorial introduttivo al primo accesso dell'applicazione. | lib/Routing/Routes/StartingRoutes.dart; lib/features/onboarding/onboarding_page_widget.dart; lib/features/onboarding/onboarding_prefs.dart |
| RF84 | L'utente deve poter visualizzare le schermate informative che spiegano le principali funzionalita dell'app. | lib/features/onboarding/onboarding_page_widget.dart; lib/features/onboarding/onboarding_assets.dart; lib/features/onboarding/onboarding_slide.dart |
| RF85 | L'utente deve poter procedere tra le schermate del tutorial utilizzando il pulsante "Avanti". | lib/features/onboarding/onboarding_controller.dart; lib/features/onboarding/onboarding_page_widget.dart |
| RF86 | L'utente deve poter tornare alla schermata precedente del tutorial utilizzando il pulsante "Indietro". | lib/features/onboarding/onboarding_controller.dart; lib/features/onboarding/onboarding_page_widget.dart |
| RF87 | L'utente deve poter saltare il tutorial in qualsiasi momento tramite il pulsante "Salta". | lib/features/onboarding/onboarding_controller.dart; lib/features/onboarding/onboarding_page_widget.dart |
| RF88 | Al termine del tutorial, l'utente deve poter accedere direttamente alla schermata principale dell'applicazione. | lib/features/onboarding/onboarding_page_widget.dart; lib/features/onboarding/onboarding_controller.dart; lib/Routing/Routes/StartingRoutes.dart |
| RF89 | L'app deve salvare lo stato del tutorial, evitando che venga riproposto agli utenti che lo hanno gia completato o saltato. | lib/features/onboarding/onboarding_prefs.dart; lib/features/onboarding/onboarding_controller.dart |
| RF90 | L'utente deve poter visualizzare un elenco di progetti di compensazione disponibili. | lib/view/user/offsetting/OffsettingProjectSelectionPage.dart; lib/viewModel/user/projects/GetProjectsViewModel.dart; lib/utils/HapGreeApiContainer.dart |
| RF91 | L'utente deve poter selezionare un progetto di compensazione dall'elenco mostrato. | lib/view/user/offsetting/OffsettingProjectSelectionPage.dart; lib/viewModel/user/compensation/FreeCompensationViewModel.dart |
| RF92 | L'utente deve poter inserire manualmente l'importo o la quantita di CO2 da compensare. | lib/view/user/offsetting/OffsetManualInputPage.dart; lib/view/user/offsetting/OffsetAmountPage.dart; lib/viewModel/user/compensation/FreeCompensationViewModel.dart |
| RF93 | Il sistema deve calcolare automaticamente la conversione tra quantita di CO2 (kg) e importo monetario (EUR). | lib/view/user/offsetting/OffsetAmountPage.dart; lib/viewModel/user/compensation/FreeCompensationViewModel.dart |
| RF94 | L'utente deve poter scegliere tra opzioni di compensazione predefinite (giornaliera, settimanale, mensile, annuale). | lib/view/user/offsetting/OffsetAmountPage.dart; lib/viewModel/user/compensation/FreeCompensationViewModel.dart; Specs/OpenApi/OpenApi/src/Models/Compensation.ts |
| RF95 | L'utente deve poter procedere al pagamento della compensazione selezionando un metodo disponibile. | lib/view/user/offsetting/PaymentOptionPage.dart; lib/viewModel/user/compensation/CreateOrderFreeCompensationViewModel.dart; lib/utils/HapGreeApiContainer.dart |