ED03 - Format du journal : artefacts JSON, signature temporelle, V7GUID, sidecars

Problème

Un entrepreneur souhaite tenir son journal dans Git - mais à quoi ressemble techniquement une entrée ? La pratique actuelle ne connaît aucune réponse contraignante :

Message essentiel

Une entrée de journal GitCover est un artefact JSON avec :

  1. JSON-Schema-First - le schéma existe avant l'entrée ; l'entrée est validée par rapport au schéma (hook pre-commit)
  2. V7GUID (Class Identifier) - classe le document/l'action selon le registre .gitcover (quoi/quel type) ; sert à l'organisation du classement et aux requêtes DB (par ex. EF Core dans Vertical App)
  3. uuidV7 (Object ID) - constitue déjà à elle seule l'identité univoque (DocID) de l'entrée, RFC 9562 §5.7, générée à partir d'un horodatage prédéfini (ou now()) via le helper GitCover (gc-v7guid), le reste étant complété par du hasard
  4. Clé composite V7GUID:uuidV7 - la clé composite du sidecar GCPN, sert à l'organisation du classement et aux requêtes ; le moment de la saisie est contenu dans l'uuidV7 (horodatage 48 bits), pas de champ datetime/date séparé
  5. Sidecar obligatoire - chaque pièce justificative reçoit un sidecar .gc.md avec son propre uuidV7 (acte de classification) et l'uuidV7 du document
  6. Traçabilité rétrograde/progressive - de l'écriture comptable → pièce justificative → entrée de journal → uuidV7 et inversement résoluble

Compliance by Design : le format n'est pas ajouté après coup - il est structurel. Schéma, V7GUID (Class), uuidV7 (Object) et sidecar sont des champs obligatoires, sans lesquels une entrée n'est pas admise dans le dépôt.

Pas de datetime/date redondant : le moment de la saisie est ancré dans l'uuidV7 elle-même (horodatage 48 bits, RFC 9562 §5.7). Une représentation sous forme de chaîne séparée dans les schémas JSON ou les données JSON est redondante et n'est pas consignée au niveau des faits. La représentation sous forme de chaîne pour le transfert DTO/HTMX relève de la responsabilité du harness, pas du niveau des faits.

L'entrée de journal comme nœud de conformité

L'entrée technique n'est pas une fin en soi. Elle est le nœud temporel où convergent plusieurs chaînes de preuve :

flowchart LR D["Journal : agenda + temps de prestation"] --> F["FZul/BSFZ"] D --> E["EStG/EÜR : cause"] D --> U["TVA : période de prestation"] D --> G["GoBD/AO : chaîne de pièces justificatives"] D --> C["Contrat/facturation"] D --> R["Contrôle des risques et des délais"] D --> P["Dépôts Git : preuve portable"]

Le SSoT du journal indique selon quel agenda le travail a été effectué. Les documents originaux, les sidecars, GCPN et les artefacts du grand livre/de la facturation fournissent les pièces justificatives correspondantes. Cette séparation évite deux erreurs : une entrée de journal n'est pas confondue avec un substitut de pièce justificative externe, et une pièce justificative rassemblée plus tard n'est pas présentée à tort comme une preuve de travail effectuée en temps utile.

