Versione: 2.0 — 2026-04-23
Scope: Flussi attualmente implementati nella piattaforma legacy (idn-deals-legacy-ui/), estratti da Routes.js, HomePage.js, DealDashboardPage.js, Containers, Sagas.
Note: solo descrizione funzionale del flusso attuale. Nessuna valutazione.
flowchart LR) salvo casi con troppi rami.[ADV] Advisor · [INV] Investor · [ADM] Admin · [SYS] Sistema · [EXT] fuori piattaforma.(*) nel testo indicano operazioni che avvengono fuori piattaforma.Login standard, con hash-based entry per signup, email confirmation e investor magic link. Redirect post-login role-aware.
Pagine coinvolte
/ landing pubblica (MainPage) + sezioni pubbliche (companies, advisors, industry-executives, investors, sectors, track-record)./login (LoginPageNew)./reset-password, /restore-password/:hash (email-based reset)./sign-up/:role?/check/:hash (SignUpCheckPage), /confirm-email/:role?/check/:hash (ConfirmEmailCheckPage), /login/check/:token (InvestorLoginCheckPage — magic link), /mandate-deal-submitted/check/:hash./locked (account bloccato), /logout, /important-update, /updates-agreed, /investor-verification.Redirect post-login
role === 0 (Advisor) → /home/dealsrole === 1 (Admin/Expert) → /home/deal-pipelinerole === 2 (Investor) → path da state o default dashboardIngresso su invito email. Wizard 2 step + conferma email + pagina "finish".
Contenuto degli step del wizard (/advisor/sign-up/step/:step):
| Step | Pagina | Campi raccolti |
|---|---|---|
| 1 | AdvisorSignUpStep1 |
nome, cognome, email, password, paese, geografia di competenza, settori principali |
| 2 | AdvisorSignUpStep2 |
settori focus dettagliati, geografie operative, giorni di esperienza PE, track record |
| finish | AdvisorSignUpFinish |
schermata di congratulazioni |
Flusso successivo (primo login)
HomePage legge filters.register_status. Se !== 'registered' mostra WelcomePage (modale role-aware con messaggio advisor) e aggiorna il flag.PlatformAgreementInfoPopup + PlatformAgreementPopup) al primo tentativo di condividere un deal.Wizard più complesso dell'Advisor, con branch basato su subRole (0 = Co-Lead Investor, ≠ 0 = altro ruolo del fondo). Inclusi intro firm, verifica e invito colleghi.
Step del wizard (/investor/sign-up/step/:step):
| Step | Pagina | Note |
|---|---|---|
| lead-confirm | InvestorSignUpLeadConfirm |
Conferma appartenenza firm |
| create-account | InvestorSignUpCreateAccount |
Email + password |
| onboarding | InvestorSignUpOnboarding |
Solo subRole=0 (Co-Lead). Orientamento |
| step/1 | InvestorSignUpStep1 |
Solo subRole≠0. Settori, geografie, governance |
| step/2 | InvestorSignUpStep2 |
Solo subRole≠0. Firm overview |
| profile-setup | InvestorSignUpProfileSetup |
Bio, ruolo nel fondo |
| preferences | InvestorSignUpPreferences |
Solo subRole=0. Preferenze matching firm-level |
| profile-completed | InvestorSignUpProfileCompleted |
Schermata finale |
Pagine collaterali pre/post
/investor-verification (InvestorVerificationPage) — verifica identità./invite-colleagues (InvestorInviteColleaguesPage) + /invite-colleagues/success — solo role=2.InvestorIntroPage, InvestorIntroSuccessPage — intro firm (entry point alternativo via email).InvestorLoginCheckPage — magic link token login.Wizard 4 step + start + review + profile, con gate su platform agreement prima del submit finale.
Contenuto degli step (/home/deal-sharing/step/:step):
| Step | Pagina | Campi raccolti |
|---|---|---|
| start | DealSharingStart |
4 checkbox compliance: proprietary_bilateral, introduction, confidentiality, opportunity_related |
| 1 | DealSharingStep1 |
target sectors, sub-sectors, regions, governance, investment type, enterprise value, equity investment, equity stake |
| 2 | DealSharingStep2 |
company_overview, deal_overview, transaction context, timeline, valuation |
| 3 | DealSharingStep3 |
relationship with target, proposed role, involvement level |
| 4 | DealSharingStep4 |
preferred investor type, size, DNC list, specific investors, screening questions |
| review | DealSharingReview |
summary accordion di tutte le sezioni |
| profile | DealSharingProfile |
executive summary, experience, day rate (advisor profile visibile agli investor) |
Note funzionali
dealId.substr(0,1) === 'R' il flusso salta a review (è un reshare di deal ritirato).fromMandate === true il flusso diverge verso il mandate-deal sharing (sezione 6).DealNotQualifiedPopup.PlatformAgreementInfoPopup → PlatformAgreementPopup prima del share finale.Dopo il share, l'Advisor monitora i match, conferma quello scelto, disclosure dell'azienda target, apre il Deal Dashboard.
Pagine e popup collegati
DealInfoPage tab: summary, shares, stats (per-deal dashboard dell'advisor).DealShareInfoAllPage — vista consolidata di tutti i deal shares dell'advisor./home/deals/:tab/deal-shared — popup di conferma share.DealFirmPage mostra: profilo investor firm + risposte Q&A + commento + bilateral contract PDF scaricabile.L'Advisor riceve notifica di un mandate di un fondo e propone un deal. Wizard 3 step derivato dal deal sharing ma con criteri pre-filled dal mandate.
Step del wizard (/home/mandate-deal-sharing/step/:step):
| Step | Pagina | Campi |
|---|---|---|
| start / 1 | MandateDealSharingStart |
criteri mandate (continents, regions, countries, subsectors) pre-filled, target identification |
| 2 | DealSharingStep2 (riusato) |
company_overview, deal_overview, transaction, timeline |
| 3 | DealSharingStep3 (riusato) |
relationship with target, role |
| review | MandateDealSharingReview |
summary |
Note
user.signed_platform_agreement === true, altrimenti redirect a /home/mandates.MandateShareInfoPage, MandateShareInfoAllPage per l'advisor che naviga i mandate ricevuti.L'Advisor gestisce la propria esperienza lavorativa e expertise. Queste info alimentano il DealSharingProfile mostrato agli investor.
Campi
ExperiencePage: work history con company, role, period, description, deal size.ExpertisePage: settori focus, geografie, track record.AdvisoryRequestsPage (/home/advisory-requests) — elenco richieste di advisory (NED/SA) ricevute.Due path alternativi: deal condiviso con me vs sfoglia tutti i deal. Convergono nella stessa Q&A.
Tab di DealShareInfoPage
summary — teaser anonimizzato + criteri.app — form Q&A (attivo post-apply).answers — risposte date.Note
ReviewProfilePage si presenta prima del primo apply: l'investor rivede il profilo della sua firm. Se subRole !== 2 può editarlo tramite EditFirmProfilePopupPage.subRole === 2 è bloccato sull'edit firm profile (mostra lista lead users).Azioni che l'Investor può eseguire sulla propria applicazione post-apply.
L'Investor crea un mandate attivo. Wizard 2 step (start + review) semplice. Guard su platform agreement della firm.
Step del wizard (/home/mandate-sharing/step/:step):
| Step | Pagina | Campi |
|---|---|---|
| start | MandateSharingStart |
settori, sub-settori, regioni, ticket size min/max, horizon, governance, investment type |
| review | MandateSharingReview |
summary finale |
Note: il permesso di creare mandate è IsAdminRole | IsInvestorRole (anche admin può creare mandate per conto di un fondo).
Gestione di un mandate attivo: visualizzazione, pausa, close, invito colleghi, visualizzazione deal proposti.
Tab di MandatesPage: your, all, closed.
Gestione del profilo della firm (investment firm) a cui l'Investor appartiene.
Tab di FirmActivitiesPage
deals: deals_received, deals_applied, engagements, deals_closed + FirmDealsTable.mandate: mandate attivi/chiusi + FirmMandatesTable.Nota: /home/firm's-activities è accessibile solo se role === 2 && subRole !== 2.
Vista admin di tutti i deal + gestione dettaglio + editing + azioni di withdrawal/reshare.
Pagina centrale per governare la fase post-match di un deal. Tutti i popup di transizione di stato del deal dashboard sono triggerabili da qui lato admin.
Analoga alla deal pipeline ma per i mandate.
CRUD di advisors, investors, investment firms e dei loro filtri di matching.
Tool globali di configurazione: template email e tassonomia focus/settori.
Route parallela /deal-dashboard/* con proprio container, sidebar, switch. Include intro/NBO/BO/close.
Status dashboard
DealDashboardPage mantiene dashboardInfo.status_obj.id.endedStatuses = [5, 6, 7, 10] — 4 stati terminali. In stati terminali la sincronizzazione real-time (dealDashboardSyncToggle) viene disattivata.Reshare e re-share mandate — disponibili come popup aggiuntivi:
ReshareDealPopup, ReshareMandateDealPopup attivabili da overview e da deal-details.Sotto-flusso per forzare una decisione del contraente in ritardo.
Uscite non-happy dal Deal Dashboard.
Stati finali: Deal arriva a uno di endedStatuses [5, 6, 7, 10]. Dalla UI non è esposta la distinzione semantica dei 4 codici.
Sotto-flusso parallelo attivabile dentro il Deal Dashboard. Permette all'Investor di ingaggiare l'Advisor come consulente (NED/SA) durante il deal. Gestisce contratto + hours/days tracking.
Pagine dedicate
ExpertConsultingAgreement — render contratto di consulenza.ReviewShareAgreement — review del contratto prima del share.Popup Advisory Work (AdvisoryWorkPopups/)
EngageAdvisor, AgreementShared, EditAgreement, AgreementRecieved, RevisedAgreementRecieved, UploadSignedAgreement, InvestorAgreementSigned, AdvisorAgreementSigned, UploadDaysOfWork, ReUploadDaysOfWork, HoursSubmitted, HoursResubmitted, HoursSubmittedApproved, AgreementExtensionShared, AgreementExtensionSigned, AdvisorAgreementExtensionSigned, ExtendedAgreementReceived, InvestorAgreementEnded, AdvisorAgreementEnded.
Popup dello stesso flusso accessibile anche lato admin: EngageAdvisor, UploadSignedAgreement, admin-edit-options dalla Match Company page (flusso 14).
Funzionalità trasversali non riconducibili a un singolo flusso.
Note
SettingsPage ha tab configurabili (change password, profile basic info).DealSharing, MandateDealSharing, MandateSharing (in quest'ultimo caso check user.all_agreements).HomePage avvia notificationsSyncToggle(true) a mount e lo disattiva in cleanup. DealDashboardPage ha il suo sync separato.Pipeline completamente esterna alla piattaforma web legacy. Vive su Airtable + Make.com (16 scenari) + n8n Railway (6 webhook) + 8 modelli AI.
Componenti esterne
Ref:REC-{id} per tracciare risposte.Pagine marketing/SEO fuori dal flusso autenticato, elencate per completezza.
/ MainPage/companies CompaniesPage/advisors AdvisorsPage/industry-executives IndustryPage/investors InvestorsPage/sectors SectorsPage/track-record TrackRecordPage/terms-of-use, /privacy-policy, /cookies-policyElenco pagine presenti in Containers/ ma non raggiunte dal routing attivo o in stato deprecated/legacy:
AdvisorPreviewPage, Components/AdvisorPreview/* — preview pubblico advisor, non linkato da routes attive.DealAdvisoryPage, PlacementsPage, NedSaPage — commentati in HomePage.js, dead routes.Containers/Landing/old/AboutPage.js — landing vecchia non linkata.EditAgreementPopupPage (advisory) — referenziato da DealDashboard ma bypassato in alcune rotte admin.src/Routes.jssrc/Containers/HomePage.js (~450 righe, tutte le rotte /home/* + popup)src/Containers/DealDashboardPage.js (~380 righe)src/Redux/ (17 files, incl. AuthRedux, DealsRedux, DealSharesRedux, MandatesRedux, MandateSharesRedux, DealDashboardRedux, SettingsRedux, NotificationsRedux, ChatRedux, ExperienceRedux, ExpertConsultRedux, FirmsRedux, UsersRedux, MailTemplatesRedux, StartupRedux, ErrorsRedux)src/Sagas/ (16 files, specchio dei reducers)Components/PrivateRoute.js + isAllowed prop (role/subRole checks)