Tous les articles (200)
DSN (76)
Paie (60)
RH (57)
Rupture de contrat (29)

Structure de la DSN

Modèle de déclarations

Un modèle de déclaration est une arborescence de blocs d’informations, pour laquelle on décrit les cardinalités attendues. Tous les modèles de déclarations dont les signalements sont définis à partir d’une arborescence hiérarchique unique dénommée message DSN : ce sont donc des sous-arborescences d’une arborescence « maître ».

C’est la référence à suivre pour la composition d’une déclaration.

Code naturePériodicitéModèles de déclarationsPartenairesPoint de dépôt
              01              Mensuelle              DSN MensuelleUrssaf CN, CNAMTS, MSA, CNAV, AGIRC ARRCO, DARES, Institutions de prévoyance, Mutuelles, Sociétés d’assurance et délégataires de gestion, Organismes complémentaires non fédérés par un membre du GIP-MDS (CTIP, FFA, FNMF), Pôle emploi, CAMIEG, CNIEG, CRPCEN, DGFiP, CCVRP, caisses de congés payés (CIBTP, Transport et Manutention portuaire), IRCANTEC, CNAF, CRPNPAC, ASP, INSEE, CPRP SNCF, Congés spectacles, CPF, RAFP, CNRACL, FSPOEIE, RAEP, DAM, ENIM          Point de dépôt régime général ou régime agricole
    04    Signalement d’évènement    Signalement Arrêt de travailCNAMTS, MSA, Institutions de prévoyance, Mutuelles, Sociétés d’assurance, délégataires de gestion et Organismes complémentaires non fédérés par un membre du GIP-MDS (CTIP, FFA, FNMF)  Point de dépôt régime général ou régime agricole
      05    Signalement d’évènement    Signalement Reprise suite à arrêt de travailCNAMTS, MSA, Institutions de prévoyance, Mutuelles, Sociétés d’assurance, délégataires de gestion et Organismes complémentaires non fédérés par un membre du GIP-MDS (CTIP, FFA, FNMF)  Point de dépôt régime général ou régime agricole
    07    Signalement d’évènement    Signalement Fin du contrat de travail uniquePôle Emploi, MSA, Institutions de prévoyance, Mutuelles, Sociétés d’assurance, délégataires de gestion et Organismes complémentaires non fédérés par un membre du GIP-MDS (CTIP, FFA, FNMF), DARES  Point de dépôt régime général ou régime agricole
      08    Signalement d’évènement    Signalement d’Amorçage des données variablesDGFIP, Institutions de prévoyance, Mutuelles, Sociétés d’assurance, délégataires de gestion et Organismes complémentaires non fédérés par un membre du GIP-MDS (CTIP, FFA, FNMF), DGEFP, ASP, DARES    Point de dépôt régime général ou régime agricole
    09  DSN de substitution    DSN de substitution    Urssaf CN, MSA, CNAV, Agirc-Arrco  Point de dépôt régime général ou régime agricole

Les rubriques qui identifient un modèle de déclaration sociale nominative ou signalement entre S10 et S90 sont les suivantes :

  • Nature de la déclaration S20.G00.05.001
  • Type de la déclaration S20.G00.05.002
Déclaration

Une déclaration est l’instanciation d’un modèle de déclaration, donc d’un des modèles listés ci-dessus. Ceci s’applique donc aussi pour les signalements d’évènements.

Structuration en blocs et rubriques

Les rubriques sont réparties en blocs (équivaut à la notion de « sous-groupes » en N4DS). Chaque rubrique appartient à un bloc et un seul. Un bloc contient au moins une rubrique ; il peut arriver qu’il n’en contienne qu’une seule.

Le principe est que chaque bloc possède une certaine homogénéité sur le plan du sens. Le nom du bloc a donc une importance, et il correspond la plupart du temps à un « objet métier » (entreprise, individu, contrat, versement individu …), les rubriques étant des « attributs » de cet objet.

Chaque bloc est caractérisé par un identifiant (par exemple, S21.G00.30), un nom (dans cet exemple, individu), une description éventuelle, et la liste des rubriques qu’il contient. L’ordre des rubriques est également une caractéristique du bloc fournie au début de chaque bloc.

