@startuml
actor Utilisateur as U
boundary IHM as I
participant System as S

autonumber

U->I: Consulter liste contacts
I-[#red]>S: obtenirListeContacts(idClient)
S-[#0000FF]->I: list<idContact,Contact>

alt
    U->I: Créer contact
    I-[#red]>S: CreerContact(idContact,Contact)
    S-[#0000FF]->I: CRE
else
    U->I: Consulter onglet contact spontané/commercial
    U->I: Selectionner un contact
    U->I: Modifier un contact
    I-[#red]>S: modifierContact(idContact,Contact)
    S-[#0000FF]->I: CRE
else
    U->I: Consulter onglet entretien
    U->I: Selectionner un entretien
    alt
        U->I: Consulter liste contrats
        I-[#red]>S: obtenirListeContrats(idClient)
        S-[#0000FF]->I: list<idContrat,Contrat>
        U->I: Consulter détaille d'un contrat
        I-[#red]>S: obtenirDetailleContrat(idOption,Option)
        S-[#0000FF]->I: idContrat,Contrat
        U->I: Proposer un option & Ajouter une annotation
        I-[#red]>S: ajouterAnnotation(idContrat,idContrat)
        S-[#0000FF]->I: CRE
    else
        U->I: Consulter liste offres
        I-[#red]>S: obtenirListeOffres(idClient)
        S-[#0000FF]->I: list<idOffre,Offre>
        U->I: Consulter détaille d'une offre
        I-[#red]>S: obtenirDetailleOffre(list<idProduit,Produit>)
        U->I: Proposer un Offre & Ajouter une annotation
        I-[#red]>S: ajouterAnnotation(idContrat,String)
        S-[#0000FF]->I: CRE
    else
        U->I: Modifier entretien
        I-[#red]>S: modifierContact(idContact,Contact)
        S-[#0000FF]->I: CRE
    end
    U->I: Changer état de l'entretient et le clore
    I-[#red]>S: ajouterAnnotation(idContrat,String)
    S-[#0000FF]->I: CRE
    I-[#red]>S: modifierContact(idContact,Contact)
    S-[#0000FF]->I: CRE
end
@enduml