Le schéma JSON (Schema-First)

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR S["Schéma JSON
(avant l'entrée)"] S --> V["Validation par schéma
(hook pre-commit)"] E["Entrée de journal
(JSON)"] E --> V V -->|valide| C["Commit accepté
+ uuidV7 généré"] V -->|invalide| R["Commit refusé
violation de schéma"] style S fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style V fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style E fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style C fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R fill:#FDBA74,stroke:#C2410C,color:#0F1B33

Le schéma existe avant l'entrée - il est déposé dans .gitcover/schemas/diary-entry-1.0.schema.json et versionné. Une entrée sans référence de schéma ($schema) est rejetée par le hook pre-commit.

Schéma diary-entry-1.0.schema.json (simplifié)

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://gitcover.org/schemas/diary-entry-1.0.schema.json",
  "title": "GitCover Diary Entry v1.0",
  "type": "object",
  "required": [
    "$schema", "V7GUID", "docUid",
    "author", "role", "tenant", "sphere", "source"
  ],
  "properties": {
    "$schema": {
      "type": "string",
      "format": "uri",
      "const": "https://gitcover.org/schemas/diary-entry-1.0.schema.json"
    },
    "V7GUID": {
      "type": "string",
      "description": "Class Identifier - classe le document/l'action à partir du registre .gitcover (quoi/quel type)"
    },
    "docUid": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
      "description": "Object ID - RFC 9562 §5.7 UUIDv7, généré à partir d'un horodatage prédéfini (pas now()), horodatage 48 bits ancré dans le GUID"
    },
    "author": { "type": "string", "description": "Placeholder d'acteur, p. ex. E1" },
    "role": {
      "type": "string",
      "enum": ["GF", "Buchhalter", "Lohnverantwortlicher", "F&E-Leiter", "Administrator"]
    },
    "tenant": { "type": "string", "description": "Placeholder de tenant, p. ex. ORG-1" },
    "sphere": {
      "type": "string",
      "enum": ["ideell", "vermögensverwaltend", "zweckbetrieblich", "wirtschaftlich", "n/a"]
    },
    "source": {
      "type": "string",
      "enum": ["E1", "StB", "Notar", "Bank", "DRV", "FA", "BA", "VBG", "KK", "auto"]
    },
    "source_sha256": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "description": "SHA-256 de la pièce justificative référencée (ID de pièce univoque)"
    },
    "tags": { "type": "array", "items": { "type": "string" } }
  }
}

Important - pas de champ datetime/date : le moment de la saisie est contenu dans l'uuidV7 (horodatage 48 bits, RFC 9562 §5.7). Une représentation sous forme de chaîne séparée est redondante et n'est pas consignée au niveau des faits. L'uuidV7 seule constitue la DocID univoque ; la clé composite V7GUID:uuidV7 sert à l'organisation du classement et aux requêtes DB.