Règles de nommage

Pour donner un identifiant aux blocs et aux rubriques, le principe adopté est de rester en cohérence avec le nommage qui prévaut dans la N4DS, et ce tant que la N4DS existe : le nommage des données reprend donc la logique de hiérarchisation en structure, groupe, bloc, rubrique.

Par exemple :

Structure (exemple : S21)

–Groupe (exemple : S21.G00)

—-Bloc (exemple : S21.G00.11)

—– Rubrique (exemple : S21.G00.11.001)

Ainsi, pendant toute la durée du projet DSN, la règle de nommage des données en sortie de logiciel de paie correspond à l’expression concaténée. Pour reprendre l’exemple précédent : S21.G00.11.001 comme identifiant de rubrique, ou S21.G00.11 comme identifiant de bloc.

Pour faciliter la lecture, le cahier technique de la DSN met en évidence l’identifiant officiel de chaque rubrique (en vert), l’identifiant « raccourci » (en gras), et à gauche, l’identifiant sémantique (sous forme objet. attribut) :

L’identifiant sémantique et l’identifiant futur sont donnés ici pour information uniquement. Seul l’identifiant « officiel » compte.

Ordonnancement des blocs et rubriques dans le message

Lors du lancement de la DSN, deux engagements ont été pris au titre de l’identification des blocs et rubriques définis par la norme :

  • L’identifiant d’un bloc ou d’une rubrique n’est jamais modifié, une fois que cet identifiant a fait l’objet d’une communication aux éditeurs et déclarants
  • L’identifiant d’un bloc ou d’une rubrique disparu à l’occasion d’une nouvelle version de la norme ne peut pas être réutilisé pour identifier un nouveau bloc ou une nouvelle rubrique

Ces deux engagements ont pour conséquence directe que l’ordre des blocs et rubriques dans un message ne peut plus être assis sur l’ordre croissant des identifiants de blocs et de rubriques.

En effet, considérons le cas de deux blocs numérotés S21.G00.68 et S21.G00.69 dans une version de la norme. Pour la version suivante, il est estimé nécessaire d’ajouter un bloc enfant du bloc 68. Pour mémoire un bloc enfant unique est positionné dans le message à la suite immédiate de son parent. Le respect de l’ordre des identifiants dans la constitution du message amènerait à identifier ce nouveau bloc par le code S21.G00.69. Cet identifiant étant déjà affecté, le respect de l’ordre des identifiants dans la constitution des messages amènerait à transgresser l’ensemble des engagements susmentionnés, en remodifiant dans un premier temps le bloc initialement identifié par S21.G00.69 puis, en réutilisant ensuite le code S21.G00.69 ainsi libéré pour identifier le nouveau bloc.

Considérons ensuite le cas d’un bloc constitué de trois rubriques. Pour la version suivante il est nécessaire d’insérer une rubrique supplémentaire entre des rubriques numérotées consécutivement. Ainsi on veut insérer une rubrique « Type » à la suite de « Nom et prénom du contact ». Or nous avons la séquence :

  • Nom et prénom du contact – S20.G00.07.001
  • Adresse téléphonique – S20.G00.07.002
  • Adresse mél du contact – S20.G00.07.003

L’insertion de la nouvelle rubrique « Type – S20.G00.07.004 » fera alors naître la séquence suivante :

  • Nom et prénom du contact – S20.G00.07.001
  • Adresse téléphonique – S20.G00.07.002
  • Adresse mél du contact – S20.G00.07.003
  • Type – S20.G00.07.004

Ainsi, le respect des engagements sur l’identification des blocs et rubriques nous mène à abandonner l’ordre lexicographique dans les messages.

L’ordonnancement des blocs dans un message ne doit donc plus répondre :

  • Pour les blocs, qu’aux contraintes fixées par les arborescences de messages définies au point 5.5 du présent document.
  • Pour les rubriques, à leur séquence dans le bloc telle que déclarée en liste détaillée des rubriques.

Précisions : toutes les rubriques d’un même bloc doivent être déclarées consécutivement. On ne peut donc trouver dans le message un enchainement mêlant des rubriques issues de blocs différents comme celui-ci :

  • S21.G00.60.001,’01’
  • S21.G00.65.001,’01012013’
  • S21.G00.60.002,’15102013’

