Gestion des avenants : Différence entre versions

De Wiki ODR
Aller à : navigation, rechercher
Ligne 50 : Ligne 50 :
  
  
Exemple de code de création du champ dernier dossier :
+
Exemple de code de création du champ dernier dossier (le champ no_dossier correspond au numéro de dossier administratif) :
  
 
<pre>
 
<pre>

Version du 6 juin 2011 à 16:57

Les données spécifiques aux dispositifs du RDR2 fournies par l'ASP concernent l'ensemble des dossiers engagés à une date donnée. La clef des tables transmises est donc le numéro de dossier administratif. Celui-ci sert à l'appariement avec les données du tronc commun afin d'attribuer par ligne de dossier, le numéro identifiant du bénéficiaire, la commune du dossier, l'année d'engagement et différents montants.


Cet article ne concerne pas les données surfaciques (MAE) ou la clef des tables reçues est le numéro d'individu.


codage des avenants

Certaines lignes de dossiers transmises sont liées à des avenants suite à une modification d'un premier dossier. Ces dossiers avec avenant sont repérables par la forme du code dossier administratif. Deux cas sont possibles :


Lors de la première année d'application du RDR2 le numéro de dossier administratif est suivi du code 01 lors de la mise en place d'un premier avenant. Mais, suite à un problème technique dans Osiris, le code 01 est répété lors d'un second d'avenant, voir d'un troisième. Ainsi le code administratif étant un numéro par défaut à 15 digits peut prendre des tailles beaucoup plus importantes comme dans l'exemple ci-dessous :


numéro du dossier administratif : 11207D055002007
premier avenant : 11207D05500200701 (01 est ajouté)
deuxième avenant : 11207D0550020070101 (01 est ajouté à la suite du code premier avenant)
troisième avenant : 11207D055002007010101 (01 est ajouté à la suite des codes premier et second avenant etc.)


Pour les années suivantes d'application du RDR2, le codage des avenants dans les numéros de dossiers administratifs a été modifié en limitant la taille du code à 15 digits pour le dossier + 2 digits pour le code avenant. Ce dernier est modifié et incrémenté au fur et à mesure des avenants :


numéro du dossier administratif à 15 digits : 11208D055003007
premier avenant : 11208D05500300701 (01 est ajouté)
deuxième avenant : 11208D05500300702 (02 remplace 01)
troisième avenant : 11208D05500300703 (03 remplace 02 etc.)


Dans tous les cas, les 15 premiers digits donnent le numéro de dossier d'origine.


Répercussion dans les données spécifiques

Dans les données spécifiques, tous les dossiers sont présents, y compris les dossiers précédant un ou des avenants.


Selon les traitements opérés un même dossier peut donc être comptabilisé plusieurs fois et entraîner des doublons. Il faut donc tenir compte de l'existence des avenants et si nécessaire exclure tous les dossiers précédant un dernier avenant. La non prise en compte de ce problème peut amener à des montants ou surfaces inexacts.


travaux dans l'ODR à partir de 2011

Afin d'identifier les dossiers valides un champ dont le libellé est "dernier_dos" est créé dans toutes les tables mises à jour en 2011. Ce champ prend la valeur "1" lorsque le dossier est en cours, soit sans avenant, soit correspondant au dernier avenant.


Exemple de code de création du champ dernier dossier (le champ no_dossier correspond au numéro de dossier administratif) :

/* ajoute un tag pour dernier avenant */

#ALTER TABLE  `112_conformite` ADD  `dernier_dos` VARCHAR( 1 ) NOT NULL COMMENT  '05/04/11 cedric' ;

#CREATE index `no_dossier` on 112_conformite  (`no_dossier`) ;

#CREATE temporary table a (index(`no_dossier`)) 
SELECT concat( left(`no_dossier`,15) , max(right(`no_dossier`,2)) ) `no_dossier`, count(distinct(`no_dossier`)) n 
FROM 112_conformite 
WHERE `no_dossier` <> '' and length(`no_dossier`) > 15 group by left(`no_dossier`,15) 
union 
SELECT left(`no_dossier`,15) `no_dossier`, count(distinct(`no_dossier`)) n 
FROM 112_conformite 
GROUP BY left(`no_dossier`,15) having n = 1 ;

#UPDATE  a left outer join 112_conformite b ON a.`no_dossier` = b.`no_dossier` SET dernier_dos = '1' ;


travaux dans l'ODR avant 2011

Pour exclure les dossiers précédant des avenants dans les données spécifiques, une variable "dossier_non_valide" leur attribue la valeur "1". Il suffit alors dans une requête sql d'exclure tous les dossiers codés 1.

le numéro de dossier suivant 11208D030002004 sera codé "1" car il est suivi d'un avenant 11208D03000200401.

Cette même opération est valable pour les dossiers avec avenant précédant un dernier avenant.


La requête SQL ci-dessous permet de générer la variable "dossier_non_valide"  :


/* création d'un table temporaire des avenants */
/* avec en variables les numéros de dossiers sans le code avenant */
/*  ainsi que le code du dernier avenant 01 ou 02 etc. */

create temporary table t1 (index(`numero de dossier sans avenant`)) select  
max(replace(`numero de dossier`,left(`numero de dossier`,15),'')) as `dernier avenant`, 
left(`numero de dossier`,15) as `numero de dossier sans avenant`  
FROM `nom de la table` 
WHERE length(`numero de dossier`) > 15 
GROUP BY `numero de dossier sans avenant` ;


/* création du champ dossier_non_valide dans la table à traiter */

ALTER TABLE  `nom de la table` ADD  `dossier_non_valide` VARCHAR( 1 ) NOT NULL ;


/* insertion d'une valeur '1' pour les dossiers précédant le dernier avenant. Un dossier peut avoir plusieurs avenants */

UPDATE `nom de la table` a left outer join t1 b 
ON a.`numero de dossier sans avenant`= b.`numero de dossier sans avenant` 
SET dossier_non_valide = '1' 
WHERE a.`numero de dossier sans avenant` = b.`numero de dossier sans avenant` 
and (length(`numero de dossier`) = 15 
or (length(`numero de dossier`) > 15 
and replace(`numero de dossier`,left(`numero de dossier`,15),'') != `dernier avenant` )) ;