@sinoia/hubdoc-tools 1.0.4 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +115 -34
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts +15 -0
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.js +37 -0
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.js.map +1 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts +15 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.js +54 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.js.map +1 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts +15 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.js +34 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.js.map +1 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts +16 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js +145 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js.map +1 -0
- package/dist/api/api/authentication-api.d.ts +208 -0
- package/dist/api/api/authentication-api.d.ts.map +1 -0
- package/dist/api/api/authentication-api.js +385 -0
- package/dist/api/api/authentication-api.js.map +1 -0
- package/dist/api/api/bulk-uploads-api.d.ts +101 -0
- package/dist/api/api/bulk-uploads-api.d.ts.map +1 -0
- package/dist/api/api/bulk-uploads-api.js +195 -0
- package/dist/api/api/bulk-uploads-api.js.map +1 -0
- package/dist/api/api/contacts-api.d.ts +246 -0
- package/dist/api/api/contacts-api.d.ts.map +1 -0
- package/dist/api/api/contacts-api.js +465 -0
- package/dist/api/api/contacts-api.js.map +1 -0
- package/dist/api/api/documents-api.d.ts +267 -0
- package/dist/api/api/documents-api.d.ts.map +1 -0
- package/dist/api/api/documents-api.js +506 -0
- package/dist/api/api/documents-api.js.map +1 -0
- package/dist/api/api/folders-api.d.ts +255 -0
- package/dist/api/api/folders-api.d.ts.map +1 -0
- package/dist/api/api/folders-api.js +479 -0
- package/dist/api/api/folders-api.js.map +1 -0
- package/dist/api/api/groups-api.d.ts +246 -0
- package/dist/api/api/groups-api.d.ts.map +1 -0
- package/dist/api/api/groups-api.js +465 -0
- package/dist/api/api/groups-api.js.map +1 -0
- package/dist/api/api/permissions-api.d.ts +246 -0
- package/dist/api/api/permissions-api.d.ts.map +1 -0
- package/dist/api/api/permissions-api.js +465 -0
- package/dist/api/api/permissions-api.js.map +1 -0
- package/dist/api/api/workspaces-api.d.ts +213 -0
- package/dist/api/api/workspaces-api.d.ts.map +1 -0
- package/dist/api/api/workspaces-api.js +424 -0
- package/dist/api/api/workspaces-api.js.map +1 -0
- package/dist/api/api.d.ts +20 -0
- package/dist/api/api.d.ts.map +1 -0
- package/dist/api/api.js +38 -0
- package/dist/api/api.js.map +1 -0
- package/dist/api/base.d.ts +43 -0
- package/dist/api/base.d.ts.map +1 -0
- package/dist/api/base.js +49 -0
- package/dist/api/base.js.map +1 -0
- package/dist/api/common.d.ts +29 -0
- package/dist/api/common.d.ts.map +1 -0
- package/dist/api/common.js +109 -0
- package/dist/api/common.js.map +1 -0
- package/dist/api/configuration.d.ts +99 -0
- package/dist/api/configuration.d.ts.map +1 -0
- package/dist/api/configuration.js +49 -0
- package/dist/api/configuration.js.map +1 -0
- package/dist/api/index.d.ts +15 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +33 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.d.ts +34 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.js +16 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.js.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.d.ts +17 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.js +16 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts +17 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts +17 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts +18 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts +17 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.js.map +1 -0
- package/dist/api/models/bulk-upload-mutation.d.ts +34 -0
- package/dist/api/models/bulk-upload-mutation.d.ts.map +1 -0
- package/dist/api/models/bulk-upload-mutation.js +16 -0
- package/dist/api/models/bulk-upload-mutation.js.map +1 -0
- package/dist/api/models/bulk-upload.d.ts +91 -0
- package/dist/api/models/bulk-upload.d.ts.map +1 -0
- package/dist/api/models/bulk-upload.js +23 -0
- package/dist/api/models/bulk-upload.js.map +1 -0
- package/dist/api/models/contact-mutation.d.ts +30 -0
- package/dist/api/models/contact-mutation.d.ts.map +1 -0
- package/dist/api/models/contact-mutation.js +16 -0
- package/dist/api/models/contact-mutation.js.map +1 -0
- package/dist/api/models/contact.d.ts +54 -0
- package/dist/api/models/contact.d.ts.map +1 -0
- package/dist/api/models/contact.js +16 -0
- package/dist/api/models/contact.js.map +1 -0
- package/dist/api/models/document-document-type.d.ts +19 -0
- package/dist/api/models/document-document-type.d.ts.map +1 -0
- package/dist/api/models/document-document-type.js +16 -0
- package/dist/api/models/document-document-type.js.map +1 -0
- package/dist/api/models/document-domain.d.ts +19 -0
- package/dist/api/models/document-domain.d.ts.map +1 -0
- package/dist/api/models/document-domain.js +16 -0
- package/dist/api/models/document-domain.js.map +1 -0
- package/dist/api/models/document-folder.d.ts +19 -0
- package/dist/api/models/document-folder.d.ts.map +1 -0
- package/dist/api/models/document-folder.js +16 -0
- package/dist/api/models/document-folder.js.map +1 -0
- package/dist/api/models/document-mutation.d.ts +50 -0
- package/dist/api/models/document-mutation.d.ts.map +1 -0
- package/dist/api/models/document-mutation.js +16 -0
- package/dist/api/models/document-mutation.js.map +1 -0
- package/dist/api/models/document.d.ts +73 -0
- package/dist/api/models/document.d.ts.map +1 -0
- package/dist/api/models/document.js +16 -0
- package/dist/api/models/document.js.map +1 -0
- package/dist/api/models/folder-mutation.d.ts +38 -0
- package/dist/api/models/folder-mutation.d.ts.map +1 -0
- package/dist/api/models/folder-mutation.js +16 -0
- package/dist/api/models/folder-mutation.js.map +1 -0
- package/dist/api/models/folder-parent.d.ts +19 -0
- package/dist/api/models/folder-parent.d.ts.map +1 -0
- package/dist/api/models/folder-parent.js +16 -0
- package/dist/api/models/folder-parent.js.map +1 -0
- package/dist/api/models/folder.d.ts +65 -0
- package/dist/api/models/folder.d.ts.map +1 -0
- package/dist/api/models/folder.js +16 -0
- package/dist/api/models/folder.js.map +1 -0
- package/dist/api/models/group-mutation.d.ts +26 -0
- package/dist/api/models/group-mutation.d.ts.map +1 -0
- package/dist/api/models/group-mutation.js +16 -0
- package/dist/api/models/group-mutation.js.map +1 -0
- package/dist/api/models/group.d.ts +38 -0
- package/dist/api/models/group.d.ts.map +1 -0
- package/dist/api/models/group.js +16 -0
- package/dist/api/models/group.js.map +1 -0
- package/dist/api/models/index.d.ts +35 -0
- package/dist/api/models/index.d.ts.map +1 -0
- package/dist/api/models/index.js +51 -0
- package/dist/api/models/index.js.map +1 -0
- package/dist/api/models/model-error.d.ts +26 -0
- package/dist/api/models/model-error.d.ts.map +1 -0
- package/dist/api/models/model-error.js +16 -0
- package/dist/api/models/model-error.js.map +1 -0
- package/dist/api/models/oauth-revoke-post200-response.d.ts +15 -0
- package/dist/api/models/oauth-revoke-post200-response.d.ts.map +1 -0
- package/dist/api/models/oauth-revoke-post200-response.js +16 -0
- package/dist/api/models/oauth-revoke-post200-response.js.map +1 -0
- package/dist/api/models/permission-actor.d.ts +20 -0
- package/dist/api/models/permission-actor.d.ts.map +1 -0
- package/dist/api/models/permission-actor.js +16 -0
- package/dist/api/models/permission-actor.js.map +1 -0
- package/dist/api/models/permission-mutation.d.ts +44 -0
- package/dist/api/models/permission-mutation.d.ts.map +1 -0
- package/dist/api/models/permission-mutation.js +22 -0
- package/dist/api/models/permission-mutation.js.map +1 -0
- package/dist/api/models/permission-permissible.d.ts +20 -0
- package/dist/api/models/permission-permissible.d.ts.map +1 -0
- package/dist/api/models/permission-permissible.js +16 -0
- package/dist/api/models/permission-permissible.js.map +1 -0
- package/dist/api/models/permission.d.ts +60 -0
- package/dist/api/models/permission.d.ts.map +1 -0
- package/dist/api/models/permission.js +22 -0
- package/dist/api/models/permission.js.map +1 -0
- package/dist/api/models/token-response.d.ts +41 -0
- package/dist/api/models/token-response.d.ts.map +1 -0
- package/dist/api/models/token-response.js +16 -0
- package/dist/api/models/token-response.js.map +1 -0
- package/dist/api/models/user.d.ts +18 -0
- package/dist/api/models/user.d.ts.map +1 -0
- package/dist/api/models/user.js +16 -0
- package/dist/api/models/user.js.map +1 -0
- package/dist/api/models/workspace-mutation-settings-validation.d.ts +26 -0
- package/dist/api/models/workspace-mutation-settings-validation.d.ts.map +1 -0
- package/dist/api/models/workspace-mutation-settings-validation.js +16 -0
- package/dist/api/models/workspace-mutation-settings-validation.js.map +1 -0
- package/dist/api/models/workspace-mutation-settings.d.ts +60 -0
- package/dist/api/models/workspace-mutation-settings.d.ts.map +1 -0
- package/dist/api/models/workspace-mutation-settings.js +16 -0
- package/dist/api/models/workspace-mutation-settings.js.map +1 -0
- package/dist/api/models/workspace-mutation.d.ts +44 -0
- package/dist/api/models/workspace-mutation.d.ts.map +1 -0
- package/dist/api/models/workspace-mutation.js +16 -0
- package/dist/api/models/workspace-mutation.js.map +1 -0
- package/dist/api/models/workspace-settings-validation.d.ts +26 -0
- package/dist/api/models/workspace-settings-validation.d.ts.map +1 -0
- package/dist/api/models/workspace-settings-validation.js +16 -0
- package/dist/api/models/workspace-settings-validation.js.map +1 -0
- package/dist/api/models/workspace-settings.d.ts +60 -0
- package/dist/api/models/workspace-settings.d.ts.map +1 -0
- package/dist/api/models/workspace-settings.js +16 -0
- package/dist/api/models/workspace-settings.js.map +1 -0
- package/dist/api/models/workspace.d.ts +62 -0
- package/dist/api/models/workspace.d.ts.map +1 -0
- package/dist/api/models/workspace.js +16 -0
- package/dist/api/models/workspace.js.map +1 -0
- package/dist/cli/handlers/command-handlers.d.ts +29 -0
- package/dist/cli/handlers/command-handlers.d.ts.map +1 -0
- package/dist/cli/handlers/command-handlers.js +261 -0
- package/dist/cli/handlers/command-handlers.js.map +1 -0
- package/dist/cli/handlers/engine-handlers.d.ts +15 -0
- package/dist/cli/handlers/engine-handlers.d.ts.map +1 -0
- package/dist/cli/handlers/engine-handlers.js +174 -0
- package/dist/cli/handlers/engine-handlers.js.map +1 -0
- package/dist/cli/interactive.d.ts +15 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +234 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli.js +31 -740
- package/dist/cli.js.map +1 -1
- package/dist/commands/export.d.ts +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +1 -1
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +5 -1
- package/dist/commands/import.js.map +1 -1
- package/dist/index.d.ts +27 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +63 -20
- package/dist/index.js.map +1 -1
- package/dist/services/hubdoc-api.d.ts +26 -6
- package/dist/services/hubdoc-api.d.ts.map +1 -1
- package/dist/services/hubdoc-api.js +194 -43
- package/dist/services/hubdoc-api.js.map +1 -1
- package/dist/services/hubdoc-export.d.ts +1 -1
- package/dist/services/hubdoc-export.d.ts.map +1 -1
- package/dist/services/hubdoc-export.js +1 -1
- package/dist/services/hubdoc-export.js.map +1 -1
- package/dist/services/oauth-token-service.d.ts +27 -14
- package/dist/services/oauth-token-service.d.ts.map +1 -1
- package/dist/services/oauth-token-service.js +147 -80
- package/dist/services/oauth-token-service.js.map +1 -1
- package/dist/services/plugin-import.d.ts +2 -2
- package/dist/services/plugin-import.d.ts.map +1 -1
- package/dist/services/plugin-import.js +2 -2
- package/dist/services/plugin-import.js.map +1 -1
- package/dist/services/plugin-manager.d.ts +6 -1
- package/dist/services/plugin-manager.d.ts.map +1 -1
- package/dist/services/plugin-manager.js +28 -2
- package/dist/services/plugin-manager.js.map +1 -1
- package/dist/types/index.d.ts +11 -37
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config.d.ts +30 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +187 -40
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/csv.d.ts.map +1 -1
- package/dist/utils/csv.js +14 -3
- package/dist/utils/csv.js.map +1 -1
- package/package.json +23 -6
- package/.env.example +0 -23
- package/BAUTECH_HubDoc_Import.pptx +0 -0
- package/CHANGELOG.md +0 -134
- package/DEMO-DOCUMENTATION.html +0 -356
- package/DEMO-DOCUMENTATION.md +0 -411
- package/EXPORT-DOCUMENTATION.md +0 -333
- package/HUBDOC-API-V2.md +0 -248
- package/INSTALL.md +0 -175
- package/PACKAGING.md +0 -206
- package/PLUGINS.md +0 -328
- package/PRESENTATION-CLIENT.md +0 -100
- package/README-hubdoc-tool.md +0 -369
- package/README-npm.md +0 -238
- package/TESTING.md +0 -129
- package/config-examples/README.md +0 -36
- package/config-examples/alfresco-config.example.json +0 -8
- package/config-examples/azure-blob-config.example.json +0 -7
- package/config-examples/box-config.example.json +0 -5
- package/config-examples/nuxeo-config.example.json +0 -8
- package/config-examples/opentext-config.example.json +0 -7
- package/config-examples/s3-config.example.json +0 -8
- package/config-examples/sharepoint-config.example.json +0 -7
- package/demo/README.md +0 -199
- package/demo/demo-script.md +0 -284
- package/demo/generate-sample-csv.js +0 -351
- package/demo/mapping_bautech_15k.csv +0 -1
- package/demo/simulate-import.js +0 -273
- package/dist/commands/export-v2.d.ts +0 -45
- package/dist/commands/export-v2.d.ts.map +0 -1
- package/dist/commands/export-v2.js +0 -369
- package/dist/commands/export-v2.js.map +0 -1
- package/dist/commands/import-v2.d.ts +0 -32
- package/dist/commands/import-v2.d.ts.map +0 -1
- package/dist/commands/import-v2.js +0 -331
- package/dist/commands/import-v2.js.map +0 -1
- package/dist/services/hubdoc-api-v2.d.ts +0 -150
- package/dist/services/hubdoc-api-v2.d.ts.map +0 -1
- package/dist/services/hubdoc-api-v2.js +0 -418
- package/dist/services/hubdoc-api-v2.js.map +0 -1
- package/dist/services/hubdoc-client.d.ts +0 -246
- package/dist/services/hubdoc-client.d.ts.map +0 -1
- package/dist/services/hubdoc-client.js +0 -714
- package/dist/services/hubdoc-client.js.map +0 -1
- package/dist/services/hubdoc-export-service.d.ts +0 -90
- package/dist/services/hubdoc-export-service.d.ts.map +0 -1
- package/dist/services/hubdoc-export-service.js +0 -443
- package/dist/services/hubdoc-export-service.js.map +0 -1
- package/dist/services/hubdoc-export-v2.d.ts +0 -77
- package/dist/services/hubdoc-export-v2.d.ts.map +0 -1
- package/dist/services/hubdoc-export-v2.js +0 -329
- package/dist/services/hubdoc-export-v2.js.map +0 -1
- package/dist/services/hubdoc-import-service.d.ts +0 -64
- package/dist/services/hubdoc-import-service.d.ts.map +0 -1
- package/dist/services/hubdoc-import-service.js +0 -374
- package/dist/services/hubdoc-import-service.js.map +0 -1
- package/docs/README.md +0 -65
- package/docs/connectors/alfresco.md +0 -211
- package/docs/connectors/aws-s3.md +0 -187
- package/docs/connectors/azure-blob.md +0 -195
- package/docs/connectors/box.md +0 -115
- package/docs/connectors/nuxeo.md +0 -214
- package/docs/connectors/opentext.md +0 -234
- package/docs/connectors/sharepoint.md +0 -207
- package/documentation.html +0 -273
- package/jest.config.js +0 -15
- package/plugins/core/README.md +0 -122
- package/plugins/core/TESTING.md +0 -155
- package/plugins/core/plugin.json +0 -26
- package/plugins/dropbox/plugin.json +0 -12
- package/plugins/filesystem/plugin.json +0 -12
- package/plugins/googledrive/plugin.json +0 -12
- package/plugins/onedrive/TESTING.md +0 -197
- package/plugins/onedrive/plugin.json +0 -12
- package/scripts/build-windows-installer.ps1 +0 -132
- package/scripts/build-windows-installer.sh +0 -106
- package/scripts/prepare-publish.js +0 -62
- package/scripts/restore-package.js +0 -29
package/demo/demo-script.md
DELETED
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
# 🎬 Script de Démonstration - HubDoc Importer
|
|
2
|
-
|
|
3
|
-
## 🎯 Scénario de Présentation : BAUTECH Construction
|
|
4
|
-
|
|
5
|
-
### 🏢 Contexte Client
|
|
6
|
-
**BAUTECH Construction & Promotion Immobilière**
|
|
7
|
-
- 8 projets immobiliers actifs
|
|
8
|
-
- 15,000 documents à centraliser
|
|
9
|
-
- Équipes dispersées (bureaux, chantiers, sous-traitants)
|
|
10
|
-
- Besoin urgent de digitalisation pour certification ISO
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## 📋 Déroulé de Démonstration (20 minutes)
|
|
15
|
-
|
|
16
|
-
### 🎬 Phase 1 : Introduction du Problème (3 min)
|
|
17
|
-
|
|
18
|
-
**Narrateur :** *"BAUTECH gère 8 projets immobiliers simultanément..."*
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
📊 Situation AVANT HubDoc Importer:
|
|
22
|
-
┌─────────────────────────────────────────────┐
|
|
23
|
-
│ 🗂️ 15,000 documents éparpillés │
|
|
24
|
-
│ 📂 Serveurs de fichiers multiples │
|
|
25
|
-
│ 🔍 Recherche manuelle: 15-30 minutes │
|
|
26
|
-
│ 📧 Partage par email (pièces jointes) │
|
|
27
|
-
│ ⚠️ Versions multiples, doublons │
|
|
28
|
-
│ 🚫 Pas de traçabilité des modifications │
|
|
29
|
-
└─────────────────────────────────────────────┘
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**Points de douleur identifiés :**
|
|
33
|
-
- Conducteur travaux perd 2h/jour à chercher documents
|
|
34
|
-
- Plans obsolètes envoyés aux sous-traitants
|
|
35
|
-
- Conformité ISO impossible à maintenir
|
|
36
|
-
- Collaboration difficile avec équipes externes
|
|
37
|
-
|
|
38
|
-
### 🎬 Phase 2 : Solution HubDoc Importer (5 min)
|
|
39
|
-
|
|
40
|
-
**Demo Live - Terminal**
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
# 1. Configuration rapide
|
|
44
|
-
$ hubdoc-importer config
|
|
45
|
-
🔧 HubDoc Importer Configuration
|
|
46
|
-
HubDoc API URL: https://bautech.hubdoc.sinoia.cloud/api/v1
|
|
47
|
-
API Token: ******************
|
|
48
|
-
✅ Configuration saved to .hubdoc-config.json
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
# 2. Génération du mapping
|
|
53
|
-
$ hubdoc-importer generate-mapping /srv/bautech/documents/
|
|
54
|
-
|
|
55
|
-
🔍 Scanning directory: /srv/bautech/documents/
|
|
56
|
-
📁 Found 15,000 files to import
|
|
57
|
-
✅ Mapping file generated: mapping.csv
|
|
58
|
-
📝 Edit the file to specify target folders, workspaces, and permissions
|
|
59
|
-
- Target Folder: Name of the folder in HubDoc
|
|
60
|
-
- Workspace: Name of the workspace
|
|
61
|
-
- Read Permissions: Users and groups who can read
|
|
62
|
-
- Write Permissions: Users and groups who can edit
|
|
63
|
-
- Format: users:user1,user2|groups:group1,group2
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
**Montrer le CSV généré :**
|
|
67
|
-
```csv
|
|
68
|
-
File Path,Target Folder,Workspace,Metadata (JSON),Read Permissions,Write Permissions
|
|
69
|
-
./docs/projets/meudon/plans/plan_masse_v3.pdf,Les Jardins de Meudon/Plans,BAUTECH Production,"{\"type\":\"plan\",\"version\":\"3.0\",\"architecte\":\"Cabinet Dubois\"}",users:j.martin|groups:architectes,conducteurs_travaux,groups:architectes
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### 🎬 Phase 3 : Import en Action (8 min)
|
|
73
|
-
|
|
74
|
-
**Demo Live - Import avec Progress**
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
$ hubdoc-importer import --mapping mapping_bautech_15k.csv
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
**Simulation d'output temps réel :**
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
🚀 HubDoc Import - BAUTECH Construction
|
|
84
|
-
📅 Started: 15/03/2024 14:30:00
|
|
85
|
-
✅ Connected to HubDoc API
|
|
86
|
-
|
|
87
|
-
📊 Import Progress
|
|
88
|
-
████████████████████░░░░░░░░░░░░░░░░░░░░ 52%
|
|
89
|
-
7,800 / 15,000 documents processed
|
|
90
|
-
|
|
91
|
-
📁 Current: Éco-Quartier Boulogne/Plans/plan_facade_nord.pdf
|
|
92
|
-
⏱️ Elapsed: 1h 23m | Remaining: ~1h 10m
|
|
93
|
-
📈 Speed: 94 docs/min | Peak: 142 docs/min
|
|
94
|
-
|
|
95
|
-
✅ Recent Successes:
|
|
96
|
-
• Les Jardins de Meudon/Administratif/permis_construire.pdf
|
|
97
|
-
• Résidence Harmony/Devis/gros_oeuvre_martin_tp.pdf
|
|
98
|
-
• Villa Prestige/PV/pv_reception_electricite.pdf
|
|
99
|
-
|
|
100
|
-
📋 Folders Created:
|
|
101
|
-
✨ Les Jardins de Meudon/Plans (47 docs)
|
|
102
|
-
✨ Administration/Contrats (23 docs)
|
|
103
|
-
✨ Technique/DOE (18 docs)
|
|
104
|
-
|
|
105
|
-
🔐 Permissions Applied:
|
|
106
|
-
👥 3,240 read permissions set
|
|
107
|
-
✏️ 1,890 write permissions set
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
**Points clés à souligner :**
|
|
111
|
-
- Création automatique des dossiers
|
|
112
|
-
- Application granulaire des permissions
|
|
113
|
-
- Métadonnées enrichies automatiquement
|
|
114
|
-
- Vitesse d'import (94 docs/min = 1.5 docs/seconde)
|
|
115
|
-
|
|
116
|
-
### 🎬 Phase 4 : Résultats & Impact (4 min)
|
|
117
|
-
|
|
118
|
-
**Tableau de bord final :**
|
|
119
|
-
|
|
120
|
-
```
|
|
121
|
-
📊 BAUTECH Import - RÉSULTATS FINAUX
|
|
122
|
-
════════════════════════════════════════════
|
|
123
|
-
|
|
124
|
-
✅ Import Réussi: 14,847 / 15,000 (98.98%)
|
|
125
|
-
❌ Échecs: 153 (1.02%)
|
|
126
|
-
⚠️ Avertissements: 89
|
|
127
|
-
|
|
128
|
-
💾 Volume traité: 47.3 GB
|
|
129
|
-
⏱️ Durée totale: 2h 34m 18s
|
|
130
|
-
📈 Vitesse moyenne: 97 docs/min
|
|
131
|
-
|
|
132
|
-
📁 Workspaces Créés:
|
|
133
|
-
🏢 BAUTECH Production → 13,647 documents
|
|
134
|
-
📜 BAUTECH Archives → 1,200 documents
|
|
135
|
-
|
|
136
|
-
🔐 Sécurité:
|
|
137
|
-
👥 15,420 permissions utilisateurs
|
|
138
|
-
👥 8,930 permissions groupes
|
|
139
|
-
🔒 100% des documents sécurisés
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
**ROI immédiat :**
|
|
143
|
-
```
|
|
144
|
-
💰 RETOUR SUR INVESTISSEMENT
|
|
145
|
-
|
|
146
|
-
Avant HubDoc:
|
|
147
|
-
• Recherche documents: 2h/jour/personne × 12 personnes = 24h/jour
|
|
148
|
-
• Coût horaire moyen: 40€
|
|
149
|
-
• Coût quotidien: 960€
|
|
150
|
-
|
|
151
|
-
Après HubDoc:
|
|
152
|
-
• Recherche documents: 5min/jour/personne × 12 personnes = 1h/jour
|
|
153
|
-
• Gain quotidien: 920€
|
|
154
|
-
• Gain mensuel: 20,160€
|
|
155
|
-
• ROI sur 6 mois: 1,200%
|
|
156
|
-
|
|
157
|
-
🎯 Coût de l'import: 8h × 80€ = 640€
|
|
158
|
-
💡 Amortissement: 16 heures d'utilisation
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
## 🖼️ Éléments Visuels à Intégrer
|
|
162
|
-
|
|
163
|
-
### 📸 Screenshots à Mocker
|
|
164
|
-
|
|
165
|
-
1. **Interface HubDoc - Vue d'ensemble**
|
|
166
|
-
```
|
|
167
|
-
📊 Dashboard BAUTECH
|
|
168
|
-
├── 📁 Les Jardins de Meudon (1,798 docs)
|
|
169
|
-
├── 📁 Résidence Harmony (2,095 docs)
|
|
170
|
-
├── 📁 Éco-Quartier Boulogne (1,887 docs)
|
|
171
|
-
└── 📁 Administration (3,156 docs)
|
|
172
|
-
|
|
173
|
-
🔍 Recherche: "plan facade meudon"
|
|
174
|
-
📋 Résultats: 23 documents trouvés en 0.3s
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
2. **Vue Document avec Métadonnées**
|
|
178
|
-
```
|
|
179
|
-
📄 plan_facade_sud_meudon_v3.pdf
|
|
180
|
-
|
|
181
|
-
📝 Métadonnées:
|
|
182
|
-
• Type: Plan
|
|
183
|
-
• Projet: Les Jardins de Meudon
|
|
184
|
-
• Phase: EXE
|
|
185
|
-
• Architecte: Cabinet Dubois
|
|
186
|
-
• Date: 15/03/2024
|
|
187
|
-
|
|
188
|
-
👥 Permissions:
|
|
189
|
-
• Lecture: Équipe Architecture, Conducteurs Travaux
|
|
190
|
-
• Écriture: Équipe Architecture
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
3. **Workflow de Validation**
|
|
194
|
-
```
|
|
195
|
-
📋 Circuit de Validation - Plan Façade Sud
|
|
196
|
-
|
|
197
|
-
✅ Upload: Marie Dupont (Architecte) - 14/03 09:30
|
|
198
|
-
⏳ En attente: Validation Jean Martin (Conducteur)
|
|
199
|
-
📧 Notification envoyée: 15/03 14:00
|
|
200
|
-
🕒 SLA: 24h restantes
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### 📈 Graphiques de Performance
|
|
204
|
-
|
|
205
|
-
1. **Vitesse d'Import**
|
|
206
|
-
```
|
|
207
|
-
📈 Performance Import (docs/min)
|
|
208
|
-
150 │ ╭─╮
|
|
209
|
-
120 │ ╱ ╲
|
|
210
|
-
90 │ ╱ ╲╭─╮
|
|
211
|
-
60 │╱ ╲ ╲
|
|
212
|
-
30 │ ╲ ╱
|
|
213
|
-
0 └─────────────────╲╱
|
|
214
|
-
0h 30m 1h 1h30 2h 2h30
|
|
215
|
-
|
|
216
|
-
🏆 Pic: 145 docs/min à 1h15
|
|
217
|
-
📊 Moyenne: 97 docs/min
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
2. **Répartition des Documents**
|
|
221
|
-
```
|
|
222
|
-
🥧 Répartition par Type de Document
|
|
223
|
-
|
|
224
|
-
📐 Plans (35%) ████████████
|
|
225
|
-
📋 Administratif (21%) ███████
|
|
226
|
-
💰 Financier (18%) ██████
|
|
227
|
-
🔧 Technique (14%) █████
|
|
228
|
-
📸 Suivi (12%) ████
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## 🎯 Messages Clés pour la Démo
|
|
234
|
-
|
|
235
|
-
### ✨ Points de Différenciation
|
|
236
|
-
|
|
237
|
-
1. **Simplicité Extrême**
|
|
238
|
-
- "3 commandes suffisent : config, generate, import"
|
|
239
|
-
- "Pas besoin de formation technique"
|
|
240
|
-
|
|
241
|
-
2. **Robustesse Enterprise**
|
|
242
|
-
- "98.98% de taux de succès sur 15,000 documents"
|
|
243
|
-
- "Gestion des erreurs et reprise automatique"
|
|
244
|
-
|
|
245
|
-
3. **Sécurité Native**
|
|
246
|
-
- "Permissions granulaires read/write par utilisateur/groupe"
|
|
247
|
-
- "Intégration AD/LDAP ready"
|
|
248
|
-
|
|
249
|
-
4. **Métadonnées Intelligentes**
|
|
250
|
-
- "OCR et extraction automatique à venir"
|
|
251
|
-
- "Enrichissement contextuel par projet"
|
|
252
|
-
|
|
253
|
-
### 🎤 Phrases d'Accroche
|
|
254
|
-
|
|
255
|
-
- *"De 15 minutes à 30 secondes pour trouver un document"*
|
|
256
|
-
- *"15,000 documents importés en moins de 3 heures"*
|
|
257
|
-
- *"ROI de 1,200% dès les 6 premiers mois"*
|
|
258
|
-
- *"Zéro formation nécessaire : si vous savez utiliser Excel, vous savez utiliser l'outil"*
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## 📱 Démonstration Interactive
|
|
263
|
-
|
|
264
|
-
### 🖱️ Étapes Clics par Clics
|
|
265
|
-
|
|
266
|
-
1. **Ouverture terminal** → `hubdoc-importer --help`
|
|
267
|
-
2. **Configuration** → Montrer le wizard interactif
|
|
268
|
-
3. **Génération CSV** → Ouvrir le fichier dans Excel
|
|
269
|
-
4. **Modification mapping** → Enrichir 2-3 lignes en live
|
|
270
|
-
5. **Import** → Laisser tourner avec progress bar
|
|
271
|
-
6. **Vérification HubDoc** → Montrer les dossiers créés
|
|
272
|
-
7. **Recherche** → Démontrer la rapidité
|
|
273
|
-
8. **Permissions** → Vérifier les droits d'accès
|
|
274
|
-
|
|
275
|
-
### ⚡ Timing Critique
|
|
276
|
-
|
|
277
|
-
- **Total : 20 minutes max**
|
|
278
|
-
- **Setup : 3 min** (contexte + problème)
|
|
279
|
-
- **Demo : 12 min** (config + import + résultats)
|
|
280
|
-
- **Questions : 5 min** (ROI + technique)
|
|
281
|
-
|
|
282
|
-
---
|
|
283
|
-
|
|
284
|
-
*Script préparé pour démonstration commerciale - HubDoc Importer v1.0*
|
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Générateur de fichier CSV de démonstration pour BAUTECH Construction
|
|
5
|
-
* Génère un mapping réaliste de 15,000 documents BTP/immobilier
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
const path = require('path');
|
|
10
|
-
|
|
11
|
-
// Configuration du client BAUTECH
|
|
12
|
-
const CLIENT_CONFIG = {
|
|
13
|
-
name: 'BAUTECH Construction & Promotion Immobilière',
|
|
14
|
-
projects: [
|
|
15
|
-
{ name: 'Les Jardins de Meudon', docs: 1800, code: 'MEUDON' },
|
|
16
|
-
{ name: 'Résidence Harmony Levallois', docs: 2100, code: 'LEVALLOIS' },
|
|
17
|
-
{ name: 'Éco-Quartier Boulogne', docs: 1900, code: 'BOULOGNE' },
|
|
18
|
-
{ name: 'Villa Prestige Neuilly', docs: 1200, code: 'NEUILLY' },
|
|
19
|
-
{ name: 'Loft Industrial Montreuil', docs: 700, code: 'MONTREUIL' },
|
|
20
|
-
{ name: 'Green Towers La Défense', docs: 600, code: 'DEFENSE' },
|
|
21
|
-
{ name: 'Campus Student Créteil', docs: 200, code: 'CRETEIL' }
|
|
22
|
-
],
|
|
23
|
-
admin: { docs: 3200 },
|
|
24
|
-
technique: { docs: 2100 },
|
|
25
|
-
archives: { docs: 1200 }
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
// Types de documents BTP
|
|
29
|
-
const DOC_TYPES = {
|
|
30
|
-
plans: {
|
|
31
|
-
subtypes: ['plan_masse', 'facades', 'coupes', 'details', 'implantation'],
|
|
32
|
-
folders: ['Plans/Architecture', 'Plans/Structure', 'Plans/Fluides'],
|
|
33
|
-
metadata: (project, subtype) => ({
|
|
34
|
-
type: 'plan',
|
|
35
|
-
categorie: subtype,
|
|
36
|
-
phase: randomChoice(['APS', 'APD', 'PRO', 'EXE', 'DOE']),
|
|
37
|
-
architecte: randomChoice(['Cabinet Dubois', 'Atelier Martin', 'Studio Architecte']),
|
|
38
|
-
echelle: randomChoice(['1/100', '1/200', '1/500', '1/50'])
|
|
39
|
-
})
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
administratif: {
|
|
43
|
-
subtypes: ['permis', 'declarations', 'contrats', 'marches', 'assurances'],
|
|
44
|
-
folders: ['Administratif/Permis', 'Administratif/Contrats', 'Administratif/Assurances'],
|
|
45
|
-
metadata: (project, subtype) => ({
|
|
46
|
-
type: subtype,
|
|
47
|
-
statut: randomChoice(['en_cours', 'valide', 'expire', 'refuse']),
|
|
48
|
-
commune: project.includes('Meudon') ? 'Meudon' : project.includes('Levallois') ? 'Levallois-Perret' : 'Paris',
|
|
49
|
-
numero_dossier: `${randomChoice(['PC', 'DP', 'AT'])}-2024-${String(Math.floor(Math.random() * 999) + 1).padStart(3, '0')}`
|
|
50
|
-
})
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
financier: {
|
|
54
|
-
subtypes: ['devis', 'factures', 'situations', 'avenants', 'retenues'],
|
|
55
|
-
folders: ['Financier/Devis', 'Financier/Factures', 'Financier/Situations'],
|
|
56
|
-
metadata: (project, subtype) => ({
|
|
57
|
-
type: subtype,
|
|
58
|
-
entreprise: randomChoice([
|
|
59
|
-
'Martin TP', 'Bouygues Construction', 'Vinci Construction',
|
|
60
|
-
'Elec Pro', 'Thermique Plus', 'Plomberie Moderne'
|
|
61
|
-
]),
|
|
62
|
-
montant: Math.floor(Math.random() * 500000) + 5000,
|
|
63
|
-
corps_etat: randomChoice(['gros_oeuvre', 'second_oeuvre', 'electricite', 'plomberie', 'chauffage'])
|
|
64
|
-
})
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
technique: {
|
|
68
|
-
subtypes: ['etudes', 'calculs', 'notes', 'rapports', 'doe'],
|
|
69
|
-
folders: ['Technique/Études', 'Technique/DOE', 'Technique/Rapports'],
|
|
70
|
-
metadata: (project, subtype) => ({
|
|
71
|
-
type: subtype,
|
|
72
|
-
domaine: randomChoice(['structure', 'thermique', 'acoustique', 'fluides', 'electricite']),
|
|
73
|
-
bureau_etude: randomChoice(['BETOM Ingénierie', 'Fluides Conseil', 'Struct & Co']),
|
|
74
|
-
norme: randomChoice(['RT2020', 'RE2020', 'PMR', 'Sécurité Incendie'])
|
|
75
|
-
})
|
|
76
|
-
},
|
|
77
|
-
|
|
78
|
-
suivi: {
|
|
79
|
-
subtypes: ['pv_chantier', 'pv_reception', 'photos', 'rapports', 'non_conformites'],
|
|
80
|
-
folders: ['Suivi/PV Chantier', 'Suivi/Réception', 'Suivi/Photos'],
|
|
81
|
-
metadata: (project, subtype) => ({
|
|
82
|
-
type: subtype,
|
|
83
|
-
date_visite: generateRandomDate(),
|
|
84
|
-
conducteur_travaux: randomChoice(['Jean Martin', 'Claire Bernard', 'Antoine Rousseau']),
|
|
85
|
-
lot: randomChoice(['lot_1_gros_oeuvre', 'lot_2_charpente', 'lot_3_electricite', 'lot_4_plomberie'])
|
|
86
|
-
})
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
// Utilisateurs et groupes
|
|
91
|
-
const USERS_GROUPS = {
|
|
92
|
-
users: {
|
|
93
|
-
'j.martin': 'Jean Martin - Conducteur Travaux',
|
|
94
|
-
'c.bernard': 'Claire Bernard - Conductrice Travaux',
|
|
95
|
-
'a.rousseau': 'Antoine Rousseau - Chef de Projet',
|
|
96
|
-
'm.dupont': 'Marie Dupont - Architecte',
|
|
97
|
-
'p.dubois': 'Pierre Dubois - Directeur',
|
|
98
|
-
'tech.leader': 'Thomas Leroy - Responsable Technique'
|
|
99
|
-
},
|
|
100
|
-
groups: {
|
|
101
|
-
'direction': 'Direction Générale',
|
|
102
|
-
'conducteurs_travaux': 'Conducteurs de Travaux',
|
|
103
|
-
'architectes': 'Équipe Architecture',
|
|
104
|
-
'bureaux_etudes': 'Bureaux d\'Études',
|
|
105
|
-
'maitrise_oeuvre': 'Maîtrise d\'Œuvre',
|
|
106
|
-
'sous_traitants': 'Sous-traitants',
|
|
107
|
-
'quality': 'Contrôle Qualité'
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
// Fonctions utilitaires
|
|
112
|
-
function randomChoice(array) {
|
|
113
|
-
return array[Math.floor(Math.random() * array.length)];
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
function generateRandomDate() {
|
|
117
|
-
const start = new Date(2023, 0, 1);
|
|
118
|
-
const end = new Date(2024, 11, 31);
|
|
119
|
-
return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())).toISOString().split('T')[0];
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function generatePermissions() {
|
|
123
|
-
const readUsers = [];
|
|
124
|
-
const readGroups = [];
|
|
125
|
-
const writeGroups = [];
|
|
126
|
-
|
|
127
|
-
// Lecture - utilisateurs spécifiques parfois
|
|
128
|
-
if (Math.random() > 0.7) {
|
|
129
|
-
const userKeys = Object.keys(USERS_GROUPS.users);
|
|
130
|
-
readUsers.push(randomChoice(userKeys));
|
|
131
|
-
if (Math.random() > 0.5) {
|
|
132
|
-
readUsers.push(randomChoice(userKeys.filter(u => u !== readUsers[0])));
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Lecture - groupes (toujours)
|
|
137
|
-
const groupKeys = Object.keys(USERS_GROUPS.groups);
|
|
138
|
-
readGroups.push(randomChoice(['conducteurs_travaux', 'architectes', 'maitrise_oeuvre']));
|
|
139
|
-
if (Math.random() > 0.6) {
|
|
140
|
-
readGroups.push(randomChoice(groupKeys.filter(g => g !== readGroups[0])));
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Écriture - généralement des groupes métier
|
|
144
|
-
writeGroups.push(randomChoice(['conducteurs_travaux', 'architectes', 'direction']));
|
|
145
|
-
|
|
146
|
-
const readPerm = [];
|
|
147
|
-
if (readUsers.length > 0) readPerm.push(`users:${readUsers.join(',')}`);
|
|
148
|
-
if (readGroups.length > 0) readPerm.push(`groups:${readGroups.join(',')}`);
|
|
149
|
-
|
|
150
|
-
const writePerm = writeGroups.length > 0 ? `groups:${writeGroups.join(',')}` : '';
|
|
151
|
-
|
|
152
|
-
return {
|
|
153
|
-
read: readPerm.join('|'),
|
|
154
|
-
write: writePerm
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
function generateDocumentPath(project, docType, subtype, index) {
|
|
159
|
-
const projectCode = project.code.toLowerCase();
|
|
160
|
-
const year = randomChoice(['2023', '2024']);
|
|
161
|
-
const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0');
|
|
162
|
-
|
|
163
|
-
const extensions = ['.pdf', '.dwg', '.xlsx', '.docx', '.jpg'];
|
|
164
|
-
const ext = randomChoice(extensions);
|
|
165
|
-
|
|
166
|
-
const filename = `${subtype}_${projectCode}_${year}${month}_${String(index).padStart(3, '0')}${ext}`;
|
|
167
|
-
|
|
168
|
-
return `./docs/projets/${projectCode}/${docType}/${year}/${filename}`;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Générateur principal
|
|
172
|
-
function generateCSVData() {
|
|
173
|
-
const csvRows = [];
|
|
174
|
-
let totalDocs = 0;
|
|
175
|
-
|
|
176
|
-
console.log('🏗️ Génération des données BAUTECH Construction...');
|
|
177
|
-
|
|
178
|
-
// Documents par projet
|
|
179
|
-
CLIENT_CONFIG.projects.forEach(project => {
|
|
180
|
-
console.log(`📁 Projet: ${project.name} (${project.docs} docs)`);
|
|
181
|
-
|
|
182
|
-
const docTypesArray = Object.keys(DOC_TYPES);
|
|
183
|
-
const docsPerType = Math.floor(project.docs / docTypesArray.length);
|
|
184
|
-
let projectDocCount = 0;
|
|
185
|
-
|
|
186
|
-
docTypesArray.forEach(docTypeKey => {
|
|
187
|
-
const docType = DOC_TYPES[docTypeKey];
|
|
188
|
-
const targetDocs = docTypeKey === docTypesArray[docTypesArray.length - 1]
|
|
189
|
-
? (project.docs - projectDocCount) // Dernier type prend le reste
|
|
190
|
-
: docsPerType;
|
|
191
|
-
|
|
192
|
-
for (let i = 0; i < targetDocs; i++) {
|
|
193
|
-
const subtype = randomChoice(docType.subtypes);
|
|
194
|
-
const folder = randomChoice(docType.folders);
|
|
195
|
-
const metadata = docType.metadata(project.name, subtype);
|
|
196
|
-
const permissions = generatePermissions();
|
|
197
|
-
|
|
198
|
-
const filePath = generateDocumentPath(project, docTypeKey, subtype, i + 1);
|
|
199
|
-
const targetFolder = `${project.name}/${folder}`;
|
|
200
|
-
|
|
201
|
-
csvRows.push({
|
|
202
|
-
filePath,
|
|
203
|
-
targetFolder,
|
|
204
|
-
projet: project.name,
|
|
205
|
-
domain: 'BTP & Construction',
|
|
206
|
-
planClassement: 'BTP_PROMOTION_IMMOBILIERE',
|
|
207
|
-
metadata: JSON.stringify(metadata),
|
|
208
|
-
readPermissions: permissions.read,
|
|
209
|
-
writePermissions: permissions.write
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
projectDocCount++;
|
|
213
|
-
totalDocs++;
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
// Documents administratifs
|
|
219
|
-
console.log('📋 Documents Administratifs...');
|
|
220
|
-
for (let i = 0; i < CLIENT_CONFIG.admin.docs; i++) {
|
|
221
|
-
const docType = DOC_TYPES.administratif;
|
|
222
|
-
const subtype = randomChoice(docType.subtypes);
|
|
223
|
-
const folder = randomChoice(docType.folders);
|
|
224
|
-
const metadata = docType.metadata('Administration', subtype);
|
|
225
|
-
const permissions = generatePermissions();
|
|
226
|
-
|
|
227
|
-
csvRows.push({
|
|
228
|
-
filePath: `./docs/admin/${subtype}/admin_${String(i + 1).padStart(4, '0')}.pdf`,
|
|
229
|
-
targetFolder: `Administration/${folder}`,
|
|
230
|
-
workspace: 'BAUTECH Corporate',
|
|
231
|
-
domain: 'Administration',
|
|
232
|
-
planClassement: 'ADMINISTRATION_GENERALE',
|
|
233
|
-
metadata: JSON.stringify(metadata),
|
|
234
|
-
readPermissions: 'groups:direction,conducteurs_travaux',
|
|
235
|
-
writePermissions: 'groups:direction'
|
|
236
|
-
});
|
|
237
|
-
totalDocs++;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Documents techniques
|
|
241
|
-
console.log('🔧 Documents Techniques...');
|
|
242
|
-
for (let i = 0; i < CLIENT_CONFIG.technique.docs; i++) {
|
|
243
|
-
const docType = DOC_TYPES.technique;
|
|
244
|
-
const subtype = randomChoice(docType.subtypes);
|
|
245
|
-
const folder = randomChoice(docType.folders);
|
|
246
|
-
const metadata = docType.metadata('Technique', subtype);
|
|
247
|
-
const permissions = generatePermissions();
|
|
248
|
-
|
|
249
|
-
csvRows.push({
|
|
250
|
-
filePath: `./docs/technique/${subtype}/tech_${String(i + 1).padStart(4, '0')}.pdf`,
|
|
251
|
-
targetFolder: `Technique/${folder}`,
|
|
252
|
-
workspace: 'BAUTECH Corporate',
|
|
253
|
-
domain: 'Technique & Maintenance',
|
|
254
|
-
planClassement: 'MAINTENANCE_TECHNIQUE',
|
|
255
|
-
metadata: JSON.stringify(metadata),
|
|
256
|
-
readPermissions: 'users:tech.leader|groups:bureaux_etudes,conducteurs_travaux',
|
|
257
|
-
writePermissions: 'groups:bureaux_etudes'
|
|
258
|
-
});
|
|
259
|
-
totalDocs++;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
// Archives
|
|
263
|
-
console.log('📜 Archives...');
|
|
264
|
-
for (let i = 0; i < CLIENT_CONFIG.archives.docs; i++) {
|
|
265
|
-
const year = randomChoice(['2020', '2021', '2022']);
|
|
266
|
-
csvRows.push({
|
|
267
|
-
filePath: `./docs/archives/${year}/archive_${year}_${String(i + 1).padStart(4, '0')}.pdf`,
|
|
268
|
-
targetFolder: `Archives/${year}`,
|
|
269
|
-
workspace: 'BAUTECH Archives',
|
|
270
|
-
domain: 'Administration',
|
|
271
|
-
planClassement: 'ADMINISTRATION_GENERALE',
|
|
272
|
-
metadata: JSON.stringify({
|
|
273
|
-
type: 'archive',
|
|
274
|
-
annee: year,
|
|
275
|
-
statut: 'archive'
|
|
276
|
-
}),
|
|
277
|
-
readPermissions: 'groups:direction,quality',
|
|
278
|
-
writePermissions: 'groups:direction'
|
|
279
|
-
});
|
|
280
|
-
totalDocs++;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
console.log(`✅ Total généré: ${totalDocs} documents`);
|
|
284
|
-
return csvRows;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// Export CSV
|
|
288
|
-
function exportToCSV(data, filename = 'mapping_bautech_15k.csv') {
|
|
289
|
-
const headers = [
|
|
290
|
-
'File Path',
|
|
291
|
-
'Target Folder',
|
|
292
|
-
'Projet',
|
|
293
|
-
'Domain',
|
|
294
|
-
'Plan Classement',
|
|
295
|
-
'Metadata (JSON)',
|
|
296
|
-
'Read Permissions (users:user1,user2|groups:group1,group2)',
|
|
297
|
-
'Write Permissions (users:user1,user2|groups:group1,group2)'
|
|
298
|
-
];
|
|
299
|
-
|
|
300
|
-
let csvContent = headers.join(',') + '\\n';
|
|
301
|
-
|
|
302
|
-
data.forEach(row => {
|
|
303
|
-
const csvRow = [
|
|
304
|
-
`"${row.filePath}"`,
|
|
305
|
-
`"${row.targetFolder}"`,
|
|
306
|
-
`"${row.workspace}",
|
|
307
|
-
`"${row.domain || ''}"`,
|
|
308
|
-
`"${row.planClassement || ''}"`,
|
|
309
|
-
`"${row.metadata.replace(/"/g, '""')}"`,
|
|
310
|
-
`"${row.readPermissions}"`,
|
|
311
|
-
`"${row.writePermissions}"`
|
|
312
|
-
].join(',');
|
|
313
|
-
|
|
314
|
-
csvContent += csvRow + '\\n';
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
return csvContent;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
// Génération et export
|
|
321
|
-
console.log('🚀 Générateur CSV - BAUTECH Construction');
|
|
322
|
-
console.log('=' .repeat(50));
|
|
323
|
-
|
|
324
|
-
const data = generateCSVData();
|
|
325
|
-
const csvContent = exportToCSV(data);
|
|
326
|
-
|
|
327
|
-
// Création du dossier demo s'il n'existe pas
|
|
328
|
-
const demoDir = path.dirname(__filename);
|
|
329
|
-
if (!fs.existsSync(demoDir)) {
|
|
330
|
-
fs.mkdirSync(demoDir, { recursive: true });
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
const outputPath = path.join(demoDir, 'mapping_bautech_15k.csv');
|
|
334
|
-
fs.writeFileSync(outputPath, csvContent);
|
|
335
|
-
|
|
336
|
-
console.log('=' .repeat(50));
|
|
337
|
-
console.log(`✅ Fichier CSV généré: ${outputPath}`);
|
|
338
|
-
console.log(`📊 Nombre de lignes: ${data.length + 1} (headers inclus)`);
|
|
339
|
-
console.log(`💾 Taille du fichier: ${(csvContent.length / 1024 / 1024).toFixed(2)} MB`);
|
|
340
|
-
console.log('\\n🎯 Prêt pour la démonstration !');
|
|
341
|
-
|
|
342
|
-
// Statistiques pour la démo
|
|
343
|
-
console.log('\\n📈 Répartition:');
|
|
344
|
-
CLIENT_CONFIG.projects.forEach(project => {
|
|
345
|
-
console.log(` 📁 ${project.name}: ${project.docs} docs`);
|
|
346
|
-
});
|
|
347
|
-
console.log(` 📋 Administration: ${CLIENT_CONFIG.admin.docs} docs`);
|
|
348
|
-
console.log(` 🔧 Technique: ${CLIENT_CONFIG.technique.docs} docs`);
|
|
349
|
-
console.log(` 📜 Archives: ${CLIENT_CONFIG.archives.docs} docs`);
|
|
350
|
-
console.log(` ────────────────────────────────`);
|
|
351
|
-
console.log(` 📊 TOTAL: ${data.length} documents`);
|