Par ailleurs, un bloc enfant se rapporte toujours au bloc parent qui le précède, directement ou indirectement dans le message.

Ainsi, considérons l’extrait de message suivant (ici seuls les blocs sont représentés alors que dans un message réel, on trouverait les rubriques de ces blocs).

  • S21.G00.30 (Individu1)
  • S21.G00.40 (Contrat1)
  • S21.G00.40 (Contrat 2)
  • S21.G00.30 (Individu2)
  • S21.G00.40 (Contrat 3)

Les contrats 1 et 2 concernent l’individu 1 car dans l’arborescence de message (cf point 5.5), le bloc individu est parent du bloc contrat et que le dernier individu trouvé dans le message lu de bas en haut avant les contrats 1 et 2 est l’individu 1. Le contrat 3 concerne l’individu 2 par application du même raisonnement.

Attributs des rubriques

Chaque rubrique, on l’a vu, est dotée d’un identifiant qui lui est propre. L’identifiant d’une rubrique supprimée n’est jamais réutilisé.

Outre son identifiant, chaque rubrique possède un nom (par exemple, « identifiant du lieu de travail»), une éventuelle définition (commentaire qui figure au début de la rubrique), un ensemble de caractéristiques (usage, nature, longueur minimum, longueur maximum), une liste de valeurs (uniquement s’il s’agit d’une énumération), et des contrôles qui lui sont appliqués (0, 1 ou plusieurs).

Nature
  • X : alpha-numérique
  • N : numérique
  • D : Date (JJMMAAAA)
  • Enumération
  • Référentiel externe
Longueur
  • Longueur minimum
  • Longueur maximum
Usage

Les règles d’usage précises, par rubrique et par modèle de déclaration, sont fournies dans un tableau à la fin du cahier technique, en cohérence avec les usages décrits pour chaque rubrique. Cf. les explications au début de ce tableau.

Dans la définition des usages des rubriques, on veille aux points suivants :

  • Une rubrique Conditionnelle ne peut jamais être à zéro ou à blanc, sauf spécification contraire
  • La première rubrique de chaque bloc doit, sauf exception, être une rubrique obligatoire
  • Un bloc contient toujours au moins une rubrique d’usage obligatoire
Schéma physique du fichier DSN

Un fichier DSN est du type « séquentiel en ligne » (Ligne Sequential File en Cobol) connu aussi sous le nom de « fichier texte délimité ».

Il est constitué d’enregistrements de longueur variable avec un maximum de 256 caractères ASCII. Chaque enregistrement se termine par un retour chariot et un saut de ligne (CR-LF : Carriage Return et Line Feed), ou un saut de ligne (LF) seul. Le format de la ligne avant le retour chariot est [Sxx.Gyy.zz.aaa(.bbb) ?,’value’]

Ce ou ces octets « 0A » ou « 0D0A » (zéroDzéroA en hexadécimal) sont utilisés comme délimiteur d’enregistrement.

La virgule (« 2C » en hexadécimal) est utilisée comme séparateur de champ.

La valeur de la rubrique est incluse entre deux apostrophes ou deux quotes ‘ (« 27 » en hexadécimal).

Exemple : S21.G00.06.001,’332975200′

Le numéro SIREN de l’entreprise dans le bloc Entreprise (S21.G00.06) est 332975200 La table de caractères utilisable pour l’encodage du fichier est la suivante :

‘iso/iec 8859-1 (E) alphabet ‘Latin1’

Tables des caractères autorisés

La table des caractères autorisés pour la valorisation des rubriques est un sous-ensemble de la table référencée ISO/IEC 8859-1. Les caractères interdits apparaissent sur fond grisé.

ISO/CEI 8859-1
 x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF
