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

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

OmniCRM Web UI

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

Portail d'auto-assistance

  • 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 API clés :

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

3. Système de Provisionnement

4. Facturation et 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 frais récurrents
  • 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 et Services.

Client et 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 e-mail
contact_phoneStringNuméro de téléphone
contact_typesString'Principal', 'Facturation', 'Technique'

Site - Lieux de livraison de services physiques

ChampTypeDescription
site_idInteger (PK)Identifiant unique
customer_idInteger (FK)Client parent
site_nameStringNom du lieu
address_line_1StringAdresse de la 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 ouvert

Modèles de service et de 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 compatible avec l'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 regroupé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 provisionnement

Provision - Suivi des travaux de provisionnement

ChampTypeDescription
provision_idInteger (PK)Identifiant unique
product_idInteger (FK)Produit en cours de provisionnement
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 provisionnement individuelles

ChampTypeDescription
provision_event_idInteger (PK)Identifiant unique
provision_idInteger (FK)Travail de provisionnement 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 d'utilisateur et de sécurité

Utilisateur - Comptes utilisateurs

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

Rôle - Rôles d'utilisateur

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 être liés à 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 de messagerie Mailjet

  • E-mails transactionnels (factures, bienvenue, notifications)
  • Synchronisation des contacts
  • Gestion des modèles
  • Suivi de livraison

Google Maps

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

OCS/CGRateS

  • Provisionnement des comptes
  • Tarification en temps réel
  • Gestion des soldes
  • Traitement des CDR
  • Plans d'action et horaires

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 par e-mail
  • 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
  • SQLAlchemy ORM
  • Migrations Alembic
  • Ansible pour l'automatisation

Frontend :

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

Base de données :

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

Services externes :

  • CGRateS (facturation/tarification)
  • Stripe (paiements)
  • Mailjet (e-mail)
  • 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

Provisionnement à grande échelle :

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

Surveillance et observabilité

Métriques clés :

  • Temps de réponse de l'API
  • Taux de succès/échec de provisionnement
  • Utilisation du pool de connexions de la base de données
  • Taux de réussite du cache
  • Sessions actives

Journalisation :

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

Documentation connexe