V7GUID - structure et horodatage 48 bits

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR subgraph V7["V7GUID (128 bits, RFC 9562 §5.7)"] direction LR T["timestamp_ms
Bits 0–47
48 bits Unix-ms"] V["version
Bits 48–51
0111 (UUIDv7)"] R["rand_a
Bits 52–63
12 bits"] VA["variant
Bits 64–65
10"] RB["rand_b
Bits 66–127
62 bits"] end T --> DT["Horodatage 48 bits
ancré dans uuidV7
(pas de champ datetime séparé)"] V7 --> ID["Champ uuidV7
Object ID
(horodatage prédéfini)"] style T fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style V fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R fill:#E5E7EB,stroke:#6B7280,color:#0F1B33 style VA fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style RB fill:#E5E7EB,stroke:#6B7280,color:#0F1B33 style DT fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style ID fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7
Plage de bits Largeur Contenu Fixé par RFC
0–47 48 bits Millisecondes Unix depuis l'epoch (1970-01-01T00:00:00Z) Oui (RFC 9562 §5.7)
48–51 4 bits Version = 0111 (UUIDv7) Oui
52–63 12 bits rand_a (aléatoire) Non
64–65 2 bits Variant = 10 Oui
66–127 62 bits rand_b (aléatoire) Non

Principe fondamental : la composante horodatage 48 bits (bits 0–47) est autoritative pour le moment de la saisie. Elle est ancrée dans l'uuidV7 elle-même et ne peut être modifiée a posteriori sans rendre le GUID invalide. Un champ datetime séparé n'existe pas - le temps est contenu dans l'uuidV7. La représentation sous forme de chaîne pour DTO/HTMX relève de la responsabilité du harness.

Extension GitCover : hiérarchie et ID de processus dans les bits 66–127

La spécification GitCover V7GUID (work/OSS/TOP/.gitcover/specs/v7guid/) étend la composante aléatoire de 62 bits (bits 66–127) par une hiérarchie à 6 niveaux et des ID de processus - il s'agit de l'extension protégée par brevet (DPMA Az. 10 2025 003 091.6) :

Plage de bits Largeur Contenu
66–89 6×4 bits Hiérarchie à 6 niveaux (L1–L6, 4 bits chacun)
90–97 8 bits ProcessTypeId (type de processus)
98–105 8 bits GatewayId (point de contrôle)
106–113 8 bits Statut (bitmask du cycle de vie)
114–121 8 bits Kind (nature de l'activité)
122–127 6 bits VariantId (classe de variante)

Remarque : cette extension n'est pas impérativement nécessaire pour la série sur le journal - elle devient pertinente dans ED02 (tenant/sphère/rôle) et les articles ultérieurs (harness). Ici, la base RFC 9562 avec horodatage 48 bits suffit.

Routines helper : créer un V7GUID à partir de clés étrangères

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR F["Clé étrangère
(horodatage dans les données
ou le nom de fichier)"] F --> H["Routine helper
gc-v7guid"] H --> TS["Horodatage 48 bits
extrait/converti"] TS --> G["uuidV7 généré
(Guid.CreateVersion7)"] G --> A["Artefact JSON
V7GUID + uuidV7"] A --> D["Documentation GoBD
saisie en temps utile
traçable"] style F fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style H fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style TS fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style G fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style A fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style D fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33

L'outil OSS GitCover gc-v7guid (work/OSS/gc-v7guid) fournit les opérations :

gen — générer des Object ID UUIDv7

# n Object ID avec horodatage prédéfini (pas now()) et queue aléatoire (RFC 9562)
gc-v7guid gen 1 --ts 2026-08-15T09:00:00Z
# Sortie : 01a17e18-c662-7874-9e1c-85d47895304f

gen-doc — de manière déterministe à partir des métadonnées du document

# ID liée au document à partir de l'horodatage + SHA-256 du document original
gc-v7guid gen-doc --ts 2026-08-15T09:00:00Z --doc-sha256 <64-hex>

decode — extraire l'horodatage et la structure de l'uuidV7

gc-v7guid decode 019f2c6f-0900-7000-8000-000000000000
# Sortie : unix_ms, utc (ISO-8601), version=7, variant=2, rfc9562

Clé étrangère → uuidV7

Les routines helper permettent de créer, à partir d'une clé étrangère (par ex. un horodatage dans le nom de fichier comme 260815_0900_Lohnabrechnung.pdf), une clé uuidV7 valide - avec un horodatage prédéfini, et non now() :

  1. Parser la clé étrangère - 260815_0900 → 2026-08-15T09:00:00Z
  2. Calculer l'horodatage 48 bits - millisecondes Unix depuis l'epoch
  3. Générer l'uuidV7 - Guid.CreateVersion7() avec horodatage explicite, le reste avec du hasard
  4. Clé composite - V7GUID (Class issue du registre) : uuidV7 (Object avec horodatage)
  5. Documentation GoBD - saisie en temps utile ancrée de manière traçable (pas de champ datetime séparé)

Référence GoBD : la saisie en temps utile (GoBD Rz. 146) est documentée cryptographiquement par l'horodatage 48 bits dans l'uuidV7 - et non simplement affirmée. L'horodatage fait partie de l'identité et ne peut être modifié a posteriori.

Structure du sidecar (.gc.md)

Chaque pièce justificative reçoit un sidecar avec deux références uuidV7 :

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD D["Document
(PDF, XML, EML)"] D --> S["Sidecar .gc.md"] S --> U1["uuidV7 (propre)
identité du sidecar
+ moment de saisie 48 bits"] S --> U2["uuidV7 (étranger)
identité du document
dans v7g_taxonomy"] S --> SH["sha256
ID de pièce univoque"] S --> T["v7g_taxonomy
classification
(tenant, sphère, catégorie)"] S --> O["obsolescence
status: active/superseded/obsolete"] style D fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style S fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style U1 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style U2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SH fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style T fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style O fill:#E5E7EB,stroke:#6B7280,color:#0F1B33

Exemple de sidecar

{
  "$schema": "https://gitcover.org/schemas/v7g-sidecar-2.0.schema.json",
  "V7GUID": "<V7GUID-Class-aus-Registry>",
  "docUid": "019f2c6f-0900-7001-8000-000000000001",
  "sha256": "ab94670c0dd8499c27ef2feddd1d9c5925977d55a52150a6fca0f6567d2e5e79",
  "title": "260815_Lohnabrechnung.pdf",
  "original_filename": "260815_Lohnabrechnung.pdf",
  "locations": [
    {
      "unc_path": "./ORG-1/sources/lohn/260815_Lohnabrechnung.pdf",
      "from": "260815",
      "to": null,
      "note": "Emplacement de stockage principal"
    }
  ],
  "v7g_taxonomy": [
    {
      "v7guid": "019f2c6f-0900-7000-8000-000000000000",
      "taxonomy": "ORG-1/Lohn",
      "valid_from": "260815",
      "valid_to": null,
      "note": "Tenant : ORG-1, Catégorie : Lohn, Sphère : ideell"
    }
  ],
  "gcpn": {
    "prima_nota_ref": null,
    "journal_entry_ref": null
  },
  "obsolescence": {
    "status": "active",
    "superseded_by": null,
    "superseded_at": null
  }
}

Clé composite V7GUID:uuidV7 :

  • V7GUID (champ 1) - Class Identifier du sidecar (classification issue du registre .gitcover : quoi/quel type)
  • uuidV7 (champ 2) - Object ID du sidecar lui-même, généré avec un horodatage prédéfini (quand la classification a-t-elle eu lieu ?), horodatage 48 bits ancré dans le GUID
  • v7g_taxonomy[].v7guid - Object ID du document classifié (quel document est classifié ?)
  • sha256 - identité du document original classifié — la preuve de l'originalité, toujours et partout (même lorsque le document se déplace : indépendamment du chemin/du nom, calculée à partir du contenu)

Ainsi, non seulement le document est identifié de manière univoque (via son SHA-256), mais aussi l'acte de classification lui-même - y compris le moment (dans uuidV7), qui a classifié et dans quel rôle. Pas de champ datetime séparé - le temps est contenu dans les valeurs uuidV7.

Traçabilité rétrograde et progressive

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR subgraph RET["Rétrograde (depuis l'écriture comptable, en arrière)"] direction LR B["Écriture comptable
(SKR04)"] B --> BE["Pièce justificative
(SHA-256)"] BE --> DE["Entrée de journal
(uuidV7)"] DE --> V7["uuidV7
(horodatage 48 bits)"] end subgraph PRO["Progressive (depuis la pièce justificative, en avant)"] direction LR BE2["Pièce justificative
(SHA-256)"] BE2 --> BS["Écriture comptable
(SKR04)"] BS --> GB["Grand livre
(JSON)"] GB --> EB["Bilan d'ouverture"] end style B fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style BE fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style DE fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style V7 fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style BE2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style BS fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style GB fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style EB fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
Direction Départ Résolution via Objectif
Rétrograde Écriture comptable (SKR04) source_sha256 → pièce justificative → uuidV7 Entrée de journal avec horodatage 48 bits
Progressive Pièce justificative (SHA-256) uuidV7 → entrée de journal → source_sha256 Écriture comptable → grand livre → bilan d'ouverture

Référence GoBD : la traçabilité rétrograde correspond à GoBD Rz. 146 (traçabilité). La traçabilité progressive correspond à GoBD Rz. 147 (vérifiabilité). Les deux sont garanties by design par uuidV7 + SHA-256 - et non par des renvois manuels.

Saisie du temps dans le journal

Chaque entrée de journal contient un tableau de saisie du temps :

Début Fin Heures Activité Tenant Sphère Objet Source
0900 1200 3,00 Données de base du compte de paie ORG-1 ideell — E1
1200 1400 2,00 R&D : spécification V7GUID ORG-1 ideell FZul1 E1

Règle de colonne : la colonne Objet ne porte exclusivement que le projet R&D (FZul1, FZul2, …). Le travail hors R&D figure comme administration (sphère/catégorie) avec l'objet —. Chaque heure FZul appartient à exactement un projet (§ 7 FZulG).

Référence FZul : la saisie du temps est la base des justificatifs d'heures FZul (ED29). La séparation R&D vs administration s'effectue via la colonne Objet par ligne de temps - et non uniquement via le champ role de l'entrée. Le role décrit la fonction de la personne agissante (voir ci-dessous), et non l'attribution de l'aide.

La saisie est complète - le plafonnement n'intervient qu'à la facturation

Le journal enregistre intégralement le temps de travail réellement effectué et sans plafond - y compris lorsqu'il dépasse une limite hebdomadaire prévue par le droit des aides (par ex. 40 heures par semaine et par personne). Une telle limite est un facteur de calcul dans le total hebdomadaire et dans la détermination de l'aide, et non une limite de la ligne de temps individuelle : aucune ligne n'est tronquée, raccourcie ou reventilée simplement parce qu'une limite serait atteinte. La saisie complète est la condition de la plausibilité du journal et de la solidité de la chaîne de preuve. Les regroupements entre projets et administration sont des questions de facturation/projection, et non des corrections apportées à la pièce justificative.

Le déroulement de la journée : d'abord la pièce, la comptabilisation plus tard

Une journée de journal suit un déroulement fixe. La saisie (pièce justificative) et la facturation/comptabilisation sont strictement séparées :

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR A["Début de journée
tâches obligatoires (par ex. récupérer
les données de consommation de la veille)"] A --> B["Pendant la journée
compléter les entrées
de manière incrémentielle"] B --> C["Clôture de la journée
déterminer la durée,
affecter les lignes"] C --> D["Début de semaine
totaliser la semaine précédente"] D --> E["Ledger/projection
seulement après
clarification complète"] style A fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style B fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style C fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style D fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style E fill:#FDBA74,stroke:#C2410C,color:#0F1B33
Étape Contenu Effet
Pendant la journée Les activités sont enregistrées de manière incrémentielle sous forme de lignes de temps - dans la mesure où elles sont annoncées, affectées ou peuvent être affectées à partir du contexte Pièce/journal de bord, pas de comptabilisation
Clôture de la journée Déterminer la durée du travail (indication de l'entrepreneur en premier, l'ancrage système seulement à titre d'indice) ; affecter les valeurs journalières par entrée aux sphères ou aux projets - telles qu'indiquées ou telles que plausibles, en les marquant comme estimation ; ensuite finaliser le SHA du sidecar et l'index La journée est clôturée (immuable)
Début de journée Tâches obligatoires, par ex. récupérer les données de consommation de la veille Base de valeurs pour des répartitions ultérieures (par ex. part d'utilisation de l'électricité) ; aucune quote-part le même jour
Début de semaine Totaliser la semaine précédente (répartition projets/sphères ; la limite hebdomadaire n'est qu'un facteur de calcul) Contrôle hebdomadaire, projection
Ledger/projection Mise à jour du ledger des projets et de la pondération seulement après clarification complète du journal - pas à partir d'une seule entrée

Délimitation : l'indication FZul/sphère dans le journal est un champ de la pièce justificative. Elle est indépendante de toute réserve liée à une attestation et ne génère aucune comptabilisation. Le journal est la preuve ; la comptabilisation se fait dans le ledger, la pondération dans les projections. Le même principe s'applique aux pièces justificatives : une pièce atteste, la comptabilisation intervient plus tard et séparément.

Les rôles dans le journal - personne, fonction, partie, exécution

Le champ role n'est pas la personne. Pour une compréhension robuste des rôles, GitCover distingue cinq niveaux, qui restent séparés même lorsque la même personne accomplit tout d'un seul trait (typique des PME) :

Niveau Question Exemple
Personne Qui est la personne physique ? E1
Fonction / rôle de représentation À quel titre agit-elle ? Gérant, responsable R&D
Partie représentée Pour qui la déclaration est-elle émise (« agissant pour ») ? ORG-1 ou PARTNER-ORG
Identité d'exécution Sous quel compte, principal ou clé s'exécute l'opération technique ? Compte utilisateur, principal de service, clé de signature
Déclaration / acte de signature Quel contenu de document est accepté ou signé, et en quel rôle ? Accept, Sign (DS03)

Une personne peut avoir plusieurs fonctions et plusieurs actes de signature sur le même document - par exemple en tant que gérant de deux sociétés. Il n'en résulte ni plusieurs personnes, ni nécessairement plusieurs comptes ou clés. Les rôles ne doivent toutefois pas se confondre du seul fait que la personne ou les identifiants sont identiques : chaque acte de signature lie version du document + personne + fonction + partie représentée + consentement expressément couvert. Une demande de confirmation commune adressée à la personne peut couvrir plusieurs signatures de fonctions, si les fonctions couvertes sont expressément nommées ; elle ne remplace pas une validation liée au document. Détails : DS03 - Processus de signature et DS13 - Stratification des parties prenantes.

Limite honnête : cette séparation est décrite comme exigence et modèle de données. Une liaison techniquement imposée de bout en bout entre personne, fonction, partie et consentement (notamment les claims de rôle depuis le fournisseur d'identité jusqu'aux événements de signature) fait l'objet d'un développement en cours et n'est pas encore mise en œuvre partout.

Le travail avec des agents dans le journal

Si l'entrepreneur recourt à des agents IA, la règle est la suivante : le pilotage, l'instruction, la surveillance et la validation des agents constituent un usage de moyens de travail par la personne agissante - le temps saisi est le temps de la personne. Le journal ne comporte aucune catégorie propre « temps d'agent » et n'exige aucune confirmation de « chevauchement » lorsque des activités se déroulent en parallèle. À la place :

Une éligibilité au soutien ne découle pas du recours à des agents, mais de la question de savoir si l'activité concerne une question de recherche technique ouverte (délimitation dans le projet concerné).

Ce qui aboutit dans le dépôt Git - et ce qui n'y aboutit pas

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD IN["Dans le dépôt Git"] IN --> J["Artefacts JSON
(entrées de journal, grand livre)"] IN --> S["Sidecars .gc.md"] IN --> B["Pièces justificatives
(PDF, XML, EML)"] IN --> SC["Schémas"] IN --> D["Dictionnaires"] OUT["Pas dans le dépôt Git"] OUT --> P["Documents privés
(s'ils ne sont pas expressément introduits)"] OUT --> T["Fichiers temporaires"] OUT --> C["Credentials/Secrets"] style IN fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style J fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style S fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style B fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SC fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style D fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style OUT fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style P fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style T fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style C fill:#FDBA74,stroke:#C2410C,color:#0F1B33

Important : seuls les artefacts structurés (JSON, sidecars, pièces justificatives, schémas, dictionnaires) sont admis dans le dépôt Git. Les documents privés ne sont jamais admis dans le dépôt, sauf s'ils ont été expressément introduits et classifiés comme artefact. Il s'agit d'une exigence de protection des données et de conformité (RGPD, GoBD).

Levier de risque

Aujourd'hui (cheap) Demain (auditable) Risque réduit
Artefact JSON avec V7GUID (Class) + uuidV7 (Object) Moment de saisie ancré cryptographiquement dans uuidV7 Contestation du moment de saisie
Validation par schéma (pre-commit) Seules les entrées valides entrent dans le dépôt Violation de schéma, champs obligatoires incomplets
Sidecar avec clé composite V7GUID:uuidV7 Acte de classification traçable Contestation de la classification
source_sha256 par entrée Traçabilité rétrograde Contestation de l'affectation des pièces
Helper gc-v7guid pour clés étrangères Saisie en temps utile documentée (horodatage dans uuidV7) Violation GoBD « pas en temps utile »

Exigence du harness (aperçu)

Déductible d'ED03 :

ID Exigence Priorité
FA-1.1 Entrées de journal sous forme d'artefacts JSON (Schema-First) MUST
FA-1.2 Clé composite V7GUID (Class) : uuidV7 (Object) - pas de champ datetime/date séparé ; temps dans uuidV7 (RFC 9562 §5.7) MUST
FA-1.3 uuidV7 généré à partir d'un horodatage prédéfini (pas now()) via le helper MUST
FA-2.1 SHA-256 comme ID de pièce justificative MUST
FA-2.2 Sidecar .gc.md obligatoire MUST
FA-2.3 Sidecar avec clé composite V7GUID:uuidV7 (Class + Object) MUST
FA-2.12 Traçabilité rétrograde (comptabilisation → pièce → uuidV7) MUST
FA-2.13 Traçabilité progressive (pièce → comptabilisation → grand livre) MUST
TA-1.5 Routines helper pour la création de V7GUID à partir de clés étrangères (gc-v7guid) MUST
TA-1.6 Exigences temporelles GoBD documentées (horodatage 48 bits dans uuidV7) MUST
TA-2.1 Pre-commit : validation par schéma JSON MUST

La liste complète des exigences figure dans Harness-Anforderungen.md.

Sources

Topologie des sources et liens de référence CDN

Rôle Emplacement Objet
Primary / SSoT git.gitcover.org/GCC Stockage canonique (signé GPG, versionné)
Public OSS Mirror / CDN codeberg.org/gitcover-commons Miroir en lecture seule ; découverte FLOSS
Community Hub github.com/gitcover-commons Issues & Discussions ; référence du code source sur Codeberg

Remarque : cette répartition des sources, du miroir et du community hub reflète l'état actuel et peut changer. Veuillez vérifier la source canonique correspondante sur gitcover.org pour l'état actuel.