0xcaractères de contrôle et divers non imprimables
1x
2x !« #$%&()*+,./
3x0123456789:;=?
4x@ABCDEFGHIJKLMNO
5xPQRSTUVWXYZ[\]^_
6x`abcdefghijklmno
7xpqrstuvwxyz{|}~ 
8xcaractères de contrôle et divers non imprimables
9x
Ax ¡¢£¤¥¦§¨©ª«¬ ®¯
Bx°±²³´µ·¸¹º»¼½¾¿
CxÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ
DxÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß
Exàáâãäåæçèéêëìíîï
Fxðñòóôõö÷øùúûüýþÿ

La présence des seuls caractères cités ci-après (cellules en bleu du tableau) dans une même rubrique provoque le rejet de l’ensemble de la déclaration :

1.1      Restrictions pour les identités

En règle particulière, TOUTES les rubriques relatives à l’identification des personnes physiques ne peuvent contenir que les caractères figurant dans la liste indiquée ci-après. Cette restriction concerne les rubriques :

S10.G00.02.002 : Nom et prénom de la personne à contacter S20.G00.07.001 : Nom et prénom du contact S21.G00.30.002 : Nom de famille

S21.G00.30.003 : Nom d’usage S21.G00.30.004 : Prénoms

S21.G00.31.009 : Ancien nom de famille

S21.G00.31.010 : Anciens prénoms

S21.G00.85.013 : Nom de famille

S21.G00.85.014 : Nom d’usage

S21.G00.85.015 : Prénoms

S89.G00.91.002 : Nom de famille

S89.G00.91.003 : Nom d’usage

S89.G00.91.004 : Prénoms

Restriction pour toutes les adresses

TOUTES les rubriques relatives aux adresses ne peuvent contenir que les caractères figurant dans la liste ci-dessous.

 x0x1x2x3x4x5x6x7x8X9xAxBxCxDxExF
0xcaractères de contrôle et divers non imprimables
1x
2x !« #$%&()*+,./
3x0123456789:;=?
4x@ABCDEFGHIJKLMNO
5xPQRSTUVWXYZ[\]^_
6x`abcdefghijklmno
7xpqrstuvwxyz{|}~ 
8xcaractères de contrôle et divers non imprimables
9x
Ax ¡¢£¤¥¦§¨©ª«¬ ®¯
Bx°±²³´µ·¸¹º»¼½¾¿
CxÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ
DxÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß
Exàáâãäåæçèéêëìíîï
Fxðñòóôõö÷øùúûüýþÿ
Expressions régulières

La majorité des expressions régulières présentées ici ont été progressivement introduites dans les cahiers techniques depuis plusieurs années. L’emploi d’expressions régulières répond aux objectifs suivants :

  • Lever toute ambiguïté sur un contrôle
  • Permettre la mise à jour automatique des programmes de contrôle des émetteurs et des récepteurs

