Aller au contenu principal

Architecture du Système OmniCRM

Ce document fournit un aperçu de l'architecture du système OmniCRM, y compris les relations entre les composants et le flux de données.

Vue d'ensemble du système à un haut niveau

OmniCRM est une plateforme BSS/OSS complète qui intègre plusieurs composants clés pour fournir une gestion complète des services pour les fournisseurs de télécommunications.

Composants Principaux

1. Applications Frontend

Interface Web OmniCRM

  • Application monopage React
  • Interface pour le personnel pour la gestion des clients, le provisioning de services, la facturation
  • Mises à jour du statut de provisioning en temps réel
  • Contrôle d'accès basé sur les rôles

Portail de Self-Care

  • Portail orienté client
  • Gestion des services et suivi de l'utilisation
  • Consultation et paiement des factures
  • Base de code partagée avec l'interface du personnel, vues différentes

2. Couche API

API OmniCRM (Flask/Python)

  • API RESTful pour toutes les opérations
  • Documentation OpenAPI/Swagger
  • Authentification basée sur JWT
  • Limitation de débit et mise en cache
  • Support WebSocket pour les mises à jour en temps réel

Routes Clés de l'API :

  • /crm/customer/* - Gestion des clients
  • /crm/service/* - Opérations de service
  • /crm/product/* - Catalogue de produits
  • /crm/provision/* - Opérations de provisioning
  • /crm/transaction/* - Transactions de facturation
  • /crm/invoice/* - Gestion des factures

3. Système de Provisioning

4. Facturation & Tarification

Intégration OCS/CGRateS

  • Tarification et facturation en temps réel
  • Gestion des comptes
  • Suivi des soldes (monétaire, données, voix, SMS)
  • Plans d'action pour les charges récurrentes
  • Notifications basées sur des seuils

Flux de Travail de Facturation :

5. Modèle de Données

OmniCRM utilise une base de données relationnelle avec les modèles principaux suivants. Pour des diagrammes de relation d'entité visuels, voir Clients, Contacts, Sites & Services.

Client & Entités Associées

Client - Entité centrale représentant une entreprise ou un individu

ChampTypeDescription
customer_idInteger (PK)Identifiant unique
customer_nameStringNom de l'entreprise ou de l'individu
customer_account_typeEnum'Individuel' ou 'Entreprise'
customer_statusEnum'Ouvert', 'Fermé', 'Suspendu', 'Archivé'
customer_payment_typeString'prépayé' ou 'postpayé'
customer_enabledBooleanLe compte est-il actif
tax_identifierStringNuméro de TVA/GST
contract_start_dateDateTimeDébut du contrat
contract_end_dateDateTimeFin du contrat

Contact - Personnes associées à un client

ChampTypeDescription
contact_idInteger (PK)Identifiant unique
customer_idInteger (FK)Client parent
contact_firstnameStringPrénom
contact_lastnameStringNom de famille
contact_emailStringAdresse email
contact_phoneStringNuméro de téléphone
contact_typesString'Principal', 'Facturation', 'Technique'

Site - Lieux physiques de livraison de services

ChampTypeDescription
site_idInteger (PK)Identifiant unique
customer_idInteger (FK)Client parent
site_nameStringNom de l'emplacement
address_line_1StringAdresse de rue
city, state, zip_codeStringDétails de l'emplacement
latitude, longitudeFloatCoordonnées GPS
google_maps_place_idStringRéférence Google Maps
plus_codeStringCode de Localisation Ouverte

Modèles de Service & Produit

Service - Instances de service actives

ChampTypeDescription
service_idInteger (PK)Identifiant unique
customer_idInteger (FK)Client parent
product_idInteger (FK)Modèle de produit
site_idInteger (FK)Lieu de service
service_nameStringNom d'affichage
service_uuidStringIdentifiant du système de facturation
service_statusEnumStatut actuel
service_billedBooleanGénérer des transactions
wholesale_costFloatCoût fournisseur
retail_costFloatPrix client
bundled_parentInteger (FK)Service parent pour les bundles

Produit - Modèles d'offres de service

ChampTypeDescription
product_idInteger (PK)Identifiant unique
product_nameStringNom d'affichage
product_slugStringNom adapté aux URL
categoryEnum'autonome', 'bundle', 'addon', 'promo'
provisioning_playStringNom du playbook Ansible
provisioning_json_varsJSONVariables du playbook
inventory_items_listStringInventaire requis
retail_costFloatPrix mensuel
retail_setup_costFloatFrais uniques
enabledBooleanDisponible à la vente

Modèles de Facturation

Transaction - Charges/crédits individuels

ChampTypeDescription
transaction_idInteger (PK)Identifiant unique
customer_idInteger (FK)Client parent
invoice_idInteger (FK)Facture parent (optionnel)
service_idInteger (FK)Service associé
titleStringDescription de la transaction
retail_costFloatMontant
tax_percentageFloatTaux de taxe
tax_amountFloatTaxe calculée
voidBooleanTransaction annulée

Facture - Transactions groupées pour la facturation

ChampTypeDescription
invoice_idInteger (PK)Identifiant unique
customer_idInteger (FK)Client parent
paidBooleanPaiement reçu
voidBooleanFacture annulée
payment_referenceStringID de transaction Stripe
start_date, end_dateDatePériode de facturation
due_dateDateDate limite de paiement
retail_costFloatMontant total

Modèles d'Inventaire

Inventaire - Actifs physiques et virtuels

ChampTypeDescription
inventory_idInteger (PK)Identifiant unique
customer_idInteger (FK)Client assigné
service_idInteger (FK)Service lié
inventory_template_idInteger (FK)Modèle de type d'élément
itemStringType d'élément (Carte SIM, Routeur, etc.)
item_stateEnum'Nouveau', 'Assigné', 'Utilisé', etc.
itemtext1-20StringChamps flexibles
management_urlStringURL d'administration de l'équipement
config_contentTextFichier de configuration

Inventory_Template - Définit la structure des éléments d'inventaire

ChampTypeDescription
inventory_template_idInteger (PK)Identifiant unique
itemStringNom du modèle
itemtext1_labelStringÉtiquette pour le champ itemtext1
itemtext2_labelStringÉtiquette pour le champ itemtext2

Modèles de Provisioning

Provision - Suivi des travaux de provisioning

ChampTypeDescription
provision_idInteger (PK)Identifiant unique
product_idInteger (FK)Produit en cours de provisioning
customer_idInteger (FK)Client cible
service_idInteger (FK)Service créé/modifié
provisioning_playStringNom du playbook Ansible
provisioning_statusInteger0=Succès, 1=En Cours, 2=Échoué

Provision_Event - Étapes de provisioning individuelles

ChampTypeDescription
provision_event_idInteger (PK)Identifiant unique
provision_idInteger (FK)Tâche de provisioning parent
event_nameStringNom de la tâche
event_numberIntegerNuméro de séquence
provisioning_statusInteger0=Succès, 1=En Cours, 2=Échoué
provisioning_result_jsonJSONSortie complète de la tâche

Modèles Utilisateur & Sécurité

Utilisateur - Comptes utilisateurs

ChampTypeDescription
idInteger (PK)Identifiant unique
usernameStringNom d'utilisateur de connexion
emailStringAdresse email
email_verifiedBooleanEmail confirmé
is_2fa_enabledBooleanAuthentification à deux facteurs activée
totp_secretStringClé secrète TOTP

Rôle - Rôles utilisateurs

ChampTypeDescription
idInteger (PK)Identifiant unique
nameStringNom du rôle
descriptionStringDescription du rôle

Permission - Permissions granulaires

ChampTypeDescription
idInteger (PK)Identifiant unique
nameStringNom de la permission (ressource.action)
descriptionStringDescription de la permission

Relations :

  • Les utilisateurs ont plusieurs rôles (plusieurs à plusieurs)
  • Les rôles ont plusieurs permissions (plusieurs à plusieurs)
  • Les utilisateurs peuvent se lier à un contact (pour l'accès au portail client)

Points d'Intégration

Passerelle de Paiement Stripe

  • Méthodes de paiement tokenisées
  • Stockage de cartes conforme PCI
  • Paiement automatisé des factures
  • Traitement des remboursements
  • Notifications de cartes expirantes

Service Email Mailjet

  • Emails transactionnels (factures, bienvenue, notifications)
  • Synchronisation des contacts
  • Gestion des modèles
  • Suivi des livraisons

Google Maps

  • Autocomplétion d'adresse
  • Géocodage et géocodage inverse
  • Génération de Plus Code
  • Cartographie des emplacements des sites

OCS/CGRateS

  • Provisioning de comptes
  • Tarification en temps réel
  • Gestion des soldes
  • Traitement des CDR
  • Plans d'action et calendriers

Architecture de Sécurité

Fonctionnalités de Sécurité :

  • Authentification basée sur JWT
  • Authentification à deux facteurs (TOTP)
  • Contrôle d'accès basé sur les rôles (RBAC)
  • Accès aux ressources basé sur les permissions
  • Gestion des sessions avec Redis
  • Hachage des mots de passe (bcrypt)
  • Vérification des emails
  • Journalisation des audits via le Journal d'Activité

Architecture de Déploiement

Configuration de Production Recommandée :

Pile Technologique

Backend :

  • Python 3.x
  • Framework web Flask
  • ORM SQLAlchemy
  • Migrations Alembic
  • Ansible pour l'automatisation

Frontend :

  • React
  • Gestion d'état
  • React Router
  • Axios pour les appels API

Base de Données :

  • Base de données relationnelle (stockage de données principal)
  • Redis (cache & sessions)

Services Externes :

  • CGRateS (facturation/tarification)
  • Stripe (paiements)
  • Mailjet (email)
  • Google Maps (géocodage)

Considérations de Scalabilité

Scalabilité Horizontale :

  • Conception d'API sans état permettant plusieurs instances
  • L'équilibreur de charge distribue les demandes
  • Redis pour l'état de session partagé

Scalabilité de la Base de Données :

  • Répliques de lecture pour les requêtes de reporting
  • Pooling de connexions
  • Optimisation des requêtes et indexation

Provisioning à Grande Échelle :

  • Traitement des tâches en arrière-plan
  • Plusieurs travailleurs Ansible
  • Gestion de la file d'attente des tâches
  • Logique de réessai pour les provisions échouées

Surveillance & Observabilité

OmniCRM fournit des métriques complètes basées sur Prometheus pour surveiller tous les aspects du système. Pour des détails complets, voir Surveillance & Métriques.

Métriques Clés :

  • Temps de réponse de l'API et taux de demandes
  • Taux de succès/échec de provisioning et durée des tâches
  • Performance des requêtes de base de données et utilisation du pool de connexions
  • Santé des intégrations externes (OCS, Stripe, Mailjet)
  • Exécution des tâches en arrière-plan et erreurs

Journalisation :

  • Journaux d'application (Flask)
  • Journaux de provisioning (sortie Ansible)
  • Journal d'activité (trace d'audit)
  • Suivi des erreurs et alertes

Point de Terminaison des Métriques : Toutes les métriques sont exposées à /crm/metrics au format Prometheus. Voir Surveillance & Métriques pour la configuration de récupération, les règles d'alerte et des exemples de tableau de bord.

Documentation Connexe