- Update README.md with comprehensive project documentation - Update CHANGELOG.md with detailed version 0.1.0 features - Add ARCHITECTURE.md with technical architecture details - Add API.md with complete API documentation - Add DEPLOYMENT.md with deployment guides and configurations - Add TESTING.md with testing strategies and examples - Fix markdownlint issues across all documentation files - Ensure all documentation follows markdown best practices
356 lines
7.4 KiB
Markdown
356 lines
7.4 KiB
Markdown
# Documentation API - 4NK IA Front Notarial
|
|
|
|
## Vue d'ensemble
|
|
|
|
L'application 4NK IA Front Notarial communique avec plusieurs APIs pour fournir une expérience complète
|
|
d'analyse de documents notariaux.
|
|
|
|
## API Backend Principal
|
|
|
|
### Base URL
|
|
|
|
```text
|
|
http://localhost:8000 (développement)
|
|
```
|
|
|
|
### Endpoints
|
|
|
|
#### Upload de document
|
|
|
|
```http
|
|
POST /api/documents/upload
|
|
Content-Type: multipart/form-data
|
|
|
|
Body: FormData avec le fichier
|
|
```
|
|
|
|
**Réponse :**
|
|
|
|
```json
|
|
{
|
|
"id": "doc_123456",
|
|
"name": "acte_vente.pdf",
|
|
"type": "application/pdf",
|
|
"size": 1024000,
|
|
"uploadDate": "2024-01-15T10:30:00Z",
|
|
"status": "completed"
|
|
}
|
|
```
|
|
|
|
#### Extraction de données
|
|
|
|
```http
|
|
GET /api/documents/{documentId}/extract
|
|
```
|
|
|
|
**Réponse :**
|
|
|
|
```json
|
|
{
|
|
"documentId": "doc_123456",
|
|
"text": "Texte extrait du document...",
|
|
"language": "fr",
|
|
"documentType": "Acte de vente",
|
|
"identities": [
|
|
{
|
|
"id": "1",
|
|
"type": "person",
|
|
"firstName": "Jean",
|
|
"lastName": "Dupont",
|
|
"birthDate": "1980-05-15",
|
|
"nationality": "Française",
|
|
"confidence": 0.95
|
|
}
|
|
],
|
|
"addresses": [
|
|
{
|
|
"street": "123 Rue de la Paix",
|
|
"city": "Paris",
|
|
"postalCode": "75001",
|
|
"country": "France"
|
|
}
|
|
],
|
|
"properties": [
|
|
{
|
|
"id": "1",
|
|
"type": "apartment",
|
|
"address": {
|
|
"street": "123 Rue de la Paix",
|
|
"city": "Paris",
|
|
"postalCode": "75001",
|
|
"country": "France"
|
|
},
|
|
"surface": 75,
|
|
"cadastralReference": "1234567890AB",
|
|
"value": 250000
|
|
}
|
|
],
|
|
"contracts": [
|
|
{
|
|
"id": "1",
|
|
"type": "sale",
|
|
"parties": [],
|
|
"amount": 250000,
|
|
"date": "2024-01-15",
|
|
"clauses": ["Clause de garantie", "Clause de condition suspensive"]
|
|
}
|
|
],
|
|
"signatures": ["Jean Dupont", "Marie Martin"],
|
|
"confidence": 0.92
|
|
}
|
|
```
|
|
|
|
#### Analyse du document
|
|
|
|
```http
|
|
GET /api/documents/{documentId}/analyze
|
|
```
|
|
|
|
**Réponse :**
|
|
|
|
```json
|
|
{
|
|
"documentId": "doc_123456",
|
|
"documentType": "Acte de vente",
|
|
"isCNI": false,
|
|
"credibilityScore": 0.88,
|
|
"summary": "Document analysé avec succès. Toutes les informations semblent cohérentes.",
|
|
"recommendations": [
|
|
"Vérifier l'identité des parties auprès des autorités compétentes",
|
|
"Contrôler la validité des documents cadastraux"
|
|
]
|
|
}
|
|
```
|
|
|
|
#### Données contextuelles
|
|
|
|
```http
|
|
GET /api/documents/{documentId}/context
|
|
```
|
|
|
|
**Réponse :**
|
|
|
|
```json
|
|
{
|
|
"documentId": "doc_123456",
|
|
"cadastreData": {
|
|
"status": "disponible",
|
|
"reference": "1234567890AB"
|
|
},
|
|
"georisquesData": {
|
|
"status": "aucun risque identifié"
|
|
},
|
|
"geofoncierData": {
|
|
"status": "données disponibles"
|
|
},
|
|
"bodaccData": {
|
|
"status": "aucune procédure en cours"
|
|
},
|
|
"infogreffeData": {
|
|
"status": "entreprise en règle"
|
|
},
|
|
"lastUpdated": "2024-01-15T10:30:00Z"
|
|
}
|
|
```
|
|
|
|
#### Conseil IA
|
|
|
|
```http
|
|
GET /api/documents/{documentId}/conseil
|
|
```
|
|
|
|
**Réponse :**
|
|
|
|
```json
|
|
{
|
|
"documentId": "doc_123456",
|
|
"analysis": "Ce document présente toutes les caractéristiques d'un acte notarial standard.",
|
|
"recommendations": [
|
|
"Procéder à la vérification d'identité des parties",
|
|
"Contrôler la validité des documents fournis"
|
|
],
|
|
"risks": [
|
|
"Risque faible : Vérification d'identité recommandée",
|
|
"Risque moyen : Contrôle cadastral nécessaire"
|
|
],
|
|
"nextSteps": [
|
|
"Collecter les pièces d'identité des parties",
|
|
"Vérifier les documents cadastraux",
|
|
"Préparer l'acte final"
|
|
],
|
|
"generatedAt": "2024-01-15T10:30:00Z"
|
|
}
|
|
```
|
|
|
|
## APIs Externes
|
|
|
|
### Cadastre
|
|
|
|
**URL :** `https://api.cadastre.gouv.fr`
|
|
**Usage :** Vérification des références cadastrales et des propriétés
|
|
|
|
### Géorisques
|
|
|
|
**URL :** `https://www.georisques.gouv.fr/api`
|
|
**Usage :** Analyse des risques géologiques et environnementaux
|
|
|
|
### Géofoncier
|
|
|
|
**URL :** `https://api.geofoncier.fr`
|
|
**Usage :** Données foncières et géographiques
|
|
|
|
### BODACC
|
|
|
|
**URL :** `https://api.bodacc.fr`
|
|
**Usage :** Vérification des procédures collectives et des entreprises
|
|
|
|
### Infogreffe
|
|
|
|
**URL :** `https://api.infogreffe.fr`
|
|
**Usage :** Informations sur les entreprises et leurs dirigeants
|
|
|
|
## Gestion d'erreur
|
|
|
|
### Codes d'erreur HTTP
|
|
|
|
- **200** : Succès
|
|
- **400** : Requête malformée
|
|
- **404** : Ressource non trouvée
|
|
- **405** : Méthode non autorisée
|
|
- **500** : Erreur serveur interne
|
|
|
|
### Erreurs de connexion
|
|
|
|
- **ERR_NETWORK** : Erreur de réseau
|
|
- **ERR_CONNECTION_REFUSED** : Connexion refusée
|
|
- **ERR_TIMEOUT** : Timeout de la requête
|
|
|
|
### Fallback automatique
|
|
|
|
En cas d'erreur, l'application bascule automatiquement vers des données de démonstration pour maintenir l'expérience utilisateur.
|
|
|
|
## Configuration
|
|
|
|
### Variables d'environnement
|
|
|
|
```env
|
|
VITE_API_URL=http://localhost:8000
|
|
VITE_CADASTRE_API_URL=https://api.cadastre.gouv.fr
|
|
VITE_GEORISQUES_API_URL=https://www.georisques.gouv.fr/api
|
|
VITE_GEOFONCIER_API_URL=https://api.geofoncier.fr
|
|
VITE_BODACC_API_URL=https://api.bodacc.fr
|
|
VITE_INFOGREFFE_API_URL=https://api.infogreffe.fr
|
|
```
|
|
|
|
### Configuration Axios
|
|
|
|
```typescript
|
|
const apiClient = axios.create({
|
|
baseURL: BASE_URL,
|
|
timeout: 60000, // 60 secondes
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
}
|
|
})
|
|
```
|
|
|
|
## Authentification
|
|
|
|
### Headers requis
|
|
|
|
```http
|
|
Authorization: Bearer {token}
|
|
Content-Type: application/json
|
|
```
|
|
|
|
### Gestion des tokens
|
|
|
|
- **Refresh automatique** : Renouvellement des tokens expirés
|
|
- **Intercepteurs** : Ajout automatique des headers d'authentification
|
|
- **Logout automatique** : Déconnexion en cas d'erreur 401
|
|
|
|
## Rate Limiting
|
|
|
|
### Limites par défaut
|
|
|
|
- **100 requêtes/minute** par utilisateur
|
|
- **1000 requêtes/heure** par utilisateur
|
|
- **Backoff exponentiel** en cas de dépassement
|
|
|
|
### Headers de réponse
|
|
|
|
```http
|
|
X-RateLimit-Limit: 100
|
|
X-RateLimit-Remaining: 95
|
|
X-RateLimit-Reset: 1642248000
|
|
```
|
|
|
|
## Monitoring et logs
|
|
|
|
### Métriques collectées
|
|
|
|
- **Temps de réponse** : Latence des requêtes
|
|
- **Taux d'erreur** : Pourcentage d'échecs
|
|
- **Utilisation** : Nombre de requêtes par endpoint
|
|
|
|
### Logs
|
|
|
|
- **Requêtes** : Log de toutes les requêtes API
|
|
- **Erreurs** : Log détaillé des erreurs
|
|
- **Performance** : Métriques de performance
|
|
|
|
## Tests
|
|
|
|
### Tests d'intégration
|
|
|
|
```typescript
|
|
// Test d'upload de document
|
|
test('should upload document successfully', async () => {
|
|
const file = new File(['content'], 'test.pdf', { type: 'application/pdf' })
|
|
const result = await documentApi.upload(file)
|
|
expect(result.id).toBeDefined()
|
|
expect(result.status).toBe('completed')
|
|
})
|
|
```
|
|
|
|
### Tests de fallback
|
|
|
|
```typescript
|
|
// Test du mode démonstration
|
|
test('should return demo data on API error', async () => {
|
|
// Mock de l'erreur API
|
|
mockAxios.onPost('/api/documents/upload').reply(500)
|
|
|
|
const file = new File(['content'], 'test.pdf', { type: 'application/pdf' })
|
|
const result = await documentApi.upload(file)
|
|
|
|
expect(result.id).toMatch(/^demo-/)
|
|
expect(result.name).toBe('test.pdf')
|
|
})
|
|
```
|
|
|
|
## Sécurité
|
|
|
|
### Validation des données
|
|
|
|
- **Sanitization** : Nettoyage des entrées utilisateur
|
|
- **Validation** : Vérification des types et formats
|
|
- **Escape** : Protection contre les injections
|
|
|
|
### CORS
|
|
|
|
```typescript
|
|
// Configuration CORS
|
|
const corsOptions = {
|
|
origin: ['http://localhost:3000', 'https://app.4nkweb.com'],
|
|
credentials: true,
|
|
optionsSuccessStatus: 200
|
|
}
|
|
```
|
|
|
|
### HTTPS
|
|
|
|
- **Redirection automatique** : HTTP vers HTTPS en production
|
|
- **HSTS** : HTTP Strict Transport Security
|
|
- **Certificats SSL** : Certificats valides et à jour
|