Les expressions sont implantées selon la syntaxe XMLSchema (XML Schema DataTypes – annexe F regular expressions accessible sous http://www.w3.org/TR/2004/REC-xmlschema- 2-20041028/ )

ExpressionSignification
[0-9]Le caractère est numérique
[A-Z]Le caractère est alphabétique majuscule, non accentué
[a-z]Le caractère est alphabétique minuscule, non accentué
+Le caractère ‘+’ est un qualifiant qui précise que ce qui précède est applicable de 1 à N fois
*Le caractère ‘*’ est un qualifiant qui précise que ce qui précède est applicable de 0 à N fois
?Le caractère ‘?’ est un qualifiant qui précise que ce qui précède est applicable de 0 à 1 fois
|Cette barre verticale indique une alternative
\Ce caractère ne sert que pour précéder les caractères particuliers, (comme par exemple ? * . + [ ] ), si l’on veut que la chaîne de caractères contienne précisément ce caractère-là. En pratique, dans le cahier technique, il est utilisé pour précéder le point.
\sCette combinaison permet d’indiquer un caractère espace, une tabulation, un retour à la ligne.
[0-9][A-Z]*Le premier caractère de la chaîne est numérique, les caractères suivants, s’ils sont présents, sont alphabétiques majuscules
[A-Z][0-9]{6}Le premier caractère de la chaîne est une majuscule non accentuée, suivi obligatoirement de six caractères numériques
[01|12|37]+Cette chaîne de caractères ne peut contenir que les valeurs 01, 12 ou 37
A?[0-9]+Cette chaîne de caractères est constituée soit d’un A majuscule suivi de caractères numériques, soit de caractères numériques uniquement
[0]+Cette chaîne de caractères ne peut contenir que des zéros
[^0]+Cette chaîne de caractères ne peut contenir aucun zéro
'Désigne le caractère apostrophe
\p{IsBasicLatin}Désigne tout caractère se situant entre le code hexa #x0000 et #x007F
\p{IsLatin-1Supplement}Désigne tout caractère se situant entre le code hexa #x0080 et #x00FF
^Métacaractère traduisant l’exclusion
[1-9][0-9]*\.[0-9]{2}Le nombre (montant, quantité ou taux) ne contient que des chiffres, le séparateur décimal ‘.’ et deux décimales.   A gauche du séparateur décimal, le premier chiffre est différent de 0.
-?[1-9][0-9]*\.[0-9]{2}Le nombre (montant, quantité ou taux) ne contient que des chiffres, le séparateur décimal ‘.’ et deux décimales.   Il contient éventuellement le caractère ‘-‘ si le nombre peut être négatif   A gauche du séparateur décimal, le premier chiffre est différent de 0.
(0|[1-9][0-9]*)\.[0-9]{2}Le nombre (montant, quantité ou taux) ne contient que des
ExpressionSignification
 chiffres, le séparateur décimal ‘.’ et deux décimales. Il peut être à zéro sous la forme 0.00 Les zéros non significatifs devant ce nombre ne sont pas admis.
-?(0|[1-9][0-9]*)\.[0-9]{2}Le nombre (montant, quantité ou taux) ne contient que des chiffres, le séparateur décimal ‘.’ et deux décimales.   Il contient éventuellement le caractère ‘-‘ si le montant / quantité / taux peut être négatif   Il peut être à zéro sous la forme 0.00   Les zéros non significatifs devant ce nombre ne sont pas admis.
[0]*([1-9][0-9]*)\.[0-9]{2}Le nombre (montant, quantité ou taux) ne contient que des chiffres, le séparateur décimal ‘.’ et deux décimales.   Les zéros non significatifs devant ce nombre sont admis.
– ?[0]*([1-9][0-9]*)\.[0-9]{2}Le nombre (montant, quantité ou taux) ne contient que des chiffres, le séparateur décimal ‘.’ et deux décimales.   Il contient éventuellement le caractère ‘-‘ si ce nombre peut être négatif   Les zéros non significatifs devant ce nombre sont admis.
[0]*(0|[1-9][0-9]*)\.[0-9]{2}Le nombre (montant, quantité ou taux) ne contient que des chiffres, le séparateur décimal ‘.’ et deux décimales.   Il peut être à zéro sous la forme 0.00   Les zéros non significatifs devant ce nombre sont admis.
-?[0]*(0|[1-9][0-9]*)\.[0-9]{2}Le nombre (montant, quantité ou taux) ne contient que des chiffres, le séparateur décimal ‘.’ et deux décimales.   Il contient éventuellement le caractère ‘-‘ si ce nombre peut être négatif   Il peut être à zéro sous la forme 0.00   Les zéros non significatifs devant ce nombre sont admis.
[(table des caractères acceptés)]Cette chaîne de caractères ne peut contenir que les caractères autorisés pour la norme
[1-9][0-9]*\.[0-9]{2}Montant / quantité / taux avec deux décimales
[1-9][0-9]*\.[0-9]{4}Montant / quantité / taux avec quatre décimales
[1-9][0-9]*Nombre entier non nul
[1-9][0-9]*|0Nombre entier, éventuellement à zéro
Envoi du fichier DSN

C’est le fichier DSN produit par l’entreprise ou le tiers déclarant. Il commence par une structure de description de l’envoi (S10) : on y caractérise notamment l’envoi, l’émetteur, le contact chez l’émetteur, et le destinataire du compte-rendu d’exploitation. Il contient ensuite une ou plusieurs déclarations, chacune d’entre elles pouvant être d’une nature différente. Il s’achève par une structure de comptage (S90).

A noter que dans le cas du Machine to Machine, un envoi (S10) ne pourra contenir qu’une et une seule déclaration (S20).

Voir également: