Merge branch 'platal-1.0.0'
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 17 Sep 2010 12:36:31 +0000 (14:36 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 17 Sep 2010 12:36:31 +0000 (14:36 +0200)
Conflicts:
core

Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
228 files changed:
ChangeLog
Makefile
bin/cron/compliance.php
bin/cron/phones.check.php
bin/cron/profile_modification.php [new file with mode: 0755]
bin/marketPromo.php
classes/direnum.php
classes/jobterms.php [new file with mode: 0644]
classes/phone.php [new file with mode: 0644]
classes/platalglobals.php.in
classes/platallogger.php
classes/profile.php
classes/profilevisibility.php [new file with mode: 0644]
classes/user.php
classes/userfilter.php
classes/xnetpage.php
classes/xnetsession.php
classes/xorgsession.php
configs/mails.conf
configs/platal.cron.in
core
htdocs/css/.gitignore
htdocs/css/default.css
htdocs/images/.gitignore
htdocs/javascript/do_challenge_response_logged.js
htdocs/javascript/jobtermstree.js [new file with mode: 0644]
htdocs/javascript/jquery.autocomplete.js
htdocs/javascript/password.js [moved from htdocs/javascript/motdepasse.js with 61% similarity]
htdocs/javascript/profile.js
htdocs/javascript/xorg.js
include/banana/forum.inc.php
include/banana/hooks.inc.php
include/banana/moderate.inc.php
include/common.inc.php
include/emails.combobox.inc.php
include/geocoding.inc.php
include/marketing.inc.php
include/name.func.inc.php
include/profil.func.inc.php [deleted file]
include/profilefields.inc.php
include/security.inc.php
include/ufbuilder.inc.php
include/userset.inc.php
include/validations.inc.php
include/validations/entreprises.inc.php
include/validations/evts.inc.php
include/validations/names.inc.php
include/validations/surveys.inc.php
include/webservices/ax/client.inc
modules/admin.php
modules/auth/auth.inc.php
modules/axletter.php
modules/axletter/axletter.inc.php
modules/carnet.php
modules/email.php
modules/events.php
modules/forums.php
modules/fusionax.php
modules/fusionax/Adresses.sql
modules/fusionax/formation.pl
modules/fusionax/import-ax.sh
modules/googleapps.php
modules/lists.php
modules/lists/lists.inc.php
modules/lists/platal.mrc
modules/marketing.php
modules/payment.php
modules/payment/money/bplccyberplus.inc.php
modules/platal.php
modules/profile.php
modules/profile/addresses.inc.php
modules/profile/decos.inc.php
modules/profile/general.inc.php
modules/profile/groups.inc.php
modules/profile/jobs.inc.php
modules/profile/mentor.inc.php
modules/profile/page.inc.php
modules/profile/skills.inc.php
modules/register.php
modules/search.php
modules/survey/survey.inc.php
modules/xnet.php
modules/xnetevents.php
modules/xnetevents/xnetevents.inc.php
modules/xnetgrp.php
modules/xnetlists.php
plugins/function.display_education.php
plugins/function.profile.php
plugins/insert.getUserName.php
templates/admin/account_watch.tpl [new file with mode: 0644]
templates/admin/accounts.tpl
templates/admin/deces_promo.tpl
templates/admin/index.tpl
templates/admin/user.tpl
templates/admin/useredit.mail.tpl
templates/admin/validation.tpl
templates/admin/wiki.tpl
templates/axletter/letter.mail.tpl
templates/axletter/unsubscribe.tpl
templates/carnet/index.tpl
templates/carnet/mescontacts.tpl
templates/carnet/panel.tpl
templates/core/password_prompt.tpl
templates/core/vcard.tpl
templates/emails/broken.tpl
templates/emails/imap_register.tpl
templates/emails/lost.tpl
templates/emails/send.tpl
templates/events/index.tpl
templates/forums/admin.tpl
templates/fusionax/ids.tpl
templates/fusionax/import.tpl
templates/fusionax/index.tpl
templates/gadgets/ig-minifiche.tpl
templates/googleapps/index.tpl
templates/include/emploi.tpl
templates/include/field.promo.tpl
templates/include/field.select.tpl
templates/include/form.valid.edit-entreprises.tpl
templates/include/form.valid.edit-paiements.tpl
templates/include/form.valid.entreprises.tpl
templates/include/jobterms.branch.tpl [new file with mode: 0644]
templates/include/minifiche.tpl
templates/include/plview.trombi.entry.tpl
templates/include/signature.mail.tpl
templates/include/trombi.tpl
templates/lists/header_listes.tpl
templates/lists/index.tpl
templates/lists/liste.inc.tpl
templates/lists/members.tpl
templates/lists/moderate.tpl
templates/lists/moderate_mail.tpl
templates/marketing/broken.tpl
templates/marketing/index.tpl
templates/marketing/marketing.mail.tpl
templates/marketing/promo.tpl
templates/marketing/public.tpl
templates/platal/acces_smtp.tpl
templates/platal/filrss.tpl
templates/platal/index.tpl
templates/platal/password.success.tpl [moved from templates/platal/motdepasse.success.tpl with 100% similarity]
templates/platal/password.tpl [moved from templates/platal/motdepasse.tpl with 90% similarity]
templates/platal/preferences.tpl
templates/profile/deco.tpl
templates/profile/education.js.tpl
templates/profile/fiche_referent.tpl
templates/profile/general.tpl
templates/profile/groupesx.tpl
templates/profile/jobs.job.tpl
templates/profile/jobs.tpl
templates/profile/mentor.tpl
templates/profile/notification.mail.tpl [new file with mode: 0644]
templates/profile/phone.tpl
templates/profile/profile.tpl
templates/profile/referent.tpl [deleted file]
templates/register/step2.tpl
templates/register/step3.tpl
templates/search/adv.form.tpl
templates/search/adv.links.tpl
templates/search/quick.tpl
templates/search/referent.tpl [new file with mode: 0644]
templates/skin/common.bandeau.tpl
templates/skin/common.menu.tpl
templates/skin/common.title.header.tpl
templates/skin/default.tpl
templates/skin/espace.tpl
templates/skin/humlinux.tpl
templates/skin/keynote.tpl
templates/skin/linux.tpl
templates/skin/liteskin.tpl
templates/skin/nbviolet.tpl
templates/skin/newxorg.tpl
templates/skin/oldtimes.tpl
templates/skin/openweb.tpl
templates/skin/register.tpl
templates/skin/sharky.tpl
templates/skin/spectral.tpl
templates/skin/trapped.tpl
templates/stats/coupure.tpl
templates/survey/edit_question.tpl
templates/survey/edit_root.tpl
templates/survey/index.tpl
templates/survey/show_root.tpl
templates/xnet/groupes.tpl
templates/xnet/skin.tpl
templates/xnetevents/admin.tpl
templates/xnetevents/edit.tpl
templates/xnetevents/index.tpl
templates/xnetevents/subscribe.tpl
templates/xnetgrp/announce-edit.tpl
templates/xnetgrp/annuaire.tpl
templates/xnetgrp/asso.tpl
templates/xnetgrp/edit.tpl
templates/xnetgrp/form.announce.tpl
templates/xnetgrp/inscrire.tpl
templates/xnetgrp/mail.tpl
templates/xnetgrp/membres-add.tpl
templates/xnetgrp/membres-del.tpl
templates/xnetgrp/membres-edit.tpl
templates/xnetgrp/subscribe-valid.tpl
templates/xnetlists/alias-admin.tpl
templates/xnetlists/index.tpl
templates/xnetlists/sync.tpl
upgrade/0.9.11/07_emails.sql
upgrade/0.9.11/08_skins.sql
upgrade/0.9.14/04_newsletter.sql
upgrade/0.9.3/10_aliases.sql
upgrade/0.9.4/80_medals.sql
upgrade/0.9.5/30_entreprises.sql
upgrade/0.9.6/20_watch_cat.sql
upgrade/0.9.7/00_xnet.sql
upgrade/0.9.8/00_admin.sql
upgrade/1.0.1/00_job.sql [new file with mode: 0644]
upgrade/1.0.1/01_profiles.sql [new file with mode: 0644]
upgrade/1.0.1/02_accounts.sql [new file with mode: 0644]
upgrade/1.0.1/03_medals.sql [new file with mode: 0644]
upgrade/1.0.1/04_phones.sql [new file with mode: 0644]
upgrade/1.0.1/05_jobs.sql [new file with mode: 0644]
upgrade/1.0.1/06_ids.sql [new file with mode: 0644]
upgrade/1.0.1/07_ids_foreign_keys.sql [new file with mode: 0644]
upgrade/1.0.1/08_profile_foreign_keys.sql [new file with mode: 0644]
upgrade/1.0.1/alternate_subsubsectors.php [deleted file]
upgrade/1.0.1/arbo-UTF8.xml [new file with mode: 0644]
upgrade/1.0.1/connect.db.inc.php [new symlink]
upgrade/1.0.1/phone.php [new file with mode: 0755]
upgrade/1.0.1/positions_as_terms.php [new file with mode: 0755]
upgrade/1.0.1/sectors_as_terms.php [new file with mode: 0755]
upgrade/1.0.1/tokenize_job_terms.php [new file with mode: 0755]

index eeeefd6..e4754b2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,53 @@
 ================================================================================
+VERSION 1.0.1                                                         XX XX XXXX
+
+New:
+    * Profile:
+        - Sectors replaced by job terms (thesaurus)                        -Car
+
+Bug/Wish:
+    * Search:
+        - #1177: clean url in advanced search                              -Car
+
+From 1.0.0 branch:
+    * AXLetter:
+        - Fix unsubscription                                               -XEL
+
+    * Carnet:
+        - Fix inaccessible carnet/panel in case of profile update          -FRU
+        - Fix notification email                                           -JAC
+
+    * Events:
+        - Fix promotion_ml reminder                                        -FRU
+
+    * Lists:
+        - Fix inclusion of banana for achives and moderation preview       -FRU
+
+    * Profile:
+        - Fix entreprise validation                                        -JAC
+        - Fix name validation                                              -XEL
+        - Fix orange validation                                            -XEL
+        - Fix vcards                                                       -FRU
+        - Fix geocoding                                                    -JAC
+
+    * Newsletter:
+        - Fix user selection                                               -FRU
+
+    * Register:
+        - Fix calls to missing functions                                   -JAC
+
+    * Search:
+        - Fix filtering by promotion                                       -XEL
+        - Fix search by address                                            -XEL
+
+    * XnetGrp:
+        - Fix name in unsubscription notification                          -JAC
+        - Fix mailer sending O(n^2) mails                                  -VZA
+
+    * XnetList:
+        - Fix group directory synchronization page                         -JAC
+
+================================================================================
 VERSION 1.0.0                                                         30 06 2010
 
 New:
index bb8ae77..26f294e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -55,7 +55,7 @@ core:
 ## conf
 ##
 
-conf: spool/templates_c spool/mails_c classes/platalglobals.php configs/platal.cron htdocs/.htaccess spool/conf spool/tmp 
+conf: spool/templates_c spool/mails_c classes/platalglobals.php configs/platal.cron htdocs/.htaccess spool/conf spool/tmp
 
 spool/templates_c spool/mails_c spool/uploads spool/conf spool/tmp spool/run:
        mkdir -p $@
@@ -170,17 +170,20 @@ $(MEDAL_THUMBNAILS): $(subst /medals/thumb/,/medals/,$(@F))
 ## jquery
 ##
 JQUERY_VERSION=1.4.2
-JQUERY_PLUGINS=color
+JQUERY_PLUGINS=color form
 JQUERY_PLUGINS_PATHES=$(addprefix htdocs/javascript/jquery.,$(addsuffix .js,$(JQUERY_PLUGINS)))
 
 JQUERY_UI_VERSION=1.6
 JQUERY_UI=core tabs
 JQUERY_UI_PATHES=$(addprefix htdocs/javascript/jquery.ui.,$(addsuffix .js,$(JQUERY_UI)))
 
+JSTREE_VERSION=1.0rc2
+JSTREE_PATH=htdocs/javascript/jquery.jstree.js
+
 # TODO: jquery.autocomplete.js should rather be downloaded from an official source. The issue
 # is that the version we use is not available anymore on the Internet, and the latest version
 # we could use is not backward compatible with our current code.
-jquery: htdocs/javascript/jquery.js $(JQUERY_PLUGINS_PATHES) $(JQUERY_UI_PATHES)
+jquery: htdocs/javascript/jquery.js $(JQUERY_PLUGINS_PATHES) $(JQUERY_UI_PATHES) $(JSTREE_PATH)
 
 htdocs/javascript/jquery-$(JQUERY_VERSION).min.js: DOWNLOAD_SRC = http://jquery.com/src/$(@F)
 htdocs/javascript/jquery-$(JQUERY_VERSION).min.js:
@@ -190,7 +193,7 @@ htdocs/javascript/jquery-$(JQUERY_VERSION).min.js:
 htdocs/javascript/jquery.js: htdocs/javascript/jquery-$(JQUERY_VERSION).min.js
        ln -snf $(<F) $@
 
-$(JQUERY_PLUGINS_PATHES): DOWNLOAD_SRC = http://plugins.jquery.com/files/$(@F).txt
+$(JQUERY_PLUGINS_PATHES): DOWNLOAD_SRC = http://plugins.jquery.com/files/$(@F)_0.txt
 $(JQUERY_PLUGINS_PATHES):
        @-rm htdocs/javascript/jquery.ui*.$*.js
        @$(download)
@@ -202,6 +205,21 @@ htdocs/javascript/jquery.ui-$(JQUERY_UI_VERSION).%.js:
 $(JQUERY_UI_PATHES): htdocs/javascript/jquery.ui.%.js: htdocs/javascript/jquery.ui-$(JQUERY_UI_VERSION).%.js
        ln -snf $(<F) $@
 
+$(JSTREE_PATH):
+       rm -f htdocs/javascript/jquery.jstree-*.js
+       mkdir spool/tmp/jstree
+       wget http://jstree.googlecode.com/files/jsTree.v.$(JSTREE_VERSION).zip -O spool/tmp/jstree/jquery.jstree-$(JSTREE_VERSION).zip
+       unzip spool/tmp/jstree/jquery.jstree-$(JSTREE_VERSION).zip -d spool/tmp/jstree/
+       mv -f spool/tmp/jstree/themes/default/style.css htdocs/css/jstree.css
+       mv -f spool/tmp/jstree/themes/default/d.png htdocs/images/jstree.png
+       mv -f spool/tmp/jstree/jquery.jstree.js htdocs/javascript/jquery.jstree-$(JSTREE_VERSION).js
+       sed -i -e 's/"d\.png"/"..\/images\/jstree.png"/' htdocs/css/jstree.css
+       sed -i -e 's/"throbber\.gif"/"..\/images\/wait.gif"/' htdocs/css/jstree.css
+       sed -i -e 's/#ffffee/inherit/' htdocs/css/jstree.css
+       ln -snf jquery.jstree-$(JSTREE_VERSION).js htdocs/javascript/jquery.jstree.js
+       rm -Rf spool/tmp/jstree
+
+
 ##
 ## lists rpc
 ##
index ee23dad..fab5436 100755 (executable)
@@ -54,7 +54,7 @@ function discardExpiredSessions($userPerms, $retentionPeriod, $minimalBacklog) {
            JOIN  (SELECT  a.uid,
                           (SELECT  us.start
                              FROM  log_sessions AS us
-                            WHERE  us.uid = a.uid
+                            WHERE  us.uid = a.uid AND (us.suid IS NULL OR us.suid = 0)
                          ORDER BY  us.start DESC
                             LIMIT  {?}, 1) AS no_discard_limit
                     FROM  #x5dat#.accounts AS a
index ffea56d..92707ee 100755 (executable)
@@ -2,10 +2,9 @@
 <?php
 
 require './connect.db.inc.php';
-require_once 'profil.func.inc.php';
 
 $globals->debug = 0; // do not store backtraces
-
+// TODO: Improve this using Phone::iterate.
 
 function do_update_by_block($values)
 {
@@ -76,14 +75,15 @@ foreach ($prefixes as $i => $prefix) {
             $values = '';
             $i = 0;
             while ($phone = $res->next()) {
-                $disp = format_display_number($phone['search_tel'], $error, array('format' => $format, 'phoneprf' => $prefix));
+                $phone = new Phone(array('display' => $phone['display_tel']));
+                $phone->format(array('format' => $format, 'phoneprf' => $prefix));
                 if ($values != '') {
                     $values .= ",\n";
                 }
                 $values .= "('"   . addslashes($phone['pid']) . "', '" . addslashes($phone['link_type'])
                     . "', '" . addslashes($phone['link_id'])
                     . "', '" . addslashes($phone['tel_id']) . "', '" . addslashes($phone['tel_type'])
-                    . "', '" . addslashes($phone['search_tel']) . "', '" . addslashes($disp)
+                    . "', '" . addslashes($phone['search_tel']) . "', '" . addslashes($phone->display)
                     . "', '" . addslashes($phone['pub']) . "', '" . addslashes($phone['comment']) . "')";
                 $i++;
                 if ($i == 1000) {
diff --git a/bin/cron/profile_modification.php b/bin/cron/profile_modification.php
new file mode 100755 (executable)
index 0000000..0aa2172
--- /dev/null
@@ -0,0 +1,88 @@
+#!/usr/bin/php5 -q
+<?php
+/***************************************************************************
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  http://opensource.polytechnique.org/                                   *
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *  You should have received a copy of the GNU General Public License      *
+ *  along with this program; if not, write to the Free Software            *
+ *  Foundation, Inc.,                                                      *
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
+ ***************************************************************************/
+
+require_once 'connect.db.inc.php';
+require_once 'plmailer.php';
+global $globals;
+
+$res = XDB::iterator('SELECT  p.hrpid, pm.pid, a.full_name, pm.field, pm.oldText, pm.newText, p.sex, pd.yourself, al.alias
+                        FROM  profile_modifications AS pm
+                  INNER JOIN  accounts              AS a  ON (pm.uid = a.uid)
+                  INNER JOIN  profiles              AS p  ON (pm.pid = p.pid)
+                  INNER JOIN  profile_display       AS pd ON (pm.pid = pd.pid)
+                  INNER JOIN  account_profiles      AS ap ON (pm.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
+                  INNER JOIN  aliases               AS al ON (ap.uid = al.uid AND FIND_IN_SET(\'bestalias\', al.flags))
+                    ORDER BY  pm.pid, pm.field');
+
+$date = time();
+$values = $res->next();
+
+$pid = $values['pid'];
+$sex = ($values['sex'] == 'female') ? 1 : 0;
+$yourself = $values['yourself'];
+$alias = $values['alias'];
+$hrpid = $values['hrpid'];
+$modifications = array();
+$modifications[] = array(
+    'full_name' => $values['full_name'],
+    'field'     => $values['field'],
+    'oldText'   => $values['oldText'],
+    'newText'   => $values['newText'],
+);
+
+while ($values = $res->next()) {
+    if ($values['pid'] != $pid) {
+        $mailer = new PlMailer('profile/notification.mail.tpl');
+        $mailer->addTo($alias . '@' . $globals->mail->domain);
+        $mailer->assign('modifications', $modifications);
+        $mailer->assign('yourself', $yourself);
+        $mailer->assign('hrpid', $hrpid);
+        $mailer->assign('sex', $sex);
+        $mailer->assign('date', $date);
+        $mailer->send();
+        $modifications = array();
+    }
+    $pid = $values['pid'];
+    $sex = ($values['sex'] == 'female') ? 1 : 0;
+    $yourself = $values['yourself'];
+    $alias = $values['alias'];
+    $hrpid = $values['hrpid'];
+    $modifications[] = array(
+        'full_name' => $values['full_name'],
+        'field'     => $values['field'],
+        'oldText'   => $values['oldText'],
+        'newText'   => $values['newText'],
+    );
+}
+$mailer = new PlMailer('profile/notification.mail.tpl');
+$mailer->addTo($alias . '@' . $globals->mail->domain);
+$mailer->assign('modifications', $modifications);
+$mailer->assign('yourself', $yourself);
+$mailer->assign('hrpid', $hrpid);
+$mailer->assign('sex', $sex);
+$mailer->assign('date', $date);
+$mailer->send();
+
+XDB::execute('DELETE FROM  profile_modifications');
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+?>
index c385c1d..66f758d 100755 (executable)
@@ -6,8 +6,8 @@ require_once 'connect.db.inc.php';
 require_once 'marketing.inc.php';
 
 $opts = getopt('f:l:m:');
-if (($opts['f'] && $opts['f'] == '-') || empty($opts['f'])) { 
-    $file = 'php://stdin'; 
+if (($opts['f'] && $opts['f'] == '-') || empty($opts['f'])) {
+    $file = 'php://stdin';
 } else {
     $file = $opts['f'];
 }
index e0b485d..567f4de 100644 (file)
@@ -40,6 +40,9 @@ class DirEnum
     const EDUDEGREES     = 'educationdegrees';
     const EDUFIELDS      = 'educationfields';
 
+    const CORPS          = 'corps';
+    const CORPSRANKS     = 'corpsranks';
+
     const NATIONALITIES  = 'nationalities';
     const COUNTRIES      = 'countries';
     const ADMINAREAS     = 'adminareas';
@@ -48,20 +51,24 @@ class DirEnum
     const COMPANIES      = 'companies';
     const SECTORS        = 'sectors';
     const JOBDESCRIPTION = 'jobdescription';
+    const JOBTERMS       = 'jobterms';
 
     const NETWORKS       = 'networking';
 
+    const MEDALS         = 'medals';
+
     static private $enumerations = array();
 
     static private function init($type)
     {
-        if (S::has('__DE_' . $type)) {
+        if (Platal::globals()->cacheEnabled() && S::has('__DE_' . $type)) {
             self::$enumerations[$type] = S::v('__DE_' . $type);
         } else {
             $cls = "DE_" . ucfirst($type);
             $obj = new $cls();
             self::$enumerations[$type] = $obj;
-            if ($obj->capabilities & DirEnumeration::SAVE_IN_SESSION) {
+            if (Platal::globals()->cacheEnabled()
+                 && $obj->capabilities & DirEnumeration::SAVE_IN_SESSION) {
                 S::set('__DE_' . $type, $obj);
             }
         }
@@ -238,6 +245,9 @@ abstract class DirEnumeration
     }
     // }}}
 
+    /** Builds a list of query parts for searching @$text in @$field :
+     * field LIKE 'text%', field LIKE '% text%', field LIKE '%-text%'
+     */
     private function mkTests($field, $text)
     {
         $tests = array();
@@ -520,6 +530,32 @@ class DE_EducationFields extends DirEnumeration
 }
 // }}}
 
+// {{{ class DE_Corps
+class DE_Corps extends DirEnumeration
+{
+    protected $idfield   = 'profile_corps_enum.id';
+    protected $valfield  = 'profile_corps_enum.name';
+    protected $valfield2 = 'profile_corps_enum.abbrev';
+    protected $from      = 'profile_corps_enum';
+
+    protected $ac_unique = 'profile_corps.pid';
+    protected $ac_join   = 'INNER JOIN profile_corps ON (profile_corps.current_corpsid = profile_corps_enum.id)';
+}
+// }}}
+
+// {{{ class DE_CorpsRanks
+class DE_CorpsRanks extends DirEnumeration
+{
+    protected $idfield   = 'profile_corps_rank_enum.id';
+    protected $valfield  = 'profile_corps_rank_enum.name';
+    protected $valfield2 = 'profile_corps_rank_enum.abbrev';
+    protected $from      = 'profile_corps_rank_enum';
+
+    protected $ac_unique = 'profile_corps.pid';
+    protected $ac_join   = 'INNER JOIN profile_corps ON (profile_corps.rankid = profile_corps_rank_enum.id)';
+}
+// }}}
+
 /** GEOLOC
  */
 // {{{ class DE_Nationalities
@@ -612,6 +648,30 @@ class DE_JobDescription extends DirEnumeration
 }
 // }}}
 
+// {{{ class DE_JobTerms
+class DE_JobTerms extends DirEnumeration
+{
+    // {{{ function getAutoComplete
+    public function getAutoComplete($text)
+    {
+        $tokens = JobTerms::tokenize($text.'%');
+        if (count($tokens) == 0) {
+            return PlIteratorUtils::fromArray(array());
+        }
+        $token_join = JobTerms::token_join_query($tokens, 'e');
+        return XDB::iterator('SELECT  e.jtid AS id, e.full_name AS field, COUNT(DISTINCT p.pid) AS nb
+                                 FROM  profile_job_term_enum AS e
+                           INNER JOIN  profile_job_term_relation AS r ON (r.jtid_1 = e.jtid)
+                           INNER JOIN  profile_job_term AS p ON (r.jtid_2 = p.jtid)
+                           '.$token_join.'
+                             GROUP BY  e.jtid
+                             ORDER BY  nb DESC, field
+                                LIMIT ' . self::AUTOCOMPLETE_LIMIT);
+    }
+    // }}}
+}
+// }}}
+
 /** NETWORKING
  */
 // {{{ class DE_Networking
@@ -627,5 +687,17 @@ class DE_Networking extends DirEnumeration
 }
 // }}}
 
+/** MEDALS
+ */
+// {{{ class DE_Medals
+class DE_Medals extends DirEnumeration
+{
+    protected $from = 'profile_medal_enum';
+
+    protected $ac_join = 'INNER JOIN profile_medals ON (profile_medals.mid = profile_medal_enum.id)';
+    protected $ac_unique = 'profile_medals.pid';
+}
+// }}}
+
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
 ?>
diff --git a/classes/jobterms.php b/classes/jobterms.php
new file mode 100644 (file)
index 0000000..460b74e
--- /dev/null
@@ -0,0 +1,144 @@
+<?php
+/***************************************************************************
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  http://opensource.polytechnique.org/                                   *
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *  You should have received a copy of the GNU General Public License      *
+ *  along with this program; if not, write to the Free Software            *
+ *  Foundation, Inc.,                                                      *
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
+ ***************************************************************************/
+
+class JobTerms {
+
+    const ALL = 'all';
+    const ONLY_JOBS = 'jobs';
+    const ONLY_MENTORS = 'mentors';
+
+    static public function getSubTerms($parent_jtid, $filter = self::ALL) {
+        switch ($filter) {
+          case self::ALL:
+          default:
+            $table = '';
+            break;
+          case self::ONLY_JOBS:
+            $table = 'profile_job_term';
+            break;
+          case self::ONLY_MENTORS:
+            $table = 'profile_mentor_term';
+            break;
+        }
+        if ($table) {
+            $count = ', COUNT(DISTINCT j.pid) AS nb';
+            $join = ' INNER JOIN  profile_job_term_relation AS r2 ON (r2.jtid_1 = e.jtid)
+                      INNER JOIN  '.$table.' AS j ON (j.jtid = r2.jtid_2)';
+        } else {
+            $count = $join = '';
+        }
+        return XDB::iterator('SELECT  e.jtid, e.name, e.full_name'.$count.'
+                                FROM  profile_job_term_enum AS e
+                          INNER JOIN  profile_job_term_relation AS r ON (r.jtid_2 = e.jtid)'.$join.'
+                               WHERE  r.jtid_1 = {?} AND r.computed = "original"
+                            GROUP BY  e.jtid
+                            ORDER BY  e.name',
+                       $parent_jtid);
+    }
+
+    /**
+     * Display a JSon page containing the sub-branches of a branch in the job terms tree.
+     * @param $page the Platal page
+     * @param $filter filter helps to display only jobterms that are contained in jobs or in mentors
+     *
+     * @param Env::i('jtid') job term id of the parent branch, if none trunk will be used
+     * @param Env::v('attrfunc') the name of a javascript function that will be called when a branch
+     * is chosen
+     * @param Env::v('treeid') tree id that will be given as first argument of attrfunc function
+     * the second argument will be the chosen job term id and the third one the chosen job's full name.
+     */
+    static public function ajaxGetBranch(&$page, $filter = self::ALL) {
+        pl_content_headers('application/json');
+        $page->changeTpl('include/jobterms.branch.tpl', NO_SKIN);
+        $subTerms = self::getSubTerms(Env::v('jtid'), $filter);
+        $page->assign('subTerms', $subTerms);
+        switch ($filter) {
+          case self::ONLY_JOBS:
+            $page->assign('filter', 'camarade');
+            break;
+          case self::ONLY_MENTORS:
+            $page->assign('filter', 'mentor');
+            break;
+        }
+        $page->assign('attrfunc', Env::v('attrfunc'));
+        $page->assign('treeid', Env::v('treeid'));
+    }
+
+    static public function jsAddTree($platalpage, $domElement = '.term_tree', $treeid = '', $attrfunc = '') {
+        return '$("'.addslashes($domElement).'").jstree({
+            "core" : {"strings":{"loading":"Chargement ..."}},
+            "plugins" : ["themes","json_data"],
+            "themes" : { "url" : platal_baseurl + "css/jstree.css" },
+            "json_data" : { "ajax" : {
+                "url" : platal_baseurl + "'.addslashes($platalpage).'",
+                "data" : function(nod) {
+                    var jtid = 0;
+                    if (nod != -1) {
+                        jtid = nod.attr("id").replace(/^.*_([0-9]+)$/, "$1");
+                    }
+                    return { "jtid" : jtid, "treeid" : "'.addslashes($treeid).'", "attrfunc" : "'.addslashes($attrfunc).'" }
+                }
+            }} });';
+    }
+
+    /**
+     * Extract search token from term
+     * @param $term a utf-8 string that can contain any char
+     * @param an array of elementary tokens
+     */
+    static public function tokenize($term)
+    {
+        $term = mb_strtoupper(replace_accent($term));
+        $term = str_replace(array('/', ',', '(', ')', '"', '&', '»', '«'), ' ', $term);
+        $tokens = explode(' ', $term);
+        static $not_tokens = array('ET','AND','DE','DES','DU','D\'','OU','L\'','LA','LE','LES','PAR','AU','AUX','EN','SUR','UN','UNE','IN');
+        foreach ($tokens as &$t) {
+            $t = preg_replace(array('/^-+/','/-+$/'), '', $t);
+            if (substr($t, 1, 1) == '\'' && in_array(substr($t, 0, 2), $not_tokens)) {
+                $t = substr($t, 2);
+            }
+            if (strlen($t) == 1 || in_array($t, $not_tokens)) {
+                $t = false;
+                continue;
+            }
+        }
+        return array_filter($tokens);
+    }
+
+    /**
+     * Create the INNER JOIN query to restrict search to some job terms
+     * @param $tokens an array of the job terms to look for (LIKE comp)
+     * @param $table_alias the alias or name of the table with a jtid field to restrict
+     * @return a partial SQL query
+     */
+    static public function token_join_query(array $tokens, $table_alias) {
+        $joins = '';
+        $i = 0;
+        foreach ($tokens as $t) {
+            ++$i;
+             $joins .= ' INNER JOIN  profile_job_term_search AS s'.$i.' ON(s'.$i.'.jtid = '.$table_alias.'.jtid AND s'.$i.'.search LIKE '.XDB::escape($t).')';
+        }
+        return $joins;
+    }
+}
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+?>
diff --git a/classes/phone.php b/classes/phone.php
new file mode 100644 (file)
index 0000000..cf227ed
--- /dev/null
@@ -0,0 +1,441 @@
+<?php
+/***************************************************************************
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  http://opensource.polytechnique.org/                                   *
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *  You should have received a copy of the GNU General Public License      *
+ *  along with this program; if not, write to the Free Software            *
+ *  Foundation, Inc.,                                                      *
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
+ ***************************************************************************/
+
+/** Class Phone is meant to perform most of the access to the table profile_phones.
+ *
+ * profile_phone describes a Phone, which can be related to an Address,
+ * a Job, a Profile or a Company:
+ * - for a Profile:
+ *   - `link_type` is set to 'user'
+ *   - `link_id` is set to 0
+ *   - `pid` is set to the id of the related Profile (in profiles)
+ *
+ * - for a Company:
+ *   - `link_type` is set to 'hq'
+ *   - `link_id` is set to the id of the related Company (in profile_job_enum)
+ *   - `pid` is set to 0
+ *
+ * - for an Address (this only applies to a personal address)
+ *   - `link_type` is set to 'address'
+ *   - `link_id` is set to the related Address `id` (in profile_addresses)
+ *   - `pid` is set to the related Address `pid` (in both profiles and profile_addresses)
+ *
+ * - for a Job:
+ *   - `link_type` is set to 'pro'
+ *   - `link_id` is set to the related Job `id` (not `jobid`) (in profile_job)
+ *   - `pid` is set to the related Job `pid` (in both profiles and profile_job)
+ *
+ * Thus a Phone can be linked to a Company, a Profile, a Job, or a Profile-related Address.
+*/
+class Phone
+{
+    const TYPE_FAX    = 'fax';
+    const TYPE_FIXED  = 'fixed';
+    const TYPE_MOBILE = 'mobile';
+
+    const LINK_JOB     = 'pro';
+    const LINK_ADDRESS = 'address';
+    const LINK_PROFILE = 'user';
+    const LINK_COMPANY = 'hq';
+
+    /** The following fields, but $error, all correspond to the fields of the
+     * database table profile_phones.
+     */
+    private $id = 0;
+    private $pid = 0;
+    private $search = '';
+    private $link_type = 'user';
+    private $link_id = 0;
+    // The following fields are the fields of the form in the profile edition.
+    private $type = 'fixed';
+    public $display = '';
+    private $pub = 'private';
+    public $comment = '';
+    private $error = false;
+
+    public function __construct(array $data = array())
+    {
+        if (count($data) > 0) {
+            foreach ($data as $key => $val) {
+                $this->$key = $val;
+            }
+        }
+    }
+
+    public function linkType()
+    {
+        return $this->link_type;
+    }
+
+    public function linkId()
+    {
+        return $this->link_id;
+    }
+
+    public function id()
+    {
+        return $this->id;
+    }
+
+    public function pid()
+    {
+        return $this->pid;
+    }
+
+    public function search()
+    {
+        return $this->search;
+    }
+
+    /** Returns the unique ID of a phone.
+     * This ID will allow to link it to an address, a user or a job.
+     * The format is address_addressId_phoneId (where phoneId is the id
+     * of the phone in the list of those associated with the address).
+     */
+    public function uniqueId() {
+        return $this->link_type . '_' . $this->link_id . '_' . $this->id;
+    }
+
+    public function hasFlags($flags) {
+        return $this->hasType($flags) && $this->hasLink($flags);
+    }
+
+    /** Returns true if this phone's type matches the flags.
+     */
+    public function hasType($flags) {
+        $flags = $flags & Profile::PHONE_TYPE_ANY;
+        return (
+            ($flags == Profile::PHONE_TYPE_ANY)
+            ||
+            (($flags & Profile::PHONE_TYPE_FAX) && $this->type == self::TYPE_FAX)
+            ||
+            (($flags & Profile::PHONE_TYPE_FIXED) && $this->type == self::TYPE_FIXED)
+            ||
+            (($flags & Profile::PHONE_TYPE_MOBILE) && $this->type == self::TYPE_MOBILE)
+        );
+    }
+
+    /** User-friendly accessible version of the type.
+     */
+    public function displayType($short = false)
+    {
+        switch ($this->type) {
+          case Phone::TYPE_FIXED:
+            return $short ? 'Tél' : 'Fixe';
+          case Phone::TYPE_FAX:
+            return 'Fax';
+          case Phone::TYPE_MOBILE:
+            return $short ? 'Mob' : 'Mobile';
+          default:
+            return $this->type;
+        }
+    }
+
+    /** Returns true if this phone's link matches the flags.
+     */
+    public function hasLink($flags)
+    {
+        $flags = $flags & Profile::PHONE_LINK_ANY;
+        return (
+            ($flags == Profile::PHONE_LINK_ANY)
+            ||
+            (($flags & Profile::PHONE_LINK_COMPANY) && $this->link_type == self::LINK_COMPANY)
+            ||
+            (($flags & Profile::PHONE_LINK_JOB) && $this->link_type == self::LINK_JOB)
+            ||
+            (($flags & Profile::PHONE_LINK_ADDRESS) && $this->link_type == self::LINK_ADDRESS)
+            ||
+            (($flags & Profile::PHONE_LINK_PROFILE) && $this->link_type == self::LINK_PROFILE)
+        );
+    }
+
+    /* Properly formats the search phone, based on actual display phone.
+     *
+     * Computes a base form of the phone number with the international prefix.
+     * This number only contains digits, thus does not begin with the '+' sign.
+     * Numbers starting with 0 (or '(0)') are considered as French.
+     * This assumes that non-French numbers have their international prefix.
+     */
+    private function formatSearch()
+    {
+        $tel = trim($this->display);
+        // Number starting with "(0)" is a French number.
+        if (substr($tel, 0, 3) === '(0)') {
+            $tel = '33' . $tel;
+        }
+        // Removes all "(0)" often used as local prefix.
+        $tel = str_replace('(0)', '', $tel);
+        // Removes all non-digit chars.
+        $tel = preg_replace('/[^0-9]/', '', $tel);
+
+        if (substr($tel, 0, 2) === '00') {
+            // Removes prefix for international calls.
+            $tel = substr($tel, 2);
+        } else if (substr($tel, 0, 1) === '0') {
+            // Number starting with 0 is a French number.
+            $tel = '33' . substr($tel, 1);
+        }
+        $this->search = $tel;
+    }
+
+    // Properly formats the display phone, it requires the search phone to be already formatted.
+    private function formatDisplay($format = array())
+    {
+        $tel = $this->search;
+        $ret = '';
+        $telLength = strlen($tel);
+        // Try to find the country by trying to find a matching prefix of 1, 2 or 3 digits.
+        if ((!isset($format['phoneprf'])) || ($format['phoneprf'] == '')) {
+            $res = XDB::query('SELECT  phonePrefix AS phoneprf, phoneFormat AS format
+                                 FROM  geoloc_countries
+                                WHERE  phonePrefix = {?} OR phonePrefix = {?} OR phonePrefix = {?}
+                                LIMIT  1',
+                              substr($tel, 0, 1), substr($tel, 0, 2), substr($tel, 0, 3));
+            if ($res->numRows() == 0) {
+                // No country found, does not format more than prepending a '+' sign.
+                $this->error = true;
+                $this->display = '+' . $tel;
+                return;
+            }
+            $format = $res->fetchOneAssoc();
+        }
+        if ($format['format'] == '') {
+            // If the country does not have a phone number format, the number will be displayed
+            // as "+prefix ## ## ## ##...".
+            $format['format'] = '(+p)';
+        }
+
+        /* Formats the phone number according t the template with these rules:
+         *  - p is replaced by the international prefix,
+         *  - # is replaced by one digit,
+         *  - other chars are left intact.
+         * If the number is longer than the format, remaining digits are
+         * appended by blocks of two digits separated by spaces.
+         * The last block can have 3 digits to avoid a final single-digit block.
+         */
+        $j = 0;
+        $i = strlen($format['phoneprf']);
+        $lengthFormat = strlen($format['format']);
+        while (($i < $telLength) && ($j < $lengthFormat)) {
+            if ($format['format'][$j] == '#') {
+                $ret .= $tel[$i];
+                ++$i;
+            } else if ($format['format'][$j] == 'p') {
+                $ret .= $format['phoneprf'];
+            } else {
+                $ret .= $format['format'][$j];
+            }
+            ++$j;
+        }
+        for (; $i < $telLength - 1; $i += 2) {
+            $ret .= ' ' . substr($tel, $i, 2);
+        }
+        // Appends last left alone numbers to the last block.
+        if ($i < $telLength) {
+            $ret .= substr($tel, $i);
+        }
+        $this->display = $ret;
+    }
+
+
+    public function format($format = array())
+    {
+        if (!($this->type == Phone::TYPE_FIXED
+              || $this->type == Phone::TYPE_MOBILE
+              || $this->type == Phone::TYPE_FAX)) {
+            $this->type = Phone::TYPE_FIXED;
+        }
+        $this->formatSearch();
+        $this->formatDisplay($format);
+        return !$this->error;
+    }
+
+    public function toFormArray()
+    {
+        return array(
+            'type'    => $this->type,
+            'display' => $this->display,
+            'pub'     => $this->pub,
+            'comment' => $this->comment,
+            'error'   => $this->error
+        );
+    }
+
+    private function toString()
+    {
+        return 'type : ' . $this->type .', numéro : ' . $this->display
+            . ', commentaire : « ' . $this->comment . ' », affichage : ' . $this->pub;
+    }
+
+    private function isEmpty()
+    {
+        return (!$this->search || $this->search == '');
+    }
+
+    public function save()
+    {
+        $this->format();
+        if (!$this->isEmpty()) {
+            XDB::execute('INSERT INTO  profile_phones (pid, link_type, link_id, tel_id, tel_type,
+                                                       search_tel, display_tel, pub, comment)
+                               VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
+                         $this->pid, $this->link_type, $this->link_id, $this->id, $this->type,
+                         $this->search, $this->display, $this->pub, $this->comment);
+        }
+    }
+
+    static public function deletePhones($pid, $link_type, $link_id = null)
+    {
+        $where = '';
+        if (!is_null($link_id)) {
+            $where = XDB::format(' AND link_id = {?}', $link_id);
+        }
+        XDB::execute('DELETE FROM  profile_phones
+                            WHERE  pid = {?} AND link_type = {?}' . $where,
+                     $pid, $link_type);
+    }
+
+    /** Saves phones into the database.
+     * @param $data: an array of form formatted phones.
+     * @param $pid, $link_type, $link_id: pid, link_type and link_id concerned by the update.
+     */
+    static public function savePhones(array $data, $pid, $link_type, $link_id = null)
+    {
+        foreach ($data as $id => $value) {
+            $value['id'] = $id;
+            if (!is_null($pid)) {
+                $value['pid'] = $pid ;
+            }
+            if (!is_null($link_type)) {
+                $value['link_type'] = $link_type ;
+            }
+            if (!is_null($link_id)) {
+                $value['link_id'] = $link_id ;
+            }
+            $phone = new Phone($value);
+            $phone->save();
+        }
+    }
+
+    static private function formArrayWalk(array $data, $function, &$success = true, $requiresEmptyPhone = false)
+    {
+        $phones = array();
+        foreach ($data as $item) {
+            $phone = new Phone($item);
+            $success = ($phone->format() && $success);
+            if (!$phone->isEmpty()) {
+                $phones[] = call_user_func(array($phone, $function));
+            }
+        }
+        if (count($phones) == 0 && $requiresEmptyPhone) {
+            $phone = new Phone();
+            $phones[] = call_user_func(array($phone, $function));
+        }
+        return $phones;
+    }
+
+    // Formats an array of form phones into an array of form formatted phones.
+    static public function formatFormArray(array $data, &$success = true)
+    {
+        return self::formArrayWalk($data, 'toFormArray', $success, true);
+    }
+
+    static public function formArrayToString(array $data)
+    {
+        return implode(' ; ', self::formArrayWalk($data, 'toString'));
+    }
+
+    static public function iterate(array $pids = array(), array $link_types = array(),
+                                   array $link_ids = array(), array $pubs = array())
+    {
+        return new PhoneIterator($pids, $link_types, $link_ids, $pubs);
+    }
+}
+
+/** Iterator over a set of Phones
+ *
+ * @param $pid, $link_type, $link_id, $pub
+ *
+ * The iterator contains the phones that correspond to the value stored in the
+ * parameters' arrays.
+ */
+class PhoneIterator implements PlIterator
+{
+    private $dbiter;
+
+    public function __construct(array $pids, array $link_types, array $link_ids, array $pubs)
+    {
+        $where = array();
+        if (count($pids) != 0) {
+            $where[] = XDB::format('(pid IN {?})', $pids);
+        }
+        if (count($link_types) != 0) {
+            $where[] = XDB::format('(link_type IN {?})', $link_types);
+        }
+        if (count($link_ids) != 0) {
+            $where[] = XDB::format('(link_id IN {?})', $link_ids);
+        }
+        if (count($pubs) != 0) {
+            $where[] = XDB::format('(pub IN {?})', $pubs);
+        }
+        $sql = 'SELECT  search_tel AS search, display_tel AS display, comment, link_id,
+                        tel_type AS type, link_type, tel_id AS id, pid, pub
+                  FROM  profile_phones
+                 WHERE  ' . implode(' AND ', $where) . '
+              ORDER BY  link_id, tel_id';
+        $this->dbiter = XDB::iterator($sql);
+    }
+
+    public function next()
+    {
+        if (is_null($this->dbiter)) {
+            return null;
+        }
+        $data = $this->dbiter->next();
+        if (is_null($data)) {
+            return null;
+        }
+        return new Phone($data);
+    }
+
+    public function total()
+    {
+        return $this->dbiter->total();
+    }
+
+    public function first()
+    {
+        return $this->dbiter->first();
+    }
+
+    public function last()
+    {
+        return $this->dbiter->last();
+    }
+
+    public function value()
+    {
+        return $this->dbiter;
+    }
+}
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+?>
index 774a809..3f0085d 100644 (file)
@@ -21,6 +21,8 @@
 
 class PlatalGlobals extends PlGlobals
 {
+    const DEBUG_NOCACHE = DEBUG_USERBASE;
+
     /** The x.org version */
     public $version = '@VERSION@';
 
@@ -88,8 +90,12 @@ class PlatalGlobals extends PlGlobals
                              FROM  requests");
         $this->changeDynamicConfig(array('NbValid' => $res->fetchOneCell()));
     }
-}
 
+    public function cacheEnabled()
+    {
+        return ($this->debug & self::DEBUG_NOCACHE) == 0;
+    }
+}
 
 /******************************************************************************
  * Dynamic configuration update/edition stuff
index 3adda91..55d90fe 100644 (file)
@@ -55,7 +55,7 @@ class PlatalLogger extends PlLogger
      * @param $suid the id of the administrator who has just su'd to the user
      * @return session the session id
      */
-    private function writeSession($uid, $suid = 0)
+    private function writeSession($uid, $suid = null)
     {
         $ip      = $_SERVER['REMOTE_ADDR'];
         $host    = strtolower(gethostbyaddr($_SERVER['REMOTE_ADDR']));
@@ -71,6 +71,8 @@ class PlatalLogger extends PlLogger
             $proxy = 'proxy';
         }
 
+        $uid = ($uid == 0) ? null : $uid;
+        $suid = ($suid == 0) ? null : $suid;
         XDB::execute("INSERT INTO  log_sessions
                               SET  uid={?}, host={?}, ip={?}, forward_ip={?}, forward_host={?}, browser={?}, suid={?}, flags={?}",
                      $uid, $host, ip_to_uint($ip), ip_to_uint($forward_ip), $forward_host, $browser, $suid, $proxy);
index fe929c1..d3a1fdd 100644 (file)
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************/
 
-class ProfileVisibility
-{
-    static private $v_values = array(self::VIS_PUBLIC  => array(self::VIS_PUBLIC),
-                                     self::VIS_AX      => array(self::VIS_AX, self::VIS_PUBLIC),
-                                     self::VIS_PRIVATE => array(self::VIS_PRIVATE, self::VIS_AX, self::VIS_PUBLIC));
-
-    const VIS_PUBLIC  = 'public';
-    const VIS_AX      = 'ax';
-    const VIS_PRIVATE = 'private';
-
-    private $level;
-
-    public function __construct($level = null)
-    {
-        $this->setLevel($level);
-    }
-
-    public function setLevel($level = self::VIS_PUBLIC)
-    {
-        if ($level != null && $level != self::VIS_PRIVATE && $level != self::VIS_AX && $level != self::VIS_PUBLIC) {
-            Platal::page()->kill("Invalid visibility: " . $level);
-        }
-
-        if (!S::logged()) {
-            $level = self::VIS_PUBLIC;
-        } else if ($level == null) {
-            $level = self::VIS_PRIVATE;
-        }
-
-        if ($this->level == null || $this->level == self::VIS_PRIVATE) {
-            $this->level = $level;
-        } else if ($this->level == self::VIS_AX && $level == self::VIS_PRIVATE) {
-            return;
-        } else {
-            $this->level = self::VIS_PUBLIC;
-        }
-    }
-
-    public function level()
-    {
-        if ($this->level == null) {
-            return self::VIS_PUBLIC;
-        } else {
-            return $this->level;
-        }
-    }
-
-    public function levels()
-    {
-        return self::$v_values[$this->level()];
-    }
-
-    public function isVisible($visibility)
-    {
-        return in_array($visibility, $this->levels());
-    }
-}
-
 class Profile
 {
 
@@ -155,10 +97,12 @@ class Profile
     const FETCH_MENTOR_SECTOR  = 0x000040;
     const FETCH_MENTOR_COUNTRY = 0x000080;
     const FETCH_PHONES         = 0x000100;
+    const FETCH_JOB_TERMS      = 0x000200;
+    const FETCH_MENTOR_TERMS   = 0x000400;
 
     const FETCH_MINIFICHES   = 0x00012D; // FETCH_ADDRESSES | FETCH_EDU | FETCH_JOBS | FETCH_NETWORKING | FETCH_PHONES
 
-    const FETCH_ALL          = 0x0001FF; // OR of FETCH_*
+    const FETCH_ALL          = 0x0007FF; // OR of FETCH_*
 
     private $fetched_fields  = 0x000000;
 
@@ -198,6 +142,14 @@ class Profile
         return $this->owner;
     }
 
+    public function isActive()
+    {
+        if ($this->owner()) {
+            return $this->owner->isActive();
+        }
+        return false;
+    }
+
     public function promo()
     {
         return $this->promo;
@@ -371,14 +323,15 @@ class Profile
     public function nationalities()
     {
         $nats = array();
+        $countries = DirEnum::getOptions(DirEnum::COUNTRIES);
         if ($this->nationality1) {
-            $nats[] = $this->nationality1;
+            $nats[$this->nationality1] = $countries[$this->nationality1];
         }
         if ($this->nationality2) {
-            $nats[] = $this->nationality2;
+            $nats[$this->nationality2] = $countries[$this->nationality2];
         }
         if ($this->nationality3) {
-            $nats[] = $this->nationality3;
+            $nats[$this->nationality3] = $countries[$this->nationality3];
         }
         return $nats;
     }
@@ -470,6 +423,8 @@ class Profile
         $this->fetched_fields = $fields;
     }
 
+    /** Have we already fetched this field ?
+     */
     private function fetched($field)
     {
         if (!array_key_exists($field, ProfileField::$fields)) {
@@ -485,6 +440,9 @@ class Profile
      */
     private function getProfileField($field)
     {
+        if (!array_key_exists($field, ProfileField::$fields)) {
+            Platal::page()->kill("Invalid field: $field");
+        }
         if ($this->fetched($field)) {
             return null;
         } else {
@@ -500,6 +458,7 @@ class Profile
      */
     private function consolidateFields()
     {
+        // Link phones to addresses
         if ($this->phones != null) {
             if ($this->addresses != null) {
                 $this->addresses->addPhones($this->phones);
@@ -510,9 +469,15 @@ class Profile
             }
         }
 
+        // Link addresses to jobs
         if ($this->addresses != null && $this->jobs != null) {
             $this->jobs->addAddresses($this->addresses);
         }
+
+        // Link jobterms to jobs
+        if ($this->jobs != null && $this->jobterms != null) {
+            $this->jobs->addJobTerms($this->jobterms);
+        }
     }
 
     /* Photo
@@ -723,6 +688,15 @@ class Profile
         return array_pop($job);
     }
 
+    /** JobTerms
+     */
+    private $jobterms = null;
+    public function setJobTerms(ProfileJobTerms $jobterms)
+    {
+        $this->jobterms = $jobterms;
+        $this->consolidateFields();
+    }
+
     /* Mentoring
      */
     private $mentor_sectors = null;
@@ -763,6 +737,34 @@ class Profile
         }
     }
 
+    /** List of job terms to specify mentoring */
+    private $mentor_terms = null;
+    /**
+     * set job terms to specify mentoring
+     * @param $terms a ProfileMentoringTerms object listing terms only for this profile
+     */
+    public function setMentoringTerms(ProfileMentoringTerms $terms)
+    {
+        $this->mentor_terms = $terms;
+    }
+    /**
+     * get all job terms that specify mentoring
+     * @return an array of JobTerms objects
+     */
+    public function getMentoringTerms()
+    {
+        if ($this->mentor_terms == null && !$this->fetched(self::FETCH_MENTOR_TERMS)) {
+            $this->setMentoringTerms($this->getProfileField(self::FETCH_MENTOR_TERMS));
+        }
+
+        if ($this->mentor_terms == null) {
+            return array();
+        } else {
+            return $this->mentor_terms->get();
+        }
+    }
+
+
     /* Binets
      */
     public function getBinets()
@@ -850,8 +852,9 @@ class Profile
                                      IF( {?}, pn_n.name, NULL) AS nickname,
                                      IF(pn_uf.name IS NULL, pn_f.name, pn_uf.name) AS firstname_ordinary,
                                      IF(pn_ul.name IS NULL, pn_l.name, pn_ul.name) AS lastname_ordinary,
-                                     pd.yourself, pd.promo, pd.short_name, pd.directory_name AS full_name,
-                                     pd.directory_name, IF(pp.pub IN {?}, pp.display_tel, NULL) AS mobile,
+                                     pd.yourself, pd.promo, pd.short_name, pd.public_name AS full_name,
+                                     pd.directory_name, pd.public_name, pd.private_name,
+                                     IF(pp.pub IN {?}, pp.display_tel, NULL) AS mobile,
                                      (ph.pub IN {?} AND ph.attach IS NOT NULL) AS has_photo,
                                      ph.x AS photo_width, ph.y AS photo_height,
                                      p.last_change < DATE_SUB(NOW(), INTERVAL 365 DAY) AS is_old,
@@ -990,6 +993,26 @@ class Profile
             || $name == self::DN_SHORT || $name == self::DN_SORT;
     }
 
+    /** Returns the closest "accounts only" name type for $name
+     */
+    public static function getAccountEquivalentName($name)
+    {
+        switch ($name)
+        {
+        case self::DN_DIRECTORY:
+        case self::DN_SORT:
+            return 'directory_name';
+        case self::DN_FULL:
+        case self::DN_PUBLIC:
+            return 'full_name';
+        case self::DN_PRIVATE:
+        case self::DN_SHORT:
+        case self::DN_YOURSELF:
+        default:
+            return 'display_name';
+        }
+    }
+
     public static function getNameTypeId($type, $for_sql = false)
     {
         if (!S::has('name_types')) {
@@ -1038,7 +1061,7 @@ class Profile
 
     /** The school identifier consists of 6 digits. The first 3 represent the
      * promotion entry year. The last 3 indicate the student's rank.
-     * 
+     *
      * Our identifier consists of 8 digits and both half have the same role.
      * This enables us to deal with bigger promotions and with a wider range
      * of promotions.
@@ -1094,6 +1117,8 @@ class ProfileIterator implements PlIterator
     private $fields;
     private $visibility;
 
+    const FETCH_ALL    = 0x000033F; // FETCH_ADDRESSES | FETCH_CORPS | FETCH_EDU | FETCH_JOBS | FETCH_MEDALS | FETCH_NETWORKING | FETCH_PHONES | FETCH_JOB_TERMS
+
     public function __construct(PlIterator $it, array $pids, $fields = 0x0000, ProfileVisibility $visibility = null)
     {
         require_once 'profilefields.inc.php';
@@ -1112,39 +1137,12 @@ class ProfileIterator implements PlIterator
         $callbacks[0] = PlIteratorUtils::arrayValueCallback('pid');
         $cb = PlIteratorUtils::objectPropertyCallback('pid');
 
-        if ($fields & Profile::FETCH_ADDRESSES) {
-            $callbacks[Profile::FETCH_ADDRESSES] = $cb;
-            $subits[Profile::FETCH_ADDRESSES] = new ProfileFieldIterator('ProfileAddresses', $pids, $visibility);
-        }
-
-        if ($fields & Profile::FETCH_CORPS) {
-            $callbacks[Profile::FETCH_CORPS] = $cb;
-            $subits[Profile::FETCH_CORPS] = new ProfileFieldIterator('ProfileCorps', $pids, $visibility);
-        }
-
-        if ($fields & Profile::FETCH_EDU) {
-            $callbacks[Profile::FETCH_EDU] = $cb;
-            $subits[Profile::FETCH_EDU] = new ProfileFieldIterator('ProfileEducation', $pids, $visibility);
-        }
-
-        if ($fields & Profile::FETCH_JOBS) {
-            $callbacks[Profile::FETCH_JOBS] = $cb;
-            $subits[Profile::FETCH_JOBS] = new ProfileFieldIterator('ProfileJobs', $pids, $visibility);
-        }
-
-        if ($fields & Profile::FETCH_MEDALS) {
-            $callbacks[Profile::FETCH_MEDALS] = $cb;
-            $subits[Profile::FETCH_MEDALS] = new ProfileFieldIterator('ProfileMedals', $pids, $visibility);
-        }
-
-        if ($fields & Profile::FETCH_NETWORKING) {
-            $callbacks[Profile::FETCH_NETWORKING] = $cb;
-            $subits[Profile::FETCH_NETWORKING] = new ProfileFieldIterator('ProfileNetworking', $pids, $visibility);
-        }
-
-        if ($fields & Profile::FETCH_PHONES) {
-            $callbacks[Profile::FETCH_PHONES] = $cb;
-            $subits[Profile::FETCH_PHONES] = new ProfileFieldIterator('ProfilePhones', $pids, $visibility);
+        $fields = $fields & self::FETCH_ALL;
+        for ($field = 1; $field < $fields; $field *= 2) {
+            if (($fields & $field) ) {
+                $callbacks[$field] = $cb;
+                $subits[$field] = new ProfileFieldIterator($field, $pids, $visibility);
+            }
         }
 
         $this->iterator = PlIteratorUtils::parallelIterator($subits, $callbacks, 0);
@@ -1170,6 +1168,9 @@ class ProfileIterator implements PlIterator
         if ($this->hasData(Profile::FETCH_JOBS, $vals)) {
             $pf->setJobs($vals[Profile::FETCH_JOBS]);
         }
+        if ($this->hasData(Profile::FETCH_JOB_TERMS, $vals)) {
+            $pf->setJobTerms($vals[Profile::FETCH_JOB_TERMS]);
+        }
 
         if ($this->hasData(Profile::FETCH_CORPS, $vals)) {
             $pf->setCorps($vals[Profile::FETCH_CORPS]);
diff --git a/classes/profilevisibility.php b/classes/profilevisibility.php
new file mode 100644 (file)
index 0000000..4b91fcc
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+/***************************************************************************
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  http://opensource.polytechnique.org/                                   *
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *  You should have received a copy of the GNU General Public License      *
+ *  along with this program; if not, write to the Free Software            *
+ *  Foundation, Inc.,                                                      *
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
+ ***************************************************************************/
+
+class ProfileVisibility
+{
+    static private $v_values = array(self::VIS_PUBLIC  => array(self::VIS_PUBLIC),
+                                     self::VIS_AX      => array(self::VIS_AX, self::VIS_PUBLIC),
+                                     self::VIS_PRIVATE => array(self::VIS_PRIVATE, self::VIS_AX, self::VIS_PUBLIC));
+
+    const VIS_PUBLIC  = 'public';
+    const VIS_AX      = 'ax';
+    const VIS_PRIVATE = 'private';
+
+    private $level;
+
+    public function __construct($level = null)
+    {
+        $this->setLevel($level);
+    }
+
+    public function setLevel($level = self::VIS_PUBLIC)
+    {
+        if ($level != null && $level != self::VIS_PRIVATE && $level != self::VIS_AX && $level != self::VIS_PUBLIC) {
+            Platal::page()->kill("Invalid visibility: " . $level);
+        }
+
+        // Unlogged or not allowed to view directory_ax or requesting public
+        // => public view
+        if (!S::logged() || !S::user()->checkPerms('directory_ax') || $level == self::VIS_PUBLIC) {
+            $level = self::VIS_PUBLIC;
+        // Not allowed to view directory_private or requesting ax
+        } else if (!S::user()->checkPerms('directory_private') || $level == self::VIS_AX) {
+            $level = self::VIS_AX;
+        } else {
+            $level = self::VIS_PRIVATE;
+        }
+
+        if ($this->level == null || $this->level == self::VIS_PRIVATE) {
+            $this->level = $level;
+        } else if ($this->level == self::VIS_AX && $level == self::VIS_PRIVATE) {
+            return;
+        } else {
+            $this->level = self::VIS_PUBLIC;
+        }
+    }
+
+    public function level()
+    {
+        if ($this->level == null) {
+            return self::VIS_PUBLIC;
+        } else {
+            return $this->level;
+        }
+    }
+
+    public function levels()
+    {
+        return self::$v_values[$this->level()];
+    }
+
+    public function isVisible($visibility)
+    {
+        return in_array($visibility, $this->levels());
+    }
+}
+
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+?>
index f888865..8551cbd 100644 (file)
 
 class User extends PlUser
 {
+    const PERM_GROUPS            = 'groups';
+    const PERM_MAIL              = 'mail';
+    const PERM_DIRECTORY_AX      = 'directory_ax';
+    const PERM_DIRECTORY_PRIVATE = 'directory_private';
+    const PERM_EDIT_DIRECTORY    = 'edit_directory';
+    const PERM_FORUMS            = 'forums';
+    const PERM_LISTS             = 'lists';
+    const PERM_PAYMENT           = 'payment';
+
     private $_profile_fetched = false;
     private $_profile = null;
 
@@ -91,16 +100,20 @@ class User extends PlUser
                 return $res->fetchOneCell();
             }
 
-            /** TODO: implements this by inspecting the profile.
             if (preg_match('/^(.*)\.([0-9]{4})$/u', $mbox, $matches)) {
                 $res = XDB::query('SELECT  a.uid
-                                     FROM  accounts AS a
-                               INNER JOIN  aliases AS al ON (al.id = a.uid AND al.type IN ('alias', 'a_vie'))
-                                    WHERE  al.alias = {?} AND a.promo = {?}', $matches[1], $matches[2]);
+                                     FROM  accounts          AS a
+                               INNER JOIN  aliases           AS al ON (al.uid = a.uid AND al.type IN (\'alias\', \'a_vie\'))
+                               INNER JOIN  account_profiles  AS ap ON (a.uid = ap.uid AND FIND_IN_SET(\'owner\', ap.perms))
+                               INNER JOIN  profiles          AS p  ON (p.pid = ap.pid)
+                               INNER JOIN  profile_education AS pe ON (p.pid = pe.pid AND FIND_IN_SET(\'primary\', pe.flags))
+                                    WHERE  p.hrpid = {?} OR ((pe.entry_year <= {?} AND pe.grad_year >= {?}) AND al.alias = {?})
+                                 GROUP BY  a.uid',
+                                   $matches[0], $matches[2], $matches[2], $matches[1]);
                 if ($res->numRows() == 1) {
                     return $res->fetchOneCell();
                 }
-            }*/
+            }
 
             throw new UserNotFoundException();
         }
@@ -175,17 +188,18 @@ class User extends PlUser
         $uids = array_map(array('XDB', 'escape'), $uids);
 
         return XDB::iterator('SELECT  a.uid, a.hruid, a.registration_date, ah.alias AS homonym,
-                                      IF (af.alias IS NULL, a.email, CONCAT(af.alias, \'@' . $globals->mail->domain . '\')) AS forlife,
-                                      CONCAT(af.alias, \'@' . $globals->mail->domain2 . '\') AS forlife_alternate,
-                                      IF (ab.alias IS NULL, a.email, CONCAT(ab.alias, \'@' . $globals->mail->domain . '\')) AS bestalias,
-                                      CONCAT(ab.alias, \'@' . $globals->mail->domain2 . '\') AS bestalias_alternate,
-                                      a.full_name, a.display_name, a.sex = \'female\' AS gender,
-                                      IF(a.state = \'active\', at.perms, \'\') AS perms,
-                                      a.email_format, a.is_admin, a.state, a.type, a.skin,
+                                      IF (af.alias IS NULL, NULL, CONCAT(af.alias, \'@' . $globals->mail->domain . '\')) AS forlife,
+                                      IF (af.alias IS NULL, NULL, CONCAT(af.alias, \'@' . $globals->mail->domain2 . '\')) AS forlife_alternate,
+                                      IF (ab.alias IS NULL, NULL, CONCAT(ab.alias, \'@' . $globals->mail->domain . '\')) AS bestalias,
+                                      IF (ab.alias IS NULL, NULL, CONCAT(ab.alias, \'@' . $globals->mail->domain2 . '\')) AS bestalias_alternate,
+                                      a.email, a.full_name, a.directory_name, a.display_name, a.sex = \'female\' AS gender,
+                                      IF(a.state = \'active\', CONCAT(at.perms, \',\', IF(a.user_perms IS NULL, \'\', a.user_perms)), \'\') AS perms,
+                                      a.user_perms, a.email_format, a.is_admin, a.state, a.type, a.skin,
                                       FIND_IN_SET(\'watch\', a.flags) AS watch, a.comment,
-                                      a.weak_password IS NOT NULL AS weak_access,
-                                      a.token IS NOT NULL AS token_access,
-                                      (e.email IS NULL AND NOT FIND_IN_SET(\'googleapps\', eo.storage)) AND a.state != \'pending\' AS lost
+                                      a.weak_password IS NOT NULL AS weak_access, g.g_account_name IS NOT NULL AS googleapps,
+                                      a.token IS NOT NULL AS token_access, a.token, a.last_version,
+                                      (e.email IS NULL AND NOT FIND_IN_SET(\'googleapps\', eo.storage)) AND a.state != \'pending\' AS lost,
+                                      UNIX_TIMESTAMP(s.start) AS lastlogin, s.host, UNIX_TIMESTAMP(fp.last_seen) AS banana_last
                                       ' . $fields . '
                                 FROM  accounts AS a
                           INNER JOIN  account_types AS at ON (at.type = a.type)
@@ -194,6 +208,10 @@ class User extends PlUser
                            LEFT JOIN  aliases AS ah ON (ah.uid = a.uid AND ah.type = \'homonyme\')
                            LEFT JOIN  emails AS e ON (e.uid = a.uid AND e.flags = \'active\')
                            LEFT JOIN  email_options AS eo ON (eo.uid = a.uid)
+                           LEFT JOIN  gapps_accounts AS g ON (a.uid = g.l_userid AND g.g_status = \'active\')
+                           LEFT JOIN  log_last_sessions AS ls ON (ls.uid = a.uid)
+                           LEFT JOIN  log_sessions AS s ON (s.id = ls.id)
+                           LEFT JOIN  forum_profiles AS fp ON (fp.uid = a.uid)
                                    ' . $joins . '
                                WHERE  a.uid IN (' . implode(', ', $uids) . ')
                             GROUP BY  a.uid
@@ -212,35 +230,6 @@ class User extends PlUser
         $this->fillFromArray(self::loadMainFieldsFromUIDs(array($this->uid))->next());
     }
 
-    // Specialization of the fillFromArray method, to implement hacks to enable
-    // lazy loading of user's main properties from the session.
-    // TODO(vzanotti): remove the conversion hacks once the old codebase will
-    // stop being used actively.
-    protected function fillFromArray(array $values)
-    {
-        // Also, if display_name and full_name are not known, but the user's
-        // surname and last name are, we can construct the former two.
-        if (isset($values['prenom']) && isset($values['nom'])) {
-            if (!isset($values['display_name'])) {
-                $values['display_name'] = ($values['prenom'] ? $values['prenom'] : $values['nom']);
-            }
-            if (!isset($values['full_name'])) {
-                $values['full_name'] = $values['prenom'] . ' ' . $values['nom'];
-            }
-        }
-
-        // We also need to convert the gender (usually named "femme"), and the
-        // email format parameter (valued "texte" instead of "text").
-        if (isset($values['femme'])) {
-            $values['gender'] = (bool) $values['femme'];
-        }
-        if (isset($values['mail_fmt'])) {
-            $values['email_format'] = $values['mail_fmt'];
-        }
-
-        parent::fillFromArray($values);
-    }
-
     // Specialization of the buildPerms method
     // This function build 'generic' permissions for the user. It does not take
     // into account page specific permissions (e.g X.net group permissions)
@@ -264,6 +253,11 @@ class User extends PlUser
                                    WHERE  a.uid = {?}', $this->id());
     }
 
+    public function isActive()
+    {
+        return $this->state == 'active';
+    }
+
     /** Overload PlUser::promo(): there no promo defined for a user in the current
      * schema. The promo is a field from the profile.
      */
@@ -291,11 +285,35 @@ class User extends PlUser
         return $this->profile()->lastName();
     }
 
+    public function displayName()
+    {
+        if (!$this->hasProfile()) {
+            return $this->display_name;
+        }
+        return $this->profile()->yourself;
+    }
+
+    public function fullName($with_promo = false)
+    {
+        if (!$this->hasProfile()) {
+            return $this->full_name;
+        }
+        return $this->profile()->fullName($with_promo);
+    }
+
+    public function directoryName()
+    {
+        if (!$this->hasProfile()) {
+            return $this->directory_name;
+        }
+        return $this->profile()->directory_name;
+    }
+
     /** Return the main profile attached with this account if any.
      */
-    public function profile()
+    public function profile($forceFetch = false)
     {
-        if (!$this->_profile_fetched) {
+        if (!$this->_profile_fetched || $forceFetch) {
             $this->_profile_fetched = true;
             $this->_profile = Profile::get($this);
         }
@@ -380,32 +398,58 @@ class User extends PlUser
      */
     private function fetchMarketingData()
     {
-        if (isset($this->last_known_email)) {
+        if (isset($this->pending_registration_date)) {
             return;
         }
-        // FIXME: We should fetch the last known email as well as the pending registration email (they aren't the same !)
-        $infos = XDB::fetchOneAssoc('SELECT  IF (MAX(m.last) > p.relance, MAX(m.last), p.relance) AS last_relance,
-                                             p.email AS last_known_email
-                                       FROM  register_pending AS p
-                                  LEFT JOIN  register_marketing AS m ON (p.uid = m.uid)
-                                      WHERE  p.uid = {?}
-                                   GROUP BY  p.uid', $this->id());
-        if (!$infos) {
-            $infos = array('last_relance' => null, 'last_known_email' => null);
+        $infos = XDB::fetchOneAssoc('SELECT  rp.date AS pending_registration_date, rp.email AS pending_registration_email,
+                                             rm.last AS last_marketing_date, rm.email AS last_marketing_email
+                                       FROM  accounts           AS a
+                                  LEFT JOIN  register_pending   AS rp ON (rp.uid = a.uid)
+                                  LEFT JOIN  register_marketing AS rm ON (rm.uid = a.uid AND rm.last != \'0000-00-00\')
+                                      WHERE  a.uid = {?}
+                                   ORDER BY  rm.last DESC', $this->id());
+        if (is_null($infos)) {
+            $infos = array(
+                'pending_registration_date'  => null,
+                'pending_registration_email' => null,
+                'last_marketing_date'        => null,
+                'last_marketing_email'       => null
+            );
         }
         $this->fillFromArray($infos);
     }
 
-    public function lastMarketingRelance()
+    public function pendingRegistrationDate()
     {
         $this->fetchMarketingData();
-        return $this->last_relance;
+        return $this->pending_registration_date;
+    }
+
+    public function pendingRegistrationEmail()
+    {
+        $this->fetchMarketingData();
+        return $this->pending_registration_email;
+    }
+
+    public function lastMarketingDate()
+    {
+        $this->fetchMarketingData();
+        return $this->last_marketing_date;
+    }
+
+    public function lastMarketingEmail()
+    {
+        $this->fetchMarketingData();
+        return $this->last_marketing_email;
     }
 
     public function lastKnownEmail()
     {
         $this->fetchMarketingData();
-        return $this->last_known_email;
+        if ($this->pending_registration_email > $this->last_marketing_date) {
+            return $this->pending_registration_email;
+        }
+        return $this->last_marketing_email;
     }
 
 
@@ -422,7 +466,6 @@ class User extends PlUser
         $this->email_format = $format;
     }
 
-
     /** Get watch informations
      */
     private function fetchWatchData()
@@ -584,13 +627,15 @@ class User extends PlUser
         }
 
         if ($clearAll) {
+            global $globals;
+
             $groupIds = XDB::iterator('SELECT  asso_id
                                          FROM  group_members
                                         WHERE  uid = {?}',
                                       $this->id());
             while ($groupId = $groupIds->next()) {
                 $group = Group::get($groupId);
-                if ($group->notif_unsub) {
+                if (!empty($group) && $group->notif_unsub) {
                     $mailer = new PlMailer('xnetgrp/unsubscription-notif.mail.tpl');
                     $admins = $group->iterAdmins();
                     while ($admin = $admins->next()) {
@@ -603,17 +648,22 @@ class User extends PlUser
                 }
             }
 
-            $tables = array('account_auth_openid', 'gannounce_read', 'contacts',
-                            'email_options', 'gemail_send_save', 'emails',
-                            'forum_innd', 'gforum_profiles', 'forum_subs',
-                            'gapps_accounts', 'ggapps_nicknames', 'group_announces_read',
-                            'group_members', 'ggroup_member_sub_requests', 'reminder', 'requests',
+            $tables = array('account_auth_openid', 'announce_read', 'contacts',
+                            'email_options', 'email_send_save', 'emails',
+                            'forum_innd', 'forum_profiles', 'forum_subs',
+                            'group_announces_read', 'group_members',
+                            'group_member_sub_requests', 'reminder', 'requests',
                             'requests_hidden');
-
             foreach ($tables as $t) {
                 XDB::execute('DELETE FROM  ' . $t . '
                                     WHERE  uid = {?}',
-                    $this->id());
+                             $this->id());
+            }
+
+            foreach (array('gapps_accounts', 'gapps_nicknames') as $t) {
+                XDB::execute('DELETE FROM  ' . $t . '
+                                    WHERE  l_userid = {?}',
+                             $this->id());
             }
 
             XDB::execute("UPDATE  accounts
@@ -634,74 +684,102 @@ class User extends PlUser
             if ($globals->mailstorage->googleapps_domain) {
                 require_once 'googleapps.inc.php';
 
-                if (GoogleAppsAccount::account_status($uid)) {
-                    $account = new GoogleAppsAccount($user);
+                if (GoogleAppsAccount::account_status($this->id())) {
+                    $account = new GoogleAppsAccount($this);
                     $account->suspend();
                 }
             }
         }
 
         $mmlist = new MMList($this);
-        $mmlist->kill($alias, $clearAll);
+        $mmlist->kill($this->hruid, $clearAll);
     }
 
     // Merge all infos in other user and then clean this one
     public function mergeIn(User &$newuser) {
-        if ($this->profile() || !$newuser->id()) {
-            // don't disable user with profile in this way
+        if ($this->profile()) {
+            // Don't disable user with profile in this way.
+            global $globals;
+            Platal::page()->trigError('Impossible de fusionner les comptes ' . $this->hruid . ' et ' . $newuser->hruid .
+                                      '. Contacte support@' . $globals->mail->domain . '.');
             return false;
         }
-        // TODO check all tables to see if there is no other info to use
 
-        $newemail = $newuser->forlifeEmail();
-        if (!$newemail && $this->forlifeEmail()) {
-            XDB::execute("UPDATE  accounts
-                             SET  email = {?}
-                           WHERE  uid = {?} AND email IS NULL",
-                    $this->forlifeEmail(), $newuser->id());
-            $newemail = $this->forlifeEmail();
-        }
-
-        // change email used in aliases and mailing lists
-        if ($this->forlifeEmail() != $newemail && $this->forlifeEmail()) {
-            // virtual_redirect (email aliases)
-            XDB::execute("DELETE  v1
-                            FROM  virtual_redirect AS v1, virtual_redirect AS v2
-                           WHERE  v1.vid = v2.vid AND v1.redirect = {?} AND v2.redirect = {?}",
-                    $this->forlifeEmail(), $newemail);
-            XDB::execute("UPDATE  virtual_redirect
-                             SET  redirect = {?}
-                           WHERE  redirect = {?}",
-                    $newemail, $this->forlifeEmail());
-
-            // require_once 'mmlist.php';
-
-            // group mailing lists
-            $group_domains = XDB::fetchColumn("SELECT  g.mail_domain
-                          FROM  groups AS g
-                    INNER JOIN  group_members AS gm ON(g.id = gm.asso_id)
-                         WHERE  g.mail_domain != '' AND gm.uid = {?}",
-                    $this->id());
-            foreach ($group_domains as $mail_domain) {
-                $mmlist = new MMList($this, $mail_domain);
-                $mmlist->replace_email_in_all($this->forlifeEmail(), $newmail);
+        if ($this->forlifeEmail()) {
+            // If the new user is not registered and does not have already an email address,
+            // we need to give him the old user's email address if he has any.
+            if (!$newuser->perms) {
+                XDB::execute('UPDATE  accounts
+                                 SET  email = {?}
+                               WHERE  uid = {?} AND email IS NULL',
+                             $this->forlifeEmail(), $newuser->id());
             }
-            // main domain lists
-            $mmlist = new MMList($this);
-            $mmlist->replace_email_in_all($this->forlifeEmail(), $newmail);
-        }
-
-        // group_members (xnet group membership)
-        XDB::execute("DELETE  g1
-                        FROM  group_members AS g1, group_members AS g2
-                       WHERE  g1.uid = {?} AND g2.uid = {?} AND g1.asso_id = g2.asso_id",
-                    $this->id(), $newuser->id());
-        XDB::execute("UPDATE  group_members
-                         SET  uid = {?}
-                       WHERE  uid = {?}",
-                    $this->id(), $newuser->id());
+            $newemail = XDB::fetchOneCell('SELECT  email
+                                             FROM  accounts
+                                            WHERE  uid = {?}',
+                                          $newuser->id());
+
+            // Change email used in aliases and mailing lists.
+            if ($this->forlifeEmail() != $newemail) {
+                // virtual_redirect (email aliases)
+                XDB::execute('DELETE  v1
+                                FROM  virtual_redirect AS v1, virtual_redirect AS v2
+                               WHERE  v1.vid = v2.vid AND v1.redirect = {?} AND v2.redirect = {?}',
+                             $this->forlifeEmail(), $newemail);
+                XDB::execute('UPDATE  virtual_redirect
+                                 SET  redirect = {?}
+                               WHERE  redirect = {?}',
+                             $newemail, $this->forlifeEmail());
+
+                // group mailing lists
+                $group_domains = XDB::fetchColumn('SELECT  g.mail_domain
+                                                     FROM  groups        AS g
+                                               INNER JOIN  group_members AS gm ON(g.id = gm.asso_id)
+                                                    WHERE  g.mail_domain != \'\' AND gm.uid = {?}',
+                                                  $this->id());
+                foreach ($group_domains as $mail_domain) {
+                    $mmlist = new MMList($this, $mail_domain);
+                    $mmlist->replace_email_in_all($this->forlifeEmail(), $newemail);
+                }
+                // main domain lists
+                $mmlist = new MMList($this);
+                $mmlist->replace_email_in_all($this->forlifeEmail(), $newemail);
+            }
+        }
 
-        XDB::execute("DELETE FROM accounts WHERE uid = {?}", $this->id());
+        // Updates user in following tables.
+        foreach (array('group_announces', 'payment_transactions', 'log_sessions', 'group_events') as $table) {
+            XDB::execute('UPDATE  ' . $table . '
+                             SET  uid = {?}
+                           WHERE  uid = {?}',
+                         $newuser->id(), $this->id());
+        }
+
+        // Merges user in following tables, ie updates when possible, then deletes remaining occurences of the old user.
+        foreach (array('group_announces_read', 'group_event_participants', 'group_member_sub_requests', 'group_members') as $table) {
+            XDB::execute('UPDATE IGNORE  ' . $table . '
+                                    SET  uid = {?}
+                                  WHERE  uid = {?}',
+                         $newuser->id(), $this->id());
+            XDB::execute('DELETE FROM  ' . $table . '
+                                WHERE  uid = {?}',
+                         $this->id());
+        }
+
+        // Eventually updates last session id and deletes old user's accounts entry.
+        $lastSession = XDB::fetchOneCell('SELECT  id
+                                            FROM  log_sessions
+                                           WHERE  uid = {?}
+                                        ORDER BY  start DESC
+                                           LIMIT  1',
+                                         $newuser->id());
+        XDB::execute('UPDATE  log_last_sessions
+                         SET  id = {?}
+                       WHERE  uid = {?}',
+                     $newuser->id());
+        XDB::execute('DELETE FROM  accounts
+                            WHERE  uid = {?}',
+                     $this->id());
 
         return true;
     }
@@ -714,6 +792,11 @@ class User extends PlUser
         if ($is_admin) {
             $flags->addFlag(PERMS_ADMIN);
         }
+
+        // Access to private directory implies access to 'less'-private version.
+        if ($flags->hasFlag('directory_private')) {
+            $flags->addFlag('directory_ax');
+        }
         return $flags;
     }
 
index 058def4..f78635b 100644 (file)
@@ -52,6 +52,25 @@ class UFC_HasProfile implements UserFilterCondition
 }
 // }}}
 
+// {{{ class UFC_AccountType
+/** Filters users who have the given account types
+ */
+class UFC_AccountType implements UserFilterCondition
+{
+    private $types;
+
+    public function __construct()
+    {
+        $this->types = pl_flatten(func_get_args());
+    }
+
+    public function buildCondition(PlFilter &$uf)
+    {
+        $uf->requireAccounts();
+        return XDB::format('a.type IN {?}', $this->types);
+    }
+}
+
 // {{{ class UFC_Hruid
 /** Filters users based on their hruid
  * @param $val Either an hruid, or a list of those
@@ -129,7 +148,7 @@ class UFC_Comment implements UserFilterCondition
     public function buildCondition(PlFilter &$uf)
     {
         $uf->requireProfiles();
-        return 'p.freetext ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->text);
+        return $uf->getVisibilityCondition('p.freetext_pub') . ' AND p.freetext ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->text);
     }
 }
 // }}}
@@ -557,6 +576,10 @@ class UFC_Group implements UserFilterCondition
 
     public function buildCondition(PlFilter &$uf)
     {
+        // Groups have AX visibility.
+        if ($uf->getVisibilityLevel() == ProfileVisibility::VIS_PUBLIC) {
+            return PlFilter::COND_TRUE;
+        }
         $sub = $uf->addGroupFilter($this->group);
         $where = 'gpm' . $sub . '.perms IS NOT NULL';
         if ($this->anim) {
@@ -582,6 +605,10 @@ class UFC_Binet implements UserFilterCondition
 
     public function buildCondition(PlFilter &$uf)
     {
+        // Binets are private.
+        if ($uf->getVisibilityLevel() != ProfileVisibility::VIS_PRIVATE) {
+            return PlFilter::COND_TRUE;
+        }
         $sub = $uf->addBinetsFilter();
         return XDB::format($sub . '.binet_id IN {?}', $this->val);
     }
@@ -603,6 +630,10 @@ class UFC_Section implements UserFilterCondition
 
     public function buildCondition(PlFilter &$uf)
     {
+        // Sections are private.
+        if ($uf->getVisibilityLevel() != ProfileVisibility::VIS_PRIVATE) {
+            return PlFilter::COND_TRUE;
+        }
         $uf->requireProfiles();
         return XDB::format('p.section IN {?}', $this->section);
     }
@@ -707,9 +738,10 @@ abstract class UFC_Address implements UserFilterCondition
         $this->flags = $flags;
     }
 
-    protected function initConds($sub)
+    protected function initConds($sub, $vis_cond)
     {
-        $conds = array();
+        $conds = array($vis_cond);
+
         $types = array();
         foreach (self::$typetexts as $flag => $type) {
             if ($flag & $this->type) {
@@ -766,7 +798,7 @@ class UFC_AddressText extends UFC_Address
     public function buildCondition(PlFilter &$uf)
     {
         $sub = $uf->addAddressFilter();
-        $conds = $this->initConds($sub);
+        $conds = $this->initConds($sub, $uf->getVisibilityCondition($sub . '.pub'));
         if ($this->text != null) {
             $conds[] = $sub . '.text' . $this->mkMatch($this->text);
         }
@@ -823,7 +855,7 @@ class UFC_AddressField extends UFC_Address
     public function buildCondition(PlFilter &$uf)
     {
         $sub = $uf->addAddressFilter();
-        $conds = $this->initConds($sub);
+        $conds = $this->initConds($sub, $uf->getVisibilityCondition($sub . '.pub'));
 
         switch ($this->fieldtype) {
         case self::FIELD_COUNTRY:
@@ -879,6 +911,7 @@ class UFC_Corps implements UserFilterCondition
          */
         $sub = $uf->addCorpsFilter($this->type);
         $cond = $sub . '.abbreviation = ' . $corps;
+        $cond .= ' AND ' . $uf->getVisibilityCondition($sub . '.corps_pub');
         return $cond;
     }
 }
@@ -899,10 +932,14 @@ class UFC_Corps_Rank implements UserFilterCondition
     public function buildCondition(PlFilter &$uf)
     {
         /** Tables shortcuts:
+         * pc for profile_corps
          * pcr for profile_corps_rank
          */
         $sub = $uf->addCorpsRankFilter();
         $cond = $sub . '.abbreviation = ' . $rank;
+        // XXX(x2006barrois): find a way to get rid of that hardcoded
+        // reference to 'pc'.
+        $cond .= ' AND ' . $uf->getVisibilityCondition('pc.corps_pub');
         return $cond;
     }
 }
@@ -939,7 +976,9 @@ class UFC_Job_Company implements UserFilterCondition
     public function buildCondition(PlFilter &$uf)
     {
         $sub = $uf->addJobCompanyFilter();
-        $cond  = $sub . '.' . $this->type . ' = ' . XDB::format('{?}', $this->value);
+        $cond  = $sub . '.' . $this->type . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->value);
+        $jsub = $uf->addJobFilter();
+        $cond .= ' AND ' . $uf->getVisibilityCondition($jsub . '.pub');
         return $cond;
     }
 }
@@ -975,7 +1014,41 @@ class UFC_Job_Sectorization implements UserFilterCondition
     public function buildCondition(PlFilter &$uf)
     {
         $sub = $uf->addJobSectorizationFilter($this->type);
-        return $sub . '.id = ' . XDB::format('{?}', $this->val);
+        $cond = $sub . '.id = ' . XDB::format('{?}', $this->val);
+        $jsub = $uf->addJobFilter();
+        $cond .= ' AND ' . $uf->getVisibilityCondition($jsub . '.pub');
+        return $cond;
+    }
+}
+// }}}
+
+// {{{ class UFC_Job_Terms
+/** Filters users based on the job terms they assigned to one of their
+ * jobs.
+ * @param $val The ID of the job term, or an array of such IDs
+ */
+class UFC_Job_Terms implements UserFilterCondition
+{
+    private $val;
+
+    public function __construct($val)
+    {
+        if (!is_array($val)) {
+            $val = array($val);
+        }
+        $this->val = $val;
+    }
+
+    public function buildCondition(PlFilter &$uf)
+    {
+        $sub = $uf->addJobTermsFilter(count($this->val));
+        $conditions = array();
+        foreach ($this->val as $i => $jtid) {
+            $conditions[] = $sub[$i] . '.jtid_1 = ' . XDB::escape($jtid);
+        }
+        $jsub = $uf->addJobFilter();
+        $conditions[] = $uf->getVisibilityCondition($jsub . '.pub');
+        return implode(' AND ', $conditions);
     }
 }
 // }}}
@@ -1000,11 +1073,22 @@ class UFC_Job_Description implements UserFilterCondition
     public function buildCondition(PlFilter &$uf)
     {
         $conds = array();
+
+        $jsub = $uf->addJobFilter();
+        // CV is private => if only CV requested, and not private,
+        // don't do anything. Otherwise restrict to standard job visibility.
+        if ($this->fields == UserFilter::JOB_CV) {
+           if ($uf->getVisibilityLevel() != ProfileVisibility::VIS_PRIVATE) {
+               return PlFilter::COND_TRUE;
+           }
+        } else {
+            $conds[] = $uf->getVisibilityCondition($jsub . '.pub');
+        }
+
         if ($this->fields & UserFilter::JOB_USERDEFINED) {
-            $sub = $uf->addJobFilter();
-            $conds[] = $sub . '.description ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
+            $conds[] = $jsub . '.description ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
         }
-        if ($this->fields & UserFilter::JOB_CV) {
+        if ($this->fields & UserFilter::JOB_CV && $uf->getVisibilityLevel == ProfileVisibility::VIS_PRIVATE) {
             $uf->requireProfiles();
             $conds[] = 'p.cv ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
         }
@@ -1047,6 +1131,7 @@ class UFC_Networking implements UserFilterCondition
     {
         $sub = $uf->addNetworkingFilter();
         $conds = array();
+        $conds[] = $uf->getVisibilityCondition($sub . '.pub');
         $conds[] = $sub . '.address ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->value);
         if ($this->type != -1) {
             $conds[] = $sub . '.nwid = ' . XDB::format('{?}', $this->type);
@@ -1080,16 +1165,20 @@ class UFC_Phone implements UserFilterCondition
 
     public function __construct($number, $num_type = self::NUM_ANY, $phone_type = self::PHONE_ANY)
     {
-        require_once('profil.func.inc.php');
-        $this->number = $number;
+        $phone = new Phone(array('display' => $number));
+        $phone->format();
+        $this->number = $phone->search();
         $this->num_type = $num_type;
-        $this->phone_type = format_phone_number($phone_type);
+        $this->phone_type = $phone_type;
     }
 
     public function buildCondition(PlFilter &$uf)
     {
         $sub = $uf->addPhoneFilter();
         $conds = array();
+
+        $conds[] = $uf->getVisibilityCondition($sub . '.pub');
+
         $conds[] = $sub . '.search_tel = ' . XDB::format('{?}', $this->number);
         if ($this->num_type != self::NUM_ANY) {
             $conds[] = $sub . '.link_type = ' . XDB::format('{?}', $this->num_type);
@@ -1121,7 +1210,12 @@ class UFC_Medal implements UserFilterCondition
     public function buildCondition(PlFilter &$uf)
     {
         $conds = array();
+
+        // This will require profiles => table 'p' will be available.
         $sub = $uf->addMedalFilter();
+
+        $conds[] = $uf->getVisibilityCondition('p.medals_pub');
+
         $conds[] = $sub . '.mid = ' . XDB::format('{?}', $this->medal);
         if ($this->grade != null) {
             $conds[] = $sub . '.gid = ' . XDB::format('{?}', $this->grade);
@@ -1138,12 +1232,24 @@ class UFC_Photo implements UserFilterCondition
 {
     public function buildCondition(PlFilter &$uf)
     {
-        $uf->addPhotoFilter();
-        return 'photo.attach IS NOT NULL';
+        $sub = $uf->addPhotoFilter();
+        return $sub . '.attach IS NOT NULL AND ' . $uf->getVisibilityCondition($sub . '.pub');
     }
 }
 // }}}
 
+// {{{ class UFC_Mentor
+class UFC_Mentor implements UserFilterCondition
+{
+    public function buildCondition(PlFilter &$uf)
+    {
+        $sub = $uf->addMentorFilter(UserFilter::MENTOR);
+        return $sub . '.expertise IS NOT NULL';
+    }
+}
+// }}}
+
+
 // {{{ class UFC_Mentor_Expertise
 /** Filters users by mentoring expertise
  * @param $expertise Domain of expertise
@@ -1186,6 +1292,27 @@ class UFC_Mentor_Country implements UserFilterCondition
 }
 // }}}
 
+// {{{ class UFC_Mentor_Terms
+/** Filters users based on the job terms they used in mentoring.
+ * @param $val The ID of the job term, or an array of such IDs
+ */
+class UFC_Mentor_Terms implements UserFilterCondition
+{
+    private $val;
+
+    public function __construct($val)
+    {
+        $this->val = $val;
+    }
+
+    public function buildCondition(PlFilter &$uf)
+    {
+        $sub = $uf->addMentorFilter(UserFilter::MENTOR_TERM);
+        return $sub . '.jtid_1 = ' . XDB::escape($this->val);
+    }
+}
+// }}}
+
 // {{{ class UFC_Mentor_Sectorization
 /** Filters users based on mentoring (sub|)sector
  * @param $sector ID of (sub)sector
@@ -1332,28 +1459,12 @@ class UFC_MarketingHash implements UserFilterCondition
  * ORDERS
  ******************/
 
-// {{{ class UserFilterOrder
-/** Base class for ordering results of a query.
- * Parameters for the ordering must be given to the constructor ($desc for a
- *     descending order).
- * The getSortTokens function is used to get actual ordering part of the query.
- */
-abstract class UserFilterOrder extends PlFilterOrder
-{
-    /** This function must return the tokens to use for ordering
-     * @param &$uf The UserFilter whose results must be ordered
-     * @return The name of the field to use for ordering results
-     */
-//    abstract protected function getSortTokens(UserFilter &$uf);
-}
-// }}}
-
 // {{{ class UFO_Promo
 /** Orders users by promotion
  * @param $grade Formation whose promotion users should be sorted by (restricts results to users of that formation)
  * @param $desc Whether sort is descending
  */
-class UFO_Promo extends UserFilterOrder
+class UFO_Promo extends PlFilterGroupableOrder
 {
     private $grade;
 
@@ -1383,7 +1494,7 @@ class UFO_Promo extends UserFilterOrder
  * @param $particle Set to true if particles should be included in the sorting order
  * @param $desc If sort order should be descending
  */
-class UFO_Name extends UserFilterOrder
+class UFO_Name extends PlFilterOrder
 {
     private $type;
     private $variant;
@@ -1401,7 +1512,13 @@ class UFO_Name extends UserFilterOrder
     {
         if (Profile::isDisplayName($this->type)) {
             $sub = $uf->addDisplayFilter();
-            return 'pd' . $sub . '.' . $this->type;
+            $token = 'pd' . $sub . '.' . $this->type;
+            if ($uf->accountsRequired()) {
+                $account_token = Profile::getAccountEquivalentName($this->type);
+                return 'IFNULL(' . $token . ', a.' . $account_token . ')';
+            } else {
+                return $token;
+            }
         } else {
             $sub = $uf->addNameFilter($this->type, $this->variant);
             if ($this->particle) {
@@ -1415,7 +1532,7 @@ class UFO_Name extends UserFilterOrder
 // }}}
 
 // {{{ class UFO_Score
-class UFO_Score extends UserFilterOrder
+class UFO_Score extends PlFilterOrder
 {
     protected function getSortTokens(PlFilter &$uf)
     {
@@ -1438,7 +1555,7 @@ class UFO_Score extends UserFilterOrder
 // {{{ class UFO_Registration
 /** Sorts users based on registration date
  */
-class UFO_Registration extends UserFilterOrder
+class UFO_Registration extends PlFilterOrder
 {
     protected function getSortTokens(PlFilter &$uf)
     {
@@ -1451,7 +1568,7 @@ class UFO_Registration extends UserFilterOrder
 // {{{ class UFO_Birthday
 /** Sorts users based on next birthday date
  */
-class UFO_Birthday extends UserFilterOrder
+class UFO_Birthday extends PlFilterOrder
 {
     protected function getSortTokens(PlFilter &$uf)
     {
@@ -1464,7 +1581,7 @@ class UFO_Birthday extends UserFilterOrder
 // {{{ class UFO_ProfileUpdate
 /** Sorts users based on last profile update
  */
-class UFO_ProfileUpdate extends UserFilterOrder
+class UFO_ProfileUpdate extends PlFilterOrder
 {
     protected function getSortTokens(PlFilter &$uf)
     {
@@ -1477,7 +1594,7 @@ class UFO_ProfileUpdate extends UserFilterOrder
 // {{{ class UFO_Death
 /** Sorts users based on death date
  */
-class UFO_Death extends UserFilterOrder
+class UFO_Death extends PlFilterOrder
 {
     protected function getSortTokens(PlFilter &$uf)
     {
@@ -1490,7 +1607,7 @@ class UFO_Death extends UserFilterOrder
 // {{{ class UFO_Uid
 /** Sorts users based on their uid
  */
-class UFO_Uid extends UserFilterOrder
+class UFO_Uid extends PlFilterOrder
 {
     protected function getSortTokens(PlFilter &$uf)
     {
@@ -1503,7 +1620,7 @@ class UFO_Uid extends UserFilterOrder
 // {{{ class UFO_Hruid
 /** Sorts users based on their hruid
  */
-class UFO_Hruid extends UserFilterOrder
+class UFO_Hruid extends PlFilterOrder
 {
     protected function getSortTokens(PlFilter &$uf)
     {
@@ -1516,7 +1633,7 @@ class UFO_Hruid extends UserFilterOrder
 // {{{ class UFO_Pid
 /** Sorts users based on their pid
  */
-class UFO_Pid extends UserFilterOrder
+class UFO_Pid extends PlFilterOrder
 {
     protected function getSortTokens(PlFilter &$uf)
     {
@@ -1529,7 +1646,7 @@ class UFO_Pid extends UserFilterOrder
 // {{{ class UFO_Hrpid
 /** Sorts users based on their hrpid
  */
-class UFO_Hrpid extends UserFilterOrder
+class UFO_Hrpid extends PlFilterOrder
 {
     protected function getSortTokens(PlFilter &$uf)
     {
@@ -1578,7 +1695,7 @@ class UFO_Hrpid extends UserFilterOrder
  * when referring to the joined table.
  *
  * For example, if data from profile_job must be available to filter results,
- * the UFC object will call $uf-addJobFilter(), which will set the 'with_pj' var and 
+ * the UFC object will call $uf-addJobFilter(), which will set the 'with_pj' var and
  * return 'pj', the short name to use when referring to profile_job; when building
  * the query, calling the jobJoins function will return an array containing a single
  * row:
@@ -1598,9 +1715,13 @@ class UserFilter extends PlFilter
 
     private $root;
     private $sort = array();
+    private $grouper = null;
     private $query = null;
     private $orderby = null;
 
+    // Store the current 'search' visibility.
+    private $profile_visibility = null;
+
     private $lastusercount = null;
     private $lastprofilecount = null;
 
@@ -1621,7 +1742,7 @@ class UserFilter extends PlFilter
             }
         }
         if (!is_null($sort)) {
-            if ($sort instanceof UserFilterOrder) {
+            if ($sort instanceof PlFilterOrder) {
                 $this->addSort($sort);
             } else if (is_array($sort)) {
                 foreach ($sort as $s) {
@@ -1629,6 +1750,29 @@ class UserFilter extends PlFilter
                 }
             }
         }
+
+        // This will set the visibility to the default correct level.
+        $this->profile_visibility = new ProfileVisibility();
+    }
+
+    public function getVisibilityLevels()
+    {
+        return $this->profile_visibility->levels();
+    }
+
+    public function getVisibilityLevel()
+    {
+        return $this->profile_visibility->level();
+    }
+
+    public function restrictVisibilityTo($level)
+    {
+        $this->profile_visibility->setLevel($level);
+    }
+
+    public function getVisibilityCondition($field)
+    {
+        return $field . ' IN ' . XDB::formatArray($this->getVisibilityLevels());
     }
 
     private function buildQuery()
@@ -1669,6 +1813,42 @@ class UserFilter extends PlFilter
         }
     }
 
+    public function hasGroups()
+    {
+        return $this->grouper != null;
+    }
+
+    public function getGroups()
+    {
+        return $this->getUIDGroups();
+    }
+
+    public function getUIDGroups()
+    {
+        $this->requireAccounts();
+        $this->buildQuery();
+        $token = $this->grouper->getGroupToken($this);
+
+        $groups = XDB::fetchAllRow('SELECT ' . $token . ', COUNT(a.uid)
+                                   ' . $this->query . '
+                                   GROUP BY  ' . $token,
+                                   0);
+        return $groups;
+    }
+
+    public function getPIDGroups()
+    {
+        $this->requireProfiles();
+        $this->buildQuery();
+        $token = $this->grouper->getGroupToken($this);
+
+        $groups = XDB::fetchAllRow('SELECT ' . $token . ', COUNT(p.pid)
+                                   ' . $this->query . '
+                                   GROUP BY  ' . $token,
+                                   0);
+        return $groups;
+    }
+
     private function getUIDList($uids = null, PlLimit &$limit)
     {
         $this->requireAccounts();
@@ -1909,6 +2089,10 @@ class UserFilter extends PlFilter
 
     public function addSort(PlFilterOrder &$sort)
     {
+        if (count($this->sort) == 0 && $sort instanceof PlFilterGroupableOrder)
+        {
+            $this->grouper = $sort;
+        }
         $this->sort[] = $sort;
         $this->orderby = null;
     }
@@ -1980,11 +2164,21 @@ class UserFilter extends PlFilter
         $this->with_accounts = true;
     }
 
+    public function accountsRequired()
+    {
+        return $this->with_accounts;
+    }
+
     public function requireProfiles()
     {
         $this->with_profiles = true;
     }
 
+    public function profilesRequired()
+    {
+        return $this->with_profiles;
+    }
+
     protected function accountJoins()
     {
         $joins = array();
@@ -2286,7 +2480,7 @@ class UserFilter extends PlFilter
                 if (!is_array($key)) {
                     $key = array($key);
                 }
-                $joins['e' . $sub] = PlSqlJoin::left('emails', '$ME.uid = $UID AND $ME.flags != \'filter\' 
+                $joins['e' . $sub] = PlSqlJoin::left('emails', '$ME.uid = $UID AND $ME.flags != \'filter\'
                                                                AND $ME.email IN {?}', $key);
             }
         }
@@ -2301,7 +2495,7 @@ class UserFilter extends PlFilter
                 if (!is_array($key)) {
                     $key = array($key);
                 }
-                $joins['al' . $sub] = PlSqlJoin::left('aliases', '$ME.uid = $UID AND $ME.type IN (\'alias\', \'a_vie\') 
+                $joins['al' . $sub] = PlSqlJoin::left('aliases', '$ME.uid = $UID AND $ME.type IN (\'alias\', \'a_vie\')
                                                                   AND $ME.alias IN {?}', $key);
             }
         }
@@ -2431,6 +2625,7 @@ class UserFilter extends PlFilter
      * pjsse => profile_job_subsector_enum
      * pjssse => profile_job_subsubsector_enum
      * pja => profile_job_alternates
+     * pjt => profile_job_terms
      */
     private $with_pj = false;
     private $with_pje = false;
@@ -2438,6 +2633,7 @@ class UserFilter extends PlFilter
     private $with_pjsse = false;
     private $with_pjssse = false;
     private $with_pja = false;
+    private $with_pjt = 0;
 
     public function addJobFilter()
     {
@@ -2471,6 +2667,21 @@ class UserFilter extends PlFilter
         }
     }
 
+    /**
+     * Adds a filter on job terms of profile.
+     * @param $nb the number of job terms to use
+     * @return an array of the fields to filter (one for each term).
+     */
+    public function addJobTermsFilter($nb = 1)
+    {
+        $this->with_pjt = $nb;
+        $jobtermstable = array();
+        for ($i = 1; $i <= $nb; ++$i) {
+            $jobtermstable[] = 'pjtr_'.$i;
+        }
+        return $jobtermstable;
+    }
+
     protected function jobJoins()
     {
         $joins = array();
@@ -2492,6 +2703,12 @@ class UserFilter extends PlFilter
         if ($this->with_pja) {
             $joins['pja'] = PlSqlJoin::left('profile_job_alternates', '$ME.subsubsectorid = pj.subsubsectorid');
         }
+        if ($this->with_pjt > 0) {
+            for ($i = 1; $i <= $this->with_pjt; ++$i) {
+                $joins['pjt_'.$i] = PlSqlJoin::left('profile_job_term', '$ME.pid = $PID');
+                $joins['pjtr_'.$i] = PlSqlJoin::left('profile_job_term_relation', '$ME.jtid_2 = pjt_'.$i.'.jtid');
+            }
+        }
         return $joins;
     }
 
@@ -2560,14 +2777,20 @@ class UserFilter extends PlFilter
      */
 
     private $pms = array();
-    const MENTOR_EXPERTISE  = 1;
-    const MENTOR_COUNTRY    = 2;
-    const MENTOR_SECTOR     = 3;
+    private $mjtr = false;
+    const MENTOR = 1;
+    const MENTOR_EXPERTISE = 2;
+    const MENTOR_COUNTRY = 3;
+    const MENTOR_SECTOR = 4;
+    const MENTOR_TERM = 5;
 
     public function addMentorFilter($type)
     {
         $this->requireAccounts();
         switch($type) {
+        case self::MENTOR:
+            $this->pms['pm'] = 'profile_mentor';
+            return 'pm';
         case self::MENTOR_EXPERTISE:
             $this->pms['pme'] = 'profile_mentor';
             return 'pme';
@@ -2577,6 +2800,10 @@ class UserFilter extends PlFilter
         case self::MENTOR_SECTOR:
             $this->pms['pms'] =  'profile_mentor_sector';
             return 'pms';
+        case self::MENTOR_TERM:
+            $this->pms['pmt'] = 'profile_mentor_term';
+            $this->mjtr = true;
+            return 'mjtr';
         default:
             Platal::page()->killError("Undefined mentor filter.");
         }
@@ -2588,6 +2815,9 @@ class UserFilter extends PlFilter
         foreach ($this->pms as $sub => $tab) {
             $joins[$sub] = PlSqlJoin::left($tab, '$ME.pid = $PID');
         }
+        if ($this->mjtr) {
+            $joins['mjtr'] = PlSqlJoin::left('profile_job_term_relation', '$ME.jtid_2 = pmt.jtid');
+        }
         return $joins;
     }
 
@@ -2679,6 +2909,7 @@ class UserFilter extends PlFilter
     {
         $this->requireProfiles();
         $this->with_photo = true;
+        return 'photo';
     }
 
     protected function photoJoins()
@@ -2728,6 +2959,11 @@ class ProfileFilter extends UserFilter
     {
         return $this->getTotalProfileCount();
     }
+
+    public function getGroups()
+    {
+        return $this->getPIDGroups();
+    }
 }
 // }}}
 
index f4d8e00..2a63e16 100644 (file)
@@ -55,6 +55,8 @@ class XnetPage extends PlPage
     {
         if (!$this->nomenu) {
             $this->useMenu();
+        } else {
+            $this->assign('menu', false);
         }
         $this->_run('xnet/skin.tpl');
     }
index 0ebc2e6..ceaa331 100644 (file)
@@ -94,20 +94,28 @@ class XnetSession extends XorgSession
 
     protected function startSessionAs($user, $level)
     {
+        // The user must have 'groups' permission to access X.net
+        if (!$user->checkPerms('groups')) {
+            return false;
+        }
         if ($level == AUTH_SUID) {
             S::set('auth', AUTH_MDP);
         }
-        $res  = XDB::query("SELECT  a.uid, a.hruid, a.display_name, a.full_name,
-                                    a.sex = 'female' AS femme,
-                                    a.email_format, a.token,
-                                    at.perms, a.is_admin
-                              FROM  accounts AS a
-                        INNER JOIN  account_types AS at ON (at.type = a.type)
-                             WHERE  a.uid = {?} AND a.state = 'active'
-                             LIMIT  1", $user->id());
-        $sess = $res->fetchOneAssoc();
-        $_SESSION = array_merge($_SESSION, $sess);
-        $this->makePerms(S::s('perms'), S::b('is_admin'));
+
+        S::set('uid', $user->uid);
+        S::set('hruid', $user->hruid);
+
+        // XXX: Transition code, should not be in session anymore
+        S::set('display_name', $user->display_name);
+        S::set('full_name', $user->full_name);
+        S::set('femme', $user->isFemale());
+        S::set('email_format', $user->email_format);
+        S::set('token', $user->token);
+        S::set('perms', $user->perms);
+        S::set('is_admin', $user->is_admin);
+
+
+        $this->makePerms($user->perms, $user->is_admin);
         S::kill('challenge');
         S::kill('loginX');
         S::kill('may_update');
@@ -128,7 +136,7 @@ class XnetSession extends XorgSession
         if (!$this->startSUID($user)) {
             return false;
         }
-        S::set('perms', User::makePerms('user'));
+        S::set('perms', User::makePerms(PERMS_USER));
         return true;
     }
 
index 7789318..a6ed341 100644 (file)
@@ -79,14 +79,21 @@ class XorgSession extends PlSession
 
     private function checkPassword($uname, $login, $response, $login_type)
     {
-        $res = XDB::query('SELECT  a.uid, a.password
-                             FROM  accounts AS a
-                       INNER JOIN  aliases  AS l ON (l.uid = a.uid AND l.type != \'homonyme\')
-                            WHERE  l.' . $login_type . ' = {?} AND a.state = \'active\'',
-                          $login);
+        if ($login_type == 'alias') {
+            $res = XDB::query('SELECT  a.uid, a.password
+                                 FROM  accounts AS a
+                           INNER JOIN  aliases  AS l ON (l.uid = a.uid AND l.type != \'homonyme\')
+                                WHERE  l.alias = {?} AND a.state = \'active\'',
+                              $login);
+        } else {
+            $res = XDB::query('SELECT  uid, password
+                                 FROM  accounts
+                                WHERE  ' . $login_type . ' = {?}',
+                              $login);
+        }
         if (list($uid, $password) = $res->fetchOneRow()) {
             $expected_response = sha1("$uname:$password:" . S::v('challenge'));
-            /* XXX: Deprecates len(password) > 10 conversion */
+            /* Deprecates len(password) > 10 conversion. */
             if ($response != $expected_response) {
                 if (!S::logged()) {
                     Platal::page()->trigError('Mot de passe ou nom d\'utilisateur invalide');
@@ -132,10 +139,11 @@ class XorgSession extends PlSession
          */
         if (S::suid()) {
             $login = $uname = S::suid('uid');
+            $loginType = 'uid';
             $redirect = false;
         } else {
-            $uname = Env::v('username');
-            if (Env::v('domain') == "alias") {
+            $uname = Post::v('username');
+            if (Post::s('domain') == "alias") {
                 $res = XDB::query('SELECT  redirect
                                      FROM  virtual
                                INNER JOIN  virtual_redirect USING(vid)
@@ -147,13 +155,19 @@ class XorgSession extends PlSession
                 } else {
                     $login = '';
                 }
+                $loginType = 'alias';
+            } else if (Post::s('domain') == "ax") {
+                $login = $uname;
+                $redirect = false;
+                $loginType = 'hruid';
             } else {
                 $login = $uname;
                 $redirect = false;
+                $loginType = 'alias';
             }
         }
 
-        $uid = $this->checkPassword($uname, $login, Post::v('response'), (!$redirect && is_numeric($uname)) ? 'uid' : 'alias');
+        $uid = $this->checkPassword($uname, $login, Post::v('response'), $loginType);
         if (!is_null($uid) && S::suid()) {
             if (S::suid('uid') == $uid) {
                 $uid = S::i('uid');
@@ -165,8 +179,11 @@ class XorgSession extends PlSession
             S::set('auth', AUTH_MDP);
             if (!S::suid()) {
                 if (Post::has('domain')) {
-                    if (($domain = Post::v('domain', 'login')) == 'alias') {
+                    $domain = Post::v('domain', 'login');
+                    if ($domain == 'alias') {
                         Cookie::set('domain', 'alias', 300);
+                    } else if ($domain == 'ax') {
+                        Cookie::set('domain', 'ax', 300);
                     } else {
                         Cookie::kill('domain');
                     }
@@ -190,35 +207,8 @@ class XorgSession extends PlSession
             S::set('auth', AUTH_MDP);
         }
 
-        // Retrieves main user properties.
-        /** TODO: Move needed informations to account tables */
-        /** TODO: Currently suppressed data are matricule, promo */
-        /** TODO: Use the User object to fetch all this */
-        $res  = XDB::query("SELECT  a.uid, a.hruid, a.display_name, a.full_name,
-                                    a.sex = 'female' AS femme, a.email_format,
-                                    a.token, FIND_IN_SET('watch', a.flags) AS watch_account,
-                                    UNIX_TIMESTAMP(fp.last_seen) AS banana_last,
-                                    a.last_version, g.g_account_name IS NOT NULL AS googleapps,
-                                    UNIX_TIMESTAMP(s.start) AS lastlogin, s.host,
-                                    a.is_admin, at.perms
-                              FROM  accounts          AS a
-                        INNER JOIN  account_types     AS at ON (a.type = at.type)
-                         LEFT JOIN  watch             AS w  ON (w.uid = a.uid)
-                         LEFT JOIN  forum_profiles    AS fp ON (fp.uid = a.uid)
-                         LEFT JOIN  gapps_accounts    AS g  ON (a.uid = g.l_userid AND g.g_status = 'active')
-                         LEFT JOIN  log_last_sessions AS ls ON (ls.uid = a.uid)
-                         LEFT JOIN  log_sessions      AS s  ON(s.id = ls.id)
-                             WHERE  a.uid = {?} AND a.state = 'active'", $user->id());
-        if ($res->numRows() != 1) {
-            return false;
-        }
-
-        $sess = $res->fetchOneAssoc();
-        $perms = $sess['perms'];
-        unset($sess['perms']);
-
-        // Loads the data into the real session.
-        $_SESSION = array_merge($_SESSION, $sess);
+        // Loads uid and hruid into the session for developement conveniance.
+        $_SESSION = array_merge($_SESSION, array('uid' => $user->id(), 'hruid' => $user->hruid));
 
         // Starts the session's logger, and sets up the permanent cookie.
         if (S::suid()) {
@@ -235,7 +225,7 @@ class XorgSession extends PlSession
         }
 
         // Finalizes the session setup.
-        $this->makePerms($perms, S::b('is_admin'));
+        $this->makePerms($user->perms, $user->is_admin);
         $this->securityChecks();
         $this->setSkin();
         $this->updateNbNotifs();
index de5ac1b..059b0d9 100644 (file)
@@ -66,3 +66,8 @@ from="Gestion des groupes X sur Polytechnique.net" <support@polytechnique.org>
 from="Webmaster Polytechnique.org" <web@polytechnique.org>
 to=registration+watch@staff.m4x.org
 replyto=registration+watch@staff.m4x.org
+
+[profile]
+from="Polytechnique.org" <validation_modification@polytechnique.org>
+cc="Polytechnique.org" <validation_modification@polytechnique.org>
+
index efc0a14..bb88941 100644 (file)
@@ -17,6 +17,9 @@ WD=/home/web/prod/platal/bin/cron
 0  2 * * *     web     cd $WD; ./notifs.birthday.php
 0  4 * * 6     web     cd $WD; ./notifs.send.php
 
+# profile modification notifications
+0 23 * * *     web     cd $WD; ./profile_modification.php
+
 # validations
 0 */3 * * *    web     cd $WD; ./cron_validations.php
 
diff --git a/core b/core
index 1b54ef2..3c7bc7a 160000 (submodule)
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit 1b54ef260c1db3f94830fb6f9b1b13aeb9fcdb78
+Subproject commit 3c7bc7a377e3d5422f61b92ddf69c4a953ad3d15
index 6f43c16..8424d86 100644 (file)
@@ -1,2 +1,4 @@
 # ignore banana stuff
 /banana.css
+# ignore jstree related stuff
+/jstree.css
index cd673cb..4ae8637 100644 (file)
@@ -484,6 +484,13 @@ div.adresse strong {
     font-size: 90%;
 }
 
+div.adresse ul {
+    margin-top: 0px;
+    margin-bottom: 0px;
+    list-style-type: none;
+    padding-left: 0px;
+}
+
 #fiche .medal_frame {
     float: left;
     width: 33%;
index e2ad786..0dcdd9b 100644 (file)
@@ -1,2 +1,4 @@
 # Hide banana stuff
 /banana
+# ignore jstree related stuff
+/jstree.png
index 8a28ca6..061d5c8 100644 (file)
@@ -20,7 +20,7 @@
 
 function doChallengeResponse() {
     var new_pass = hash_encrypt(document.forms.login.password.value);
-    
+
     str = document.forms.loginsub.username.value + ":" +
         hash_encrypt(document.forms.login.password.value) + ":" +
         document.forms.loginsub.challenge.value;
diff --git a/htdocs/javascript/jobtermstree.js b/htdocs/javascript/jobtermstree.js
new file mode 100644 (file)
index 0000000..f3a42eb
--- /dev/null
@@ -0,0 +1,51 @@
+/***************************************************************************
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  http://opensource.polytechnique.org/                                   *
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *  You should have received a copy of the GNU General Public License      *
+ *  along with this program; if not, write to the Free Software            *
+ *  Foundation, Inc.,                                                      *
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
+ ***************************************************************************/
+
+/**
+ * Creates a job terms tree.
+ * @param domElement the jQuery selector string that defines the DOM element
+ * which should contain the tree.
+ * @param platalpage the base page to query for branches
+ * @param treeid an id unique for the tree in this page that will be used in
+ * clickFunc
+ * @param clickFunc name of a javascript function that will be called when a
+ * term is clicked. The three params of this function will be : treeid, the
+ * id of the job term clicked, and the full name of the job term clicked.
+ */
+function createJobTermsTree(domElement, platalpage, treeid, clickFunc)
+{
+    $(domElement).jstree({
+        "core" : {"strings":{"loading":"Chargement ..."}},
+        "plugins" : ["themes","json_data"],
+        "themes" : { "url" : platal_baseurl + "css/jstree.css" },
+        "json_data" : { "ajax" : {
+            "url" : platal_baseurl + platalpage,
+            "data" : function(nod) {
+                var jtid = 0;
+                if (nod != -1) {
+                    jtid = nod.attr("id").replace(/^.*_([0-9]+)$/, "$1");
+                }
+                return { "jtid" : jtid, "treeid" : treeid, "attrfunc" : clickFunc }
+            }
+        }} });
+}
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+
index 6cf3cb0..4e211a1 100644 (file)
                                        function() {
                                                $(this).removeClass("ac_over");
                                        }
-                               ).click(function(e) { 
+                               ).click(function(e) {
                                        e.preventDefault();
                                        e.stopPropagation();
                                        selectItem(this)
                };
 
                function makeUrl(q) {
-                       var sep = options.url.indexOf('?') == -1 ? '?' : '&'; 
+                       var sep = options.url.indexOf('?') == -1 ? '?' : '&';
                        var url = options.url + sep + "q=" + encodeURI(q);
                        for (var i in options.extraParams) {
                                url += "&" + i + "=" + encodeURI(options.extraParams[i]);
                        autoFill: false,
                        width: 0
                }, $.fn.autocomplete.defaults, options);
-           
+
                options.width = parseInt(options.width, 10);
                
                return this.each(function() {
similarity index 61%
rename from htdocs/javascript/motdepasse.js
rename to htdocs/javascript/password.js
index 17864f2..578e345 100644 (file)
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************/
 
-function EnCryptedResponse() {
-    pw1 = document.forms.changepass.nouveau.value;
-    pw2 = document.forms.changepass.nouveau2.value;
-    if (pw1 != pw2) {
-        alert ("\nErreur : les deux champs ne sont pas identiques !")
+function hashResponse(password1, password2, hasConfirmation) {
+    pw1 = $('[name=' + password1 + ']').val();
+
+    if (hasConfirmation) {
+        pw2 = $('[name=' + password2 + ']').val();
+        if (pw1 != pw2) {
+            alert("\nErreur : les deux champs ne sont pas identiques !");
             return false;
-        exit;
+        }
+        $('[name=' + password2 + ']').val('');
+    } else if (pw1 == '********') {
+        return true;
     }
+
     if (pw1.length < 6) {
-        alert ("\nErreur : le nouveau mot de passe doit faire au moins 6 caractères !")
-            return false;
-        exit;
+        alert("\nErreur : le nouveau mot de passe doit faire au moins 6 caractères !");
+        return false;
+    }
+    if (!differentTypes(pw1)) {
+        alert ("\nErreur : le nouveau mot de passe doit comporter au moins deux types de caractères parmi les suivants : lettres minuscules, lettres majuscules, chiffres, caractères spéciaux.");
+        return false;
     }
 
-    str = hash_encrypt(document.forms.changepass.nouveau.value);
-    document.forms.changepass2.response2.value = str;
-
-    alert ("Le mot de passe que tu as rentré va être chiffré avant de nous parvenir par Internet ! Ainsi il ne circulera pas en clair.");
-    document.forms.changepass2.submit();
+    alert("Le mot de passe que tu as rentré va être chiffré avant de nous parvenir par Internet ! Ainsi il ne circulera pas en clair.");
+    $('[name=' + password1 + ']').val('');
+    $('[name=pwhash]').val(hash_encrypt(pw1));
     return true;
 }
 
-function EncryptedResponseInNestedForm() {
-    $('[name=nouveau]').val($('[name=password]').val());
-    $('[name=nouveau2]').val($('[name=password2]').val());
-    EnCryptedResponse();
-}
-
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
index 217658b..a24a83b 100644 (file)
@@ -50,6 +50,9 @@ function wizPage_onLoad(id)
             updateJobSubSector(i, $('#job_' + i).find("[name='jobs[" + i + "][subSubSector]']").val());
             updateJobAlternates(i);
         }
+        if ($('#job_0').find("[name='jobs[0][name]']").val() == '') {
+            registerEnterpriseAutocomplete(0);
+        }
         break;
     }
 }
@@ -381,7 +384,7 @@ function renumberPhone(prefname, prefid, i)
     $('#' + id).find('div.titre').html('N°' + i);
     $('#' + id).find('a.removeTel').attr('href', 'javascript:removeTel(\'' + prefname + '\',\'' + prefid + '\',' + telid + ')');
     $('#' + id).find('select').attr('name', telpref + '[type]');
-    $('#' + id).find("[name='" + telprefOld + "[tel]']").attr('name', telpref + '[tel]');
+    $('#' + id).find("[name='" + telprefOld + "[display]']").attr('name', telpref + '[display]');
     $('#' + id).find("[name='" + telprefOld + "[comment]']").attr('name', telpref + '[comment]');
     $('#' + id).find('a.removePhoneComment').attr('href', 'javascript:removePhoneComment(' + id + ',' + telpref + ')');
     $('#' + id).find('#' + idOld + '_addComment').attr('id', id + '_addComment');
@@ -566,6 +569,125 @@ function addEntreprise(id)
     $('.entreprise_' + id).toggle();
 }
 
+/**
+ * Adds a job term in job profile page
+ * @param jobid id of profile's job among his different jobs
+ * @param jtid id of job term to add
+ * @param full_name full text of job term
+ * @return false if the term already exist for this job, true otherwise
+ */
+function addJobTerm(jobid, jtid, full_name)
+{
+    var termid = 0;
+    var parentpath;
+    var formvarname;
+    if (jobid < 0) {
+        parentpath = '';
+        jobid = '';
+        formvarname = 'terms';
+    } else {
+        parentpath = '#job_'+jobid+' ';
+        formvarname = 'jobs['+jobid+'][terms]';
+    }
+    var lastJobTerm = $(parentpath + '.job_term:last');
+    if (lastJobTerm.length != 0) {
+        termid = parseInt(lastJobTerm.children('input').attr('name').replace(/^(jobs\[[0-9]+\]\[terms\]|terms)\[([0-9]+)\]\[jtid\]/, '$2')) + 1;
+        if ($('#job'+jobid+'_term'+jtid).length > 0) {
+            return false;
+        }
+    }
+    var newdiv = '<div class="job_term" id="job'+jobid+'_term'+jtid+'">'+
+        '<span>'+full_name+'</span>'+
+        '<input type="hidden" name="'+formvarname+'['+termid+'][jtid]" value="'+jtid+'" />'+
+        '<img title="Retirer ce mot-clef" alt="retirer" src="images/icons/cross.gif" />'+
+        '</div>';
+    if (lastJobTerm.length == 0) {
+        $(parentpath + '.job_terms').prepend(newdiv);
+    } else {
+        lastJobTerm.after(newdiv);
+    }
+    $('#job'+jobid+'_term'+jtid+' img').css('cursor','pointer').click(removeJobTerm);
+    return true;
+}
+
+/**
+ * Remove a job term in job profile page.
+ * Must be called from a button in a div containing the term
+ */
+function removeJobTerm()
+{
+    $(this).parent().remove();
+}
+
+/**
+ * Prepare display for autocomplete suggestions in job terms
+ * @param row an array of (title of term, id of term)
+ * @return text to display
+ * If id is negative, it is because there are too much terms to
+ * be displayed.
+ */
+function displayJobTerm(row)
+{
+    if (row[1] < 0) {
+        return '... <em>précise ta recherche</em> ...';
+    }
+    return row[0];
+}
+
+/**
+ * Function called when a job term has been selected from autocompletion
+ * in search
+ * @param li is the list item (<li>) that has been clicked
+ * The context is the jsquery autocomplete object.
+ */
+function selectJobTerm(li)
+{
+    if (li.extra[0] < 0) {
+        return;
+    }
+    var jobid = this.extraParams.jobid;
+    addJobTerm(jobid,li.extra[0],$(li).text());
+    var search_input;
+    if (jobid < 0) {
+        search_input = $('.term_search')[0];
+    } else {
+        search_input = $('#job_'+jobid+' .term_search')[0];
+    }
+    search_input.value = '';
+    search_input.focus();
+}
+
+/**
+ * Function to show or hide a terms tree in job edition
+ * @param jobid is the id of the job currently edited
+ */
+function toggleJobTermsTree(jobid)
+{
+    var treepath;
+    if (jobid < 0) {
+        treepath = '';
+    } else {
+        treepath = '#job_'+jobid+' ';
+    }
+    treepath += '.term_tree';
+    if ($(treepath + ' ul').length > 0) {
+        $(treepath).empty().removeClass().addClass('term_tree');
+        return;
+    }
+    createJobTermsTree(treepath, 'profile/ajax/tree/jobterms/all', 'job' + jobid, 'chooseJobTerm');
+}
+
+/**
+ * Function called when a job term is chosen from terms tree
+ * @param treeid is the full id of the tree (must look like job3)
+ * @param jtid is the id of the job term chosen
+ * @param fullname is the complete name (understandable without context) of the term
+ */
+function chooseJobTerm(treeid, jtid, fullname)
+{
+    addJobTerm(treeid.replace(/^job(.*)$/, '$1'), jtid, fullname);
+}
+
 // {{{1 Skills
 
 function addSkill(cat)
index eb8996a..ccc9c0b 100644 (file)
@@ -271,27 +271,42 @@ function getType(c) {
     }
 }
 
-function checkPassword(box, okLabel) {
+function differentTypes(password) {
     var prev = 0;
+
+    for (i = 0 ; i < password.length ; ++i) {
+        var type = getType(password.charAt(i));
+        if (prev != 0 && prev != type) {
+            return true;
+        }
+        prev = type;
+    }
+    return false;
+}
+
+function passwordStrength(password) {
     var prop = 0;
-    var pass = box.value;
-    var types = Array(0, 0, 0, 0, 0);
+    var prev = 0;
     var firstType = true;
-    for (i = 0 ; i < pass.length ; ++i) {
-        type = getType(pass.charAt(i));
+    var types = Array(0, 0, 0, 0, 0);
+
+    for (i = 0 ; i < password.length ; ++i) {
+        var type = getType(password.charAt(i));
         if (prev != 0 && prev != type) {
             prop += 5;
+            firstType = false;
         }
         prop += i;
         if (types[type] == 0 && !firstType) {
             prop += 15;
-        } else {
-            firstType = false;
         }
         types[type]++;
         prev = type;
     }
-    if (pass.length < 6) {
+    if (password.length < 6) {
+        prop *= 0.75;
+    }
+    if (firstType) {
         prop *= 0.75;
     }
     if (prop > 100) {
@@ -299,6 +314,14 @@ function checkPassword(box, okLabel) {
     } else if (prop < 0) {
         prop = 0;
     }
+
+    return prop;
+}
+
+function checkPassword(box, okLabel) {
+    var password = box.value;
+    var prop = passwordStrength(password);
+
     if (prop >= 60) {
         color = "#4f4";
         bgcolor = "#050";
@@ -320,7 +343,7 @@ function checkPassword(box, okLabel) {
            .parent().stop()
                     .animate({ backgroundColor: bgcolor }, 750);
     var submitButton = $(":submit[name='" + passwordprompt_submit + "']");
-    if (ok && pass.length >= 6) {
+    if (ok && password.length >= 6 && differentTypes(password)) {
         submitButton.attr("value", okLabel);
         submitButton.removeAttr("disabled");
     } else {
index 6a6a869..b43ab28 100644 (file)
@@ -101,7 +101,7 @@ class ForumsBanana extends Banana
         $time = null;
         if (!is_null($this->params) && isset($this->params['updateall'])) {
             $time = intval($this->params['updateall']);
-            S::set('banana_last', $time);
+            S::user()->banana_last = $time;
         }
 
         $infos = $this->fetchProfile();
@@ -119,7 +119,7 @@ class ForumsBanana extends Banana
         Banana::$profile['signature']               = $infos['sig'];
         Banana::$profile['display']                 = $infos['threads'];
         Banana::$profile['autoup']                  = $infos['maj'];
-        Banana::$profile['lastnews']                = S::v('banana_last');
+        Banana::$profile['lastnews']                = S::user()->banana_last;
         Banana::$profile['subscribe']               = $req->fetchColumn();
         Banana::$tree_unread = $infos['tree_unread'];
         Banana::$tree_read = $infos['tree_read'];
index 9d42694..c08c983 100644 (file)
@@ -77,7 +77,7 @@ function hook_platalRSS($group)
     } else {
         $group = '';
     }
-    return '/rss/' . $group . S::v('hruid') . '/' . S::s('token') . '/rss.xml';
+    return '/rss/' . $group . S::v('hruid') . '/' . S::user()->token . '/rss.xml';
 }
 
 function hook_platalMessageLink($params)
index 48cc59a..307183e 100644 (file)
@@ -57,7 +57,7 @@ class ModerationBanana extends Banana
 
     function __construct(User &$user, $params = null)
     {
-        ini_set('memory_limit', '128M'); 
+        ini_set('memory_limit', '128M');
 
         global $globals;
         ModerationBanana::$client = $params['client'];
index 1634dc7..f93541d 100644 (file)
@@ -46,5 +46,6 @@ function __autoload($cls)
     }
 }
 
+
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
 ?>
index 7626b33..288aa66 100644 (file)
@@ -23,9 +23,12 @@ function fill_email_combobox(PlPage& $page, $user = null, $profile = null)
 {
     global $globals;
 
-    if (is_null($user) && is_null($profile)) {
+    if (is_null($user)) {
         $user = S::user();
-        $profile = $user->profile();
+    }
+    if (is_null($profile)) {
+        /* Always refetch the profile. */
+        $profile = $user->profile(true);
     }
     $email_type = "directory";
 
index a828366..da809d7 100644 (file)
@@ -41,7 +41,7 @@ abstract class Geocoder {
             'locality'              => 'geoloc_localities',
             );
 
-        if (isset($address[$area . 'Name']) && isset($databases[$area])) {
+        if (isset($address[$area . 'Name']) && isset($databases[$area]) && !empty($address[$area . 'Name'])) {
             $res = XDB::query("SELECT  id
                                  FROM  " . $databases[$area] . "
                                 WHERE  name = {?}",
@@ -54,6 +54,8 @@ abstract class Geocoder {
             } else {
                 $address[$area . 'Id'] = $res->fetchOneCell();
             }
+        } else {
+            $address[$area . 'Id'] = null;
         }
     }
 
@@ -93,6 +95,10 @@ class GMapsGeocoder extends Geocoder {
 
     // Maximum number of Geocoding calls to the Google Maps API.
     const MAX_GMAPS_RPC_CALLS = 5;
+    // Maximum levenshtein distance authorized between input and geocoded text in a single line.
+    const MAX_LINE_DISTANCE = 5;
+    // Maximum levenshtein distance authorized between input and geocoded text in the whole text.
+    const MAX_TOTAL_DISTANCE = 6;
 
     public function getGeocodedAddress(array $address) {
         $address = $this->prepareAddress($address);
@@ -134,16 +140,7 @@ class GMapsGeocoder extends Geocoder {
     // cleans up the final informations.
     private function getUpdatedAddress(array $address, array $geocodedData, $extraLines) {
         $this->fillAddressWithGeocoding(&$address, $geocodedData);
-
-        // If the accuracy is 6, it means only the street has been gecoded
-        // but not the number, thus we need to fix it.
-        if ($address['accuracy'] == 6) {
-            $this->fixStreetNumber($address);
-        }
-
-        // We can now format the address.
         $this->formatAddress($address, $extraLines);
-
         return $address;
     }
 
@@ -323,20 +320,23 @@ class GMapsGeocoder extends Geocoder {
         $countGeoloc = count($arrayGeoloc);
         $countText   = count($arrayText);
 
+        $totalDistance = 0;
         if (($countText > $countGeoloc) || ($countText < $countGeoloc - 1)
             || (($countText == $countGeoloc - 1)
                 && ($arrayText[$countText - 1] == strtoupper($address['country'])))) {
             $same = false;
         } else {
             for ($i = 0; $i < $countGeoloc && $i < $countText; ++$i) {
-                if (levenshtein($arrayText[$i], trim($arrayGeoloc[$i])) > 3) {
+                $lineDistance = levenshtein($arrayText[$i], trim($arrayGeoloc[$i]));
+                $totalDistance += $lineDistance;
+                if ($lineDistance > self::MAX_LINE_DISTANCE || $totalDistance > self::MAX_TOTAL_DISTANCE) {
                     $same = false;
+                    break;
                 }
             }
         }
+
         if ($same) {
-            $address['text'] = $address['geoloc'];
-            $address['postalText'] = $address['geocodedPostalText'];
             unset($address['geoloc'], $address['geocodedPostalText']);
         } else {
             $address['geoloc'] = str_replace("\n", "\r\n", $address['geoloc']);
@@ -345,7 +345,7 @@ class GMapsGeocoder extends Geocoder {
         $address['text'] = str_replace("\n", "\r\n", $address['text']);
         $address['postalText'] = str_replace("\n", "\r\n", $address['postalText']);
     }
+
     // Returns the address formated for postal use.
     // The main rules are (cf AFNOR XPZ 10-011):
     // -everything in upper case;
@@ -419,38 +419,6 @@ class GMapsGeocoder extends Geocoder {
         }
         return $address['text'];
     }
-
-    // Search for the lign from the given address that is the closest to the geocoded thoroughfareName
-    // and replaces the corresponding lign in the geocoded text by it.
-    static protected function fixStreetNumber(&$address)
-    {
-        if (isset($address['thoroughfareName'])) {
-            $thoroughfareName  = $address['thoroughfareName'];
-            $thoroughfareToken = strtoupper(trim(preg_replace(array("/[,\"'#~:;_\-]/", "/\r\n/"),
-                                                              array("", "\n"), $thoroughfareName)));
-            $geolocLines = explode("\n", $address['geoloc']);
-            $textLines   = explode("\n", $address['text']);
-            $mindist = strlen($thoroughfareToken);
-            $minpos  = 0;
-            $pos     = 0;
-            foreach ($textLines as $i => $token) {
-                if (($l = levenshtein(strtoupper(trim(preg_replace(array("/[,\"'#~:;_\-]/", "/\r\n/"),
-                                                                   array("", "\n"), $token))),
-                                      $thoroughfareToken)) < $mindist) {
-                    $mindist = $l;
-                    $minpos  = $i;
-                }
-            }
-            foreach ($geolocLines as $i => $line) {
-                if (strtoupper(trim($thoroughfareName)) == strtoupper(trim($line))) {
-                    $pos = $i;
-                    break;
-                }
-            }
-            $geolocLines[$pos] = $textLines[$minpos];
-            $address['geoloc'] = implode("\n", $geolocLines);
-        }
-    }
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
index 7b50b25..a6948ac 100644 (file)
@@ -77,7 +77,7 @@ class Marketing
         global $globals;
 
         if ($from == 'staff' || !($user = User::getSilent($sender))) {
-            return '"L\'équipe de Polytechnique.org" <register@' . $globals->mail->domain . '>';
+            return "\"L'équipe de Polytechnique.org\" <register@" . $globals->mail->domain . '>';
         }
         return '"' . $user->fullName() . '" <' . $user->bestEmail() . '>';
     }
@@ -116,7 +116,7 @@ class Marketing
         }
         $sender = substr($this->sender_mail, 1, strpos($this->sender_mail, '"', 2)-1);
         $text = str_replace(array('%%hash%%', '%%sender%%', '%%personal_notes%%'),
-                            array($this->hash, $this->sender_mail, ''), $text);
+                            array($this->hash, "Cordialement,\n-- \n" . $this->sender_mail, ''), $text);
         $mailer = new PlMailer();
         $mailer->setFrom($this->sender_mail);
         $mailer->addTo($this->user['mail']);
@@ -136,7 +136,8 @@ class Marketing
         $this->engine->process($this->user);
         if ($valid) {
             require_once 'validations.inc.php';
-            $valid = new MarkReq(User::getSilent($this->sender), $this->user['user'], $this->user['mail'],
+            $sender = User::getSilent($this->sender);
+            $valid = new MarkReq($sender, $this->user['user'], $this->user['mail'],
                                  $this->from == 'user', $this->type, $this->data, $this->personal_notes);
             $valid->submit();
         }
@@ -186,18 +187,12 @@ class Marketing
         }
     }
 
-    static public function getAliveUsersCount()
-    {
-        $uf = new UserFilter(new PFC_Not(new UFC_Dead()));
-        return $uf->getTotalCount();
-    }
-
     static public function relance(PlUser &$user, $nbx = -1)
     {
         global $globals;
 
         if ($nbx < 0) {
-            $nbx = self::getAliveUsersCount();
+            $nbx = $globals->core->NbIns;
         }
 
         $res = XDB::fetchOneCell('SELECT  r.date, r.email, r.bestalias
@@ -254,10 +249,12 @@ class AnnuaireMarketing implements MarketingEngine
                      . "Pour y figurer, il te suffit de visiter cette page ou de copier cette adresse "
                      . "dans la barre de ton navigateur :";
         if ($from === null) {
-            $this->signature = "L'équipe de Polytechnique.org,\n"
-                             . "Le portail des élèves & anciens élèves de l'École polytechnique";
+            $page = new XorgPage();
+            $page->changeTpl('include/signature.mail.tpl', NO_SKIN);
+            $page->assign('mail_part', 'text');
+            $this->signature = $page->raw();
         } else {
-            $this->signature = "%%sender%%";
+            $this->signature = '%%sender%%';
         }
         if (is_null($personal_notes) || $personal_notes == '') {
             $this->personal_notes = '%%personal_notes%%';
@@ -291,7 +288,6 @@ class AnnuaireMarketing implements MarketingEngine
         $page->assign('intro', $this->getIntro());
         $page->assign('u', $user);
         $page->assign('sign', $this->getSignature());
-        $page->assign('num_users', Marketing::getAliveUsersCount());
         $page->assign('personal_notes', $this->getPersonalNotes());
     }
 
index 272f1e4..d954263 100644 (file)
@@ -189,7 +189,7 @@ function build_sort_name(&$search_names, &$sn_types)
     return $name;
 }
 
-function set_profile_display(&$display_names, $pid)
+function set_profile_display(&$display_names, Profile $profile)
 {
     XDB::execute("UPDATE  profile_display
                      SET  public_name = {?}, private_name = {?},
@@ -197,16 +197,14 @@ function set_profile_display(&$display_names, $pid)
                    WHERE  pid = {?}",
                  $display_names['public_name'], $display_names['private_name'],
                  $display_names['directory_name'], $display_names['short_name'],
-                 $display_names['sort_name'], $pid);
+                 $display_names['sort_name'], $profile->id());
 
-    /* XXX: Inefficient, should directly take the profile as parameter */
-    $profile = Profile::get($pid);
     $owner = $profile->owner();
     if ($owner) {
         XDB::execute('UPDATE  accounts
-                         SET  full_name = {?}
+                         SET  full_name = {?}, directory_name = {?}
                        WHERE  uid = {?}',
-                     $display_names['public_name'], $owner->id());
+                     $display_names['public_name'], $display_names['directory_name'], $owner->id());
     }
 }
 
diff --git a/include/profil.func.inc.php b/include/profil.func.inc.php
deleted file mode 100644 (file)
index 61b0356..0000000
+++ /dev/null
@@ -1,356 +0,0 @@
-<?php
-/***************************************************************************
- *  Copyright (C) 2003-2010 Polytechnique.org                              *
- *  http://opensource.polytechnique.org/                                   *
- *                                                                         *
- *  This program is free software; you can redistribute it and/or modify   *
- *  it under the terms of the GNU General Public License as published by   *
- *  the Free Software Foundation; either version 2 of the License, or      *
- *  (at your option) any later version.                                    *
- *                                                                         *
- *  This program is distributed in the hope that it will be useful,        *
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
- *  GNU General Public License for more details.                           *
- *                                                                         *
- *  You should have received a copy of the GNU General Public License      *
- *  along with this program; if not, write to the Free Software            *
- *  Foundation, Inc.,                                                      *
- *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
- ***************************************************************************/
-
-
-
-function replace_ifset(&$var,$req) {
-    if (Env::has($req)){
-        $var = Env::v($req);
-    }
-}
-
-function replace_ifset_i(&$var,$req,$i) {
-    if (isset($_REQUEST[$req][$i])){
-        $var[$i] = $_REQUEST[$req][$i];
-    }
-}
-
-function replace_ifset_i_j(&$var,$req,$i,$j) {
-    if (isset($_REQUEST[$req][$j])){
-        $var[$i] = $_REQUEST[$req][$j];
-    }
-}
-
-//pour rentrer qqchose dans la base
-function put_in_db($string){
-    return trim($string);
-}
-
-// example of use for diff_user_details : get $b from database, $a from other site
-//  calculate diff $c and add $c in database (with set_user_details)
-function diff_user_details(&$a, &$b, $view = 'private') { // compute $c = $a - $b
-//    if (!isset($b) || !$b || !is_array($b) || count($b) == 0)
-//        return $a;
-//    if (!isset($a) || !$a || !is_array($a))
-//        $c = array();
-//    else
-        $c = $a;
-    foreach ($b as $val => $bvar) {
-        if (isset($a[$val])) {
-            if ($a[$val] == $bvar)
-                unset($c[$val]);
-            else {
-                switch ($val) {
-                    case 'adr' : if (!($c['adr'] = diff_user_addresses($a[$val], $bvar, $view))) unset($c['adr']); break;
-                    case 'adr_pro' : if (!($c['adr_pro'] = diff_user_pros($a[$val], $bvar, $view))) unset($c['adr_pro']); break;
-                    case 'tels' : if (!($c['tels'] = diff_user_tels($a[$val], $bvar, $view))) unset($c['tels']); break;
-                }
-            }
-        }
-    }
-    // don't modify freetext if you don't have the right
-    if (isset($b['freetext_pub']) && !has_user_right($b['freetext_pub'], $view) && isset($c['freetext']))
-        unset($c['freetext']);
-    if (!count($c))
-        return false;
-    return $c;
-}
-
-function same_tel(&$a, &$b) {
-    $numbera = format_phone_number((string) $a);
-    $numberb = format_phone_number((string) $b);
-    return $numbera === $numberb;
-}
-function same_address(&$a, &$b) {
-    return
-        (same_field($a['adr1'],$b['adr1'])) &&
-        (same_field($a['adr2'],$b['adr2'])) &&
-        (same_field($a['adr3'],$b['adr3'])) &&
-        (same_field($a['postcode'],$b['postcode'])) &&
-        (same_field($a['city'],$b['city'])) &&
-        (same_field($a['countrytxt'],$b['countrytxt'])) &&
-        true;
-}
-function same_pro(&$a, &$b) {
-    return
-        (same_field($a['entreprise'],$b['entreprise'])) &&
-        (same_field($a['fonction'],$b['fonction'])) &&
-        true;
-}
-function same_field(&$a, &$b) {
-    if ($a == $b) return true;
-    if (is_array($a)) {
-        if (!is_array($b) || count($a) != count($b)) return false;
-        foreach ($a as $val => $avar)
-            if (!isset($b[$val]) || !same_field($avar, $b[$val])) return false;
-        return true;
-    } elseif (is_string($a))
-        return (mb_strtoupper($a) == mb_strtoupper($b));
-}
-function diff_user_tel(&$a, &$b) {
-    $c = $a;
-    if (isset($b['tel_pub']) && isset($a['tel_pub']) && has_user_right($b['tel_pub'], $a['tel_pub']))
-        $c['tel_pub'] = $b['tel_pub'];
-    foreach ($b as $val => $bvar) {
-        if (isset($a[$val])) {
-            if ($a[$val] == $bvar)
-                unset($c[$val]);
-        }
-    }
-    if (!count($c))
-        return false;
-    $c['telid'] = $a['telid'];
-    return $c;
-}
-
-function diff_user_tels(&$a, &$b)
-{
-    $c = $a;
-    $telids_b = array();
-    foreach ($b as $i => $telb) $telids_b[$telb['telid']] = $i;
-
-    foreach ($a as $j => $tela) {
-        if (isset($tela['telid'])) {
-            // if b has a tel with the same telid, compute diff
-            if (isset($telids_b[$tela['telid']])) {
-                if (!($c[$j] = diff_user_tel($tela, $b[$telids_b[$tela['adrid']]]))) {
-                    unset($c[$j]);
-                }
-                unset($telids_b[$tela['telid']]);
-            }
-        } else {
-            // try to find a match in b
-            foreach ($b as $i => $telb) {
-                if (same_tel($tela['tel'], $telb['tel'])) {
-                    $tela['telid'] = $telb['telid'];
-                    if (!($c[$j] = diff_user_tel($tela, $telb))) {
-                        unset($c[$j]);
-                    }
-                    unset($telids_b[$tela['telid']]);
-                    break;
-                }
-            }
-        }
-    }
-
-    foreach ($telids_b as $telidb => $i)
-        $c[] = array('telid' => $telidb, 'remove' => 1);
-    return $c;
-}
-
-function diff_user_address($a, $b) {
-    if (isset($b['pub']) && isset($a['pub']) && has_user_right($b['pub'], $a['pub']))
-        $a['pub'] = $b['pub'];
-    if (isset($b['tels'])) {
-        if (isset($a['tels'])) {
-            $avar = $a['tels'];
-        } else {
-            $avar = array();
-        }
-        $ctels = diff_user_tels($avar, $b['tels']);
-
-        if (!count($ctels)) {
-            $b['tels'] = $avar;
-        } else {
-            $a['tels'] = $ctels;
-        }
-    }
-
-    foreach ($a as $val => $avar) {
-        if (!isset($b[$val]) || !same_field($avar,$b[$val])) {
-            return $a;
-        }
-    }
-    return false;
-}
-
-// $b need to use adrids
-function diff_user_addresses(&$a, &$b) {
-    $c = $a;
-    $adrids_b = array();
-    foreach ($b as $i => $adrb) $adrids_b[$adrb['adrid']] = $i;
-
-    foreach ($a as $j => $adra) {
-        if (isset($adra['adrid'])) {
-            // if b has an address with the same adrid, compute diff
-            if (isset($adrids_b[$adra['adrid']])) {
-                if (!($c[$j] = diff_user_address($adra, $b[$adrids_b[$adra['adrid']]])))
-                    unset($c[$j]);
-                unset($adrids_b[$adra['adrid']]);
-            }
-        } else {
-            // try to find a match in b
-            foreach ($b as $i => $adrb) {
-                if (same_address($adra, $adrb)) {
-                    $adra['adrid'] = $adrb['adrid'];
-                    if (!($c[$j] = diff_user_address($adra, $adrb)))
-                        unset($c[$j]);
-                    if ($c[$j]) $c[$j]['adrid'] = $adra['adrid'];
-                    unset($adrids_b[$adra['adrid']]);
-                    break;
-                }
-            }
-        }
-    }
-
-    foreach ($adrids_b as $adridb => $i)
-        $c[] = array('adrid' => $adridb, 'remove' => 1);
-
-    if (!count($c)) return false;
-    return $c;
-}
-
-function diff_user_pro($a, &$b, $view = 'private') {
-    if (isset($b['pub']) && isset($a['pub']) && has_user_right($b['pub'], $a['pub']))
-        $a['pub'] = $b['pub'];
-    if (isset($b['adr_pub']) && !has_user_right($b['adr_pub'], $view)) {
-        unset($a['adr1']);
-        unset($a['adr2']);
-        unset($a['adr3']);
-        unset($a['postcode']);
-        unset($a['city']);
-        unset($a['countrytxt']);
-        unset($a['region']);
-    }
-    if (isset($b['adr_pub']) && isset($a['adr_pub']) && has_user_right($b['adr_pub'], $a['adr_pub']))
-        $a['adr_pub'] = $b['adr_pub'];
-    if (isset($b['tels'])) {
-        if (isset($a['tels']))
-            $avar = $a['tels'];
-        else
-            $avar = array();
-        $ctels = diff_user_tels($avar, $b['tels']);
-
-        if (!count($ctels)) {
-            $b['tels'] = $avar;
-        } else
-            $a['tels'] = $ctels;
-    }
-    if (isset($b['email_pub']) && !has_user_right($b['email_pub'], $view))
-        unset($a['email']);
-    if (isset($b['email_pub']) && isset($a['email_pub']) && has_user_right($b['email_pub'], $a['email_pub']))
-        $a['email_pub'] = $b['email_pub'];
-    foreach ($a as $val => $avar) {
-        if (($avar && !isset($b[$val])) || !same_field($avar,$b[$val])) {
-            return $a;
-        }
-    }
-    return false;
-}
-
-// $b need to use entrids
-function diff_user_pros(&$a, &$b, $view = 'private') {
-    $c = $a;
-    $entrids_b = array();
-    foreach ($b as $i => $prob) $entrids_b[$prob['entrid']] = $i;
-
-    foreach ($a as $j => $proa) {
-        if (isset($proa['entrid'])) {
-            // if b has an address with the same adrid, compute diff
-            if (isset($entrids_b[$proa['entrid']])) {
-                if (!($c[$j] = diff_user_pro($proa, $b[$entrids_b[$proa['entrid']]], $view)))
-                    unset($c[$j]);
-                unset($entrids_b[$proa['entrid']]);
-            }
-        } else {
-            // try to find a match in b
-            foreach ($b as $i => $prob) {
-                if (same_pro($proa, $prob)) {
-                    $proa['entrid'] = $prob['entrid'];
-                    if (!($c[$j] = diff_user_pro($proa, $prob, $view)))
-                        unset($c[$j]);
-                    if ($c[$j]) $c[$j]['entrid'] = $proa['entrid'];
-                    unset($entrids_b[$proa['entrid']]);
-                    break;
-                }
-            }
-        }
-    }
-
-    foreach ($entrids_b as $entridb => $i)
-        $c[] = array('entrid' => $entridb, 'remove' => 1);
-
-    if (!count($c)) return false;
-    return $c;
-}
-
-function format_phone_number($tel)
-{
-    $tel = trim($tel);
-    if (substr($tel, 0, 3) === '(0)') {
-        $tel = '33' . $tel;
-    }
-    $tel = preg_replace('/\(0\)/',  '', $tel);
-    $tel = preg_replace('/[^0-9]/', '', $tel);
-    if (substr($tel, 0, 2) === '00') {
-        $tel = substr($tel, 2);
-    } else if(substr($tel, 0, 1) === '0') {
-        $tel = '33' . substr($tel, 1);
-    }
-    return $tel;
-}
-
-function format_display_number($tel, &$error, $format = array('format'=>'','phoneprf'=>''))
-{
-    $error = false;
-    $ret = '';
-    $tel_length = strlen($tel);
-    if((!isset($format['phoneprf'])) || ($format['phoneprf'] == '')) {
-        $res = XDB::query("SELECT phonePrefix AS phoneprf, phoneFormat AS format
-                             FROM geoloc_countries
-                            WHERE phonePrefix = {?} OR phonePrefix = {?} OR phonePrefix = {?}
-                            LIMIT 1",
-                          substr($tel, 0, 1), substr($tel, 0, 2), substr($tel, 0, 3));
-        if ($res->numRows() == 0) {
-            $error = true;
-            return '+' . $tel;
-        }
-        $format = $res->fetchOneAssoc();
-    }
-    if ($format['format'] == '') {
-        $format['format'] = '+p';
-    }
-    $j = 0;
-    $i = strlen($format['phoneprf']);
-    $length_format = strlen($format['format']);
-    while (($i < $tel_length) && ($j < $length_format)){
-        if ($format['format'][$j] == '#'){
-            $ret .= $tel[$i];
-            $i++;
-        } else if ($format['format'][$j] == 'p') {
-            $ret .= $format['phoneprf'];
-        } else {
-            $ret .= $format['format'][$j];
-        }
-        $j++;
-    }
-    for (; $i < $tel_length - 1; $i += 2) {
-        $ret .= ' ' . substr($tel, $i, 2);
-    }
-    //appends last alone number to the last block
-    if ($i < $tel_length) {
-        $ret .= substr($tel, $i);
-    }
-    return $ret;
-}
-
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
-?>
index 75f770c..506b8ac 100644 (file)
@@ -35,6 +35,8 @@ abstract class ProfileField
         Profile::FETCH_PHONES         => 'ProfilePhones',
         Profile::FETCH_MENTOR_SECTOR  => 'ProfileMentoringSectors',
         Profile::FETCH_MENTOR_COUNTRY => 'ProfileMentoringCountries',
+        Profile::FETCH_JOB_TERMS      => 'ProfileJobTerms',
+        Profile::FETCH_MENTOR_TERMS   => 'ProfileMentoringTerms',
     );
 
     /** The profile to which this field belongs
@@ -46,7 +48,8 @@ abstract class ProfileField
      * @param $pids An array of pids
      * @param $visibility The level of visibility fetched fields must have
      * @return a PlIterator yielding data suitable for a "new ProfileBlah($data)"
-     * XXX MUST be reimplemented for each kind of ProfileField
+     *
+     * MUST be reimplemented for each kind of ProfileField.
      */
     public static function fetchData(array $pids, ProfileVisibility $visibility)
     {
@@ -91,6 +94,9 @@ class ProfileFieldIterator implements PlIterator
 
     public function __construct($cls, array $pids, ProfileVisibility $visibility)
     {
+        if (is_numeric($cls) && isset(ProfileField::$fields[$cls])) {
+            $cls = ProfileField::$fields[$cls];
+        }
         $this->data = call_user_func(array($cls, 'fetchData'), $pids, $visibility);
         $this->cls = $cls;
     }
@@ -123,99 +129,6 @@ class ProfileFieldIterator implements PlIterator
 }
 // }}}
 
-// {{{ class Phone
-class Phone
-{
-    const TYPE_FAX    = 'fax';
-    const TYPE_FIXED  = 'fixed';
-    const TYPE_MOBILE = 'mobile';
-    public $type;
-
-    public $search;
-    public $display;
-    public $comment = '';
-
-    const LINK_JOB     = 'pro';
-    const LINK_ADDRESS = 'address';
-    const LINK_PROFILE = 'user';
-    const LINK_COMPANY = 'hq';
-    public $link_type;
-    public $link_id;
-
-    public $id;
-
-    /** Fields are :
-     * $type, $search, $display, $link_type, $link_id, $comment, $pid, $id
-     */
-    public function __construct($data)
-    {
-        foreach ($data as $key => $val) {
-            $this->$key = $val;
-        }
-    }
-
-    /** Returns the unique ID of a phone
-     * This ID will allow to link it to an address, a user or a job
-     * The format is address_addressId_phoneId (where phoneId is the id
-     * of the phone in the list of those associated with the address)
-     */
-    public function uid() {
-        return $this->link_type . '_' . $this->link_id . '_' . $this->id;
-    }
-
-    public function hasFlags($flags) {
-        return $this->hasType($flags) && $this->hasLink($flags);
-    }
-
-    /** Returns true if this phone's type matches the flags
-     */
-    public function hasType($flags) {
-        $flags = $flags & Profile::PHONE_TYPE_ANY;
-        return (
-            ($flags == Profile::PHONE_TYPE_ANY)
-            ||
-            (($flags & Profile::PHONE_TYPE_FAX) && $this->type == self::TYPE_FAX)
-            ||
-            (($flags & Profile::PHONE_TYPE_FIXED) && $this->type == self::TYPE_FIXED)
-            ||
-            (($flags & Profile::PHONE_TYPE_MOBILE) && $this->type == self::TYPE_MOBILE)
-        );
-    }
-
-    /** User accessible version of the type
-     */
-    public function displayType($short = false)
-    {
-        switch ($this->type) {
-          case Phone::TYPE_FIXED:
-            return $short ? 'Tél' : 'Fixe';
-          case Phone::TYPE_FAX:
-            return 'Fax';
-          case Phone::TYPE_MOBILE:
-            return $short ? 'Mob' : 'Mobile';
-          default:
-            return $this->type;
-        }
-    }
-
-    /** Returns true if this phone's link matches the flags
-     */
-    public function hasLink($flags) {
-        $flags = $flags & Profile::PHONE_LINK_ANY;
-        return (
-            ($flags == Profile::PHONE_LINK_ANY)
-            ||
-            (($flags & Profile::PHONE_LINK_COMPANY) && $this->link_type == self::LINK_COMPANY)
-            ||
-            (($flags & Profile::PHONE_LINK_JOB) && $this->link_type == self::LINK_JOB)
-            ||
-            (($flags & Profile::PHONE_LINK_ADDRESS) && $this->link_type == self::LINK_ADDRESS)
-            ||
-            (($flags & Profile::PHONE_LINK_PROFILE) && $this->link_type == self::LINK_PROFILE)
-        );
-    }
-}
-// }}}
 // {{{ class Company
 class Company
 {
@@ -238,7 +151,7 @@ class Company
 
     public function setPhone(Phone &$phone)
     {
-        if ($phone->link_type == Phone::LINK_COMPANY && $phone->link_id == $this->id) {
+        if ($phone->linkType() == Phone::LINK_COMPANY && $phone->linkId() == $this->id) {
             $this->phone = $phone;
         }
     }
@@ -261,6 +174,7 @@ class Job
     public $company = null;
     public $phones = array();
     public $address = null;
+    public $terms = array();
 
     public $jobid;
 
@@ -281,6 +195,11 @@ class Job
             $this->$key = $val;
         }
         $this->company = CompanyList::get($this->jobid);
+        if (is_null($this->company)) {
+            require_once 'validations.inc.php';
+            $entreprise = ProfileValidate::get_typed_requests($this->pid, 'entreprise');
+            $this->company = new Company(array('name' =>  $entreprise[$this->id]->name));
+        }
     }
 
     public function phones()
@@ -295,8 +214,8 @@ class Job
 
     public function addPhone(Phone &$phone)
     {
-        if ($phone->link_type == Phone::LINK_JOB && $phone->link_id == $this->id && $phone->pid == $this->pid) {
-            $this->phones[$phone->uid()] = $phone;
+        if ($phone->linkType() == Phone::LINK_JOB && $phone->linkId() == $this->id && $phone->pid() == $this->pid) {
+            $this->phones[$phone->uniqueId()] = $phone;
         }
     }
 
@@ -306,6 +225,30 @@ class Job
             $this->address = $address;
         }
     }
+
+    public function addTerm(JobTerm &$term)
+    {
+        $this->terms[$term->jtid] = $term;
+    }
+}
+// }}}
+// {{{ class JobTerm
+class JobTerm
+{
+    public $jtid;
+    public $full_name;
+    public $pid;
+    public $jid;
+
+    /** Fields are:
+     * pid, jid, jtid, full_name
+     */
+    public function __construct($data)
+    {
+        foreach ($data as $key => $val) {
+            $this->$key = $val;
+        }
+    }
 }
 // }}}
 // {{{ class Address
@@ -356,9 +299,9 @@ class Address
     public function addPhone(Phone &$phone)
     {
         if (
-            $phone->link_type == Phone::LINK_ADDRESS && $phone->link_id == $this->id &&
-            ($this->link_type == self::LINK_COMPANY || $phone->pid == $this->pid) ) {
-            $this->phones[$phone->uid()] = $phone;
+            $phone->linkType() == Phone::LINK_ADDRESS && $phone->linkId() == $this->id &&
+            ($this->link_type == self::LINK_COMPANY || $phone->pid() == $this->pid) ) {
+            $this->phones[$phone->uniqueId()] = $phone;
         }
     }
 
@@ -650,7 +593,7 @@ class ProfileMentoringCountries extends ProfileField
  * 3) attach addresses to jobs and profiles
  */
 
-// {{{ Database schema (profile_address, profile_phones, profile_jobs)
+// {{{ Database schema (profile_address, profile_jobs)
 /** The database for this is very unclear, so here is a little schema :
  * profile_job describes a Job, links to:
  * - a Profile, through `pid`
@@ -678,33 +621,11 @@ class ProfileMentoringCountries extends ProfileField
  *              with that of the row of profile_job for the related job)
  *   - `id` is the id of the job to which we refer (i.e `profile_job.id`)
  *
- * profile_phone describes a Phone, which can be related to an Address,
- * a Job, a Profile or a Company:
- * - for a Profile:
- *   - `link_type` is set to 'user'
- *   - `link_id` is set to 0
- *   - `pid` is set to the id of the related Profile
- *
- * - for a Company:
- *   - `link_type` is set to 'hq'
- *   - `link_id` is set to the id of the related Company
- *   - `pid` is set to 0
- *
- * - for an Address (this is only possible for a *personal* address)
- *   - `link_type` is set to 'address'
- *   - `link_id` is set to the related Address `id`
- *   - `pid` is set to the related Address `pid`
- *
- * - for a Job:
- *   - `link_type` is set to 'pro'
- *   - `link_id` is set to the related Job `id` (not `jobid`)
- *   - `pid` is set to the related Job `pid`
- *
+ * For the documentation of the phone table, please see classes/phone.php.
  *
  * The possible relations are as follow:
  * An Address can be linked to a Company, a Profile, a Job
  * A Job is linked to a Company and a Profile
- * A Phone can be linked to a Company, a Profile, a Job, or a Profile-related Address
  */
 // }}}
 
@@ -771,8 +692,8 @@ class ProfileAddresses extends ProfileField
     {
         $p = $phones->get(Profile::PHONE_LINK_ADDRESS | Profile::PHONE_TYPE_ANY);
         foreach ($p as $phone) {
-            if ($phone->link_type == Phone::LINK_ADDRESS && array_key_exists($phone->link_id, $this->addresses)) {
-                $this->addresses[$phone->link_id]->addPhone($phone);
+            if ($phone->linkType() == Phone::LINK_ADDRESS && array_key_exists($phone->linkId(), $this->addresses)) {
+                $this->addresses[$phone->linkId()]->addPhone($phone);
             }
         }
     }
@@ -809,12 +730,8 @@ class ProfilePhones extends ProfileField
 
     public static function fetchData(array $pids, ProfileVisibility $visibility)
     {
-        $data = XDB::iterator('SELECT  tel_type AS type, search_tel AS search, display_tel AS display, link_type, comment, pid, link_id, tel_id AS id
-                                 FROM  profile_phones
-                                WHERE  pid IN {?} AND pub IN {?}
-                             ORDER BY  ' . XDB::formatCustomOrder('pid', $pids),
-                                 $pids, $visibility->levels());
-        return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid'));
+        $it = Phone::iterate($pids, array(), array(), $visibility->levels());
+        return PlIteratorUtils::subIterator($it->value(), PlIteratorUtils::arrayValueCallback('pid'));
     }
 }
 // }}}
@@ -867,8 +784,8 @@ class ProfileJobs extends ProfileField
     {
         $p = $phones->get(Profile::PHONE_LINK_JOB | Profile::PHONE_TYPE_ANY);
         foreach ($p as $phone) {
-            if ($phone->link_type == Phone::LINK_JOB && array_key_exists($phone->link_id, $this->jobs)) {
-                $this->jobs[$phone->link_id]->addPhone($phone);
+            if ($phone->linkType() == Phone::LINK_JOB && array_key_exists($phone->linkId(), $this->jobs)) {
+                $this->jobs[$phone->linkId()]->addPhone($phone);
             }
         }
     }
@@ -889,9 +806,64 @@ class ProfileJobs extends ProfileField
             $this->company = $companies[$job->jobid];
         }
     }
+
+    public function addJobTerms(ProfileJobTerms $jobterms)
+    {
+        $terms = $jobterms->get();
+        foreach ($terms as $term) {
+            if ($this->pid == $term->pid && array_key_exists($term->jid, $this->jobs)) {
+                $this->jobs[$term->jid]->addTerm(&$term);
+            }
+        }
+    }
 }
 // }}}
+// {{{ class ProfileJobTerms                          [ Field ]
+class ProfileJobTerms extends ProfileField
+{
+    private $jobterms = array();
 
+    public function __construct(PlInnerSubIterator $it)
+    {
+        $this->pid = $it->value();
+        while ($term = $it->next()) {
+            $this->jobterms[] = new JobTerm($term);
+        }
+    }
+
+    public function get()
+    {
+        return $this->jobterms;
+    }
+
+    public static function fetchData(array $pids, ProfileVisibility $visibility)
+    {
+        $data = XDB::iterator('SELECT  jt.jtid, jte.full_name, jt.pid, jt.jid
+                                 FROM  profile_job_term AS jt
+                           INNER JOIN  profile_job AS j ON (jt.pid = j.pid AND jt.jid = j.id)
+                            LEFT JOIN  profile_job_term_enum AS jte USING(jtid)
+                                WHERE  jt.pid IN {?} AND j.pub IN {?}
+                             ORDER BY  ' . XDB::formatCustomOrder('jt.pid', $pids),
+                                 $pids, $visibility->levels());
+        return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid'));
+    }
+}
+// }}}
+// {{{ class ProfileMentoringTerms                    [ Field ]
+class ProfileMentoringTerms extends ProfileJobTerms
+{
+    public static function fetchData(array $pids, ProfileVisibility $visibility)
+    {
+        $data = XDB::iterator('SELECT  mt.jtid, jte.full_name, mt.pid
+                                 FROM  profile_mentor_term AS mt
+                            LEFT JOIN  profile_job_term_enum AS jte USING(jtid)
+                                WHERE  mt.pid IN {?}
+                             ORDER BY  ' . XDB::formatCustomOrder('mt.pid', $pids),
+                                $pids);
+        return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid'));
+    }
+}
+// }}}
 // {{{ class CompanyList
 class CompanyList
 {
@@ -930,16 +902,11 @@ class CompanyList
             self::$companies[$row['id']] = $cp;
         }
 
-        // TODO: determine whether there can be phones attached to a hq's address
         // Add phones to hq
         if (count($newcompanies)) {
-            $it = XDB::iterator('SELECT  search_tel AS search, display_tel AS display, comment, link_id, tel_type AS type, link_type, tel_id AS id
-                                   FROM  profile_phones
-                                  WHERE  link_id IN {?} AND link_type = \'hq\'',
-                                    $newcompanies);
-            while ($row = $it->next()) {
-                $p = new Phone($row);
-                self::$companies[$row['link_id']]->setPhone($p);
+            $it = Phone::iterate(array(), array(Phone::LINK_COMPANY), $newcompanies);
+            while ($phone = $it->next()) {
+                self::$companies[$phone->linkId()]->setPhone($phone);
             }
         }
 
index 3def558..2f77f82 100644 (file)
@@ -78,7 +78,10 @@ function check_email($email, $message)
 
 function check_account()
 {
-    return S::v('watch_account');
+    if (S::user()) {
+        return S::user()->watch;
+    }
+    return false;
 }
 
 function check_redirect($red = null)
index 94f76c2..09dc307 100644 (file)
@@ -140,6 +140,18 @@ class UserFilterBuilder
         return Env::blank($key, $strict);
     }
 
+    public function hasAlnum($key)
+    {
+        $str = $this->s($key);
+        return preg_match('/[a-z0-9]/i', $str);
+    }
+
+    public function hasAlpha($key)
+    {
+        $str = $this->s($key);
+        return preg_match('/[a-z]/i', $str);
+    }
+
     public function isOn($key)
     {
         return $this->has($key) && $this->t($key) == 'on';
@@ -181,6 +193,7 @@ class UFB_AdvancedSearch extends UserFilterBuilder
             new UFBF_JobSector('sector', 'Poste'),
             new UFBF_JobDescription('jobdescription', 'Fonction'),
             new UFBF_JobCv('cv', 'CV'),
+            new UFBF_JobTerms('jobterm', 'Mots-clefs'),
 
             new UFBF_Nationality('nationaliteTxt', 'nationalite', 'Nationalité'),
             new UFBF_Binet('binetTxt', 'binet', 'Binet'),
@@ -194,6 +207,8 @@ class UFB_AdvancedSearch extends UserFilterBuilder
             new UFBF_Comment('free', 'Commentaire'),
             new UFBF_Phone('phone_number', 'Téléphone'),
             new UFBF_Networking('networking_address', 'networking_type', 'Networking et sites webs'),
+
+            new UFBF_Mentor('only_referent', 'Référent'),
         );
         parent::__construct($fields, $envprefix);
     }
@@ -206,9 +221,8 @@ class UFB_MentorSearch extends UserFilterBuilder
     public function __construct($envprefix = '')
     {
         $fields = array(
-            new UFBF_MentorCountry('pays_sel'),
-            new UFBF_MentorSectorization('sector', '', UFC_Mentor_Sectorization::SECTOR),
-            new UFBF_MentorSectorization('subSector', '', UFC_Mentor_Sectorization::SUBSECTOR),
+            new UFBF_MentorCountry('country'),
+            new UFBF_MentorTerm('jobterm', 'jobtermText'),
             new UFBF_MentorExpertise('expertise'),
         );
         parent::__construct($fields, $envprefix);
@@ -436,7 +450,7 @@ abstract class UFBF_Mixed extends UFB_Field
 
     protected function check(UserFilterBuilder &$ufb)
     {
-        if ($ufb->blank($this->envfieldindex) && $ufb->blank($this->envfield)) {
+        if ($ufb->blank($this->envfieldindex) && !$ufb->hasAlnum($this->envfield)) {
             $this->empty = true;
             return true;
         }
@@ -450,7 +464,7 @@ abstract class UFBF_Mixed extends UFB_Field
             }
             $this->val = array($index);
         } else {
-            $indexes = DirEnum::getIDs($this->direnum, $ufb->t($this->envfield), 
+            $indexes = DirEnum::getIDs($this->direnum, $ufb->t($this->envfield),
                 $ufb->b('exact') ? XDB::WILDCARD_EXACT : XDB::WILDCARD_CONTAINS);
             if (count($indexes) == 0) {
                 return false;
@@ -842,6 +856,16 @@ class UFBF_JobSector extends UFBF_Mixed
 }
 // }}}
 
+// {{{ class UFBF_JobTerms
+class UFBF_JobTerms extends UFBF_Index
+{
+    protected function buildUFC(UserFilterBuilder &$ufb)
+    {
+        return new UFC_Job_Terms($this->val);
+    }
+}
+// }}}
+
 // {{{ class UFBF_JobDescription
 class UFBF_JobDescription extends UFBF_Text
 {
@@ -1027,6 +1051,16 @@ class UFBF_Networking extends UFBF_Text
 }
 // }}}
 
+// {{{ class UFBF_Mentor
+class UFBF_Mentor extends UFBF_Bool
+{
+    protected function buildUFC(UserFilterBuilder &$ufb)
+    {
+        return new UFC_Mentor();
+    }
+}
+// }}}
+
 // {{{ class UFBF_MentorCountry
 class UFBF_MentorCountry extends UFBF_Text
 {
@@ -1037,6 +1071,16 @@ class UFBF_MentorCountry extends UFBF_Text
 }
 // }}}
 
+// {{{ class UFBF_Mentorterm
+class UFBF_MentorTerm extends UFBF_Index
+{
+    protected function buildUFC(UserFilterBuilder &$ufb)
+    {
+        return new UFC_Mentor_Terms($this->val);
+    }
+}
+// }}}
+
 // {{{ class UFBF_MentorSectorization
 class UFBF_MentorSectorization extends UFBF_Index
 {
index 8d65239..0612d2f 100644 (file)
@@ -51,7 +51,7 @@ class SearchSet extends ProfileSet
     private $score    = null;
     private $quick    = false;
 
-    public function __construct($quick = false, $no_search = false, PlFilterCondition $cond = null)
+    public function __construct($quick = false, PlFilterCondition $cond = null)
     {
         if ($no_search) {
             return;
@@ -60,21 +60,24 @@ class SearchSet extends ProfileSet
         $this->quick = $quick;
 
         if (is_null($cond)) {
-            $this->conds = new PFC_And();
+            $conds = new PFC_And();
         } else if ($cond instanceof PFC_And) {
-            $this->conds = $cond;
+            $conds = $cond;
         } else {
-            $this->conds = new PFC_And($cond);
+            $conds = new PFC_And($cond);
         }
 
         if ($quick) {
-            $this->getQuick();
+            $this->getQuick($conds);
         } else {
-            $this->getAdvanced();
+            $this->getAdvanced($conds);
         }
     }
 
-    private function getQuick()
+    /** Sets up the conditions for a Quick Search
+     * @param $conds Additional conds (as a PFC_And)
+     */
+    private function getQuick($conds)
     {
         if (!S::logged()) {
             Env::kill('with_soundex');
@@ -88,21 +91,24 @@ class SearchSet extends ProfileSet
         }
 
         $ufc = $ufb->getUFC();
-        $this->conds->addChild($ufc);
+        $conds->addChild($ufc);
 
         $orders = $ufb->getOrders();
 
         if (S::logged() && Env::has('nonins')) {
-            $this->conds = new PFC_And($this->conds,
+            $conds = new PFC_And($conds,
                 new PFC_Not(new UFC_Dead()),
                 new PFC_Not(new UFC_Registered())
             );
         }
 
-        parent::__construct($this->conds, $orders);
+        parent::__construct($conds, $orders);
     }
 
-    private function getAdvanced()
+    /** Sets up the conditions for an Advanced Search
+     * @param $conds Additional conds (as a PFC_And)
+     */
+    private function getAdvanced($conds)
     {
         $this->advanced = true;
         require_once 'ufbuilder.inc.php';
@@ -112,7 +118,24 @@ class SearchSet extends ProfileSet
             return;
         }
 
-        $this->conds->addChild($ufb->getUFC());
+        $ufc = $ufb->getUFC();
+        $conds->addChild($ufc);
+
+        $orders = $ufb->getOrders();
+
+        parent::__construct($conds, $orders);
+    }
+
+    /** Add a "rechercher=Chercher" field to the query to simulate the POST
+     * behaviour.
+     */
+    public function args()
+    {
+        $args = parent::args();
+        if (!isset($args['rechercher'])) {
+            $args['rechercher'] = 'Chercher';
+        }
+        return $args;
     }
 
     protected function &getFilterResults(PlFilter &$pf, PlLimit $limit)
@@ -122,6 +145,8 @@ class SearchSet extends ProfileSet
     }
 }
 
+/** Simple set based on an array of User objects
+ */
 class ArraySet extends ProfileSet
 {
     public function __construct(array $users)
@@ -136,6 +161,9 @@ class ArraySet extends ProfileSet
     }
 }
 
+/** A multipage view for profiles
+ * Allows the display of bounds when sorting by name or promo.
+ */
 abstract class ProfileView extends MultipageView
 {
     protected function getBoundValue($obj)
@@ -172,11 +200,21 @@ abstract class ProfileView extends MultipageView
     }
 }
 
+/** An extended multipage view for profiles, as minifiches.
+ * Allows to sort by:
+ * - score (for a search query)
+ * - name
+ * - promo
+ * - latest modification
+ *
+ * Paramaters for this view are:
+ * - with_score: whether to allow ordering by score (set only for a quick search)
+ * - starts_with: show only names beginning with the given letter
+ */
 class MinificheView extends ProfileView
 {
-    public function __construct(PlSet &$set, $data, array $params)
+    public function __construct(PlSet &$set, array $params)
     {
-        require_once 'education.func.inc.php';
         global $globals;
         $this->entriesPerPage = $globals->search->per_page;
         if (@$params['with_score']) {
@@ -200,7 +238,21 @@ class MinificheView extends ProfileView
                     new UFO_Promo(UserFilter::DISPLAY, true),
                     new UFO_Name(Profile::DN_SORT),
                 ), 'dernière modification'));
-        parent::__construct($set, $data, $params);
+        parent::__construct($set, $params);
+    }
+
+    public function apply(PlPage &$page)
+    {
+        if (array_key_exists('starts_with', $this->params)
+            && $this->params['starts_with'] != ""
+            && $this->params['starts_with'] != null) {
+
+            $this->set->addCond(
+                new UFC_Name(Profile::LASTNAME,
+                    $this->params['starts_with'], UFC_Name::PREFIX)
+            );
+        }
+        return parent::apply($page);
     }
 
     public function templateName()
@@ -211,7 +263,7 @@ class MinificheView extends ProfileView
 
 class MentorView extends ProfileView
 {
-    public function __construct(PlSet &$set, $data, array $params)
+    public function __construct(PlSet &$set, array $params)
     {
         $this->entriesPerPage = 10;
         $this->addSort(new PlViewOrder('rand', array(new PFO_Random(S::i('uid'))), 'aléatoirement'));
@@ -225,7 +277,7 @@ class MentorView extends ProfileView
                     new UFO_Promo(UserFilter::DISPLAY, true),
                     new UFO_Name(Profile::DN_SORT),
                 ), 'dernière modification'));
-        parent::__construct($set, $data, $params);
+        parent::__construct($set, $params);
     }
 
     public function templateName()
@@ -236,7 +288,7 @@ class MentorView extends ProfileView
 
 class TrombiView extends ProfileView
 {
-    public function __construct(PlSet &$set, $data, array $params)
+    public function __construct(PlSet &$set, array $params)
     {
         $this->entriesPerPage = 24;
         $this->defaultkey = 'name';
@@ -254,7 +306,7 @@ class TrombiView extends ProfileView
                         new UFO_Promo(UserFilter::DISPLAY, true),
                         new UFO_Name(Profile::DN_SORT),
                     ), 'promotion'));
-        parent::__construct($set, $data, $params);
+        parent::__construct($set, $params);
     }
 
     public function templateName()
@@ -274,7 +326,7 @@ class TrombiView extends ProfileView
 
 class GadgetView implements PlView
 {
-    public function __construct(PlSet &$set, $data, array $params)
+    public function __construct(PlSet &$set, array $params)
     {
         $this->set =& $set;
     }
index dcc4b63..b268fb6 100644 (file)
@@ -31,7 +31,7 @@ class ValidateIterator extends XOrgDBIterator
 {
     // {{{ constuctor
 
-    public function __construct ()
+    public function __construct()
     {
         parent::__construct('SELECT  data, DATE_FORMAT(stamp, "%Y%m%d%H%i%s")
                                FROM  requests
@@ -437,6 +437,7 @@ abstract class ProfileValidate extends Validate
     public $profile;
     public $profileOwner;
     public $userIsProfileOwner;
+    public $ownerIsRegistered;
 
     // }}}
     // {{{ constructor
@@ -453,11 +454,9 @@ abstract class ProfileValidate extends Validate
         parent::__construct($_user, $_unique, $_type);
         $this->profile = &$_profile;
         $this->profileOwner = $this->profile->owner();
-        if (!is_null($this->profileOwner) && $this->profileOwner->id() == $this->user->id()) {
-            $this->userIsProfileOwner = true;
-        } else {
-            $this->userIsProfileOwner = false;
-        }
+        $this->userIsProfileOwner = (!is_null($this->profileOwner)
+                                     && $this->profileOwner->id() == $this->user->id());
+        $this->ownerIsRegistered = $this->profile->isActive();
     }
 
     // }}}
@@ -525,24 +524,23 @@ abstract class ProfileValidate extends Validate
 
     protected function sendmail($isok)
     {
-        global $globals;
-        $mailer = new PlMailer();
-        $mailer->setSubject($this->_mail_subj());
-        $mailer->setFrom("validation+{$this->type}@{$globals->mail->domain}");
-        $mailer->addTo("\"{$this->profile->fullName()}\" <{$this->profileOwner->bestEmail()}>");
-        if (!$this->userIsProfileOwner) {
-            $mailer->addCc("\"{$this->user->fullName()}\" <{$this->user->bestEmail()}>");
-        }
-        $mailer->addCc("validation+{$this->type}@{$globals->mail->domain}");
-
-        $body = ($this->profile->isFemale() ? "Chère camarade,\n\n" : "Cher camarade,\n\n")
-              . $this->_mail_body($isok)
-              . (Env::has('comm') ? "\n\n" . Env::v('comm') : '')
-              . "\n\nCordialement,\n-- \nL'équipe de Polytechnique.org\n"
-              . $this->_mail_ps($isok);
+        // Only sends email if the profile's owner exists and is registered.
+        if ($this->ownerIsRegistered) {
+            global $globals;
 
-        $mailer->setTxtBody(wordwrap($body));
-        $mailer->send();
+            $mailer = new PlMailer();
+            $mailer->setSubject($this->_mail_subj());
+            $mailer->setFrom("validation+{$this->type}@{$globals->mail->domain}");
+            $mailer->addTo("\"{$this->profile->fullName()}\" <{$this->profileOwner->bestEmail()}>");
+            $mailer->addCc("validation+{$this->type}@{$globals->mail->domain}");
+            $body = ($this->profile->isFemale() ? "Chère camarade,\n\n" : "Cher camarade,\n\n")
+                  . $this->_mail_body($isok)
+                  . (Env::has('comm') ? "\n\n" . Env::v('comm') : '')
+                  . "\n\nCordialement,\n-- \nL'équipe de Polytechnique.org\n"
+                  . $this->_mail_ps($isok);
+            $mailer->setTxtBody(wordwrap($body));
+            $mailer->send();
+        }
     }
 
     // }}}
@@ -622,11 +620,7 @@ abstract class ProfileValidate extends Validate
 
     public function id()
     {
-        if (!is_null($this->profile)) {
-            return $this->profile->id() . '_' . $this->type . '_' . $this->stamp;
-        } else {
-            return $this->user->id() . '_' . $this->type . '_' . $this->stamp;
-        }
+        return $this->profile->id() . '_' . $this->type . '_' . $this->stamp;
     }
 
     // }}}
index cff4801..13ec9ce 100644 (file)
@@ -30,15 +30,16 @@ class EntrReq extends ProfileValidate
     public $acronym;
     public $url;
     public $email;
-    public $holdingid;
-    public $NAF_code;
-    public $AX_code;
+    public $holdingid = null;
+    public $NAF_code = null;
+    public $AX_code = null;
 
     public $tel;
     public $fax;
     public $address;
 
     public $suggestions;
+    public $rules = 'Si l\'entreprise est déjà présente sous un autre nom dans la liste des suggestions, remplacer son nom par celui-ci avant de valider. Laisser les autres champs tels quels.';
 
     // }}}
     // {{{ constructor
@@ -68,12 +69,14 @@ class EntrReq extends ProfileValidate
                 $where .= "name LIKE '%" . $name_array[$i] . "%'";
             }
         }
-        $res = XDB::iterator('SELECT  name
-                                FROM  profile_job_enum
-                               WHERE  ' . $where);
-        $this->suggestions = "| ";
-        while ($sug = $res->next()) {
-            $this->suggestions .= $sug['name'] . " | ";
+        if ($where != '') {
+            $res = XDB::iterator('SELECT  name
+                                    FROM  profile_job_enum
+                                   WHERE  ' . $where);
+            $this->suggestions = "| ";
+            while ($sug = $res->next()) {
+                $this->suggestions .= $sug['name'] . " | ";
+            }
         }
     }
 
@@ -98,26 +101,37 @@ class EntrReq extends ProfileValidate
 
     protected function handle_editor()
     {
-        if (Env::has('holdingid')) {
-            $this->holdingid = Env::t('holdingid');
-        }
         if (Env::has('name')) {
             $this->name = Env::t('name');
-            if (Env::has('acronym')) {
-                $this->acronym = Env::t('acronym');
-                if (Env::has('url')) {
-                    $this->url = Env::t('url');
-                    if (Env::has('NAF_code')) {
-                        $this->NAF_code = Env::t('NAF_code');
-                        if (Env::has('AX_code')) {
-                            $this->AX_code = Env::t('AX_code');
-                            return true;
-                        }
-                    }
-                }
-            }
         }
-        return false;
+        if (Env::has('acronym')) {
+            $this->acronym = Env::t('acronym');
+        }
+        if (Env::has('url')) {
+            $this->url = Env::t('url');
+        }
+        if (Env::has('email')) {
+            $this->email = Env::t('email');
+        }
+        if (Env::has('holdingid')) {
+            $this->holdingid = Env::i('holdingid');
+        }
+        if (Env::has('NAF_code')) {
+            $this->NAF_code = Env::t('NAF_code');
+        }
+        if (Env::has('AX_code')) {
+            $this->AX_code = Env::i('AX_code');
+        }
+        if (Env::has('address')) {
+            $this->address['text'] = Env::t('address');
+        }
+        if (Env::has('tel')) {
+            $this->tel = Env::t('tel');
+        }
+        if (Env::has('fax')) {
+            $this->fax = Env::t('fax');
+        }
+        return true;
     }
 
     // }}}
@@ -125,7 +139,7 @@ class EntrReq extends ProfileValidate
 
     protected function _mail_subj()
     {
-        return "[Polytechnique.org/Entreprises] Demande d'ajout d'une entreprise : " . $this->name;
+        return '[Polytechnique.org/Entreprises] Demande d\'ajout d\'une entreprise';
     }
 
     // }}}
@@ -146,14 +160,13 @@ class EntrReq extends ProfileValidate
 
     public function commit()
     {
-        // TODO: use address and phone classes to update profile_job_enum and profile_phones once they are done.
+        // TODO: use address update profile_job_enum once it is done.
 
         $res = XDB::query('SELECT  id
                              FROM  profile_job_enum
                             WHERE  name = {?}',
                           $this->name);
         if ($res->numRows() != 1) {
-            require_once 'profil.func.inc.php';
             require_once 'geocoding.inc.php';
 
             XDB::execute('INSERT INTO  profile_job_enum (name, acronym, url, email, holdingid, NAF_code, AX_code)
@@ -162,14 +175,12 @@ class EntrReq extends ProfileValidate
                          $this->holdingid, $this->NAF_code, $this->AX_code);
 
             $jobid = XDB::insertId();
-            $display_tel = format_display_number($this->tel, $error_tel);
-            $display_fax = format_display_number($this->fax, $error_fax);
-            XDB::execute("INSERT INTO  profile_phones (pid, link_type, link_id, tel_id, tel_type,
-                                       search_tel, display_tel, pub)
-                               VALUES  ({?}, 'hq', 0, 0, 'fixed', {?}, {?}, 'public'),
-                                       ({?}, 'hq', 0, 1, 'fax', {?}, {?}, 'public')",
-                         $jobid, format_phone_number($this->tel), $display_tel,
-                         $jobid, format_phone_number($this->fax), $display_fax);
+            $phone = new Phone(array('link_type' => 'hq', 'link_id' => $jobid, 'id' => 0,
+                                     'type' => 'fixed', 'display' => $this->tel, 'pub' => 'public'));
+            $fax   = new Phone(array('link_type' => 'hq', 'link_id' => $jobid, 'id' => 1,
+                                     'type' => 'fax', 'display' => $this->fax, 'pub' => 'public'));
+            $phone->save();
+            $fax->save();
 
             $gmapsGeocoder = new GMapsGeocoder();
             $address = $gmapsGeocoder->getGeocodedAddress($this->address);
index ddfdef5..4a7416f 100644 (file)
@@ -134,6 +134,7 @@ class EvtReq extends Validate
 
     public function commit()
     {
+        /* TODO: refines this filter on promotions by using userfilter. */
         if (XDB::execute("INSERT INTO  announces
                          SET  uid = {?}, creation_date=NOW(), titre={?}, texte={?},
                               expiration={?}, promo_min={?}, promo_max={?}, flags=CONCAT(flags,',valide,wiki')",
index 4c33f84..5d9affe 100644 (file)
@@ -130,7 +130,7 @@ class NamesReq extends ProfileValidate
     {
         require_once 'name.func.inc.php';
 
-        set_profile_display($this->display_names, $this->profile->id());
+        set_profile_display($this->display_names, $this->profile);
 
         if (!is_null($this->profileOwner)) {
             set_alias_names($this->sn_new, $this->sn_old, $this->profile->id(),
index bf03ad9..8eca5d6 100644 (file)
@@ -91,14 +91,9 @@ class SurveyReq extends Validate
 
     public function commit()
     {
-        $sql = 'INSERT INTO surveys
-                        SET questions={?},
-                            title={?},
-                            description={?},
-                            author_id={?},
-                            end={?},
-                            mode={?},
-                            promos={?}';
+        $sql = 'INSERT INTO  surveys
+                        SET  questions = {?}, title = {?}, description = {?},
+                             uid = {?}, end = {?},mode = {?}, promos = {?}';
         return XDB::execute($sql, serialize($this->questions), $this->title, $this->description, $this->user->id(), $this->end, $this->mode, $this->promos);
     }
 
index 69dd47d..ebc9163 100755 (executable)
@@ -10,7 +10,7 @@ function ax_load_object(&$obj, $from)
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker:
-class Ancien 
+class Ancien
 {
     public $NOM_PATR;
     public $PART_NOM;
@@ -34,7 +34,7 @@ class Ancien
     public $NUM_FORMATION = 0;
     public $Erreur;
 
-    public function __construct($aa) 
+    public function __construct($aa)
     {
         if ($aa<>'') {
             ax_load_object($this, $aa);
@@ -210,7 +210,7 @@ class Adresse
     public $TEL;
     public $FAX;
 
-    public function __construct($aa) 
+    public function __construct($aa)
     {
         ax_load_object($this, $aa);
     }
@@ -240,17 +240,17 @@ class Activite
     }
 }
 
-class Formation 
+class Formation
 {
     public $LIBELLE;
 
-    public function __construct($aa) 
+    public function __construct($aa)
     {
         ax_load_object($this, $aa);
     }
 }
 
-function xml_get_children($vals, &$i) 
+function xml_get_children($vals, &$i)
 {
     $children = array();
     if (isset($vals[$i]['value'])) $children[] = $vals[$i]['value'];
index 5970e89..c98c5bc 100644 (file)
@@ -47,6 +47,7 @@ class AdminModule extends PLModule
             'admin/ipwatch'                => $this->make_hook('ipwatch',                AUTH_MDP, 'admin'),
             'admin/icons'                  => $this->make_hook('icons',                  AUTH_MDP, 'admin'),
             'admin/accounts'               => $this->make_hook('accounts',               AUTH_MDP, 'admin'),
+            'admin/account/watch'          => $this->make_hook('account_watch',          AUTH_MDP, 'admin'),
             'admin/account/types'          => $this->make_hook('account_types',          AUTH_MDP, 'admin'),
             'admin/jobs'                   => $this->make_hook('jobs',                   AUTH_MDP, 'admin'),
         );
@@ -381,7 +382,7 @@ class AdminModule extends PLModule
             $user = User::get($login);
         }
         if (empty($user)) {
-            return;
+            pl_redirect('admin/accounts');
         }
 
         $login = $user->login();
@@ -408,27 +409,46 @@ class AdminModule extends PLModule
             }
         }
 
+        // Handles account deletion.
+        if (Post::has('account_deletion_confirmation')) {
+            $uid = $user->id();
+            $name = $user->fullName();
+            $user->profile()->clear();
+            $user->clear(true);
+            $page->trigSuccess("L'utilisateur $name ($uid) a bien été supprimé.");
+        }
+
         // Account Form {{{
         $to_update = array();
         if (Post::has('disable_weak_access')) {
             $to_update['weak_password'] = null;
         } else if (Post::has('update_account')) {
-            if (Post::s('full_name') != $user->fullName()) {
-                // XXX: Update profile if a profile is associated
-                $to_update['full_name'] = Post::s('full_name');
-            }
-            if (Post::s('display_name') != $user->displayName()) {
-                // XXX: Update profile if a profile is associated
-                $to_update['display_name'] = Post::s('display_name');
+            if (!$user->hasProfile()) {
+                if (Post::s('full_name') != $user->fullName()) {
+                    $to_update['full_name'] = Post::s('full_name');
+                }
+                if (Post::s('display_name') != $user->displayName()) {
+                    $to_update['display_name'] = Post::s('display_name');
+                }
+                if (Post::s('directory_name') != $user->directoryName()) {
+                    $to_update['directory_name'] = Post::s('directory_name');
+                }
             }
             if (Post::s('sex') != ($user->isFemale() ? 'female' : 'male')) {
                 $to_update['sex'] = Post::s('sex');
+                if ($user->hasProfile()) {
+                    XDB::execute('UPDATE  profiles
+                                     SET  sex = {?}
+                                   WHERE  pid = {?}',
+                                 Post::s('sex'), $user->profile()->id());
+                }
             }
-            if (!Post::blank('hashpass')) {
-                $to_update['password'] = Post::s('hashpass');
+            if (!Post::blank('pwhash')) {
+                $to_update['password'] = Post::s('pwhash');
+                require_once 'googleapps.inc.php';
                 $account = new GoogleAppsAccount($user);
                 if ($account->active() && $account->sync_password) {
-                    $account->set_password(Post::s('hashpass'));
+                    $account->set_password(Post::s('pwhash'));
                 }
             }
             if (!Post::blank('weak_password')) {
@@ -461,17 +481,43 @@ class AdminModule extends PLModule
             }
         }
         if (!empty($to_update)) {
-            // TODO: fetch the initial values of the fields, and eventually send
-            // a summary of the changes to an admin.
+            $res = XDB::query('SELECT  *
+                                 FROM  accounts
+                                WHERE  uid = {?}', $user->id());
+            $oldValues = $res->fetchAllAssoc();
+            $oldValues = $oldValues[0];
+
             $set = array();
+            $diff = array();
             foreach ($to_update as $k => $value) {
-                $set[] = XDB::format($k . ' = {?}', $value);
+                $value = XDB::format('{?}', $value);
+                $set[] = $k . ' = ' . $value;
+                $diff[$k] = array($oldValues[$k], trim($value, "'"));
+                unset($oldValues[$k]);
             }
             XDB::execute('UPDATE  accounts
-                             SET  ' . implode(', ', $set) . ' 
+                             SET  ' . implode(', ', $set) . '
                            WHERE  uid = ' . XDB::format('{?}', $user->id()));
             $page->trigSuccess('Données du compte mise à jour avec succès');
             $user = User::getWithUID($user->id());
+
+            /* Formats the $diff and send it to the site administrators. The rules are the folowing:
+             *  -formats: password, token, weak_password
+             */
+            foreach (array('password', 'token', 'weak_password') as $key) {
+                if (isset($diff[$key])) {
+                    $diff[$key] = array('old value', 'new value');
+                } else {
+                    $oldValues[$key] = 'old value';
+                }
+            }
+
+            $mail = new PlMailer('admin/useredit.mail.tpl');
+            $mail->assign('admin', S::user()->hruid);
+            $mail->assign('hruid', $user->hruid);
+            $mail->assign('diff', $diff);
+            $mail->assign('oldValues', $oldValues);
+            $mail->send();
         }
         // }}}
 
@@ -604,6 +650,7 @@ class AdminModule extends PLModule
 
         $page->addJsLink('jquery.ui.core.js');
         $page->addJsLink('jquery.ui.tabs.js');
+        $page->addJsLink('password.js');
 
         // Displays last login and last host information.
         $res = XDB::query("SELECT  start, host
@@ -638,6 +685,7 @@ class AdminModule extends PLModule
         }
 
         $page->assign('user', $user);
+        $page->assign('hasProfile', $user->hasProfile());
 
         // Displays forum bans.
         $res = XDB::query("SELECT  write_perm, read_perm, comment
@@ -741,7 +789,8 @@ class AdminModule extends PLModule
                     if ($infos = self::formatNewUser($page, $line, $separator, $promotion, 6)) {
                         $sex = self::formatSex($page, $infos[3], $line);
                         if (!is_null($sex)) {
-                            $name = $infos[1] . ' ' . $infos[0];
+                            $fullName = $infos[1] . ' ' . $infos[0];
+                            $directoryName = $infos[0] . ' ' . $infos[1];
                             $birthDate = self::formatBirthDate($infos[2]);
                             $xorgId = Profile::getXorgId($infos[4]);
                             if (is_null($xorgId)) {
@@ -762,13 +811,13 @@ class AdminModule extends PLModule
                             XDB::execute('INSERT INTO  profile_display (pid, yourself, public_name, private_name,
                                                                         directory_name, short_name, sort_name, promo)
                                                VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
-                                         $pid, $infos[1], $name, $name, $name, $name, $infos[0] . ' ' . $infos[1], $promo);
+                                         $pid, $infos[1], $fullName, $fullName, $directoryName, $fullName, $directoryName, $promo);
                             XDB::execute('INSERT INTO  profile_education (pid, eduid, degreeid, entry_year, grad_year, flags)
                                                VALUES  ({?}, {?}, {?}, {?}, {?}, {?})',
                                          $pid, $eduSchools[Profile::EDU_X], $degreeid, $entry_year, $grad_year, 'primary');
-                            XDB::execute('INSERT INTO  accounts (hruid, type, is_admin, state, full_name, display_name, sex)
+                            XDB::execute('INSERT INTO  accounts (hruid, type, is_admin, state, full_name, directory_name, display_name, sex)
                                                VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?})',
-                                         $infos['hrid'], $type, 0, 'active', $name, $infos[1], $sex);
+                                         $infos['hrid'], $type, 0, 'active', $fullName, $directoryName, $infos[1], $sex);
                             $uid = XDB::insertId();
                             XDB::execute('INSERT INTO  account_profiles (uid, pid, perms)
                                                VALUES  ({?}, {?}, {?})',
@@ -783,9 +832,11 @@ class AdminModule extends PLModule
                     if ($infos = self::formatNewUser($page, $line, $separator, $type, 4)) {
                         $sex = self::formatSex($page, $infos[3], $line);
                         if (!is_null($sex)) {
-                            XDB::execute('INSERT INTO  accounts (hruid, type, is_admin, state, email, full_name, display_name, sex)
+                            $fullName = $infos[1] . ' ' . $infos[0];
+                            $directoryName = $infos[0] . ' ' . $infos[1];
+                            XDB::execute('INSERT INTO  accounts (hruid, type, is_admin, state, email, full_name, directory_name, display_name, sex)
                                                VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
-                                         $infos['hrid'], $type, 0, 'active', $infos[2], $infos[1] . ' ' . $infos[0], $infos[1], $sex);
+                                         $infos['hrid'], $type, 0, 'active', $infos[2], $fullName, $directoryName, $infos[1], $sex);
                             $newAccounts[$infos['hrid']] = $infos[1] . ' ' . $infos[0];
                         }
                     }
@@ -909,15 +960,19 @@ class AdminModule extends PLModule
                                   WHERE  pd.promo = {?}', $promo);
             while (list($pid, $name, $death) = $res->next()) {
                 $val = Env::v('death_' . $pid);
-                if($val == $death || empty($val)) {
+                if ($val == $death) {
                     continue;
                 }
 
+                if (empty($val)) {
+                    $val = null;
+                }
                 XDB::execute('UPDATE  profiles
                                  SET  deathdate = {?}, deathdate_rec = NOW()
                                WHERE  pid = {?}', $val, $pid);
-                $page->trigSuccess('Ajout du décès de ' . $name . ' le ' . $val . '.');
-                if($death == '0000-00-00' || empty($death)) {
+
+                $page->trigSuccess('Édition du décès de ' . $name . ' (' . ($val ? $val : 'ressuscité') . ').');
+                if ($val && ($death == '0000-00-00' || empty($death))) {
                     $profile = Profile::get($pid);
                     $profile->clear();
                     $profile->owner()->clear(false);
@@ -930,7 +985,7 @@ class AdminModule extends PLModule
                           INNER JOIN  profile_display AS pd ON (p.pid = pd.pid)
                                WHERE  pd.promo = {?}
                             ORDER BY  pd.sort_name', $promo);
-        $page->assign('decedes', $res);
+        $page->assign('profileList', $res);
     }
 
     function handler_dead_but_active(&$page)
@@ -1086,7 +1141,41 @@ class AdminModule extends PLModule
         $table_editor->apply($page, $action, $id);
     }
 
-    function handler_account_types(&$page, $action = 'list', $id = null) 
+    function handler_accounts(PlPage $page)
+    {
+        $page->changeTpl('admin/accounts.tpl');
+        $page->setTitle('Administration - Comptes');
+        $page->addJsLink('password.js');
+
+        if (Post::has('create_account')) {
+            S::assert_xsrf_token();
+            $firstname = Post::t('firstname');
+            $lastname = strtoupper(Post::t('lastname'));
+            $sex = Post::b('sex') ? User::GENDER_FEMALE : User::GENDER_FEMALE;
+            $email = Post::t('email');
+            $login = PlUser::makeHrid($firstname, $lastname, 'ax');
+            if (!isvalid_email($email)) {
+                $page->trigError("Invalid email address: $email");
+            } else if (strlen(Post::s('pwhash')) != 40) {
+                $page->trigError("Invalid password hash");
+            } else {
+                $full_name = $firstname . ' ' . $lastname;
+                $directory_name = $lastname . ' ' . $firstname;
+                XDB::execute("INSERT INTO  accounts (hruid, type, state, password,
+                                                     registration_date, email, full_name,
+                                                     display_name, sex, directory_name)
+                                   VALUES  ({?}, 'ax', 'active', {?}, NOW(), {?}, {?}, {?}, {?}, {?})",
+                             $login, Post::s('pwhash'), $email, $full_name, $full_name, $sex,
+                             $directory_name);
+            }
+        }
+
+        $uf = new UserFilter(new UFC_AccountType('ax'));
+        $page->assign('users', $uf->iterUsers(new PlLimit(10)));
+
+    }
+
+    function handler_account_types(&$page, $action = 'list', $id = null)
     {
         $page->setTitle('Administration - Types de comptes');
         $page->assign('title', 'Gestion des types de comptes');
@@ -1100,7 +1189,7 @@ class AdminModule extends PLModule
     {
         if (S::hasAuthToken()) {
            $page->setRssLink('Changement Récents',
-                             '/Site/AllRecentChanges?action=rss&user=' . S::v('hruid') . '&hash=' . S::v('token'));
+                             '/Site/AllRecentChanges?action=rss&user=' . S::v('hruid') . '&hash=' . S::user()->token);
         }
 
         // update wiki perms
@@ -1289,7 +1378,7 @@ class AdminModule extends PLModule
         $page->assign('icons', $icons);
     }
 
-    function handler_accounts(&$page)
+    function handler_account_watch(&$page)
     {
         $page->changeTpl('admin/accounts.tpl');
         $page->assign('disabled', XDB::iterator('SELECT  a.hruid, FIND_IN_SET(\'watch\', a.flags) AS watch,
@@ -1324,34 +1413,29 @@ class AdminModule extends PLModule
         }
 
         if (Env::has('edit')) {
-            // TODO: use address and phone classes to update profile_job_enum and profile_phones once they are done.
+            // TODO: use address class to update profile_job_enum once it is done.
 
             S::assert_xsrf_token();
             $selectedJob = Env::has('selectedJob');
 
-            XDB::execute("DELETE FROM  profile_phones
-                                WHERE  pid = {?} AND link_type = 'hq'",
-                         $id);
+            Phone::deletePhones(0, Phone::LINK_COMPANY, $id);
             XDB::execute("DELETE FROM  profile_addresses
                                 WHERE  jobid = {?} AND type = 'hq'",
                          $id);
-            XDB::execute('DELETE FROM  profile_job_enum
-                                WHERE  id = {?}',
-                         $id);
 
             if (Env::has('change')) {
                 XDB::execute('UPDATE  profile_job
                                  SET  jobid = {?}
                                WHERE  jobid = {?}',
                              Env::i('newJobId'), $id);
+                XDB::execute('DELETE FROM  profile_job_enum
+                                    WHERE  id = {?}',
+                             $id);
 
                 $page->trigSuccess("L'entreprise a bien été remplacée.");
             } else {
-                require_once 'profil.func.inc.php';
                 require_once 'geocoding.inc.php';
 
-                $display_tel = format_display_number(Env::v('tel'), $error_tel);
-                $display_fax = format_display_number(Env::v('fax'), $error_fax);
                 $gmapsGeocoder = new GMapsGeocoder();
                 $address = array('text' => Env::t('address'));
                 $address = $gmapsGeocoder->getGeocodedAddress($address);
@@ -1366,12 +1450,12 @@ class AdminModule extends PLModule
                              Env::t('name'), Env::t('acronym'), Env::t('url'), Env::t('email'),
                              Env::t('NAF_code'), Env::i('AX_code'), Env::i('holdingId'), $id);
 
-                XDB::execute("INSERT INTO  profile_phones (pid, link_type, link_id, tel_id, tel_type,
-                                           search_tel, display_tel, pub)
-                                   VALUES  ({?}, 'hq', 0, 0, 'fixed', {?}, {?}, 'public'),
-                                           ({?}, 'hq', 0, 1, 'fax', {?}, {?}, 'public')",
-                             $id, format_phone_number(Env::v('tel')), $display_tel,
-                             $id, format_phone_number(Env::v('fax')), $display_fax);
+                $phone = new Phone(array('display' => Env::v('tel'), 'link_id' => $id, 'id' => 0, 'type' => 'fixed',
+                                         'link_type' => Phone::LINK_COMPANY, 'pub' => 'public'));
+                $fax = new Phone(array('display' => Env::v('fax'), 'link_id' => $id, 'id' => 1, 'type' => 'fax',
+                                         'link_type' => Phone::LINK_COMPANY, 'pub' => 'public'));
+                $phone->save();
+                $fax->save();
 
                 XDB::execute("INSERT INTO  profile_addresses (jobid, type, id, accuracy,
                                                               text, postalText, postalCode, localityId,
index f41b600..383745a 100644 (file)
@@ -34,7 +34,7 @@ function gpex_make($chlg, $privkey, $datafields, $charset)
 
     $user =& S::user();
     if ($user->hasProfile()) {
-        // XXX: Transition table for auth.
+        /* Transition table for authentification. */
         $personnal_data = $user->profile()->data();
         $personnal_data['matricule'] = $personnal_data['xorg_id'];
         $personnal_data['matricule_ax'] = $personnal_data['ax_id'];
index b47f1c5..d08b0bc 100644 (file)
@@ -179,7 +179,7 @@ class AXLetterModule extends PLModule
                     }
                     $page->trigSuccess("Les adresses soumises correspondent à un total de " . count(array_unique($ids)) . " camarades.");
                 }
-                // XXX : no break here, since Vérifier is a subcase of Aperçu.
+                // No break here, since Vérifier is a subcase of Aperçu.
               case 'Aperçu':
                 $this->load('axletter.inc.php');
                 $al = new AXLetter(array($id, $short_name, $subject, $title, $body, $signature,
index 5297ac9..53c7dd3 100644 (file)
@@ -175,6 +175,7 @@ class AXLetter extends MassMailer
         if (!$this->_promo_min && !$this->_promo_max && !$this->_subset) {
             return '1';
         }
+        /* TODO: refines this filter on promotions by using userfilter. */
         $where = array();
         if ($this->_promo_min) {
             $where[] = "((ni.uid = 0 AND ni.promo >= {$this->_promo_min}) OR (ni.uid != 0 AND pd.promo >= 'X{$this->_promo_min}'))";
index 1d065af..2125cf9 100644 (file)
@@ -24,18 +24,18 @@ class CarnetModule extends PLModule
     function handlers()
     {
         return array(
-            'carnet'                => $this->make_hook('index',    AUTH_COOKIE),
-            'carnet/panel'          => $this->make_hook('panel',    AUTH_COOKIE),
-            'carnet/notifs'         => $this->make_hook('notifs',   AUTH_COOKIE),
-
-            'carnet/contacts'       => $this->make_hook('contacts', AUTH_COOKIE),
-            'carnet/contacts/pdf'   => $this->make_hook('pdf',      AUTH_COOKIE),
-            'carnet/contacts/vcard' => $this->make_hook('vcard',    AUTH_COOKIE),
-            'carnet/contacts/ical'  => $this->make_hook('ical',     AUTH_PUBLIC, 'user', NO_HTTPS),
-            'carnet/contacts/csv'   => $this->make_hook('csv',     AUTH_PUBLIC, 'user', NO_HTTPS),
-            'carnet/contacts/csv/birthday'  => $this->make_hook('csv_birthday',     AUTH_PUBLIC, 'user', NO_HTTPS),
-
-            'carnet/rss'            => $this->make_hook('rss',      AUTH_PUBLIC, 'user', NO_HTTPS),
+            'carnet'                => $this->make_hook('index',    AUTH_COOKIE, 'directory_private'),
+            'carnet/panel'          => $this->make_hook('panel',    AUTH_COOKIE, 'directory_private'),
+            'carnet/notifs'         => $this->make_hook('notifs',   AUTH_COOKIE, 'directory_private'),
+
+            'carnet/contacts'       => $this->make_hook('contacts', AUTH_COOKIE, 'directory_private'),
+            'carnet/contacts/pdf'   => $this->make_hook('pdf',      AUTH_COOKIE, 'directory_private'),
+            'carnet/contacts/vcard' => $this->make_hook('vcard',    AUTH_COOKIE, 'directory_private'),
+            'carnet/contacts/ical'  => $this->make_hook('ical',     AUTH_PUBLIC, 'directory_private', NO_HTTPS),
+            'carnet/contacts/csv'   => $this->make_hook('csv',     AUTH_PUBLIC,  'directory_private', NO_HTTPS),
+            'carnet/contacts/csv/birthday'  => $this->make_hook('csv_birthday',     AUTH_PUBLIC, 'directory_private', NO_HTTPS),
+
+            'carnet/rss'            => $this->make_hook('rss',      AUTH_PUBLIC, 'directory_private', NO_HTTPS),
         );
     }
 
@@ -45,7 +45,7 @@ class CarnetModule extends PLModule
             return;
         }
         $page->setRssLink('Polytechnique.org :: Carnet',
-                          '/carnet/rss/'.S::v('hruid').'/'.S::v('token').'/rss.xml');
+                          '/carnet/rss/' . S::v('hruid') . '/' . S::user()->token . '/rss.xml');
     }
 
     function handler_index(&$page)
@@ -275,7 +275,7 @@ class CarnetModule extends PLModule
 
         // For XSRF protection, checks both the normal xsrf token, and the special RSS token.
         // It allows direct linking to contact adding in the RSS feed.
-        if (Env::v('action') && Env::v('token') !== S::v('token')) {
+        if (Env::v('action') && Env::v('token') !== S::user()->token) {
             S::assert_xsrf_token();
         }
         switch (Env::v('action')) {
index 197ae8e..bfcbf06 100644 (file)
@@ -24,14 +24,14 @@ class EmailModule extends PLModule
     function handlers()
     {
         return array(
-            'emails'                  => $this->make_hook('emails',      AUTH_COOKIE),
-            'emails/alias'            => $this->make_hook('alias',       AUTH_MDP),
-            'emails/antispam'         => $this->make_hook('antispam',    AUTH_MDP),
+            'emails'                  => $this->make_hook('emails',      AUTH_COOKIE, 'mail'),
+            'emails/alias'            => $this->make_hook('alias',       AUTH_MDP,    'mail'),
+            'emails/antispam'         => $this->make_hook('antispam',    AUTH_MDP,    'mail'),
             'emails/broken'           => $this->make_hook('broken',      AUTH_COOKIE),
-            'emails/redirect'         => $this->make_hook('redirect',    AUTH_MDP),
-            'emails/send'             => $this->make_hook('send',        AUTH_MDP),
+            'emails/redirect'         => $this->make_hook('redirect',    AUTH_MDP,    'mail'),
+            'emails/send'             => $this->make_hook('send',        AUTH_MDP,    'mail'),
             'emails/antispam/submit'  => $this->make_hook('submit',      AUTH_COOKIE),
-            'emails/test'             => $this->make_hook('test',        AUTH_COOKIE, 'user', NO_AUTH),
+            'emails/test'             => $this->make_hook('test',        AUTH_COOKIE, 'mail', NO_AUTH),
 
             'emails/rewrite/in'       => $this->make_hook('rewrite_in',  AUTH_PUBLIC),
             'emails/rewrite/out'      => $this->make_hook('rewrite_out', AUTH_PUBLIC),
@@ -194,7 +194,7 @@ class EmailModule extends PLModule
             if ($user->hasProfile()) {
                 XDB::execute("UPDATE  profiles
                                  SET  alias_pub = {?}
-                               WHERE  pid = {?}", 
+                               WHERE  pid = {?}",
                             $value, $user->profile()->id());
             }
             $visibility = ($value == 'public');
@@ -619,13 +619,13 @@ class EmailModule extends PLModule
             $storage = new EmailStorage(S::user(), 'imap');
             $storage->activate();
             $page->assign('ok', true);
-            $page->assign('prenom', S::v('prenom'));
-            $page->assign('sexe', S::v('femme'));
+            $page->assign('yourself', S::user()->displayName());
+            $page->assign('sexe', S::user()->isFemale());
         } else if (!S::logged() && $user) {
             $storage = new EmailStorage($user, 'imap');
             $storage->activate();
             $page->assign('ok', true);
-            $page->assign('prenom', $user->displayName());
+            $page->assign('yourself', $user->displayName());
             $page->assign('sexe', $user->isFemale());
         }
     }
@@ -794,15 +794,16 @@ class EmailModule extends PLModule
     {
         $page->changeTpl('emails/lost.tpl');
 
-        // TODO: Order by promo.
         $page->assign('lost_emails',
-                      XDB::iterator("SELECT  a.uid, a.hruid
-                                       FROM  accounts AS a
-                                 INNER JOIN  email_options AS eo ON (eo.uid = a.uid)
-                                  LEFT JOIN  emails   AS e ON (a.uid = e.uid AND FIND_IN_SET('active', e.flags))
-                                      WHERE  e.uid IS NULL AND FIND_IN_SET('googleapps', eo.storage) = 0 AND
-                                             a.state = 'active'
-                                   ORDER BY  a.hruid"));
+                      XDB::iterator('SELECT  a.uid, a.hruid, pd.promo
+                                       FROM  accounts         AS a
+                                 INNER JOIN  email_options    AS eo ON (eo.uid = a.uid)
+                                  LEFT JOIN  emails           AS e  ON (a.uid = e.uid AND FIND_IN_SET(\'active\', e.flags))
+                                  LEFT JOIN  account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET(\'owner\', perms))
+                                  LEFT JOIN  profile_display  AS pd ON (ap.pid = pd.pid)
+                                      WHERE  e.uid IS NULL AND FIND_IN_SET(\'googleapps\', eo.storage) = 0
+                                             AND a.state = \'active\'
+                                   ORDER BY  pd.promo, a.hruid'));
     }
 
     function handler_broken_addr(&$page)
index eebfa82..9a4d95e 100644 (file)
@@ -40,7 +40,7 @@ class EventsModule extends PLModule
     {
         global $globals;
         // Add a new special tip when changing plat/al version
-        if ($globals->version != S::v('last_version') && is_null($exclude)) {
+        if ($globals->version != S::user()->last_version && is_null($exclude)) {
             XDB::execute('UPDATE accounts
                              SET last_version = {?}
                            WHERE uid = {?}',
@@ -104,29 +104,37 @@ class EventsModule extends PLModule
     {
         $page->changeTpl('events/index.tpl');
         $page->addJsLink('ajax.js');
-        $page->assign('tips', $this->get_tips());
 
-        // Adds a reminder onebox to the page.
         $user = S::user();
-        require_once 'reminder.inc.php';
-        if (($reminder = Reminder::GetCandidateReminder($user))) {
-            $reminder->Prepare($page);
-        }
 
-        // Wishes "Happy birthday" when required
-        $profile = $user->profile();
-        if (!is_null($profile)) {
-            if ($profile->next_birthday == date('Y-m-d')) {
-                $birthyear = (int)date('Y', strtotime($profile->birthdate));
-                $curyear   = (int)date('Y');
-                $page->assign('birthday', $curyear - $birthyear);
+        /** XXX: Tips and reminder only for user with 'email' permission.
+         * We can do better in the future by storing the required permission(s)
+         * with teh tip/reminder.
+         */
+        if ($user->checkPerms(User::PERM_MAIL)) {
+            $page->assign('tips', $this->get_tips());
+
+            // Adds a reminder onebox to the page.
+            require_once 'reminder.inc.php';
+            if (($reminder = Reminder::GetCandidateReminder($user))) {
+                $reminder->Prepare($page);
+            }
+
+            // Wishes "Happy birthday" when required
+            $profile = $user->profile();
+            if (!is_null($profile)) {
+                if ($profile->next_birthday == date('Y-m-d')) {
+                    $birthyear = (int)date('Y', strtotime($profile->birthdate));
+                    $curyear   = (int)date('Y');
+                    $page->assign('birthday', $curyear - $birthyear);
+                }
             }
         }
 
         // Direct link to the RSS feed, when available.
         if (S::hasAuthToken()) {
             $page->setRssLink('Polytechnique.org :: News',
-                              '/rss/'.S::v('hruid') .'/'.S::v('token').'/rss.xml');
+                              '/rss/' . S::v('hruid') . '/' . S::user()->token . '/rss.xml');
         }
 
         // Hide the read event, and reload the page to get to the next event.
@@ -311,10 +319,10 @@ class EventsModule extends PLModule
         $table_editor->describe('expiration', 'date de péremption', true);
         $table_editor->describe('promo_min', 'promo. min (0 aucune)', false);
         $table_editor->describe('promo_max', 'promo. max (0 aucune)', false);
-        $table_editor->describe('titre', 'titre', true);
+        $table_editor->describe('title', 'titre', true);
         $table_editor->describe('state', 'actif', true);
         $table_editor->describe('text', 'texte (html) de l\'astuce', false);
-        $table_editor->describe('priorite', '0<=priorité<=255', true);
+        $table_editor->describe('priority', '0<=priorité<=255', true);
         $table_editor->list_on_edit(false);
         $table_editor->apply($page, $action, $id);
         if (($action == 'edit' && !is_null($id)) || $action == 'update') {
index c34b22c..577791b 100644 (file)
@@ -24,8 +24,8 @@ class ForumsModule extends PLModule
     function handlers()
     {
         return array(
-            'banana'         => $this->make_hook('banana',      AUTH_COOKIE),
-            'banana/rss'     => $this->make_hook('rss',         AUTH_PUBLIC, 'user', NO_HTTPS),
+            'banana'         => $this->make_hook('banana',      AUTH_COOKIE, 'forums'),
+            'banana/rss'     => $this->make_hook('rss',         AUTH_PUBLIC, 'forums', NO_HTTPS),
             'admin/forums'   => $this->make_hook('forums_bans', AUTH_MDP,    'admin'),
         );
     }
index 237336c..ac22a02 100644 (file)
@@ -196,7 +196,7 @@ class FusionAxModule extends PLModule
         return XDB::affectedRows() / 2;
     }
 
-    /* Cherche les les anciens présents dans Xorg avec un matricule_ax ne correspondant à rien dans la base de l'AX 
+    /* Cherche les les anciens présents dans Xorg avec un matricule_ax ne correspondant à rien dans la base de l'AX
      * (mises à part les promo 1921 et 1923 qui ne figurent pas dans les données de l'AX)*/
     private static function find_wrong_in_xorg($limit = 10)
     {
index 23af228..172e071 100644 (file)
@@ -39,7 +39,7 @@ SET
 `Date_maj` = CONCAT(SUBSTRING(@StringDate_maj,7),'-',SUBSTRING(@StringDate_maj,4,2),'-',SUBSTRING(@StringDate_maj,1,2));
 
 LOAD DATA LOCAL INFILE 'Activites.txt' INTO TABLE `fusionax_adresses` FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n'
-(provenance, id_ancien, @Code_etab, @Raison_sociale, @Libelle_fonctio, @Annuaire, 
+(provenance, id_ancien, @Code_etab, @Raison_sociale, @Libelle_fonctio, @Annuaire,
 Ligne1, Ligne2, Ligne3, code_postal, ville, zip_cedex, etat_distr, pays, tel, fax, @StringDate_maj)
 SET
 `Type_adr` = 'E',
index 0c61e53..14b72dc 100755 (executable)
@@ -265,7 +265,7 @@ while (<FILE>)
   s/\tès /\t/g;
   s/\tof /\t/g;
   s/( )+(\t)/\t/g;
-  
+
 
   # On remet dans l'ordre lorsque le diplôme se situe après l'université
   s/Manag\.Vanderblit/Vanderbilt University\tManagement/;
index fb3a6db..999c16f 100755 (executable)
@@ -5,7 +5,7 @@
 #unrar e -inul export_4D.txt.rar
 cp /home/x2004jacob/export*utf8.TXT .
 
-# séparation en fichiers de tables 
+# séparation en fichiers de tables
 cat export_total* | grep ^AD > Adresses.txt
 cat export_total* | grep ^AN > Anciens.txt
 cat export_total* | grep ^FO > Formations.txt
index 446d949..263a24d 100644 (file)
@@ -41,7 +41,7 @@ class GoogleAppsModule extends PLModule
         require_once("emails.inc.php");
         require_once("googleapps.inc.php");
         $page->changeTpl('googleapps/index.tpl');
-        $page->addJsLink('motdepasse.js');
+        $page->addJsLink('password.js');
         $page->setTitle('Compte Google Apps');
 
         $user = S::user();
@@ -69,9 +69,9 @@ class GoogleAppsModule extends PLModule
                 } else {
                     $account->set_password_sync(false);
                 }
-            } elseif ($action == 'password' && Post::has('response2') && !$account->sync_password) {
+            } elseif ($action == 'password' && Post::has('pwhash') && Post::t('pwhash') && !$account->sync_password) {
                 S::assert_xsrf_token();
-                $account->set_password(Post::v('response2'));
+                $account->set_password(Post::t('pwhash'));
             }
 
             if ($action == 'suspend' && Post::has('suspend') && $account->active()) {
@@ -104,7 +104,7 @@ class GoogleAppsModule extends PLModule
                 if ($password_sync) {
                     $password = $user->password();
                 } else {
-                    $password = Post::v('response2');
+                    $password = Post::t('pwhash');
                 }
 
                 $account->create($password_sync, $password, $redirect_mails);
index 1ebf75f..eeeb2d4 100644 (file)
@@ -26,24 +26,24 @@ class ListsModule extends PLModule
     function handlers()
     {
         return array(
-            'lists'           => $this->make_hook('lists',     AUTH_MDP),
-            'lists/ajax'      => $this->make_hook('ajax',      AUTH_MDP,    'user', NO_AUTH),
-            'lists/create'    => $this->make_hook('create',    AUTH_MDP),
-
-            'lists/members'   => $this->make_hook('members',   AUTH_COOKIE),
-            'lists/csv'       => $this->make_hook('csv',       AUTH_COOKIE),
-            'lists/annu'      => $this->make_hook('annu',      AUTH_COOKIE),
-            'lists/archives'  => $this->make_hook('archives',  AUTH_COOKIE),
-            'lists/archives/rss' => $this->make_hook('rss',    AUTH_PUBLIC, 'user', NO_HTTPS),
-
-            'lists/moderate'  => $this->make_hook('moderate',  AUTH_MDP),
-            'lists/admin'     => $this->make_hook('admin',     AUTH_MDP),
-            'lists/options'   => $this->make_hook('options',   AUTH_MDP),
-            'lists/delete'    => $this->make_hook('delete',    AUTH_MDP),
-
-            'lists/soptions'  => $this->make_hook('soptions',  AUTH_MDP),
-            'lists/check'     => $this->make_hook('check',     AUTH_MDP),
-            'admin/lists'     => $this->make_hook('admin_all', AUTH_MDP,    'admin'),
+            'lists'           => $this->make_hook('lists',     AUTH_MDP, 'lists'),
+            'lists/ajax'      => $this->make_hook('ajax',      AUTH_MDP, 'lists', NO_AUTH),
+            'lists/create'    => $this->make_hook('create',    AUTH_MDP, 'lists'),
+
+            'lists/members'   => $this->make_hook('members',   AUTH_COOKIE, 'lists'),
+            'lists/csv'       => $this->make_hook('csv',       AUTH_COOKIE, 'lists'),
+            'lists/annu'      => $this->make_hook('annu',      AUTH_COOKIE, 'lists'),
+            'lists/archives'  => $this->make_hook('archives',  AUTH_COOKIE, 'lists'),
+            'lists/archives/rss' => $this->make_hook('rss',    AUTH_PUBLIC, 'lists', NO_HTTPS),
+
+            'lists/moderate'  => $this->make_hook('moderate',  AUTH_MDP, 'lists'),
+            'lists/admin'     => $this->make_hook('admin',     AUTH_MDP, 'lists'),
+            'lists/options'   => $this->make_hook('options',   AUTH_MDP, 'lists'),
+            'lists/delete'    => $this->make_hook('delete',    AUTH_MDP, 'lists'),
+
+            'lists/soptions'  => $this->make_hook('soptions',  AUTH_MDP, 'lists'),
+            'lists/check'     => $this->make_hook('check',     AUTH_MDP, 'lists'),
+            'admin/lists'     => $this->make_hook('admin_all', AUTH_MDP, 'admin'),
         );
     }
 
@@ -356,13 +356,11 @@ class ListsModule extends PLModule
         }
         $this->prepare_client($page);
         $members = $this->client->get_members($liste);
-        $list = list_fetch_names(list_extract_members($members[1]));
+        $list = list_fetch_basic_info(list_extract_members($members[1]));
         pl_content_headers("text/x-csv");
 
-        echo "email,nom,prenom,promo\n";
-        foreach ($list as $member) {
-            echo @$member['email'] . ',' . @$member['nom'] . ',' . @$member['prenom'] . ',' . @$member['promo'] . "\n";
-        }
+        echo "email,nom,promo\n";
+        echo implode("\n", $list);
         exit;
     }
 
index 2307d9d..217745a 100644 (file)
@@ -30,20 +30,19 @@ function list_sort_owners(&$members, $tri_promo = true)
     foreach($members as $mem) {
         $user = User::getSilent($mem);
         if (!$user) {
-            $membres[0][] = array('l' => $mem, 'p' => (!$tri_promo ? 'inconnue' : null));
+            $membres[0][] = array('l' => $mem, 'p' => (!$tri_promo ? 'inconnue' : null), 'n' => null, 'x' => null, 'b' => null);
         } else {
             $uid = $user->id();
-            $nom = $user->fullName(); # XXX: Get a notion of 'last name' here, I want to sort user by lastnames
+            $nom = $user->directoryName();
             $promo = $user->promo();
             if (!$promo) {
                 $promo = 'non-X';
             }
-            $broken = false; # XXX: fill it with the good value if the user has no valid email
             $key = $tri_promo ? ($promo != 'non-X' ? $promo : 0) : strtoupper(@$nom{0});
             if ($tri_promo) {
                 $promo = null;
             }
-            $membres[$key][$nom.$mem] = Array('n' => $nom, 'l' => $mem, 'p' => $promo, 'x' => $uid, 'b' => $broken);
+            $membres[$key][$nom.$mem] = array('n' => $nom, 'l' => $mem, 'p' => $promo, 'x' => $uid, 'b' => $user->lost);
         }
     }
 
@@ -75,16 +74,17 @@ function list_sort_members($members, $tri_promo = true)
 }
 
 // }}}
+// {{{ function list_fetch_basic_info
 
-function list_fetch_names($members)
+function list_fetch_basic_info($members)
 {
     $res = array();
     foreach ($members as $member) {
         $user = User::getSilent($member);
         if (!$user) {
-            $res[] = $member;
+            $res[] = $member . ',,';
         } else {
-            $res[] = $user->fullName();
+            $res[] = $user->forlifeEmail() . ',' . $user->directoryName() . ',' . $user->promo();
         }
     }
     return $res;
index a887369..ae73a19 100644 (file)
@@ -1,5 +1,5 @@
 <MultiPg>
-<NoDoc>    
+<NoDoc>
 <UseLocalTime>
 <MsgLocalDateFmt>
 %d-%m-%y
@@ -198,7 +198,7 @@ MY-SUBJNA
 <FieldsBeg>
     <table class="bicol" cellpadding="0" cellspacing="0">
 </FieldsBeg>
+
 <LabelBeg>
       <tr>
        <td class="right">
@@ -209,7 +209,7 @@ MY-SUBJNA
 <LabelEnd>
        </td>
 </LabelEnd>
-   
+
 <FldBeg>
        <td>
 </FldBeg>
@@ -227,7 +227,7 @@ subject:strong
         </td>
       </tr>
 </FldEnd>
-     
+
 <FieldsEnd>
     </table>
 </FieldsEnd>
@@ -259,7 +259,7 @@ subject:strong
 <!-- ------------------------------------------------------------------------ -->
 
 <TIdxPgSSMarkup>
-    
+
 </TIdxPgSSMarkup>
 
 <TIdxPgBegin>
@@ -437,7 +437,7 @@ date
 
 
 <IdxPgSSMarkup>
-    
+
 </IdxPgSSMarkup>
 
 <IdxPgBegin>
index d5f9ed8..b878478 100644 (file)
@@ -39,9 +39,62 @@ class MarketingModule extends PLModule
     function handler_marketing(&$page)
     {
         $page->changeTpl('marketing/index.tpl');
-
         $page->setTitle('Marketing');
-        $page->trigWarning("Les statistiques sont momentanéement désactivées");
+
+        $alive = new UserFilter(new PFC_Not(new UFC_Dead()));
+        $registered = new UserFilter(new PFC_And(new UFC_Registered(), new PFC_Not(new UFC_Dead())));
+        $alive72 = new UserFilter(new PFC_And(new UFC_Promo('>=', UserFilter::GRADE_ING, 1972), new PFC_Not(new UFC_Dead())));
+        $registered72 = new UserFilter(new PFC_And(new UFC_Registered(), new UFC_Promo('>=', UserFilter::GRADE_ING, 1972), new PFC_Not(new UFC_Dead())));
+        $aliveWomen = new UserFilter(new PFC_And(new UFC_Sex(User::GENDER_FEMALE) , new PFC_Not(new UFC_Dead())));
+        $registeredWomen = new UserFilter(new PFC_And(new UFC_Registered(), new UFC_Sex(User::GENDER_FEMALE), new PFC_Not(new UFC_Dead())));
+        $statistics = array(
+            'alive'           => $alive->getTotalCount(),
+            'registered'      => $registered->getTotalCount(),
+            'alive72'         => $alive72->getTotalCount(),
+            'registered72'    => $registered72->getTotalCount(),
+            'womenAlive'      => $aliveWomen->getTotalCount(),
+            'womenRegistered' => $registeredWomen->getTotalCount(),
+        );
+        $statistics['registeredRate']      = $statistics['registered'] / $statistics['alive'] * 100;
+        $statistics['registeredRate72']    = $statistics['registered72'] / $statistics['alive72'] * 100;
+        $statistics['womenRegisteredRate'] = $statistics['womenRegistered'] / $statistics['womenAlive'] * 100;
+
+        $registeredWeek = new UserFilter(new PFC_And(new UFC_Registered(false, '>=', strtotime('1 week ago')), new PFC_Not(new UFC_Dead())));
+        $registrationPending = XDB::fetchOneCell('SELECT  COUNT(*)
+                                                    FROM  register_pending');
+        $registrations = array(
+            'week'    => $registeredWeek->getTotalCount(),
+            'pending' => $registrationPending,
+        );
+
+        $ok = XDB::fetchOneCell('SELECT  COUNT(*)
+                                   FROM  register_mstats
+                                  WHERE  success != \'0000-00-00\'');
+        $okWeek = XDB::fetchOneCell('SELECT  COUNT(*)
+                                       FROM  register_mstats
+                                      WHERE  success >= {?}', strtotime('1 week ago'));
+        $res = XDB::fetchAllAssoc('SELECT  type, COUNT(*) as count
+                                     FROM  register_marketing
+                                 GROUP BY  type');
+        $no = array();
+        foreach ($res as $value) {
+            $no[$value['type']] = $value['count'];
+        }
+        $no['week'] = XDB::fetchOneCell('SELECT  COUNT(*)
+                                           FROM  register_marketing
+                                          WHERE  last >= {?}', strtotime('1 week ago'));
+        $marketings = array(
+            'ok'      => $ok,
+            'okWeek'  => $okWeek,
+            'noPerso' => (isset($no['user']) ? $no['user'] : 0),
+            'noXorg'  => (isset($no['staff']) ? $no['staff'] : 0),
+            'noAX'    => (isset($no['ax']) ? $no['ax'] : 0),
+            'noWeek'  => $no['week'],
+        );
+
+        $page->assign('statistics', $statistics);
+        $page->assign('registrations', $registrations);
+        $page->assign('marketings', $marketings);
     }
 
     function handler_private(&$page, $hruid = null,
@@ -260,6 +313,7 @@ class MarketingModule extends PLModule
             require_once 'marketing.inc.php';
 
             $sender = User::getSilent(S::v('uid'));
+            $perso_signature = 'Cordialement,<br />-- <br />' . $sender->fullName();
             $market = new AnnuaireMarketing(null, true);
             $text = $market->getText(array(
                 'sexe'           => $user->isFemale(),
@@ -269,11 +323,10 @@ class MarketingModule extends PLModule
             $text = str_replace('%%hash%%', '', $text);
             $text = str_replace('%%personal_notes%%', '<em id="personal_notes_display"></em>', $text);
             $text = str_replace('%%sender%%',
-                                "<span id=\"sender\">" . $sender->fullName() . '</span>', $text);
+                                '<span id="sender">' . $perso_signature . '</span>', $text);
             $page->assign('text', nl2br($text));
-            // TODO (JAC): define a unique Xorg signature for all the emails we send.
-            $page->assign('xorg_signature', "L'équipe de Polytechnique.org,<br />Le portail des élèves & anciens élèves de l'École polytechnique");
-            $page->assign('perso_signature', $sender->fullName());
+            $page->assign('perso_signature', $perso_signature);
+            $page->assign('mail_part', 'escaped_html');
         }
     }
 
@@ -317,7 +370,8 @@ class MarketingModule extends PLModule
         $page->changeTpl('marketing/relance.tpl');
 
         if (Post::has('relancer')) {
-            $nbdix = Marketing::getAliveUsersCount();
+            global $globals;
+            $nbdix = $globals->core->NbIns;
 
             $sent  = Array();
             $users = User::getBulkUsersWithUIDs($_POST['relance']);
index e2f57b4..d24ebcf 100644 (file)
@@ -90,7 +90,7 @@ class PaymentModule extends PLModule
     function handlers()
     {
         return array(
-            'payment'                    => $this->make_hook('payment',       AUTH_MDP),
+            'payment'                    => $this->make_hook('payment',       AUTH_MDP,    'payment'),
             'payment/cyber_return'       => $this->make_hook('cyber_return',  AUTH_PUBLIC, 'user', NO_HTTPS),
             'payment/cyber2_return'      => $this->make_hook('cyber2_return', AUTH_PUBLIC, 'user', NO_HTTPS),
             'payment/paypal_return'      => $this->make_hook('paypal_return', AUTH_PUBLIC, 'user', NO_HTTPS),
@@ -108,7 +108,6 @@ class PaymentModule extends PLModule
     {
         global $globals;
 
-        require_once 'profil.func.inc.php' ;
         $this->load('money.inc.php');
 
         if (!empty($GLOBALS['IS_XNET_SITE'])) {
@@ -226,7 +225,7 @@ class PaymentModule extends PLModule
         if ($eid = $res->fetchOneCell()) {
             require_once dirname(__FILE__) . '/xnetevents/xnetevents.inc.php';
             $evt = get_event_detail($eid);
-            subscribe_lists_event(0, $uid, $evt, $montant, true);
+            subscribe_lists_event($uid, $evt, 1, $montant, true);
         }
 
         /* on genere le mail de confirmation */
@@ -264,7 +263,7 @@ class PaymentModule extends PLModule
     function handler_cyber2_return(&$page, $uid = null)
     {
         global $globals, $platal;
-        
+
         /* on vérifie la signature */
         $vads_params = array();
         foreach($_REQUEST as $key => $value)
@@ -275,7 +274,7 @@ class PaymentModule extends PLModule
         //if($signature != Env::v('signature')) {
         //    cb_erreur("signature invalide");
         //}
-        
+
         /* on extrait les informations sur l'utilisateur */
         $user = User::get(Env::v('vads_cust_id'));
         if (!$user) {
@@ -294,7 +293,7 @@ class PaymentModule extends PLModule
         if (!list($conf_mail, $conf_title, $conf_text) = $res->fetchOneRow()) {
             cb_erreur("référence de commande inconnue");
         }
-        
+
         /* on extrait le montant */
         if (Env::v('vads_currency') != "978") {
             cb_erreur("monnaie autre que l'euro");
@@ -305,13 +304,13 @@ class PaymentModule extends PLModule
         if (Env::v('vads_result') != "00") {
             cb_erreur("erreur lors du paiement : ?? (".Env::v('vads_result').")");
         }
-        
+
         /* on fait l'insertion en base de donnees */
         XDB::execute("INSERT INTO  payment_transactions (id, uid, ref, fullref, amount, pkey, comment)
                            VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?})",
                      Env::v('vads_trans_date'), $user->id(), $ref, Env::v('vads_order_id'), $montant, "", Env::v('vads_order_info'));
         echo "Paiement stored.\n";
-        
+
         // We check if it is an Xnet payment and then update the related ML.
         $res = XDB::query('SELECT  eid
                              FROM  group_events
@@ -319,7 +318,7 @@ class PaymentModule extends PLModule
         if ($eid = $res->fetchOneCell()) {
             require_once dirname(__FILE__) . '/xnetevents/xnetevents.inc.php';
             $evt = get_event_detail($eid);
-            subscribe_lists_event(0, $user->id(), $evt, $montant, true);
+            subscribe_lists_event($user->id(), $evt, 1, $montant, true);
         }
 
         /* on genere le mail de confirmation */
@@ -414,7 +413,7 @@ class PaymentModule extends PLModule
         if ($eid = $res->fetchOneCell()) {
             require_once dirname(__FILE__) . '/xnetevents/xnetevents.inc.php';
             $evt = get_event_detail($eid);
-            subscribe_lists_event(0, $uid, $evt, $montant, true);
+            subscribe_lists_event($user->id(), $evt, 1, $montant, true);
         }
 
         /* on genere le mail de confirmation */
index 9ad8a34..96fe3c0 100644 (file)
@@ -65,10 +65,10 @@ class BPLCCyberPlus
         $prefix = ($pay->flags->hasflag('unique')) ? str_pad("",15,"0") : rand_url_id();
         $fullref = substr("$prefix-{$pay->id}",-12); // FIXME : check for duplicates
         $ts = time();
-               $trans_date = date("YmdHis", $ts); 
+               $trans_date = date("YmdHis", $ts);
                $trans_id = date("His", $ts); // FIXME : check for duplicates
                                                                
-        // contenu du formulaire        
+        // contenu du formulaire
         $this->urlform = "https://systempay.cyberpluspaiement.com/vads-payment/";
         $this->infos['commercant'] = Array(
             'vads_site_id' => $globals->money->cyperplus_account,
@@ -91,7 +91,7 @@ class BPLCCyberPlus
             'vads_ctx_mode' => $globals->money->cyperplus_prod,
             'vads_page_action' => 'PAYMENT',
             'vads_action_mode' => 'INTERACTIVE');
-        
+
         // calcul de la clé d'acceptation en entrée
         $all_params = array_merge($this->infos['commercant'],$this->infos['client'],$this->infos['commande'],$this->infos['divers']);
         ksort($all_params);
index 2ad9317..c558b49 100644 (file)
@@ -45,13 +45,13 @@ class PlatalModule extends PLModule
             // Preferences thingies
             'prefs'             => $this->make_hook('prefs',     AUTH_COOKIE),
             'prefs/rss'         => $this->make_hook('prefs_rss', AUTH_COOKIE),
-            'prefs/webredirect' => $this->make_hook('webredir',  AUTH_MDP),
+            'prefs/webredirect' => $this->make_hook('webredir',  AUTH_MDP, 'mail'),
             'prefs/skin'        => $this->make_hook('skin',      AUTH_COOKIE),
 
             // password related thingies
             'password'          => $this->make_hook('password',  AUTH_MDP),
             'tmpPWD'            => $this->make_hook('tmpPWD',    AUTH_PUBLIC),
-            'password/smtp'     => $this->make_hook('smtppass',  AUTH_MDP),
+            'password/smtp'     => $this->make_hook('smtppass',  AUTH_MDP, 'mail'),
             'recovery'          => $this->make_hook('recovery',  AUTH_PUBLIC),
             'exit'              => $this->make_hook('exit',      AUTH_PUBLIC),
             'review'            => $this->make_hook('review',    AUTH_PUBLIC),
@@ -113,10 +113,10 @@ class PlatalModule extends PLModule
     function __set_rss_state($state)
     {
         if ($state) {
-            S::set('token', rand_url_id(16));
+            S::user()->token = rand_url_id(16);
             XDB::execute('UPDATE  accounts
                              SET  token = {?}
-                           WHERE  uid = {?}', S::s('token'), S::i('uid'));
+                           WHERE  uid = {?}', S::user()->token, S::i('uid'));
         } else {
             S::kill('token');
             XDB::execute('UPDATE  accounts
@@ -133,7 +133,6 @@ class PlatalModule extends PLModule
         if (Post::has('email_format')) {
             $fmt = Post::s('email_format');
             S::user()->setEmailFormat($fmt);
-            S::set('email_format', $fmt);
         }
 
         if (Post::has('rss')) {
@@ -203,10 +202,10 @@ class PlatalModule extends PLModule
     {
         global $globals;
 
-        if (Post::has('response2'))  {
+        if (Post::has('pwhash') && Post::t('pwhash'))  {
             S::assert_xsrf_token();
 
-            S::set('password', $password = Post::v('response2'));
+            S::set('password', $password = Post::t('pwhash'));
             XDB::execute('UPDATE  accounts
                              SET  password = {?}
                            WHERE  uid={?}', $password,
@@ -225,12 +224,12 @@ class PlatalModule extends PLModule
             S::logger()->log('passwd');
             Platal::session()->setAccessCookie(true);
 
-            $page->changeTpl('platal/motdepasse.success.tpl');
+            $page->changeTpl('platal/password.success.tpl');
             $page->run();
         }
 
-        $page->changeTpl('platal/motdepasse.tpl');
-        $page->addJsLink('motdepasse.js');
+        $page->changeTpl('platal/password.tpl');
+        $page->addJsLink('password.js');
         $page->setTitle('Mon mot de passe');
     }
 
@@ -366,8 +365,8 @@ Adresse de secours : " . Post::v('email') : ""));
         }
 
         $uid = $ligne["uid"];
-        if (Post::has('response2')) {
-            $password = Post::v('response2');
+        if (Post::has('pwhash') && Post::t('pwhash')) {
+            $password = Post::t('pwhash');
             XDB::query('UPDATE  accounts
                            SET  password={?}
                          WHERE  uid = {?} AND state = \'active\'',
@@ -388,8 +387,8 @@ Adresse de secours : " . Post::v('email') : ""));
             S::logger($uid)->log("passwd", "");
             $page->changeTpl('platal/tmpPWD.success.tpl');
         } else {
-            $page->changeTpl('platal/motdepasse.tpl');
-            $page->addJsLink('motdepasse.js');
+            $page->changeTpl('platal/password.tpl');
+            $page->addJsLink('password.js');
         }
     }
 
@@ -450,7 +449,7 @@ Adresse de secours : " . Post::v('email') : ""));
         }
     }
 
-    function handler_review(&$page, $action = null, $mode = null) 
+    function handler_review(&$page, $action = null, $mode = null)
     {
         // Include X-XRDS-Location response-header for Yadis discovery
         global $globals;
index 20305e3..d7cd55f 100644 (file)
@@ -44,17 +44,17 @@ class ProfileModule extends PLModule
             'profile/ajax/skill'         => $this->make_hook('ajax_skill',                 AUTH_COOKIE, 'user', NO_AUTH),
             'profile/ajax/searchname'    => $this->make_hook('ajax_searchname',            AUTH_COOKIE, 'user', NO_AUTH),
             'profile/ajax/buildnames'    => $this->make_hook('ajax_buildnames',            AUTH_COOKIE, 'user', NO_AUTH),
+            'profile/ajax/tree/jobterms' => $this->make_hook('ajax_tree_job_terms',        AUTH_COOKIE, 'user', NO_AUTH),
+            'profile/jobterms'           => $this->make_hook('jobterms',                   AUTH_COOKIE, 'user', NO_AUTH),
             'javascript/education.js'    => $this->make_hook('education_js',               AUTH_COOKIE),
             'javascript/grades.js'       => $this->make_hook('grades_js',                  AUTH_COOKIE),
             'profile/medal'              => $this->make_hook('medal',                      AUTH_PUBLIC),
             'profile/name_info'          => $this->make_hook('name_info',                  AUTH_PUBLIC),
 
             'referent'                   => $this->make_hook('referent',                   AUTH_COOKIE),
-            'emploi'                     => $this->make_hook('ref_search',                 AUTH_COOKIE),
-            'jobs'                       => $this->make_hook('ref_search',                 AUTH_COOKIE),
-            'referent/search'            => $this->make_hook('ref_search',                 AUTH_COOKIE),
             'referent/ssect'             => $this->make_hook('ref_sect',                   AUTH_COOKIE, 'user', NO_AUTH),
             'referent/country'           => $this->make_hook('ref_country',                AUTH_COOKIE, 'user', NO_AUTH),
+            'referent/autocomplete'      => $this->make_hook('ref_autocomplete',           AUTH_COOKIE, 'user', NO_AUTH),
 
             'groupes-x'                  => $this->make_hook('xnet',                       AUTH_COOKIE),
             'groupes-x/logo'             => $this->make_hook('xnetlogo',                   AUTH_PUBLIC),
@@ -76,7 +76,9 @@ class ProfileModule extends PLModule
         );
     }
 
-    /* XXX COMPAT */
+    /* Function needed for compatibility reasons.
+     * TODO: removes calls to fiche.php?user=blah.machin.2083 and then removes this.
+     */
     function handler_fiche(&$page)
     {
         return $this->handler_profile($page, Env::v('user'));
@@ -251,14 +253,19 @@ class ProfileModule extends PLModule
         $page->changeTpl('profile/profile.tpl', SIMPLE);
 
         // Determines the access level at which the profile will be displayed.
-        if (!S::logged() || Env::v('view') == 'public') {
+        if (!S::logged() || !S::user()->checkPerms('directory_ax') || Env::v('view') == 'public') {
             $view = 'public';
-        } else if (S::logged() && Env::v('view') == 'ax') {
+        } else if (!S::user()->checkPerms('directory_private') || Env::v('view') == 'ax') {
             $view = 'ax';
         } else {
             $view = 'private';
         }
 
+        // Display pending picture
+        if (S::logged() && Env::v('modif') == 'new') {
+            $page->assign('with_pending_pic', true);
+        }
+
         // Fetches profile's and profile's owner information and redirects to
         // marketing if the owner has not subscribed and the requirer has logged in.
         $profile = Profile::get($pid, Profile::FETCH_ALL, $view);
@@ -439,7 +446,6 @@ class ProfileModule extends PLModule
             $page->assign('jobpref', $jobpref);
         }
     }
-
     function handler_ajax_sub_sector(&$page, $id, $ssect, $sssect = -1)
     {
         pl_content_headers("text/html");
@@ -452,6 +458,23 @@ class ProfileModule extends PLModule
         $page->assign('sel', $sssect);
     }
 
+    /**
+     * Page for url "profile/ajax/tree/jobterms". Display a JSon page containing
+     * the sub-branches of a branch in the job terms tree.
+     * @param $page the Platal page
+     * @param $filter filter helps to display only jobterms that are contained in jobs or in mentors
+     *
+     * @param Env::i('jtid') job term id of the parent branch, if none trunk will be used
+     * @param Env::v('attrfunc') the name of a javascript function that will be called when a branch
+     * is chosen
+     * @param Env::v('treeid') tree id that will be given as first argument of attrfunc function
+     * the second argument will be the chosen job term id and the third one the chosen job full name.
+     */
+    function handler_ajax_tree_job_terms(&$page, $filter = JobTerms::ALL)
+    {
+        JobTerms::ajaxGetBranch(&$page, $filter);
+    }
+
     function handler_ajax_alternates(&$page, $id, $sssect)
     {
         pl_content_headers("text/html");
@@ -552,42 +575,6 @@ class ProfileModule extends PLModule
         $page->addJsLink('close_on_esc.js');
     }
 
-    function handler_ref_search(&$page, $action = null, $subaction = null)
-    {
-        $wp = new PlWikiPage('Docs.Emploi');
-        $wp->buildCache();
-
-        $page->setTitle('Emploi et Carrières');
-
-        // Retrieval of sector names
-        $sectors = XDB::fetchAllAssoc('id', 'SELECT  pjse.id, pjse.name
-                                               FROM  profile_job_sector_enum AS pjse
-                                         INNER JOIN  profile_mentor_sector AS pms ON (pms.sectorid = pjse.id)
-                                           GROUP BY  pjse.id
-                                           ORDER BY  pjse.name');
-        $page->assign_by_ref('sectors', $sectors);
-
-        // nb de mentors
-        $res = XDB::query("SELECT count(*) FROM profile_mentor");
-        $page->assign('mentors_number', $res->fetchOneCell());
-
-        // On vient d'un formulaire
-        require_once 'ufbuilder.inc.php';
-        $ufb = new UFB_MentorSearch();
-        if (!$ufb->isEmpty()) {
-            require_once 'userset.inc.php';
-            $ufc = $ufb->getUFC();
-            $set = new ProfileSet($ufc);
-            $set->addMod('mentor', 'Référents');
-            $set->apply('referent/search', $page, $action, $subaction);
-            if ($set->count() > 100) {
-                $page->assign('recherche_trop_large', true);
-            }
-        }
-
-        $page->changeTpl('profile/referent.tpl');
-    }
-
     function handler_ref_sect(&$page, $sect)
     {
         pl_content_headers("text/html");
@@ -620,6 +607,85 @@ class ProfileModule extends PLModule
         $page->assign('list', $it);
     }
 
+    /**
+     * Page for url "referent/autocomplete". Display an "autocomplete" page (plain/text with values
+     * separated by "|" chars) for jobterms in referent (mentor) search.
+     * @see handler_jobterms
+     */
+    function handler_ref_autocomplete(&$page)
+    {
+        $this->handler_jobterms(&$page, 'mentor');
+    }
+
+    /**
+     * Page for url "profile/jobterms" (function also used for "referent/autocomplete" @see
+     * handler_ref_autocomplete). Displays an "autocomplete" page (plain text with values
+     * separated by "|" chars) for jobterms to add in profile.
+     * @param $page the Platal page
+     * @param $type set to 'mentor' to display the number of mentors for each term and order
+     *  by descending number of mentors.
+     *
+     * @param Env::v('q') the text that has been typed and to complete automatically
+     */
+    function handler_jobterms(&$page, $type = 'nomentor')
+    {
+        pl_content_headers("text/plain");
+
+        $q = Env::v('q').'%';
+        $tokens = JobTerms::tokenize($q);
+        if (count($tokens) == 0) {
+            exit;
+        }
+        sort($tokens);
+        $q_normalized = implode(' ', $tokens);
+
+        // try to look in cached results
+        $cache = XDB::query('SELECT  result
+                               FROM  search_autocomplete
+                              WHERE  name = {?} AND
+                                     query = {?} AND
+                                     generated > NOW() - INTERVAL 1 DAY',
+                            $type, $q_normalized);
+        if ($res = $cache->fetchOneCell()) {
+            echo $res;
+            die();
+        }
+
+        $joins = JobTerms::token_join_query($tokens, 'e');
+        if ($type == 'mentor') {
+            $count = ', COUNT(DISTINCT pid) AS nb';
+            $countjoin = ' INNER JOIN  profile_job_term_relation AS r ON(r.jtid_1 = e.jtid) INNER JOIN  profile_mentor_term AS m ON(r.jtid_2 = m.jtid)';
+            $countorder = 'nb DESC, ';
+        } else {
+            $count = $countjoin = $countorder = '';
+        }
+        $list = XDB::iterator('SELECT  e.jtid AS id, e.full_name AS field'.$count.'
+                                 FROM  profile_job_term_enum AS e '.$joins.$countjoin.'
+                             GROUP BY  e.jtid
+                             ORDER BY  '.$countorder.'field
+                                LIMIT  11');
+        $nbResults = 0;
+        $res = '';
+        while ($result = $list->next()) {
+            $nbResults++;
+            if ($nbResults == 11) {
+                $res .= $q."|-1\n";
+            } else {
+                $res .= $result['field'].'|';
+                if ($count) {
+                    $res .= $result['nb'].'|';
+                }
+                $res .= $result['id'];
+            }
+            $res .= "\n";
+        }
+        XDB::query('REPLACE INTO  search_autocomplete
+                          VALUES  ({?}, {?}, {?}, NOW())',
+                    $type, $q_normalized, $res);
+        echo $res;
+        exit();
+    }
+
     function handler_xnet(&$page)
     {
         $page->changeTpl('profile/groupesx.tpl');
@@ -748,7 +814,7 @@ class ProfileModule extends PLModule
     function handler_admin_education_degree(&$page, $action = 'list', $id = null) {
         $page->setTitle('Administration - Niveau de formation');
         $page->assign('title', 'Gestion des niveau de formation');
-        $table_editor = new PLTableEditor('admin/education_degree', 'profile_education_degree_enum', 'id', true);
+        $table_editor = new PLTableEditor('admin/education_degree', 'profile_education_degree_enum', 'id');
         $table_editor->add_join_table('profile_education_degree', 'degreeid', true);
         $table_editor->add_join_table('profile_education', 'degreeid', true);
         $table_editor->describe('degree', 'niveau', true);
index 4e6d51b..0c6629a 100644 (file)
@@ -32,11 +32,7 @@ class ProfileSettingAddress extends ProfileSettingGeocoding
 
     private function cleanAddress(ProfilePage &$page, $addrid, array &$address)
     {
-        if (!isset($address['tel'])) {
-            $address['tel'] = array();
-        }
-        $profiletel           = new ProfileSettingPhones('address', $addrid);
-        $address['tel']       = $profiletel->value($page, 'tel',       $address['tel'],       $s);
+        $address['tel']       = Phone::formatFormArray($address['tel'], $s);
         $address['current']   = $this->bool->value($page, 'current',   $address['current'],   $s);
         $address['temporary'] = $this->bool->value($page, 'temporary', $address['temporary'], $s);
         $address['secondary'] = $this->bool->value($page, 'secondary', $address['secondary'], $s);
@@ -98,6 +94,7 @@ class ProfileSettingAddress extends ProfileSettingGeocoding
         Geocoder::getAreaId($address, "administrativeArea");
         Geocoder::getAreaId($address, "subAdministrativeArea");
         Geocoder::getAreaId($address, "locality");
+
         XDB::execute("INSERT INTO  profile_addresses (pid, type, id, flags, accuracy,
                                                       text, postalText, postalCode, localityId,
                                                       subAdministrativeAreaId, administrativeAreaId,
@@ -118,15 +115,25 @@ class ProfileSettingAddress extends ProfileSettingGeocoding
         XDB::execute("DELETE FROM  profile_addresses
                             WHERE  pid = {?} AND type = 'home'",
                      $page->pid());
-        XDB::execute("DELETE FROM  profile_phones
-                            WHERE  pid = {?} AND link_type = 'address'",
-                     $page->pid());
+        Phone::deletePhones($page->pid(), Phone::LINK_ADDRESS);
         foreach ($value as $addrid => &$address) {
             $this->saveAddress($page->pid(), $addrid, $address, 'home');
-            $profiletel = new ProfileSettingPhones('address', $addrid);
-            $profiletel->saveTels($page->pid(), 'tel', $address['tel']);
+            Phone::savePhones($address['tel'], $page->pid(), Phone::LINK_ADDRESS, $addrid);
         }
     }
+
+    public function getText($value) {
+        $addresses = array();
+        foreach ($value as $addrid => $address) {
+            $phones = Phone::formArrayToString($address['tel']);
+            $addresses[] = 'Adresse : ' . $address['text'] . ', affichage : ' . $address['pub']
+                         . ', commentaire : ' . $address['comment'] . ', actuelle : ' . ($address['current'] ? 'oui' : 'non')
+                         . ', temporaire : ' . ($address['temporary'] ? 'oui' : 'non') . ', secondaire : '
+                         . ($address['secondary'] ? 'oui' : 'non') . ', conctactable par courier : '
+                         . ($address['mail'] ? 'oui' : 'non') . ($phones ? ', ' . $phones : '');
+        }
+        return implode(' ; ' , $addresses);
+    }
 }
 
 class ProfileSettingAddresses extends ProfilePage
@@ -161,45 +168,23 @@ class ProfileSettingAddresses extends ProfilePage
             $this->values['addresses'] = $res->fetchAllAssoc();
         }
 
-        $res = XDB::iterator("SELECT  link_id AS addrid, tel_type AS type, pub, display_tel AS tel, comment
-                                FROM  profile_phones
-                               WHERE  pid = {?} AND link_type = 'address'
-                            ORDER BY  link_id",
-                             $this->pid());
-        $i = 0;
-        $adrNb = count($this->values['addresses']);
-        while ($tel = $res->next()) {
-            $addrid = $tel['addrid'];
-            unset($tel['addrid']);
-            while ($i < $adrNb && $this->values['addresses'][$i]['id'] < $addrid) {
-                $i++;
-            }
-            if ($i >= $adrNb) {
-                break;
-            }
-            $address =& $this->values['addresses'][$i];
-            if (!isset($address['tel'])) {
-                $address['tel'] = array();
-            }
-            if ($address['id'] == $addrid) {
-                $address['tel'][] = $tel;
-            }
+        // Adds phones to addresses.
+        $it = Phone::iterate(array($this->pid()), array(Phone::LINK_ADDRESS));
+        while ($phone = $it->next()) {
+            $this->values['addresses'][$phone->linkId()]['tel'][$phone->id()] = $phone->toFormArray();
         }
+
+        // Properly formats addresses.
         foreach ($this->values['addresses'] as $id => &$address) {
+            $phone = new Phone();
             if (!isset($address['tel'])) {
-                $address['tel'] = array(
-                                 0 => array(
-                                     'type'    => 'fixed',
-                                     'tel'     => '',
-                                     'pub'     => 'private',
-                                     'comment' => '',
-                                     )
-                                 );
+                $address['tel'] = array(0 => $phone->toFormArray());
             }
             unset($address['id']);
             $address['changed'] = 0;
             $address['removed'] = 0;
         }
+        //var_dump($this->values['addresses']['tel']);
     }
 }
 
index 6dfc8e6..fa40cf9 100644 (file)
@@ -82,6 +82,15 @@ class ProfileSettingDeco implements ProfileSetting
             }
         }
     }
+
+    public function getText($value) {
+        $medalsList = DirEnum::getOptions(DirEnum::MEDALS);
+        $medals = array();
+        foreach ($value as $id => $medal) {
+            $medals[] = $medalsList[$id];
+        }
+        return implode(', ', $medals);
+    }
 }
 
 class ProfileSettingDecos extends ProfilePage
@@ -117,21 +126,24 @@ class ProfileSettingDecos extends ProfilePage
 
     public function _prepare(PlPage &$page, $id)
     {
-        $res    = XDB::iterator("SELECT  *, FIND_IN_SET('validation', flags) AS validate
-                                   FROM  profile_medal_enum
-                               ORDER BY  type, text");
-        $mlist  = array();
+        $res = XDB::iterator('SELECT  *, FIND_IN_SET(\'validation\', flags) AS validate
+                                FROM  profile_medal_enum
+                            ORDER BY  type, text');
+        $mlist = array();
         while ($tmp = $res->next()) {
             $mlist[$tmp['type']][] = $tmp;
         }
         $page->assign('medal_list', $mlist);
-        $trad = Array('ordre'      => 'Ordres',
-                      'croix'      => 'Croix',
-                      'militaire'  => 'Médailles militaires',
-                      'honneur'    => 'Médailles d\'honneur',
-                      'resistance' => 'Médailles de la résistance',
-                      'prix'       => 'Prix');
-        $page->assign('trad', $trad);
+        $fullType = array(
+            'ordre'      => 'Ordres',
+            'croix'      => 'Croix',
+            'militaire'  => 'Médailles militaires',
+            'honneur'    => 'Médailles d\'honneur',
+            'resistance' => 'Médailles de la résistance',
+            'prix'       => 'Prix',
+            'sport'      => 'Médailles sportives'
+        );
+        $page->assign('fullType', $fullType);
     }
 }
 
index 4f9c1ac..38cbd07 100644 (file)
@@ -126,6 +126,11 @@ class ProfileSettingSearchNames implements ProfileSetting
                     $value[] = $sn;
                 } while ($sn = $sn_all->next());
             }
+            require_once 'validations.inc.php';
+            $namesRequest = ProfileValidate::get_typed_requests($page->pid(), 'usage');
+            if (count($namesRequest) > 0) {
+                Platal::page()->assign('validation', true);
+            }
             $value = $this->clean($value);
         } else {
             require_once 'name.func.inc.php';
@@ -226,8 +231,18 @@ class ProfileSettingSearchNames implements ProfileSetting
             $display_names = array();
             build_display_names($display_names, $this->search_names,
                                 $page->profile->isFemale(), $this->private_name_end);
-            set_profile_display($display_names, $page->pid());
+            set_profile_display($display_names, $page->profile);
+        }
+    }
+
+    public function getText($value) {
+        $names = array();
+        foreach ($value as $name) {
+            if ($name['name'] != '') {
+                $names[] = $name['type_name'] . ' : ' . $name['name'];
+            }
         }
+        return implode(', ' , $names);
     }
 }
 
@@ -287,14 +302,30 @@ class ProfileSettingEdu implements ProfileSetting
                      $page->pid());
         foreach ($value as $eduid=>&$edu) {
             if ($edu['eduid'] != '') {
+                $fieldId = ($edu['fieldid'] == 0) ? null : $edu['fieldid'];
                 XDB::execute("INSERT INTO  profile_education
                                       SET  id = {?}, pid = {?}, eduid = {?}, degreeid = {?},
                                            fieldid = {?}, grad_year = {?}, program = {?}",
                              $eduid, $page->pid(), $edu['eduid'], $edu['degreeid'],
-                             $edu['fieldid'], $edu['grad_year'], $edu['program']);
+                             $fieldId, $edu['grad_year'], $edu['program']);
             }
         }
     }
+
+    public function getText($value) {
+        $schoolsList = DirEnum::getOptions(DirEnum::EDUSCHOOLS);
+        $degreesList = DirEnum::getOptions(DirEnum::EDUDEGREES);
+        $fieldsList = DirEnum::getOptions(DirEnum::EDUFIELDS);
+        $educations = array();
+        foreach ($value as $education) {
+            $educations[] = 'Université : ' . $schoolsList[$education['eduid']]
+                          . ', diplôme : ' . $degreesList[$education['degreeid']]
+                          . ', domaine : ' . $fieldsList[$education['fieldid']]
+                          . ', année d\'obtention : ' . $education['grad_year']
+                          . ', intitulé : ' . $education['program'];
+        }
+        return implode(', ', $educations);
+    }
 }
 
 class ProfileSettingEmailDirectory implements ProfileSetting
@@ -320,6 +351,10 @@ class ProfileSettingEmailDirectory implements ProfileSetting
         }
         return $value;
     }
+
+    public function getText($value) {
+        return $value;
+    }
 }
 
 class ProfileSettingNetworking implements ProfileSetting
@@ -393,6 +428,15 @@ class ProfileSettingNetworking implements ProfileSetting
                          $page->pid(), $id, $network['type'], $network['address'], $network['pub']);
         }
     }
+
+    public function getText($value) {
+        $networkings = array();
+        foreach ($value as $network) {
+            $networkings[] = 'nom : ' . $network['name'] . ', adresse : ' . $network['address']
+                           . ', affichage : ' . $network['pub'];
+        }
+        return implode(' ; ' , $networkings);
+    }
 }
 
 class ProfileSettingPromo implements ProfileSetting
@@ -466,6 +510,10 @@ class ProfileSettingPromo implements ProfileSetting
         }
         return intval($value);
     }
+
+    public function getText($value) {
+        return $value;
+    }
 }
 
 
@@ -494,7 +542,7 @@ class ProfileSettingGeneral extends ProfilePage
         $this->settings['email_directory_new']
                                   = new ProfileSettingEmailDirectory();
         $this->settings['networking'] = new ProfileSettingNetworking();
-        $this->settings['tels']   = new ProfileSettingPhones('user', 0);
+        $this->settings['tels']   = new ProfileSettingPhones();
         $this->settings['edus']   = new ProfileSettingEdu();
         $this->settings['promo']  = new ProfileSettingPromo();
         $this->watched= array('freetext' => true, 'tels' => true,
@@ -507,17 +555,12 @@ class ProfileSettingGeneral extends ProfilePage
     {
         // Checkout all data...
         $res = XDB::query("SELECT  p.nationality1, p.nationality2, p.nationality3, p.birthdate,
-                                   pp.display_tel as mobile, pp.pub as mobile_pub,
                                    p.email_directory as email_directory, pd.promo AS promo_display,
                                    p.freetext, p.freetext_pub, p.ax_id AS matricule_ax, pd.yourself
                              FROM  profiles              AS p
                        INNER JOIN  profile_display       AS pd ON (pd.pid = p.pid)
-                        LEFT JOIN  profile_phones        AS pp ON (pp.pid = p.pid AND link_type = 'user')
                             WHERE  p.pid = {?}", $this->pid());
         $this->values = $res->fetchOneAssoc();
-        if ($this->owner) {
-            $this->values['yourself'] = $this->owner->displayName();
-        }
 
         // Retreive photo informations
         $res = XDB::query("SELECT  pub
@@ -622,7 +665,7 @@ class ProfileSettingGeneral extends ProfilePage
         $page->assign('edu_fields', $res->fetchAllAssoc());
 
         require_once "emails.combobox.inc.php";
-        fill_email_combobox($page, $this->owner, $this->profile);
+        fill_email_combobox($page, $this->owner);
 
         $res = XDB::query("SELECT  nw.nwid AS type, nw.name
                              FROM  profile_networking_enum AS nw
index 62489ed..f5e2941 100644 (file)
@@ -41,6 +41,11 @@ class ProfileSettingSection implements ProfileSetting
                        WHERE  pid = {?}",
                      $value, $page->pid());
     }
+
+    public function getText($value) {
+        $sectionsList = DirEnum::getOptions(DirEnum::SECTIONS);
+        return $sectionsList[$value];
+    }
 }
 
 class ProfileSettingBinets implements ProfileSetting
@@ -85,6 +90,10 @@ class ProfileSettingBinets implements ProfileSetting
         XDB::execute("INSERT INTO  profile_binets (pid, binet_id)
                            VALUES  " . implode(',', $insert));
     }
+
+    public function getText($value) {
+        return implode(', ', $value);
+    }
 }
 
 class ProfileSettingGroups extends ProfilePage
@@ -113,7 +122,7 @@ class ProfileSettingGroups extends ProfilePage
                                                     WHERE  a.inscriptible != 0
                                                            AND (a.cat = 'GroupesX' OR a.cat = 'Institutions')
                                                  ORDER BY  a.cat, a.dom, a.nom"));
-        $page->assign('old', (int) date('Y') >= $page->profile->grad_year);
+        $page->assign('old', (int) date('Y') >= $this->profile->grad_year);
     }
 }
 
index f698485..54e00d1 100644 (file)
@@ -72,7 +72,7 @@ class ProfileSettingJob extends ProfileSettingGeocoding
                 'changed'                 => '0',
                 'removed'                 => '0',
             ),
-            'hq_phone'         => '',
+            'hq_fixed'         => '',
             'hq_fax'           => '',
             'subSubSectorName' => null,
             'sector'           => '0',
@@ -109,7 +109,8 @@ class ProfileSettingJob extends ProfileSettingGeocoding
                 'tel'     => '',
                 'pub'     => 'private',
                 'comment' => '',
-            )),
+            ),
+            'terms'            => array()),
         );
     }
 
@@ -147,6 +148,26 @@ class ProfileSettingJob extends ProfileSettingGeocoding
                 list($job['sector'], $job['subSector'], $job['subSubSector']) = $res->fetchOneRow();
             }
         }
+        if (count($job['terms'])) {
+            $termsid = array();
+            foreach ($job['terms'] as $term) {
+                if (!$term['full_name']) {
+                    $termsid[] = $term['jtid'];
+                }
+            }
+            if (count($termsid)) {
+                $res = XDB::query("SELECT  jtid, full_name
+                                    FROM  profile_job_term_enum
+                                   WHERE  jtid IN {?}",
+                                 $termsid);
+                $term_id_to_name = $res->fetchAllAssoc('jtid', false);
+                foreach ($job['terms'] as &$term) {
+                    if (!$term['full_name']) {
+                        $term['full_name'] = $term_id_to_name[$term['jtid']];
+                    }
+                }
+            }
+        }
         if ($job['name']) {
             $res = XDB::query("SELECT  id
                                  FROM  profile_job_enum
@@ -162,16 +183,13 @@ class ProfileSettingJob extends ProfileSettingGeocoding
                                    $job['hq_email'], $job['hq_fixed'], $job['hq_fax'], $job['hq_address']);
                 $req->submit();
                 $job['jobid'] = null;
+                sleep(1);
             } else {
                 $job['jobid'] = $res->fetchOneCell();
             }
         }
         $job['w_address']['pub'] = $this->pub->value($page, 'address_pub', $job['w_address']['pub'], $s);
-        if (!isset($job['w_phone'])) {
-            $job['w_phone'] = array();
-        }
-        $profiletel = new ProfileSettingPhones('pro', $jobid);
-        $job['w_phone'] = $profiletel->value($page, 'tel', $job['w_phone'], $s);
+        $job['w_phone'] = Phone::formatFormArray($job['w_phone'], $s);
 
         unset($job['removed']);
         unset($job['new']);
@@ -202,8 +220,10 @@ class ProfileSettingJob extends ProfileSettingGeocoding
                     continue;
                 }
 
-                $job['name_error'] = true;
-                $success = false;
+                if (!$init) {
+                    $job['name_error'] = true;
+                    $success = false;
+                }
             }
 
             if (isset($job['removed']) && $job['removed']) {
@@ -212,6 +232,11 @@ class ProfileSettingJob extends ProfileSettingGeocoding
                 }
                 array_splice($value, $key, 1);
             }
+            foreach (array('sectorid', 'subsectorid', 'subsubsectorid') as $key) {
+                if ($job[$key] == 0) {
+                    $job[$key] = null;
+                }
+            }
         }
         foreach ($value as $key => &$job) {
             $ls = true;
@@ -228,19 +253,15 @@ class ProfileSettingJob extends ProfileSettingGeocoding
 
     public function save(ProfilePage &$page, $field, $value)
     {
-        // TODO: use address and phone classes to update profile_job_enum and profile_phones once they are done.
-
-        require_once 'profil.func.inc.php';
-
+        // TODO: use address class to update profile_job_enum once it is done.
         XDB::execute("DELETE FROM  profile_job
                             WHERE  pid = {?}",
                      $page->pid());
         XDB::execute("DELETE FROM  profile_addresses
                             WHERE  pid = {?} AND type = 'job'",
                      $page->pid());
-        XDB::execute("DELETE FROM  profile_phones
-                            WHERE  pid = {?} AND link_type = 'pro'",
-                     $page->pid());
+        Phone::deletePhones($page->pid(), Phone::LINK_JOB);
+        $terms_values = array();
         foreach ($value as $id => &$job) {
             if (isset($job['name']) && $job['name']) {
                 if (isset($job['jobid']) && $job['jobid']) {
@@ -258,10 +279,63 @@ class ProfileSettingJob extends ProfileSettingGeocoding
                 }
                 $address = new ProfileSettingAddress();
                 $address->saveAddress($page->pid(), $id, $job['w_address'], 'job');
-                $profiletel = new ProfileSettingPhones('pro', $id);
-                $profiletel->saveTels($page->pid(), 'tel', $job['w_phone']);
+                Phone::savePhones($job['w_phone'], $page->pid(), Phone::LINK_JOB, $id);
+                if (isset($job['terms'])) {
+                    foreach ($job['terms'] as $term) {
+                        $terms_values[] = '('.XDB::escape($page->pid()).', '. XDB::escape($id).', '.XDB::escape($term['jtid']).', "original")';
+                    }
+                }
             }
         }
+        if (count($terms_values) > 0) {
+            XDB::execute('INSERT INTO  profile_job_term (pid, jid, jtid, computed)
+                               VALUES  '.implode(', ', $terms_values));
+        }
+    }
+
+    public function getText($value) {
+        $jobs = array();
+        foreach ($value as $id => $job) {
+            $address = new ProfileSettingAddress();
+            $phones = Phone::formArrayToString($job['w_phone']);
+            $jobs[] = 'Entreprise : ' . $job['name'] . ', secteur : ' . $job['subSubSectorName']
+                    . ', description : ' . $job['description'] . ', web : ' . $job['w_url']
+                    . ', email : ' . $job['w_email']
+                    . ($phones ? ', ' . $phones : '') . ', ' .  $address->getText($job['w_address']);
+        }
+        return implode(' ; ' , $jobs);
+    }
+}
+
+class ProfileSettingCorps implements ProfileSetting
+{
+    public function value(ProfilePage &$page, $field, $value, &$success)
+    {
+        $success = true;
+        if (is_null($value)) {
+            $res = XDB::query("SELECT  original_corpsid AS original, current_corpsid AS current,
+                                       rankid AS rank, corps_pub AS pub
+                                 FROM  profile_corps
+                                WHERE  pid = {?}",
+                            $page->pid());
+            return $res->fetchOneAssoc();
+        }
+        return $value;
+    }
+
+    public function save(ProfilePage &$page, $field, $value)
+    {
+        XDB::execute('REPLACE INTO  profile_corps (original_corpsid, current_corpsid, rankid, corps_pub, pid)
+                            VALUES  ({?}, {?}, {?}, {?}, {?})',
+                      $value['original'], $value['current'], $value['rank'], $value['pub'], $page->pid());
+    }
+
+    public function getText($value)
+    {
+        $corpsList = DirEnum::getOptions(DirEnum::CORPS);
+        $rankList  = DirEnum::getOptions(DirEnum::CORPSRANKS);
+        return 'Corps actuel : ' . $corpsList[$value['current']] . ' , rang : ' . $corpsList[$value['rank']]
+            . ' , corps d\'origine : ' . $corpsList[$value['original']] . ' , affichage : ' . $value['pub'];
     }
 }
 
@@ -273,7 +347,7 @@ class ProfileSettingJobs extends ProfilePage
     {
         parent::__construct($wiz);
         $this->settings['cv'] = null;
-        $this->settings['corps'] = null;
+        $this->settings['corps'] = new ProfileSettingCorps();
         $this->settings['jobs'] = new ProfileSettingJob();
         $this->watched = array('cv' => true, 'jobs' => true, 'corps' => true);
     }
@@ -287,14 +361,6 @@ class ProfileSettingJobs extends ProfilePage
                           $this->pid());
         $this->values['cv'] = $res->fetchOneCell();
 
-        // Checkout the corps
-        $res = XDB::query("SELECT  original_corpsid AS original, current_corpsid AS current,
-                                   rankid AS rank, corps_pub AS pub
-                             FROM  profile_corps
-                            WHERE  pid = {?}",
-                        $this->pid());
-        $this->values['corps'] = $res->fetchOneAssoc();
-
         // Build the jobs tree
         $res = XDB::iterRow("SELECT  j.id, j.jobid, je.name, j.sectorid, j.subsectorid, j.subsubsectorid,
                                      s.name, j.description, j.email, j.email_pub, j.url, j.pub,
@@ -386,15 +452,20 @@ class ProfileSettingJobs extends ProfilePage
                 );
             }
 
-            $res = XDB::iterator("SELECT  link_id AS jobid, tel_type AS type, pub, display_tel AS tel, comment
-                                    FROM  profile_phones
-                                   WHERE  pid = {?} AND link_type = 'pro'
-                                ORDER BY  link_id",
+            $it = Phone::iterate(array($this->pid()), array(Phone::LINK_JOB));
+            while ($phone = $it->next()) {
+                $this->values['jobs'][$phone->linkId()]['w_phone'][$phone->id()] = $phone->toFormArray();
+            }
+            $res = XDB::iterator("SELECT  e.jtid, e.full_name, j.jid AS jobid
+                                    FROM  profile_job_term_enum AS e
+                              INNER JOIN  profile_job_term AS j USING(jtid)
+                                   WHERE  pid = {?}
+                                ORDER BY  j.jid",
                                  $this->pid());
             $i = 0;
             $jobNb = count($this->values['jobs']);
-            while ($phone = $res->next()) {
-                $jobid = $phone['jobid'];
+            while ($term = $res->next()) {
+                $jobid = $term['jobid'];
                 while ($i < $jobNb && $this->values['jobs'][$i]['id'] < $jobid) {
                     $i++;
                 }
@@ -402,29 +473,25 @@ class ProfileSettingJobs extends ProfilePage
                     break;
                 }
                 $job =& $this->values['jobs'][$i];
-                if (!isset($job['w_phone'])) {
-                    $job['w_phone'] = array();
+                if ($job['id'] != $jobid) {
+                    continue;
                 }
-                if ($job['id'] == $jobid) {
-                    $job['w_phone'][] = $phone;
+                if (!isset($job['terms'])) {
+                    $job['terms'] = array();
                 }
+                $job['terms'][] = $term;
             }
+
             foreach ($this->values['jobs'] as $id => &$job) {
+                $phone = new Phone();
                 if (!isset($job['w_phone'])) {
-                    $job['w_phone'] = array(
-                        0 => array(
-                            'type'    => 'fixed',
-                            'tel'     => '',
-                            'pub'     => 'private',
-                            'comment' => '',
-                        )
-                    );
+                    $job['w_phone'] = array(0 => $phone->toFormArray());
                 }
             }
+
             $job['w_email_new'] = '';
-            if (!isset($job['hq_phone'])) {
-                $job['hq_phone'] = '';
+            if (!isset($job['hq_fixed'])) {
+                $job['hq_fixed'] = '';
             }
             if (!isset($job['hq_fax'])) {
                 $job['hq_fax'] = '';
@@ -470,19 +537,12 @@ class ProfileSettingJobs extends ProfilePage
                            WHERE  pid = {?}",
                          $this->values['cv'], $this->pid());
         }
-
-        if ($this->changed['corps']) {
-            XDB::execute('REPLACE INTO  profile_corps (original_corpsid, current_corpsid, rankid, corps_pub, pid)
-                                VALUES  ({?}, {?}, {?}, {?}, {?})',
-                          $this->values['corps']['original'], $this->values['corps']['current'],
-                          $this->values['corps']['rank'], $this->values['corps']['pub'], $this->pid());
-        }
     }
 
     public function _prepare(PlPage &$page, $id)
     {
         require_once 'emails.combobox.inc.php';
-        fill_email_combobox($page, $this->owner, $this->profile);
+        fill_email_combobox($page, $this->owner);
 
         $res = XDB::query("SELECT  id, name AS label
                              FROM  profile_job_sector_enum");
index 035bb47..3aa4140 100644 (file)
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************/
 
-class ProfileSettingSectors implements ProfileSetting
+/** Terms associated to profile mentoring */
+class ProfileSettingTerms implements ProfileSetting
 {
     public function value(ProfilePage &$page, $field, $value, &$success)
     {
         $success = true;
         if (is_null($value)) {
             $value = array();
-            $res = XDB::iterRow("SELECT  m.sectorid, m.subsectorid, ss.name
-                                   FROM  profile_mentor_sector      AS m
-                             INNER JOIN  profile_job_sector_enum    AS s  ON (m.sectorid = s.id)
-                             INNER JOIN  profile_job_subsector_enum AS ss ON (s.id = ss.sectorid AND m.subsectorid = ss.id)
-                                  WHERE  m.pid = {?}",
+            $res = XDB::query('SELECT  e.jtid, e.full_name
+                                 FROM  profile_mentor_term   AS m
+                           INNER JOIN  profile_job_term_enum AS e  ON (m.jtid = e.jtid)
+                                WHERE  m.pid = {?}',
                                 $page->pid());
-            while (list($s, $ss, $ssname) = $res->next()) {
-                if (!isset($value[$s])) {
-                    $value[$s] = array($ss => $ssname);
-                } else {
-                    $value[$s][$ss] = $ssname;
-                }
-            }
+            $value = $res->fetchAllAssoc();
         } elseif (!is_array($value)) {
             $value = array();
-        } elseif (count($value) > 10) {
-            Platal::page()->trigError("Le nombre de secteurs d'expertise est limité à 10.");
+        } elseif (count($value) > 20) {
+            Platal::page()->trigError("Le nombre de mots clefs d'expertise est limité à 20.");
             $success = false;
+        } else {
+            $missing_full_names = array();
+            foreach ($value as &$term) if (empty($term['full_name'])) {
+                $missing_full_names[] = $term['jtid'];
+            }
+            if (count($missing_full_names)) {
+                $res = XDB::query('SELECT  jtid, full_name
+                                     FROM  profile_job_term_enum
+                                    WHERE  jtid IN {?}',
+                                    $missing_full_names);
+                $term_id_to_name = $res->fetchAllAssoc('jtid', false);
+                foreach ($value as &$term) {
+                    if (empty($term['full_name'])) {
+                        $term['full_name'] = $term_id_to_name[$term['jtid']];
+                    }
+                }
+            }
         }
         ksort($value);
         foreach ($value as &$sss) {
@@ -55,19 +66,27 @@ class ProfileSettingSectors implements ProfileSetting
     public function save(ProfilePage &$page, $field, $value)
     {
 
-        XDB::execute("DELETE FROM  profile_mentor_sector
+        XDB::execute("DELETE FROM  profile_mentor_term
                             WHERE  pid = {?}",
                      $page->pid());
         if (!count($value)) {
             return;
         }
-        foreach ($value as $id => $sect) {
-            foreach ($sect as $sid => $name) {
-                XDB::execute("INSERT INTO  profile_mentor_sector (pid, sectorid, subsectorid)
-                                   VALUES  ({?}, {?}, {?})",
-                             $page->pid(), $id, $sid);
-            }
+        $mentor_term_values = array();
+        foreach ($value as &$term) {
+            $mentor_term_values[] = '('.XDB::escape($page->pid()).', '.XDB::escape($term['jtid']).')';
         }
+        XDB::execute('INSERT INTO  profile_mentor_term (pid, jtid)
+                           VALUES  '.implode(',', $mentor_term_values));
+
+    }
+
+    public function getText($value) {
+        $terms = array();
+        foreach ($value as &$term) {
+            $terms[] = $term['full_name'];
+        }
+        return implode(', ', $terms);
     }
 }
 
@@ -107,6 +126,10 @@ class ProfileSettingCountry implements ProfileSetting
                          $page->pid(), $id);
         }
     }
+
+    public function getText($value) {
+        return implode(', ', $value);
+    }
 }
 
 
@@ -118,7 +141,7 @@ class ProfileSettingMentor extends ProfilePage
     {
         parent::__construct($wiz);
         $this->settings['expertise'] = null;
-        $this->settings['sectors'] = new ProfileSettingSectors();
+        $this->settings['terms'] = new ProfileSettingTerms();
         $this->settings['countries'] = new ProfileSettingCountry();
     }
 
@@ -151,12 +174,10 @@ class ProfileSettingMentor extends ProfilePage
 
     public function _prepare(PlPage &$page, $id)
     {
-        $page->assign('sectorList', XDB::iterator('SELECT  id, name
-                                                     FROM  profile_job_sector_enum'));
-
         $page->assign('countryList', XDB::iterator("SELECT  iso_3166_1_a2, countryFR
                                                       FROM  geoloc_countries
                                                   ORDER BY  countryFR"));
+        $page->assign('hrpid', $this->profile->hrpid);
     }
 }
 
index 9d0521e..70d0ab5 100644 (file)
@@ -36,11 +36,19 @@ interface ProfileSetting
     /** Save the new value for the given field.
      */
     public function save(ProfilePage &$page, $field, $new_value);
+
+    /** Get text from the value.
+     */
+    public function getText($value);
 }
 
 abstract class ProfileNoSave implements ProfileSetting
 {
     public function save(ProfilePage &$page, $field, $new_value) { }
+
+    public function getText($value) {
+        return $value;
+    }
 }
 
 class ProfileSettingWeb extends ProfileNoSave
@@ -92,113 +100,37 @@ class ProfileSettingNumber extends ProfileNoSave
     }
 }
 
-
-class ProfileSettingTel extends ProfileNoSave
-{
-    public function value(ProfilePage &$page, $field, $value, &$success)
-    {
-        if (is_null($value)) {
-            return isset($page->values[$field]) ? $page->values[$field] : S::v($field);
-        }
-        require_once('profil.func.inc.php');
-        $value = format_phone_number($value);
-        if($value == '') {
-            $success = true;
-            return $value;
-        }
-        $value = format_display_number($value,$error);
-        $success = !$error;
-        if (!$success) {
-            Platal::page()->trigError('Le préfixe international du numéro de téléphone est inconnu. ');
-        }
-        return $value;
-    }
-}
-
 class ProfileSettingPhones implements ProfileSetting
 {
-    private $tel;
-    private $pub;
-    protected $link_type;
-    protected $link_id;
-
-    public function __construct($type, $link_id)
-    {
-        $this->tel = new ProfileSettingTel();
-        $this->pub = new ProfileSettingPub();
-        $this->link_type = $type;
-        $this->link_id   = $link_id;
-    }
-
     public function value(ProfilePage &$page, $field, $value, &$success)
     {
         $success = true;
-        if (is_null($value)) {
-            $value = array();
-            $res = XDB::iterator('SELECT  display_tel AS tel, tel_type AS type, pub, comment
-                                    FROM  profile_phones
-                                   WHERE  pid = {?} AND link_type = {?}
-                                ORDER BY  tel_id',
-                                 $page->pid(), $this->link_type);
-            if ($res->numRows() > 0) {
-                $value = $res->fetchAllAssoc();
-            } else {
-                $value = array(
-                        0 => array(
-                            'type'    => 'fixed',
-                            'tel'     => '',
-                            'pub'     => 'private',
-                            'comment' => '',
-                            )
-                        );
-            }
-        }
+        $phones = array();
 
-        foreach ($value as $key=>&$phone) {
-            $phone['pub'] = $this->pub->value($page, 'pub', $phone['pub'], $s);
-            $phone['tel'] = $this->tel->value($page, 'tel', $phone['tel'], $s);
-            if(!isset($phone['type']) || ($phone['type'] != 'fixed' && $phone['type'] != 'mobile' && $phone['type'] != 'fax')) {
-                $phone['type'] = 'fixed';
-                $s = false;
-            }
-            if (!$s) {
-                $phone['error'] = true;
-                $success = false;
+        if (is_null($value)) {
+            $it = Phone::iterate(array($page->pid()), array(Phone::LINK_PROFILE), array(0));
+            while ($phone = $it->next()) {
+                $success = ($phone->format() && $success);
+                $phones[] = $phone->toFormArray();
             }
-            if (!isset($phone['comment'])) {
-                $phone['comment'] = '';
+            if (count($phones) == 0) {
+                $phone = new Phone();
+                $phones[] = $phone->toFormArray();
             }
+            return $phones;
         }
 
-        return $value;
-    }
-
-    private function saveTel($pid, $telid, array &$phone)
-    {
-        if ($phone['tel'] != '') {
-            XDB::execute("INSERT INTO  profile_phones (pid, link_type, link_id, tel_id, tel_type,
-                                       search_tel, display_tel, pub, comment)
-                               VALUES  ({?}, {?}, {?}, {?}, {?},
-                                       {?}, {?}, {?}, {?})",
-                         $pid, $this->link_type, $this->link_id, $telid, $phone['type'],
-                         format_phone_number($phone['tel']), $phone['tel'], $phone['pub'], $phone['comment']);
-        }
+        return Phone::formatFormArray($value, $success);
     }
 
     public function save(ProfilePage &$page, $field, $value)
     {
-        XDB::execute("DELETE FROM  profile_phones
-                            WHERE  pid = {?} AND link_type = {?} AND link_id = {?}",
-                     $page->pid(), $this->link_type, $this->link_id);
-        $this->saveTels($page->pid(), $field, $value);
+        Phone::deletePhones($page->pid(), Phone::LINK_PROFILE);
+        Phone::savePhones($value, $page->pid(), Phone::LINK_PROFILE);
     }
 
-    //Only saves phones without a delete operation
-    public function saveTels($pid, $field, $value)
-    {
-        foreach ($value as $telid=>&$phone) {
-            $this->saveTel($pid, $telid, $phone);
-        }
+    public function getText($value) {
+        return Phone::formArrayToString($value);
     }
 }
 
@@ -217,6 +149,10 @@ class ProfileSettingPub extends ProfileNoSave
         }
         return $value;
     }
+
+    public function getText($value) {
+        return $value;
+    }
 }
 
 class ProfileSettingBool extends ProfileNoSave
@@ -281,6 +217,10 @@ abstract class ProfileSettingGeocoding implements ProfileSetting
             $address = $gmapsGeocoder->stripGeocodingFromAddress($address);
         }
     }
+
+    public function getText($value) {
+        return $value;
+    }
 }
 
 
@@ -336,12 +276,26 @@ abstract class ProfilePage implements PlWizardPage
     protected function saveData()
     {
         require_once 'notifs.inc.php';
+        $changedFields = array();
         foreach ($this->settings as $field=>&$setting) {
-            if (!is_null($setting) && $this->changed[$field]) {
-                $setting->save($this, $field, $this->values[$field]);
-            }
-            if ($this->changed[$field] && @$this->watched[$field]) {
-                WatchProfileUpdate::register($this->profile, $field);
+            if ($this->changed[$field]) {
+                if (!is_null($setting)) {
+                    $changedFields[$field] = array(
+                        str_replace("\n", " - ", $setting->getText($this->orig[$field])),
+                        str_replace("\n", " - ", $setting->getText($this->values[$field])),
+                    );
+                } else {
+                    $changedFields[$field] = array(
+                        str_replace("\n", " - ", $this->orig[$field]),
+                        str_replace("\n", " - ", $this->values[$field]),
+                    );
+                }
+                if (!is_null($setting)) {
+                    $setting->save($this, $field, $this->values[$field]);
+                }
+                if (isset($this->watched[$field]) && $this->watched[$field]) {
+                    WatchProfileUpdate::register($this->profile, $field);
+                }
             }
         }
         $this->_saveData();
@@ -352,6 +306,20 @@ abstract class ProfilePage implements PlWizardPage
                        WHERE  pid = {?}', $this->pid());
         global $platal;
         S::logger()->log('profil', $platal->pl_self(2));
+
+        /** If the update was made by a third party and the profile corresponds
+         * to a registered user, stores both former and new text.
+         * This will be daily sent to the user.
+         */
+        $owner = $this->profile->owner();
+        $user = S::user();
+        if ($owner->isActive() && $owner->id() != $user->id()) {
+            foreach ($changedFields as $field => $values) {
+                XDB::execute('REPLACE INTO  profile_modifications (pid, uid, field, oldText, newText)
+                                    VALUES  ({?}, {?}, {?}, {?}, {?})',
+                             $this->pid(), $user->id(), $field, $values[0], $values[1]);
+            }
+        }
     }
 
     protected function checkChanges()
index 4a8c579..1f18133 100644 (file)
@@ -76,6 +76,14 @@ class ProfileSettingSkill implements ProfileSetting
                          $page->pid(), $id, $skill['level']);
         }
     }
+
+    public function getText($value) {
+        $skills = array();
+        foreach ($value as $skill) {
+            $skills[] = 'Compétance : ' . $skill['text'] . ', niveau : ' . $skill['level'];
+        }
+        return implode(' ; ' , $skills);
+    }
 }
 
 class ProfileSettingSkills extends ProfilePage
index 22a206e..c09d68d 100644 (file)
@@ -179,7 +179,7 @@ class RegisterModule extends PLModule
                     $subState->set('services', $services);
 
                     // Validate the password.
-                    if (!Post::v('response2', false)) {
+                    if (!Post::v('pwhash', false)) {
                         $error[] = "Le mot de passe n'est pas valide.";
                     }
 
@@ -211,7 +211,7 @@ class RegisterModule extends PLModule
                         $subState->set('birthdate', sprintf("%04d-%02d-%02d",
                                                             intval($birth[2]), intval($birth[1]), intval($birth[0])));
                         $subState->set('email', Post::t('email'));
-                        $subState->set('password', Post::t('response2'));
+                        $subState->set('password', Post::t('pwhash'));
 
                         // Update the current alert if the birthdate is incorrect,
                         // or if the IP address of the user has been banned.
@@ -248,7 +248,7 @@ class RegisterModule extends PLModule
         }
 
         $page->changeTpl('register/step' . $subState->i('step') . '.tpl');
-        $page->addJsLink('motdepasse.js');
+        $page->addJsLink('password.js');
         if (isset($error)) {
             $page->trigError($error);
         }
@@ -329,7 +329,7 @@ class RegisterModule extends PLModule
         //
         XDB::execute("UPDATE  accounts
                          SET  password = {?}, state = 'active',
-                              registration_date = NOW()
+                              registration_date = NOW(), email = NULL
                        WHERE  uid = {?}", $password, $uid);
         XDB::execute("UPDATE  profiles
                          SET  birthdate = {?}, last_change = NOW()
index 4386c99..b55348e 100644 (file)
@@ -25,10 +25,14 @@ class SearchModule extends PLModule
     {
         return array(
             'search'              => $this->make_hook('quick',          AUTH_PUBLIC),
-            'search/adv'          => $this->make_hook('advanced',       AUTH_COOKIE),
+            'search/adv'          => $this->make_hook('advanced',       AUTH_COOKIE, 'directory_ax'),
             'advanced_search.php' => $this->make_hook('redir_advanced', AUTH_PUBLIC),
-            'search/autocomplete' => $this->make_hook('autocomplete',   AUTH_COOKIE, 'user', NO_AUTH),
-            'search/list'         => $this->make_hook('list',           AUTH_COOKIE, 'user', NO_AUTH),
+            'search/autocomplete' => $this->make_hook('autocomplete',   AUTH_COOKIE, 'directory_ax', NO_AUTH),
+            'search/list'         => $this->make_hook('list',           AUTH_COOKIE, 'directory_ax', NO_AUTH),
+            'jobs'                => $this->make_hook('referent',       AUTH_COOKIE),
+            'emploi'              => $this->make_hook('referent',       AUTH_COOKIE),
+            'referent/search'     => $this->make_hook('referent',       AUTH_COOKIE),
+            'search/referent/countries' => $this->make_hook('referent_countries',     AUTH_COOKIE),
         );
     }
 
@@ -43,11 +47,15 @@ class SearchModule extends PLModule
         Platal::page()->assign('formulaire',1);
     }
 
-    function handler_quick(&$page, $action = null, $subaction = null)
+    /** 
+     * $model: The way of presenting the results: minifiche, trombi, geoloc.
+     * $byletter: Show only names beginning with this letter
+     */
+    function handler_quick(&$page, $model = null, $byletter = null)
     {
         global $globals;
 
-        if (Env::has('quick') || $action == 'geoloc') {
+        if (Env::has('quick') || $model == 'geoloc') {
             $quick = Env::t('quick');
             if (S::logged() && !Env::has('page')) {
                 S::logger()->log('search', 'quick=' . $quick);
@@ -110,20 +118,17 @@ class SearchModule extends PLModule
             $page->assign('formulaire', 0);
 
             require_once 'userset.inc.php';
-            $view = new SearchSet(true, $action == 'geoloc' && substr($subaction, -3) == 'swf');
-            $view->addMod('minifiche', 'Mini-fiches', true, array('with_score' => true));
+            $view = new SearchSet(true);
+            $view->addMod('minifiche', 'Mini-fiches', true, array('with_score' => true, 'starts_with' => $byletter));
             if (S::logged() && !Env::i('nonins')) {
                 $view->addMod('trombi', 'Trombinoscope', false, array('with_promo' => true, 'with_score' => true));
                 // TODO: Reactivate when the new map is completed.
                 // $view->addMod('geoloc', 'Planisphère', false, array('with_annu' => 'search/adv'));
             }
-            $view->apply('search', $page, $action, $subaction);
+            $view->apply('search', $page, $model);
 
             $nb_tot = $view->count();
             $page->assign('search_results_nb', $nb_tot);
-            if ($subaction) {
-                return;
-            }
             if (!S::logged() && $nb_tot > $globals->search->public_max) {
                 $page->trigError('Votre recherche a généré trop de résultats pour un affichage public.');
             } elseif ($nb_tot > $globals->search->private_max) {
@@ -140,14 +145,16 @@ class SearchModule extends PLModule
         $page->setTitle('Annuaire');
     }
 
-    function handler_advanced(&$page, $action = null, $subaction = null)
+    /** $model is the way of presenting the results: minifiche, trombi, geoloc.
+     */
+    function handler_advanced(&$page, $model = null, $byletter = null)
     {
         global $globals;
         require_once 'geocoding.inc.php';
         $page->assign('advanced',1);
         $page->addJsLink('jquery.autocomplete.js');
 
-        if (!Env::has('rechercher') && $action != 'geoloc') {
+        if (!Env::has('rechercher') && $model != 'geoloc') {
             $this->form_prepare();
         } else {
             if (!Env::has('page')) {
@@ -155,24 +162,24 @@ class SearchModule extends PLModule
             }
 
             require_once 'userset.inc.php';
-            $view = new SearchSet(false, $action == 'geoloc' && substr($subaction, -3) == 'swf');
-            $view->addMod('minifiche', 'Mini-fiches', true);
+            $view = new SearchSet(false);
+            $view->addMod('minifiche', 'Mini-fiches', true, array('starts_with' => $byletter));
             $view->addMod('trombi', 'Trombinoscope', false, array('with_promo' => true));
             // TODO: Reactivate when the new map is completed.
             // $view->addMod('geoloc', 'Planisphère', false, array('with_annu' => 'search/adv'));
-            $view->apply('search/adv', $page, $action, $subaction);
+            $view->apply('search/adv', $page, $model);
 
-            if ($subaction) {
-                return;
-            }
             $nb_tot = $view->count();
             if ($nb_tot > $globals->search->private_max) {
                 $this->form_prepare();
                 $page->trigError('Recherche trop générale.');
+            } else if ($nb_tot == 0) {
+                $this->form_prepare();
+                $page->trigError('Il n\'existe personne correspondant à ces critères dans la base !');
             }
         }
 
-        $page->changeTpl('search/index.tpl', $action == 'mini' ? SIMPLE : SKINNED);
+        $page->changeTpl('search/index.tpl', $model == 'mini' ? SIMPLE : SKINNED);
         $page->addJsLink('ajax.js');
         $page->assign('public_directory',0);
     }
@@ -215,7 +222,7 @@ class SearchModule extends PLModule
             'city'               => DirEnum::LOCALITIES,
             'countryTxt'         => DirEnum::COUNTRIES,
             'entreprise'         => DirEnum::COMPANIES,
-            'secteurTxt'         => DirEnum::SECTORS,
+            'jobtermTxt'         => DirEnum::JOBTERMS,
             'description'        => DirEnum::JOBDESCRIPTION,
             'nationaliteTxt'     => DirEnum::NATIONALITIES,
             'schoolTxt'          => DirEnum::EDUSCHOOLS,
@@ -244,6 +251,9 @@ class SearchModule extends PLModule
                 $res .= "\n";
             }
         }
+        if ($nbResults == 0) {
+            $res = $q."|-2\n";
+        }
         XDB::query('REPLACE INTO  search_autocomplete
                           VALUES  ({?}, {?}, {?}, NOW())',
                     $type, $q, $res);
@@ -301,6 +311,22 @@ class SearchModule extends PLModule
           case 'secteur':
             $ids = DirEnum::getOptionsIter(DirEnum::SECTORS);
             break;
+          case 'jobterm':
+            if (Env::has('jtid')) {
+                JobTerms::ajaxGetBranch(&$page, JobTerms::ONLY_JOBS);
+                return;
+            } else {
+                pl_content_headers('text/xml');
+                echo '<div>'; // global container so that response is valid xml
+                echo '<input name="jobtermTxt" type="text" style="display:none" size="32" />';
+                echo '<input name="jobterm" type="hidden"/>';
+                echo '<div class="term_tree"></div>'; // container where to create the tree
+                echo '<script type="text/javascript" src="javascript/jquery.jstree.js"></script>';
+                echo '<script type="text/javascript" src="javascript/jobtermstree.js"></script>';
+                echo '<script type="text/javascript">createJobTermsTree(".term_tree", "search/list/jobterm", "search", "searchForJobTerm");</script>';
+                echo '</div>';
+                exit();
+            }
           default: exit();
         }
         if (isset($idVal)) {
@@ -312,6 +338,65 @@ class SearchModule extends PLModule
         $page->changeTpl('include/field.select.tpl', NO_SKIN);
         $page->assign('list', $ids);
     }
+
+    function handler_referent(&$page, $action = null, $subaction = null)
+    {
+        global $globals;
+
+        $wp = new PlWikiPage('Docs.Emploi');
+        $wp->buildCache();
+
+        $page->setTitle('Emploi et Carrières');
+
+        // Count mentors
+        $res = XDB::query("SELECT count(distinct pid) FROM profile_mentor_term");
+        $page->assign('mentors_number', $res->fetchOneCell());
+
+        $page->addJsLink('jquery.autocomplete.js');
+
+        // Search for mentors matching filters
+        require_once 'ufbuilder.inc.php';
+        $ufb = new UFB_MentorSearch();
+        if (!$ufb->isEmpty()) {
+            require_once 'userset.inc.php';
+            $ufc = $ufb->getUFC();
+            $set = new ProfileSet($ufc);
+            $set->addMod('mentor', 'Référents');
+            $set->apply('referent/search', $page, $action, $subaction);
+            $nb_tot = $set->count();
+            if ($nb_tot > $globals->search->private_max) {
+                $this->form_prepare();
+                $page->trigError('Recherche trop générale.');
+                $page->assign('plset_count', 0);
+            } else if ($nb_tot == 0) {
+                $this->form_prepare();
+                $page->trigError('Il n\'existe personne correspondant à ces critères dans la base.');
+            }
+        }
+
+        $page->changeTpl('search/referent.tpl');
+    }
+
+    /**
+     * Builds a select field to choose among countries that referents
+     * know about. Only referents linked to term (jtid) are displayed.
+     * @param $jtid id of job term to restrict referents
+     */
+    function handler_referent_countries(&$page, $jtid = null)
+    {
+        pl_content_headers("text/xml");
+        $page->changeTpl('include/field.select.tpl', NO_SKIN);
+        $page->assign('name', 'country');
+        $it = XDB::iterator("SELECT  gc.iso_3166_1_a2 AS id, gc.countryFR AS field
+                               FROM  geoloc_countries       AS gc
+                         INNER JOIN  profile_mentor_country AS mp ON (mp.country = gc.iso_3166_1_a2)
+                         INNER JOIN  profile_mentor_term    AS mt ON (mt.pid = mp.pid)
+                         INNER JOIN  profile_job_term_relation AS jtr ON (jtr.jtid_2 = mt.jtid)
+                              WHERE  jtr.jtid_1 = {?}
+                           GROUP BY  iso_3166_1_a2
+                           ORDER BY  countryFR", $jtid);
+        $page->assign('list', $it);
+    }
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
index 0c0c645..670075e 100644 (file)
@@ -192,7 +192,7 @@ class Survey
         $nbf = count($line);
         $users = array();
         if ($this->isMode(self::MODE_XIDENT)) { // if the mode is non anonymous
-            $users = User::getBulkUsersWithUIDs(XDB::fetchAllAssoc('vid', 'SELECT  v.id AS vid, v.user_id
+            $users = User::getBulkUsersWithUIDs(XDB::fetchAllAssoc('vid', 'SELECT  v.id AS vid, v.uid
                                                                              FROM  survey_votes AS v
                                                                             WHERE  v.survey_id = {?}
                                                                          ORDER BY  vid ASC',
@@ -435,7 +435,7 @@ class Survey
     public function vote($uid, $args)
     {
         XDB::execute('INSERT INTO  survey_votes
-                              SET  survey_id = {?}, user_id = {?};', $this->id, $uid); // notes the user as having voted
+                              SET  survey_id = {?}, uid = {?};', $this->id, $uid); // notes the user as having voted
         $vid = XDB::insertId();
         for ($i = 0; $i < count($this->questions); $i++) {
             $ans = $this->questions[$i]->checkAnswer($args[$i]);
@@ -454,7 +454,7 @@ class Survey
     {
         $res = XDB::query('SELECT  id
                              FROM  survey_votes
-                            WHERE  survey_id = {?} AND user_id = {?};', $this->id, $uid); // checks whether the user has already voted
+                            WHERE  survey_id = {?} AND uid = {?};', $this->id, $uid); // checks whether the user has already voted
         return ($res->numRows() != 0);
     }
     // }}}
index 136382c..dbaa8a3 100644 (file)
@@ -187,7 +187,7 @@ class XnetModule extends PLModule
         $page->assign('cat', $cat);
         $page->assign('dom', $dom);
 
-        $res  = XDB::query("SELECT  id,nom 
+        $res  = XDB::query("SELECT  id,nom
                               FROM  group_dom
                              WHERE  FIND_IN_SET({?}, cat)
                           ORDER BY  nom", $cat);
index 4db4710..9db873e 100644 (file)
@@ -269,7 +269,7 @@ class XnetEventsModule extends PLModule
         }
         if ($updated !== false) {
             $page->trigSuccess('Ton inscription à l\'événement a été mise à jour avec succès.');
-            subscribe_lists_event($total, S::i('uid'), $evt, $paid);
+            subscribe_lists_event(S::i('uid'), $evt, ($total > 0 ? 1 : 0), 0);
         }
         $page->assign('event', get_event_detail($eid));
     }
@@ -394,12 +394,12 @@ class XnetEventsModule extends PLModule
             );
 
             $trivial = array('intitule', 'descriptif', 'noinvite',
-                             'show_participants', 'accept_nonmembre', 'organisateur_uid');
+                             'show_participants', 'accept_nonmembre', 'uid');
             foreach ($trivial as $k) {
                 $evt[$k] = Post::v($k);
             }
             if (!$eid) {
-                $evt['organisateur_uid'] = S::v('uid');
+                $evt['uid'] = S::v('uid');
             }
 
             if (Post::v('deadline')) {
@@ -411,17 +411,17 @@ class XnetEventsModule extends PLModule
             }
 
             // Store the modifications in the database
-            XDB::execute('REPLACE INTO group_events
-                SET eid={?}, asso_id={?}, organisateur_uid={?}, intitule={?},
-                    paiement_id = {?}, descriptif = {?}, debut = {?},
-                    fin = {?}, show_participants = {?}, short_name = {?},
-                    deadline_inscription = {?}, noinvite = {?},
-                    accept_nonmembre = {?}',
-                    $evt['eid'], $evt['asso_id'], $evt['organisateur_uid'],
-                    $evt['intitule'], $evt['paiement_id'], $evt['descriptif'],
-                    $evt['debut'], $evt['fin'], $evt['show_participants'],
-                    $evt['short_name'], $evt['deadline_inscription'],
-                    $evt['noinvite'], $evt['accept_nonmembre']);
+            XDB::execute('REPLACE INTO  group_events
+                                   SET  eid = {?}, asso_id = {?}, uid = {?}, intitule = {?},
+                                        paiement_id = {?}, descriptif = {?}, debut = {?},
+                                        fin = {?}, show_participants = {?}, short_name = {?},
+                                        deadline_inscription = {?}, noinvite = {?},
+                                        accept_nonmembre = {?}',
+                         $evt['eid'], $evt['asso_id'], $evt['uid'],
+                         $evt['intitule'], $evt['paiement_id'], $evt['descriptif'],
+                         $evt['debut'], $evt['fin'], $evt['show_participants'],
+                         $evt['short_name'], $evt['deadline_inscription'],
+                         $evt['noinvite'], $evt['accept_nonmembre']);
 
             // if new event, get its id
             if (!$eid) {
@@ -487,7 +487,7 @@ class XnetEventsModule extends PLModule
         // when modifying an old event retreive the old datas
         if ($eid) {
             $res = XDB::query(
-                    "SELECT  eid, intitule, descriptif, debut, fin, organisateur_uid,
+                    "SELECT  eid, intitule, descriptif, debut, fin, uid,
                              show_participants, paiement_id, short_name,
                              deadline_inscription, noinvite, accept_nonmembre
                        FROM  group_events
@@ -547,11 +547,12 @@ class XnetEventsModule extends PLModule
 
             // change the price paid by a participant
             if (Env::v('adm') == 'prix' && $member) {
+                $amount = strtr(Env::v('montant'), ',', '.');
                 XDB::execute("UPDATE group_event_participants
                                  SET paid = paid + {?}
                                WHERE uid = {?} AND eid = {?} AND item_id = 1",
-                        strtr(Env::v('montant'), ',', '.'),
-                        $member->uid, $evt['eid']);
+                             $amount, $member->uid, $evt['eid']);
+                subscribe_lists_event($member->uid, $evt, 1, $amount);
             }
 
             // change the number of personns coming with a participant
@@ -566,26 +567,28 @@ class XnetEventsModule extends PLModule
 
                 foreach ($nbs as $id => $nb) {
                     $nb = max(intval($nb), 0);
-                    XDB::execute("REPLACE INTO group_event_participants
-                                        VALUES ({?}, {?}, {?}, {?}, {?}, {?})",
-                                  $evt['eid'], $member->uid, $id, $nb, '', $id == 1 ? $paid : 0);
+                    XDB::execute('REPLACE INTO  group_event_participants
+                                        VALUES  ({?}, {?}, {?}, {?}, {?}, {?})',
+                                 $evt['eid'], $member->uid, $id, $nb, '', $id == 1 ? $paid : 0);
                 }
 
-                $res = XDB::query("SELECT COUNT(uid) AS cnt, SUM(nb) AS nb
-                                     FROM group_event_participants
-                                    WHERE uid = {?} AND eid = {?}
-                                 GROUP BY uid",
-                                            $member->uid, $evt['eid']);
+                $res = XDB::query('SELECT  COUNT(uid) AS cnt, SUM(nb) AS nb
+                                     FROM  group_event_participants
+                                    WHERE  uid = {?} AND eid = {?}
+                                 GROUP BY  uid',
+                                  $member->uid, $evt['eid']);
                 $u = $res->fetchOneAssoc();
                 if ($u['cnt'] == 1 && $paid == 0 && Post::v('cancel')) {
                     XDB::execute("DELETE FROM group_event_participants
                                         WHERE uid = {?} AND eid = {?}",
                                     $member->uid, $evt['eid']);
                     $u = 0;
+                    subscribe_lists_event($member->uid, $evt, -1, $paid);
                 } else {
+                    var_dump($u);
                     $u = $u['cnt'] ? $u['nb'] : null;
+                    subscribe_lists_event($member->uid, $evt, ($u > 0 ? 1 : 0), $paid);
                 }
-                subscribe_lists_event($u, $member->uid, $evt, $paid);
             }
 
             $evt = get_event_detail($eid, $item_id);
@@ -638,7 +641,7 @@ class XnetEventsModule extends PLModule
         $page->assign('absents', $absents);
         $page->assign('participants',
                       get_event_participants($evt, $item_id, UserFilter::sortByName(),
-                                             new PLLimit(NB_PER_PAGE), $ofs * NB_PER_PAGE));
+                                             NB_PER_PAGE, $ofs * NB_PER_PAGE));
     }
 }
 
index 93f011c..4a67a8a 100644 (file)
@@ -100,6 +100,7 @@ function get_event_detail($eid, $item_id = false, $asso_id = null)
         $evt['paid'] += trim($p);
         $evt['telepaid'] += trim($p);
     }
+    $evt['organizer'] = User::getSilent($evt['uid']);
 
     make_event_date($evt);
 
@@ -124,7 +125,7 @@ function get_event_participants(&$evt, $item_id, array $tri = array(), $count =
                                          WHERE  ep.eid = {?} AND nb > 0 ' . $append . '
                                       GROUP BY  ep.uid', $eid);
     $uf = new UserFilter(new PFC_True(), $tri);
-    $users = User::getBulkUsersWithUIDs($uf->filter(array_keys($query), $count, $offset));
+    $users = User::getBulkUsersWithUIDs($uf->filter(array_keys($query), new PlLimit($count, $offset)));
     $tab = array();
     foreach ($users as $user) {
         $uid = $user->id();
@@ -173,11 +174,19 @@ function get_event_participants(&$evt, $item_id, array $tri = array(), $count =
 // }}}
 
 //  {{{ function subscribe_lists_event()
-function subscribe_lists_event($participate, $uid, $evt, $paid, $payment = null)
+/** Subscribes user to various event related mailing lists.
+ *
+ * @param $uid: user's id.
+ * @param evt: events data, in particular ids of the lists at stake.
+ * @param participate: indicates if the user takes part at the event or not;
+ *      -1 means he did not answer, 0 means no, and 1 means yes.
+ * @param paid: has the user already payed anything?
+ *      0 means no, a positive amount means yes.
+ * @param payment: is this function called from a payment page?
+ *      If true, only payment related lists should be updated.
+ */
+function subscribe_lists_event($uid, $evt, $participate, $paid, $payment = false)
 {
-    global $globals;
-    $page =& Platal::page();
-
     $participant_list  = $evt['participant_list'];
     $absent_list       = $evt['absent_list'];
     $unpayed_list      = $evt['booked_unpayed_list'];
@@ -189,8 +198,8 @@ function subscribe_lists_event($participate, $uid, $evt, $paid, $payment = null)
     function subscribe($list, $email)
     {
         if ($list && $email) {
-            XDB::execute("REPLACE INTO  virtual_redirect
-                                VALUES  ({?},{?})",
+            XDB::execute('REPLACE INTO  virtual_redirect
+                                VALUES  ({?}, {?})',
                          $list, $email);
         }
     }
@@ -198,31 +207,45 @@ function subscribe_lists_event($participate, $uid, $evt, $paid, $payment = null)
     function unsubscribe($list, $email)
     {
         if ($list && $email) {
-            XDB::execute("DELETE FROM  virtual_redirect
-                                WHERE  vid = {?} AND redirect = {?}",
+            XDB::execute('DELETE FROM  virtual_redirect
+                                WHERE  vid = {?} AND redirect = {?}',
                          $list, $email);
         }
     }
 
-    if (is_null($payment)) {
-        if (is_null($participate)) {
+    /** If $payment is not null, we do not retrieve the value of $participate,
+     * thus we do not alter participant and absent lists.
+     */
+    if ($payment === true) {
+        if ($paid > 0) {
+            unsubscribe($unpayed_list, $email);
+            subscribe($payed_list, $email);
+        }
+    } else {
+        switch ($participate) {
+          case -1:
             unsubscribe($participant_list, $email);
+            unsubscribe($unpayed_list, $email);
+            unsubscribe($payed_list, $email);
             subscribe($absent_list, $email);
-        } elseif ($participate) {
-            subscribe($participant_list, $email);
-            unsubscribe($absent_list, $email);
-        } else {
+            break;
+          case 0:
             unsubscribe($participant_list, $email);
             unsubscribe($absent_list, $email);
-        }
-    }
-    if ($paid > 0) {
-        unsubscribe($unpayed_list, $email);
-        subscribe($payed_list, $email);
-    } else {
-        unsubscribe($payed_list, $email);
-        if (!is_null($participate)) {
-            subscribe($unpayed_list, $email);
+            unsubscribe($unpayed_list, $email);
+            unsubscribe($payed_list, $email);
+            break;
+          case 1:
+            subscribe($participant_list, $email);
+            unsubscribe($absent_list, $email);
+            if ($paid > 0) {
+                unsubscribe($unpayed_list, $email);
+                subscribe($payed_list, $email);
+            } else {
+                subscribe($unpayed_list, $email);
+                unsubscribe($payed_list, $email);
+            }
+            break;
         }
     }
 }
index a637756..b4bc9f4 100644 (file)
@@ -81,24 +81,34 @@ class XnetGrpModule extends PLModule
                             Env::i('unread'), S::i('uid'));
                 pl_redirect("#art" . Env::i('unread'));
             }
-            // XXX: Fix promo_min; promo_max
-            $arts = XDB::iterator("SELECT  a.*, FIND_IN_SET('photo', a.flags) AS photo
+
+            /* TODO: refines this filter on promotions by using userfilter. */
+            $user = S::user();
+            if ($user->hasProfile()) {
+                $promo = XDB::format('{?}', $user->profile()->entry_year);
+                $minCondition = ' OR promo_min <= ' . $promo;
+                $maxCondition = ' OR promo_max >= ' . $promo;
+            } else {
+                $minCondition = '';
+                $maxCondition = '';
+            }
+            $arts = XDB::iterator('SELECT  a.*, FIND_IN_SET(\'photo\', a.flags) AS photo
                                      FROM  group_announces      AS a
                                 LEFT JOIN  group_announces_read AS r ON (r.uid = {?} AND r.announce_id = a.id)
                                     WHERE  asso_id = {?} AND expiration >= CURRENT_DATE()
-                                           AND (promo_min = 0 OR promo_min <= {?})
-                                           AND (promo_max = 0 OR promo_max >= {?})
+                                           AND (promo_min = 0' . $minCondition . ')
+                                           AND (promo_max = 0' . $maxCondition . ')
                                            AND r.announce_id IS NULL
-                                 ORDER BY  a.expiration",
-                                   S::i('uid'), $globals->asso('id'), S::i('promo'), S::i('promo'));
-            $index = XDB::iterator("SELECT  a.id, a.titre, r.uid IS NULL AS nonlu
+                                 ORDER BY  a.expiration',
+                                   S::i('uid'), $globals->asso('id'));
+            $index = XDB::iterator('SELECT  a.id, a.titre, r.uid IS NULL AS nonlu
                                       FROM  group_announces      AS a
                                  LEFT JOIN  group_announces_read AS r ON (a.id = r.announce_id AND r.uid = {?})
                                      WHERE  asso_id = {?} AND expiration >= CURRENT_DATE()
-                                            AND (promo_min = 0 OR promo_min <= {?})
-                                            AND (promo_max = 0 OR promo_max >= {?})
-                                  ORDER BY  a.expiration",
-                                   S::i('uid'), $globals->asso('id'), S::i('promo'), S::i('promo'));
+                                            AND (promo_min = 0' . $minCondition . ')
+                                            AND (promo_max = 0' . $maxCondition . ')
+                                  ORDER BY  a.expiration',
+                                   S::i('uid'), $globals->asso('id'));
             $page->assign('article_index', $index);
         } else {
             $arts = XDB::iterator("SELECT  *, FIND_IN_SET('photo', flags) AS photo
@@ -120,7 +130,7 @@ class XnetGrpModule extends PLModule
                               $platal->ns . "rss/rss.xml");
         } else {
             $page->setRssLink("Polytechnique.net :: {$globals->asso("nom")} :: News",
-                              $platal->ns . 'rss/'.S::v('hruid') .'/'.S::v('token').'/rss.xml');
+                              $platal->ns . 'rss/' . S::v('hruid') . '/' . S::user()->token . '/rss.xml');
         }
 
         $page->assign('articles', $arts);
@@ -391,13 +401,13 @@ class XnetGrpModule extends PLModule
             $mailer->setSubject('[' . $globals->asso('nom') . '] Demande d\'inscription');
             $message = ($user->isFemale() ? 'Chère' : 'Cher') . " Camarade,\n"
                      . "\n"
-                     . "  Suite à ta demande d'adhésion à " . $globals->asso('nom') . ",\n"
-                     . "j'ai le plaisir de t'annoncer que ton inscription a été validée !\n"
+                     . "  Suite à ta demande d'adhésion à " . $globals->asso('nom')
+                     . "j'ai le plaisir de t'annoncer que ton inscription a été validée !\n"
                      . "\n"
                      . "Bien cordialement,\n"
                      . "-- \n"
                      . S::user()->fullName() . '.';
-            $mailer->setTxtBody($message);
+            $mailer->setTxtBody(wordwrap($message, 72));
             $mailer->send();
         }
     }
@@ -626,55 +636,66 @@ class XnetGrpModule extends PLModule
 
         S::assert_xsrf_token();
 
-        // Finds or creates account
+        // Finds or creates account: first cases are for users with an account.
         if (!User::isForeignEmailAddress($email)) {
-            // standard x account
+            // Standard account
             $user = User::get($email);
         } else if (!isvalid_email($email)) {
             // email might not be a regular email but an alias or a hruid
             $user = User::get($email);
             if (!$user) {
                 // need a valid email address
-                $page->trigError("«&nbsp;<strong>$email</strong>&nbsp;» n'est pas une adresse email valide.");
+                $page->trigError('«&nbsp;<strong>' . $email . '</strong>&nbsp;» n\'est pas une adresse email valide.');
                 return;
             }
         } else if (Env::v('x') && Env::i('userid')) {
-            // user is an x but might not yet be registered
             $user = User::getWithUID(Env::i('userid'));
             if (!$user) {
-                $page->trigError("Utilisateur invalide");
+                $page->trigError('Utilisateur invalide.');
                 return;
             }
-            // add email for marketing if unknown
-            if ($user->state == 'pending' && Env::v('market')) {
-                $market = Marketing::get($user->uid, $email);
-                if (!$market) {
-                    $market = new Marketing($user->uid, $email, 'group', $globals->asso('nom'),
-                                            Env::v('market_from'), S::v('uid'));
-                    $market->add();
+
+            // User has an account but is not yet registered.
+            if ($user->state == 'pending') {
+                // Add email in account table.
+                XDB::query('UPDATE  accounts
+                               SET  email = {?}
+                             WHERE  uid = {?} AND email IS NULL',
+                           Post::t('email'), $user->id());
+                // Add email for marketing if required.
+                if (Env::v('market')) {
+                    $market = Marketing::get($user->uid, $email);
+                    if (!$market) {
+                        $market = new Marketing($user->uid, $email, 'group', $globals->asso('nom'),
+                                                Env::v('market_from'), S::v('uid'));
+                        $market->add();
+                    }
                 }
             }
         } else {
-            // user is not an x
-            $hruid = strtolower(str_replace('@','.',$email).'.ext');
-            // might already exists (in another group for example)
+            // User is of type xnet.
+            list($firstname, $lastname) = explode('@', $email);
+            $hruid = User::makeHrid($firstname, $lastname, 'ext');
+            // User might already have an account (in another group for example).
             $user = User::get($hruid);
+
+            // If the user has no account yet, creates new account: build names from email address.
             if (empty($user)) {
-                // creates new account: build names from email address
                 $display_name = ucwords(strtolower(substr($hruid, strpos('.', $hruid))));
-                $full_name = ucwords(strtolower(str_replace('.', ' ',substr($email, strpos('@', $email)))));
-                XDB::execute("INSERT INTO accounts (hruid, display_name, full_name, email, type)
-                    VALUES({?}, {?}, {?}, {?}, 'xnet')",
-                    $hruid, $display_name, $full_name, $email);
+                $full_name = ucwords(strtolower(str_replace('.', ' ', substr($email, strpos('@', $email)))));
+                XDB::execute('INSERT INTO  accounts (hruid, display_name, full_name, email, type)
+                                   VALUES  ({?}, {?}, {?}, {?}, \'xnet\')',
+                             $hruid, $display_name, $full_name, $email);
                 $user = User::get($hruid);
             }
         }
+
         if ($user) {
-            XDB::execute("REPLACE INTO  group_members (uid, asso_id)
-                                VALUES  ({?}, {?})",
+            XDB::execute('REPLACE INTO  group_members (uid, asso_id)
+                                VALUES  ({?}, {?})',
                          $user->id(), $globals->asso('id'));
             $this->removeSubscriptionRequest($user->id());
-            pl_redirect("member/" . $user->login());
+            pl_redirect('member/' . $user->login());
         }
     }
 
@@ -690,16 +711,16 @@ class XnetGrpModule extends PLModule
             }
         }
         if (empty($users)) {
-            list($nom, $prenom) = str_replace(array('-', ' ', "'"), '%', array(Env::t('nom'), Env::t('prenom')));
+            list($lastname, $firstname) = str_replace(array('-', ' ', "'"), '%', array(Env::t('nom'), Env::t('prenom')));
             $cond = new PFC_And(new PFC_Not(new UFC_Registered()));
-            if (!empty($nom)) {
-                $cond->addChild(new UFC_Name(Profile::LASTNAME, $nom, UFC_Name::CONTAINS));
+            if (!empty($lastname)) {
+                $cond->addChild(new UFC_Name(Profile::LASTNAME, $lastname, UFC_Name::CONTAINS));
             }
-            if (!empty($prenom)) {
-                $cond->addChild(new UFC_Name(Profile::FIRSTNAME, $prenom, UFC_Name::CONTAINS));
+            if (!empty($firstname)) {
+                $cond->addChild(new UFC_Name(Profile::FIRSTNAME, $firstname, UFC_Name::CONTAINS));
             }
-            if (Env::i('promo')) {
-                $cond->addChild(new UFC_Promo('=', UserFilter::GRADE_ING, Env::i('promo')));
+            if (Env::t('promo')) {
+                $cond->addChild(new UFC_Promo('=', UserFilter::DISPLAY, Env::t('promo')));
             }
             $uf = new UserFilter($cond);
             $users = $uf->getUsers(new PlLimit(30));
@@ -814,7 +835,7 @@ class XnetGrpModule extends PLModule
 
     private function changeLogin(PlPage &$page, PlUser &$user, MMList &$mmlist, $login)
     {
-        // Search the uid of the user...
+        // Search the user's uid.
         $xuser = User::getSilent($login);
         if (!$xuser) {
             $accounts = User::getPendingAccounts($login);
@@ -826,16 +847,16 @@ class XnetGrpModule extends PLModule
                 return false;
             }
             $xuser = User::getSilent($accounts[0]['uid']);
-            $sub = false;
         }
 
         if (!$xuser) {
             return false;
         }
 
-        $user->mergeIn($xuser);
-
-        return $xuser->login();
+        if ($user->mergeIn($xuser)) {
+            return $xuser->login();
+        }
+        return $user->login();
     }
 
     function handler_admin_member(&$page, $user)
@@ -867,13 +888,20 @@ class XnetGrpModule extends PLModule
             $from_email = $user->forlifeEmail();
             if (!$user->profile()) {
                 XDB::query('UPDATE  accounts
-                               SET  full_name = {?}, display_name = {?}, sex = {?}, email = {?}, type = {?}
+                               SET  full_name = {?}, directory_name = {?}, display_name = {?},
+                                    sex = {?}, email = {?}, type = {?}
                              WHERE  uid = {?}',
-                            Post::v('full_name'), Post::v('display_name'), (Post::v('sex') == 'male')?'male':'female', Post::v('email'), (Post::v('type') == 'xnet')?'xnet':'virtual',
-                            $user->id());
-                if (XDB::affectedRows()) {
-                    $page->trigSuccess('Données de l\'utilisateur mise à jour.');
-                }
+                           Post::t('full_name'), Post::t('directory_name'), Post::t('display_name'),
+                           (Post::t('sex') == 'male') ? 'male' : 'female', Post::t('email'),
+                           (Post::t('type') == 'xnet') ? 'xnet' : 'virtual', $user->id());
+            } else if (!$user->perms) {
+                XDB::query('UPDATE  accounts
+                               SET  email = {?}
+                             WHERE  uid = {?}',
+                           Post::t('email'), $user->id());
+            }
+            if (XDB::affectedRows()) {
+                $page->trigSuccess('Données de l\'utilisateur mise à jour.');
             }
 
             // Update group params for user
@@ -885,11 +913,13 @@ class XnetGrpModule extends PLModule
                              WHERE  uid = {?} AND asso_id = {?}',
                             ($perms == 'admin') ? 'admin' : 'membre', $comm,
                             $user->id(), $globals->asso('id'));
-                if ($perms != $user->group_perms) {
-                    $page->trigSuccess('Permissions modifiées&nbsp;!');
-                }
-                if ($comm != $user->group_comm) {
-                    $page->trigSuccess('Commentaire mis à jour.');
+                if (XDB::affectedRows()) {
+                    if ($perms != $user->group_perms) {
+                        $page->trigSuccess('Permissions modifiées&nbsp;!');
+                    }
+                    if ($comm != $user->group_comm) {
+                        $page->trigSuccess('Commentaire mis à jour.');
+                    }
                 }
             }
 
index ae991b4..43f4006 100644 (file)
@@ -218,9 +218,6 @@ class XnetListsModule extends ListsModule
         $mails = array_map(create_function('$arr', 'return $arr[1];'), $members);
         $subscribers = array_unique($mails);
 
-        $not_in_group_x = array();
-        $not_in_group_ext = array();
-
         $ann = XDB::fetchColumn('SELECT  uid
                                    FROM  group_members
                                   WHERE  asso_id = {?}', $globals->asso('id'));
index 160f99c..4e7db2a 100644 (file)
  ***************************************************************************/
 
 
-function display_education($name, $url, $degree, $grad_year, $field, $program, $sexe, $long)
+function display_education($name, $url, $degree, $gradYear, $field, $program, $full)
 {
     $field = strtolower($field);
-    $txt = "";
+    $txt = '';
 
-    if ($grad_year || $field || $program) {
-        $txt .= "<span title=\"(";
+    if (($degree != 'Ing.') && ($degree != 'Dipl.')) {
+        $txt .= $degree;
+        if ($name) {
+            $txt .= ' ';
+        }
+    }
+    if ($url != '') {
+        $txt .= '<a href="' . $url . '" onclick="return popup(this)">' . $name . '</a>';
+    } else {
+        $txt .= $name;
+    }
+
+    if ($gradYear || $field || $program) {
+        $details = '';
         if ($program) {
-            $txt .= $program;
-            if ($grad_year || $field) {
-                $txt .= ", ";
+            $details .= $program;
+            if ($gradYear || $field) {
+                $details .= ', ';
             }
         }
-        if ($grad_year) {
-            if ($sexe) {
-                $txt .= "diplômée en $grad_year";
-            } else {
-                $txt .= "diplômé en $grad_year";
-            }
+        if ($gradYear) {
+            $details .= $gradYear;
             if ($field) {
-                $txt .= ", ";
+                $details .= ', ';
             }
         }
         if ($field) {
-            $txt .= "domaine : $field";
+            $details .= $field;
         }
-        $txt .= ")\">";
-    }
 
-    if (($degree != "Lic.") || ($long)) {
-        if (($degree != "Ing.") && ($degree != "Dipl.")) {
-            $txt .= $degree;
-        }
-        if ($name) {
-            $txt .= ' ';
-        }
-        if ($url != '') {
-            $txt .= "<a href=\"$url\" onclick=\"return popup(this)\">$name</a>";
+        if ($full) {
+            $txt .= ' <small>(' . $details . ')</small>';
         } else {
-            $txt .= $name;
+            $txt = '<span title="' . $details . '">' . $txt . '</span>';
         }
     }
-    if ($grad_year || $field || $program) {
-        $txt .= "</span>";
-    }
 
     return $txt;
 }
 
 function smarty_function_display_education($params, &$smarty)
 {
-    $params  = new PlDict($params);
-    $edu     = $params->v('edu');
-    if (!$params->has('sex')) {
-        $profile = $params->v('profile');
-        $sex = $profile->isFemale();
-    } else {
-        $sex = $params->b('sex');
-    }
+    $params = new PlDict($params);
+    $edu = $params->v('edu');
     return display_education(($edu->school_short == '') ?  $edu->school : $edu->school_short,
                              $edu->school_url, $edu->degree_short, $edu->grad_year,
-                             $edu->field, $edu->program, $sex, $params->b('long'));
+                             $edu->field, $edu->program, $params->b('full'));
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
index dfc4bf3..77909bd 100644 (file)
@@ -31,7 +31,7 @@ function smarty_function_profile($params, &$smarty)
         $user = User::getWithUID($user);
     }
 
-    $name = pl_entities($user->fullName());
+    $name = pl_entities($user->directoryName());
     if ($with_sex && $user->isFemale()) {
         $name = '&bull;' . $name;
     }
@@ -47,6 +47,9 @@ function smarty_function_profile($params, &$smarty)
             $name = '<a href="profile/' . $profile->hrid() . '" class="popup2">' . $name . '</a>';
         }
     }
+    if ($user->lost) {
+        $name .= ' <a href="https://www.polytechnique.org/marketing/broken/' . $user->hruid . '"><img src="images/icons/error.gif" alt="Patte cassée" /></a>';
+    }
     if ($with_groupperms && $user instanceof User && $user->group_perms == 'admin' && !empty($name)) {
         $name = '<strong>' . $name . '</strong>';
     }
index 769853b..7d69ee9 100644 (file)
@@ -24,7 +24,7 @@ function smarty_insert_getUsername()
     global $globals;
 
     $id = Cookie::i('uid', -1);
-    $id = S::v($_SESSION['uid'], $id);
+    $id = S::v('uid', $id);
 
     if ($id < 0) {
         return '';
diff --git a/templates/admin/account_watch.tpl b/templates/admin/account_watch.tpl
new file mode 100644 (file)
index 0000000..a696a16
--- /dev/null
@@ -0,0 +1,58 @@
+{**************************************************************************}
+{*                                                                        *}
+{*  Copyright (C) 2003-2010 Polytechnique.org                             *}
+{*  http://opensource.polytechnique.org/                                  *}
+{*                                                                        *}
+{*  This program is free software; you can redistribute it and/or modify  *}
+{*  it under the terms of the GNU General Public License as published by  *}
+{*  the Free Software Foundation; either version 2 of the License, or     *}
+{*  (at your option) any later version.                                   *}
+{*                                                                        *}
+{*  This program is distributed in the hope that it will be useful,       *}
+{*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *}
+{*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *}
+{*  GNU General Public License for more details.                          *}
+{*                                                                        *}
+{*  You should have received a copy of the GNU General Public License     *}
+{*  along with this program; if not, write to the Free Software           *}
+{*  Foundation, Inc.,                                                     *}
+{*  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA               *}
+{*                                                                        *}
+{**************************************************************************}
+
+<h1>{$disabled->total()} Comptes désactivés ou surveillés</h1>
+
+<table class="bicol">
+  <tr><th>Nom</th><th>Disabled</th><th>Surveillé</th><th>Commentaire</th></tr>
+  {iterate from=$disabled item=user}
+  <tr class="{cycle values="pair,impair"}">
+    <td>
+      <a href="admin/user/{$user.hruid}">{$user.hruid}</a>
+    </td>
+    <td>
+      <input type="checkbox" disabled="disabled" {if $user.disabled}checked="checked"{/if} />
+    </td>
+    <td>
+      <input type="checkbox" disabled="disabled" {if $user.watch}checked="checked"{/if} />
+    </td>
+    <td>
+      {$user.comment}
+    </td>
+  </tr>
+  {/iterate}
+</table>
+
+<h1>{$admins->total()} Administrateurs du site</h1>
+
+<table class="tinybicol">
+  <tr><th>Utilisateur</th></tr>
+  {iterate from=$admins item=user}
+  <tr class="{cycle values="pair,impair"}">
+    <td>
+      <a href="admin/user/{$user.hruid}">{$user.hruid}</a>
+    </td>
+  </tr>
+  {/iterate}
+</table>
+
+{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index 9c569d7..5488d05 100644 (file)
 {*                                                                        *}
 {**************************************************************************}
 
-<h1>{$disabled->total()} Comptes désactivés ou surveillés</h1>
+{literal}
+<script type="text/javascript">
+/* <![CDATA[ */
+function add_user_to_url(f) {
+  f.action += '/' + f.login.value;
+}
+/* ]]> */
+</script>
+{/literal}
 
-<table class="bicol">
-  <tr><th>Nom</th><th>Disabled</th><th>Surveillé</th><th>Commentaire</th></tr>
-  {iterate from=$disabled item=user}
-  <tr class="{cycle values="pair,impair"}">
-    <td>
-      <a href="admin/user/{$user.hruid}">{$user.hruid}</a>
-    </td>
-    <td>
-      <input type="checkbox" disabled="disabled" {if $user.disabled}checked="checked"{/if} />
-    </td>
-    <td>
-      <input type="checkbox" disabled="disabled" {if $user.watch}checked="checked"{/if} />
-    </td>
-    <td>
-      {$user.comment|default='(none)'}
-    </td>
-  </tr>
-  {/iterate}
-</table>
+<fieldset>
+  <legend>{icon name=user_edit} Administrer un compte</legend>
+  <form method="post" action="admin/user" onsubmit="add_user_to_url(this); return true">
+    {xsrf_token_field}
+    <p>
+      Il est possible d'entrer ici n'importe quelle adresse mail&nbsp;: redirection, melix, ou alias.
+    </p>
+    <p>
+      <input type="text" name="login" size="40" maxlength="255"
+             value="{if t($smarty.request.login)}{$smarty.request.login}{/if}" />
+      <input type="submit" name="select" value="edit" />
+      <input type="submit" name="su_account" value="su" />
+      <input type="submit" name="log_account" value="logs" />
+    </p>
+  </form>
+</fieldset>
 
-<h1>{$admins->total()} Administrateurs du site</h1>
+<fieldset>
+  <legend>Liste des comptes manuels</legend>
 
-<table class="tinybicol">
-  <tr><th>Utilisateur</th></tr>
-  {iterate from=$admins item=user}
-  <tr class="{cycle values="pair,impair"}">
-    <td>
-      <a href="admin/user/{$user.hruid}">{$user.hruid}</a>
-    </td>
-  </tr>
-  {/iterate}
-</table>
+  <ul>
+    {iterate item=user from=$users}
+    <li>
+      <a href="admin/user/{$user->hruid}">{$user->fullName()} ({$user->hruid} - {$user->type})</a>
+    </li>
+    {/iterate}
+  </ul>
+</fieldset>
+
+<fieldset>
+  <legend>Nouveau compte</legend>
+
+  <ul>
+    <li><a href="admin/add_accounts">Ajout d'un ensemble d'utilisateurs</a></li>
+    <li>Ajouter une secrétaire de l'AX:</li>
+  </ul>
+  <p>
+    <form action="admin/accounts" method="post">
+      {xsrf_token_field}
+      <table style="width: 75%; margin-left: auto; margin-right: auto">
+        <tr>
+          <td class="titre">Nom</td>
+          <td><input type="text" name="firstname" size=60 maxlength="255" value="" /></td>
+        </tr>
+        <tr>
+          <td class="titre">Prénom</td>
+          <td><input type="text" name="lastname" size=60" maxlength="255" value="" /></td>
+        </tr>
+        <tr>
+          <td class="titre">Sexe</td>
+          <td><input type="checkbox" name="sex" checked="checked" /></td>
+        </tr>
+        <tr>
+          <td class="titre">Email</td>
+          <td><input type="text" name="email" size="60" maxlength="255" value="" /></td>
+        </tr>
+        <tr>
+          <td class="titre">Mot de passe</td>
+          <td>
+            <div style="float: left">
+              <input type="password" name="password" size="10" maxlength="256" />
+              <input type="hidden" name="pwhash" value="" />
+            </div>
+            <div style="float: left; margin-top: 5px">
+              {checkpasswd prompt="password" submit="create_account" text="Créer le compte"}
+            </div>
+          </td>
+        </tr>
+        <tr>
+          <td colspan="2" class="center">
+            <input type="submit" name="create_account" value="Créer le compte"
+                   onclick="return hashResponse('password', false, false);" />
+          </td>
+        </tr>
+      </table>
+    </form>
+  </p>
+</fieldset>
 
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index cf5a6c1..d11cf46 100644 (file)
       <td>
         Promotion&nbsp;:
         <input type="text" name="promo" value="{$promo}" size="5" maxlength="5" />
-        <input type="submit" value="GO" />
+        <input type="submit" value="Afficher" />
       </td>
     </tr>
   </table>
 </form>
 
-{if t($decedes)}
+{if t($profileList)}
 <form action="admin/deaths/{$promo}/validate" id="deathDateList" method="post">
   {xsrf_token_field}
   <table class="bicol" summary="liste des dates de décès">
       <th>Nom</th>
       <th>Date de décès</th>
     </tr>
-    {iterate item=x from=$decedes}
+    {iterate item=profile from=$profileList}
     <tr class="{cycle values="impair,pair"}">
-      <td>{$x.directory_name}</td>
+      <td>{$profile.directory_name}</td>
       <td class="center">
-        <input type="text" class="deathDate" name="death_{$x.pid}" value="{$x.deathdate}" size="10" maxlength="10" />
+        <input type="text" name="death_{$profile.pid}" value="{$profile.deathdate}" size="10" maxlength="10" />
       </td>
     </tr>
     {/iterate}
     </tr>
   </table>
 </form>
-
-<script type="text/javascript">//<![CDATA[
-  {literal}
-  $('input.deathDate').change(function () {
-    $(this).addClass('sendDate');
-  });
-  
-  $('#deathDateList').submit(function () {
-    // Avoid sending useless data to the webserver
-    $('input.deathDate').not('.sendDate').attr('disabled', true);
-  });
-  {/literal}
-//]]></script>
 {/if}
 
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index 9031343..d8ef364 100644 (file)
@@ -81,7 +81,7 @@
       &nbsp;&nbsp;|&nbsp;&nbsp;
       <a href="admin/icons">Icônes</a>
       &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a href="sql_errors">Erreurs MySQL</a>
+      <a href="site_errors">Erreurs d'exécution</a>
     </td>
   </tr>
 
   <tr class="impair">
     <td class="titre">Comptes</td>
     <td>
-      <a href="admin/add_accounts">Ajout de comptes</a>
+      <a href="admin/account/types">Types de comptes</a>
       &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a href="admin/user">Édition</a>
+      <a href="admin/accounts">Gestion des comptes</a>
       &nbsp;&nbsp;|&nbsp;&nbsp;
       <a href="admin/homonyms">Homonymes</a>
       &nbsp;&nbsp;|&nbsp;&nbsp;
       <a href="admin/deaths">Décès</a>
     </td>
   </tr>
-  <tr class="impair">
+  <tr class="pair">
     <td class="titre">Administration</td>
     <td>
       <a href="admin/dead-but-active">Décédés actifs</a>
       &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a href="admin/accounts">Administrateurs/Désactivations</a>
+      <a href="admin/account/watch">Administrateurs/Désactivations</a>
       &nbsp;&nbsp;|&nbsp;&nbsp;
       <a href="admin/googleapps">Google Apps</a>
     </td>
       <a href="admin/education_degree_set">Niveau par formation</a>
     </td>
   </tr>
-  <tr class="impair">
+  <tr class="pair">
     <td class="titre">Emploi</td>
     <td>
       <a href="admin/sectors">Secteurs</a>
       <a href="admin/corps_rank">Grade</a>
     </td>
   </tr>
-  <tr class="pair">
+  <tr class="impair">
     <td class="titre">Profil</td>
     <td>
       <a href="admin/binets">Binets</a>
       <a href="admin/networking">Networking</a>
     </td>
   </tr>
-  <tr class="impair">
+  <tr class="pair">
     <td class="titre">Compte</td>
     <td>
       <a href="admin/skins">Skins</a>
index ecad244..d18dca1 100644 (file)
 {**************************************************************************}
 
 
-{if $smarty.post.u_kill_conf}
-<form method="post" action="admin/user">
+{if t($smarty.post.delete_account)}
+<form method="post" action="admin/user/{$user->login()}">
   {xsrf_token_field}
   <div class="center">
     <input type="hidden" name="uid" value="{$smarty.request.uid}" />
-    Confirmer la suppression de l'utilisateur {$smarty.request.uid} ({$user->fullName()})&nbsp;&nbsp;
-    <input type="submit" name="u_kill" value="continuer" />
+    Confirmer la suppression de l'utilisateur {$user->fullName()} (uid&nbsp;: {$smarty.request.uid}).<br />
+    <input type="submit" name="account_deletion_confirmation" value="Confirmer" />
   </div>
 </form>
-{elseif $user}
+{else}
 {literal}
 
 <script type="text/javascript">
 //<![CDATA[
-function doEditUser() {
-  document.forms.auth.hashpass.value = hash_encrypt(document.forms.edit.password.value);
-  document.forms.auth.password.value = "";
-  document.forms.auth.submit();
-}
-
 function del_alias(alias) {
   document.forms.alias.del_alias.value = alias;
   document.forms.alias.submit();
@@ -113,7 +107,11 @@ $(document).ready(function() {
     <tr>
       <th colspan="2">
         <div style="float: right; text-align: right">
+          {if $user->state eq 'pending'}
+          Non-inscrit
+          {else}
           Inscrit le {$user->registration_date|date_format}
+          {/if}
         </div>
         <div style="float: left; text-align: left">
           {icon name=user_gray} {$user->hruid} (uid {$user->id()})
@@ -122,12 +120,20 @@ $(document).ready(function() {
       </th>
     </tr>
     <tr>
-      <td class="titre">Nom complet</td>
-      <td><input type="text" name="full_name" maxlength="255" value="{$user->fullName()}" /></td>
+      <td class="titre">Nom complet<br />
+        <span class="smaller">Prénom NOM</span>
+      </br></td>
+      <td>{if $hasProfile}{$user->fullName()}{else}<input type="text" name="full_name" maxlength="255" value="{$user->fullName()}" />{/if}</td>
+    </tr>
+    <tr>
+      <td class="titre">Nom annuaire<br />
+        <span class="smaller">NOM Prénom</span>
+      </td>
+      <td>{if $hasProfile}{$user->directoryName()}{else}<input type="text" name="directory_name" maxlength="255" value="{$user->directoryName()}" />{/if}</td>
     </tr>
     <tr>
       <td class="titre">Nom affiché</td>
-      <td><input type="text" name="display_name" maxlength="255" value="{$user->displayName()}" /></td>
+      <td>{if $hasProfile}{$user->displayName()}{else}<input type="text" name="display_name" maxlength="255" value="{$user->displayName()}" />{/if}</td>
     </tr>
     <tr>
       <td class="titre">Sexe</td>
@@ -140,11 +146,11 @@ $(document).ready(function() {
       <td class="titre">Mot de passe</td>
       <td>
         <div style="float: left">
-          <input type="text" name="newpass_clair" size="10" maxlength="256" value="********" />
-          <input type="hidden" name="hashpass" value="" />
+          <input type="text" name="new_plain_password" size="10" maxlength="256" value="********" />
+          <input type="hidden" name="pwhash" value="" />
         </div>
         <div style="float: left; margin-top: 5px;">
-          {checkpasswd prompt="newpass_clair" submit="dummy_none"}
+          {checkpasswd prompt="new_plain_password" submit="dummy_none"}
         </div>
       </td>
     </tr>
@@ -225,10 +231,10 @@ $(document).ready(function() {
     </tr>
     <tr class="impair">
       <td colspan="2" class="center">
-        {* TODO: on 'update_account', update the hashpass field before sending the form. *}
-        <input type="submit" name="update_account" value="Mettre à jour" />
+        <input type="submit" name="update_account" value="Mettre à jour" onclick="return hashResponse('new_plain_password', false, false);" />
         <input type="submit" name="su_account" value="Prendre l'identité" />
         <input type="submit" name="log_account" value="Consulter les logs" />
+        <input type="submit" name="delete_account" value="Supprimer le compte" />
       </td>
     </tr>
   </table>
@@ -497,45 +503,6 @@ $(document).ready(function() {
   </table>
 </form>
 </div>
-
-{else}
-
-{literal}
-<script type="text/javascript">
-/* <![CDATA[ */
-  function add_user_to_url(f) {
-    f.action += '/' + f.login.value;
-  }
-/* ]]> */
-</script>
-{/literal}
-<form method="post" action="admin/user" onsubmit="add_user_to_url(this); return true">
-  {xsrf_token_field}
-  <table class="tinybicol" cellspacing="0" cellpadding="2">
-    <tr>
-      <th>
-        Administrer
-      </th>
-    </tr>
-    <tr class="pair">
-      <td class="center">
-        Il est possible d'entrer ici n'importe quelle adresse mail&nbsp;: redirection, melix, ou alias.
-      </td>
-    </tr>
-    <tr>
-      <td class="center">
-        <input type="text" name="login" size="40" maxlength="255" value="{$smarty.request.login|default:$user->hruid}" />
-      </td>
-    </tr>
-    <tr>
-      <td class="center">
-        <input type="submit" name="select" value=" edit " /> &nbsp;&nbsp;
-        <input type="submit" name="su_account" value=" su " />  &nbsp;&nbsp;
-        <input type="submit" name="log_account" value=" logs " />
-      </td>
-    </tr>
-  </table>
-</form>
 {/if}
 
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index e576392..ad35662 100644 (file)
 {to addr=#to#}
 {subject text="INTERVENTION de $admin"}
 {elseif $mail_part eq 'wiki'}
-{if $deletion}
-L'utilisateur {$user} a été désinscrit de plat/al.
-{else}
-Le profil du camarade {$old.prenom} {$old.nom} ({$old.promo}) a été édité.\\
+
+Le compte de l'utilisateur {$hruid} a été édité.\\
 Les champs suivants ont été changés :
-{foreach from=$old item=value key=field}
-{if $value neq $new[$field]}
-* '''{$field}''' : {$value} -> {$new[$field]}
-{/if}
+{foreach from=$diff item=values key=field}
+* '''{$field}''' : {$values.0} -> {$values.1}
 {/foreach}
 
 Et ceux qui n'ont pas changé :
-{foreach from=$old item=value key=field}
-{if $value eq $new[$field]}
+{foreach from=$oldValues item=value key=field}
 * '''{$field}''' : {$value}
-{/if}
 {/foreach}
 {/if}
-{/if}
 
 {* vim:set et sw=2 sts=2 sws=2: *}
index 924bc0a..8c0cb21 100644 (file)
@@ -46,12 +46,15 @@ function toggleField(name, id, obj) {
   <tr>
     <td class="titre" style="width: 20%">Demandeur&nbsp;:</td>
     <td>
-      <a href="profile/{$valid->user->login()}" class="popup2">
-        {$valid->user->fullName()} ({$valid->user->promo()})
+      {if $valid->user->hasProfile()}
+      {assign var="profile" value=$valid->user->profile()}
+      <a href="profile/{$profile->hrpid}" class="popup2">
+      {/if}
+        {$valid->user->fullName("promo")}
       </a>
     </td>
   </tr>
-  {if $valid->profile}
+  {if $valid->profile && !$valid->userIsProfileOwner}
   <tr>
     <td class="titre" style="width: 20%">Profil concerné&nbsp;:</td>
     <td>
index abe4194..78459e8 100644 (file)
 {literal}
 <script type="text/javascript">
 // <!--
-  function check_all_boxes(form,action) {
+  function checkAllBoxes(form, action)
+  {
     var boxes = document.getElementById(form).getElementsByTagName('input');
-    for (var i=0; i<boxes.length; i++) if (boxes[i].type == 'checkbox') {
-      if (action == 'toggle')
-        boxes[i].checked = !boxes[i].checked;
-      else
-        boxes[i].checked = action;
+    for (var i = 0; i < boxes.length; ++i) {
+      if (boxes[i].type == 'checkbox') {
+        if (action == 'toggle') {
+          boxes[i].checked = !boxes[i].checked;
+        } else {
+          boxes[i].checked = action;
+        }
+      }
     }
     return false;
   }
-  var toggle = 0;
-  function replie(me, cat) {
-    if (toggle == 1) return;
-    toggle = 2;
-    $("tr[@id^=row_"+cat+"_]").hide();
-    $(me).attr('src', 'images/k1.gif');
-  }
-  function deplie(me, cat) {
-    if (toggle == 2) return;
-    toggle = 1;
-    $("tr[@id^=row_"+cat+"_]").show();
-    $(me).attr('src', 'images/k2.gif');
-  }
-  function toggle_folder() {
-    me = this;
-    if ($(this).attr("class") == "wiki_category")
-        me = $("../img.wiki_root", me)[0]; 
-    var cat=$.trim($(me).parent().text().replace(/(.*)\([0-9]+\)/, "$1"));
-    if ($(me).attr('src') == "images/k1.gif") {
-      deplie(me, cat);  
+
+  function toggleCategory(cat)
+  {
+    if ($('#category_' + cat).find('.wiki_root').attr('src') == 'images/k1.gif') {
+      $('#category_' + cat).find('.wiki_root').attr('src', 'images/k2.gif');
+    } else {
+      $('#category_' + cat).find('.wiki_root').attr('src', 'images/k1.gif');
+    }
+
+    var i = 0;
+    while ($('#row_' + cat + '_' + i).length != 0) {
+      $('#row_' + cat + '_' + i).toggle();
+      ++i;
     }
-    replie(me, cat);
-    setTimeout("toggle = 0;", 10);
+    return false;
   }
-  $(document).ready(function() {
-    $("tr.pair img[@alt=-]").css("cursor","pointer").click(toggle_folder).each(toggle_folder);
-    $(".wiki_category").css("cursor","pointer").click(toggle_folder);
-  });
 // -->
 </script>
 {/literal}
 
 <p class="center">
-   <a href="Site/AllRecentChanges?action=rss&amp;user={$smarty.session.hruid}&amp;hash={$smarty.session.token}" style="display:block;float:right" title="Changements">{icon name=feed title='fil rss'}</a>
+   <a href="Site/AllRecentChanges?action=rss&amp;user={$smarty.session.hruid}&amp;hash={$smarty.session.user->token}" style="display:block;float:right" title="Changements">{icon name=feed title='fil rss'}</a>
    {icon name=magnifier} <a href="Site/AllRecentChanges">Voir les changements récents</a>
 </p>
 
 {xsrf_token_field}
 <table class="bicol">
   <tr>
-    <th>
-      page
-    </th>
-    <th>
-      lecture
-    </th>
-    <th>
-      écriture
-    </th>
-    <th class="action">
-      action
-    </th>
+    <th>page</th>
+    <th>lecture</th>
+    <th>écriture</th>
+    <th class="action">action</th>
   </tr>
 {foreach from=$wiki_pages key=cat item=pages}
   <tr class="pair">
-    <td colspan="4" style="margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; height: 20px">
-      <img class="wiki_root" src="images/k2.gif" alt="-" width="9" height="21" />
+    <td colspan="4" style="margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; height: 20px"
+        id="category_{$cat}" onclick="toggleCategory('{$cat}');">
+      <img class="wiki_root" src="images/k1.gif" alt="-" width="9" height="21" />
       <span class="wiki_category">{$cat}</span> ({$pages|@count}) <a href="{$cat}/RecentChanges">{icon name=magnifier title="Changements récents"}</a>
     </td>
   </tr>
 {foreach from=$pages item=perm key=page name=pages}
-  <tr id="row_{$cat}_{$page}" class="impair" onmouseover="this.className='pair';" onmouseout="this.className='impair';">
+  <tr id="row_{$cat}_{$smarty.foreach.pages.index}" class="impair" style="display: none"
+      onmouseover="this.className='pair';" onmouseout="this.className='impair';">
     <td style="margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; height: 20px">
       {if $smarty.foreach.pages.last}
       <img src="images/L.gif" alt="L" width="12" height="21" />
       <a href="{$cat}/{$page}">{$page}</a>{if $perm.cached}*{/if} <a href="{$cat}/{$page}?action=edit" class="indice">{icon name=page_edit title='éditer'}</a>
     </td>
     <td class="center" style="margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; height: 20px">
-      {$perm.read}
+      {assign var=read value=$perm.read}
+      {$perms_opts.$read}
     </td>
     <td class="center" style="margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; height: 20px">
-      {$perm.edit}
+      {assign var=edit value=$perm.edit}
+      {$perms_opts.$edit}
     </td>
     <td class="action" style="margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; height: 20px">
       <a href="admin/wiki/rename/{$cat}.{$page}" onclick="var newname=prompt('Déplacer la page {$cat}.{$page} vers&nbsp;:', '{$cat}.{$page}'); if (!newname) return false; this.href += '/' + newname + '?token={xsrf_token}';">{icon name=book_next title='déplacer'}</a>
 {/foreach}
 {/foreach}
   <tr class="pair">
-    <td class="action" colspan="4">
-      <span onclick="check_all_boxes('update_pages', true)">{icon name=tick title='tout cocher'}</span>
-      <span onclick="check_all_boxes('update_pages', false)">{icon name=cross title='tout décocher'}</span>
-      <span onclick="check_all_boxes('update_pages', 'toggle')">{icon name=arrow_refresh title='toggle'}</span>
+    <td colspan="3"></td>
+    <td class="action">
+      <span onclick="checkAllBoxes('update_pages', true)">{icon name=tick title='tout cocher'}</span>
+      <span onclick="checkAllBoxes('update_pages', false)">{icon name=cross title='tout décocher'}</span>
+      <span onclick="checkAllBoxes('update_pages', 'toggle')">{icon name=arrow_refresh title='toggle'}</span>
     </td>
   </tr>
   <tr class="pair">
     <td>
       Attribue les permissions aux pages cochées&nbsp;:
     </td>
-    <td>
+    <td class="center">
       <select name="read">
         <option value=""> - </option>
         {html_options options=$perms_opts}
       </select>
     </td>
-    <td>
+    <td class="center">
       <select name="edit">
         <option value=""> - </option>
         {html_options options=$perms_opts}
       </select>
     </td>
-    <td class="option">
+    <td class="option center">
       <input type="submit" value="ok"/>
     </td>
   </tr>
+  <tr>
+    <th>page</th>
+    <th>lecture</th>
+    <th>écriture</th>
+    <th class="action">action</th>
+  </tr>
 </table>
 </form>
 
 <p class="smaller">
-  *&nbsp;: les pages marquées d'une astérisque sont actuellement disponibles en cache (accès plus rapide)
+  *&nbsp;: les pages marquées d'une astérisque sont actuellement disponibles en cache (accès plus rapide).
 </p>
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index fc4d816..0aa9ac7 100644 (file)
@@ -58,8 +58,8 @@ ne plus recevoir : &lt;https://www.polytechnique.org/ax/out{if $hash}/{$hash}{/i
 {if $is_mail}
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"> 
-  <head>  
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
     <title>Lettre d'information de l'AX</title>
     <style type="text/css">
       {literal}
index 9fdf7e3..3f60dd0 100644 (file)
@@ -27,7 +27,7 @@
   Votre désinscription aux envois exceptionnels de l'AX a été réalisée avec
   succès. Si vous désirez vous réinscrire, merci de contacter
   <a href="mailto:info@amicale.polytechnique.org">l'AX</a>. Vous pouvez également
-  le faire en vous <a href="register">inscrivant à Polytechnique.org</a> (pour 
+  le faire en vous <a href="register">inscrivant à Polytechnique.org</a> (pour
   les X uniquement).
 </p>
 {else}
index b1d0630..b00d7fa 100644 (file)
@@ -53,8 +53,8 @@
 <table class="bicol">
   <tr>
     <th colspan="2">
-      {if $smarty.session.token}
-      <a href="carnet/rss/{$smarty.session.hruid}/{$smarty.session.token}/rss.xml" style="display:block;float:right" title="Notifications">
+      {if $smarty.session.user->token}
+      <a href="carnet/rss/{$smarty.session.hruid}/{$smarty.session.user->token}/rss.xml" style="display:block;float:right" title="Notifications">
         {icon name=feed title='fil rss'}
       </a>
       {else}
index c3be38b..d3231d2 100644 (file)
   </li>
   <li>
     Le calendrier des anniversaires&nbsp;:
-    <a href="carnet/contacts/ical/{$smarty.session.hruid}/{$smarty.session.token}/anniv-x.ics">
+    <a href="carnet/contacts/ical/{$smarty.session.hruid}/{$smarty.session.user->token}/anniv-x.ics">
       {icon name=calendar_view_day title='Anniversaires au format iCal'}
     </a>
-    <a href="carnet/contacts/csv/birthday/{$smarty.session.hruid}/{$smarty.session.token}/anniv-x.csv">
+    <a href="carnet/contacts/csv/birthday/{$smarty.session.hruid}/{$smarty.session.user->token}/anniv-x.csv">
       {icon name=outlook title='Anniversaires au format Outlook'}
     </a>
   </li>
@@ -75,7 +75,7 @@
       {icon name=vcard title='Carte de visite au format vCard'}
     </a>
     (<a href="carnet/contacts/vcard/MesContactsXorg.vcf">sans les photos</a>)
-    <a href="carnet/contacts/csv/{$smarty.session.hruid}/{$smarty.session.token}/MesContactsXorg.csv">
+    <a href="carnet/contacts/csv/{$smarty.session.hruid}/{$smarty.session.user->token}/MesContactsXorg.csv">
       {icon name=outlook title='Contacts au format Outlook'}
     </a>
   </li>
index eed3763..db12e22 100644 (file)
@@ -38,8 +38,8 @@ Il faut pour cela se rendre sur la page de <a href='carnet/notifs'>configuration
 </p>
 
 <div class="right">
-{if $smarty.session.token}
-<a href="carnet/rss/{$smarty.session.hruid}/{$smarty.session.token}/rss.xml" title="Notifications">{icon name=feed title='fil rss'}</a>
+{if $smarty.session.user->token}
+<a href="carnet/rss/{$smarty.session.hruid}/{$smarty.session.user->token}/rss.xml" title="Notifications">{icon name=feed title='fil rss'}</a>
 {/if}
 </div>
 
index 246f4b4..f5b7bdc 100644 (file)
@@ -20,7 +20,7 @@
 {*                                                                        *}
 {**************************************************************************}
 
-{if $referer || $platal->pl_self() neq 'login'}
+{if t($referer) || $platal->pl_self() neq 'login'}
 <h1>
   Accès restreint
 </h1>
     </tr>
     <tr style="white-space: nowrap">
       <td class="titre">
-        Adresse email&nbsp;:
+        Identifiant&nbsp;:
       </td>
       <td>
-        <input type="text" name="username" size="20" maxlength="50" value="{insert name="getUserName"}" />&nbsp;@&nbsp;<select name="domain">
-          <option value="login">{#globals.mail.domain#} / {#globals.mail.domain2#}</option>
-          <option value="alias" {if $smarty.cookies.ORGdomain eq alias}selected="selected"{/if}>
-            {#globals.mail.alias_dom#} / {#globals.mail.alias_dom2#}
+        <input type="text" name="username" size="20" maxlength="50" value="{insert name="getUserName"}" />
+        <select name="domain">
+          <option value="login">@ {#globals.mail.domain#} / {#globals.mail.domain2#}</option>
+          <option value="alias" {if t($smarty.cookies.ORGdomain) eq "alias"}selected="selected"{/if}>
+            @ {#globals.mail.alias_dom#} / {#globals.mail.alias_dom2#}
+          </option>
+          <option value="ax" {if t($smarty.cookies.ORGdomain) eq "ax"}selected="selected"{/if}>
+            Identifiant
           </option>
         </select>
       </td>
   en clair entre chez toi et Polytechnique.org, ce qui assure une confidentialité maximale.
   {else}
   {icon name=lock_open} Tu utilises actuellement une connexion HTTP non sécurisée. Toutes les informations
-  (<strong>excepté le mot de passe de connexion au site</strong>) circulent en clair entre chez toi et 
+  (<strong>excepté le mot de passe de connexion au site</strong>) circulent en clair entre chez toi et
   Polytechnique.org. Tu peux basculer sur une connexion sécurisée en cliquant sur le lien
   <div class="center">
   <a href="https://{#globals.core.secure_domain#}{$smarty.server.REQUEST_URI}">
index 223ac4d..e4edd05 100644 (file)
@@ -42,7 +42,7 @@ EMAIL;TYPE=internet:{$vcard.virtualalias}
 {/if}
 {if $vcard.tels}
 {foreach item=tel from=$vcard.tels}
-{if $tel.tel_type eq 'mobile'}TEL;TYPE=cell{else}{if $tel.tel_type eq 'fax'}FAX{else}TEL{/if};TYPE=home{/if}:{$tel.tel|vcard_enc}
+{if $tel.tel_type eq 'mobile'}TEL;TYPE=cell{else}{if $tel.tel_type eq 'fax'}FAX{else}TEL{/if};TYPE=home{/if}:{$tel.display|vcard_enc}
 {/foreach}
 {/if}
 {if $vcard.adr_pro}
@@ -57,7 +57,7 @@ ROLE:{$vcard.adr_pro[0].fonction|vcard_enc}
 {/if}
 {if $vcard.adr_pro[0].tels}
 {foreach item=tel from=$vcard.adr_pro[0].tels}
-{if $tel.tel_type eq 'mobile'}TEL;TYPE=cell,work{else}{if $tel.tel_type eq 'fax'}FAX{else}TEL{/if};TYPE=work{/if}:{$tel.tel|vcard_enc}
+{if $tel.tel_type eq 'mobile'}TEL;TYPE=cell,work{else}{if $tel.tel_type eq 'fax'}FAX{else}TEL{/if};TYPE=work{/if}:{$tel.display|vcard_enc}
 {/foreach}
 {/if}
 ADR;TYPE=work:{format_adr adr=$vcard.adr_pro[0]}
@@ -66,7 +66,7 @@ ADR;TYPE=work:{format_adr adr=$vcard.adr_pro[0]}
 ADR;TYPE=home{if $adr.courier},postal{/if}:{format_adr adr=$adr}
 {if $adr.tels}
 {foreach item=tel from=$adr.tels}
-{if $tel.tel_type eq 'mobile'}TEL;TYPE=cell,home{else}{if $tel.tel_type eq 'fax'}FAX{else}TEL{/if};TYPE=home{/if}:{$tel.tel|vcard_enc}
+{if $tel.tel_type eq 'mobile'}TEL;TYPE=cell,home{else}{if $tel.tel_type eq 'fax'}FAX{else}TEL{/if};TYPE=home{/if}:{$tel.display|vcard_enc}
 {/foreach}
 {/if}
 {/foreach}
index 0a66890..927f7ec 100644 (file)
@@ -20,8 +20,6 @@
 {*                                                                        *}
 {**************************************************************************}
 
-<h1>Indiquer</h1>
-
 {if $neuneu}
 <h2 class='erreur'>Erreur&nbsp;!</h2>
 
@@ -50,7 +48,7 @@ correspondant si tu veux que nous puissions te répondre.
 <h2>Patte cassée</h2>
   <p>
     Désolé, mais ton correspondant, {$x.user->fullName()},
-    n'a actuellement <span class="erreur">aucune adresse email de redirection 
+    n'a actuellement <span class="erreur">aucune adresse email de redirection
       active autre que celle que tu viens de rentrer.</span>
     Nous t'invitons à prendre contact avec lui autrement que par email,
     l'idéal étant de l'informer si possible que sa patte Polytechnique.org est cassée&nbsp;!
@@ -65,7 +63,18 @@ correspondant si tu veux que nous puissions te répondre.
   Nous ne pouvons donc malheureusement te fournir aucune information&hellip;
 </p>
 {/if}
-<br />
+<h2>Signaler une redirection en panne</h2>
+<p>
+  Lors de l'envoi d'un email à l'un de nos camarades, il se peut que tu reçoives
+  en retour un message d'erreur t'informant que l'email n'avait pas pu être livré
+  à une de ses redirections. Or un camarade peut avoir plusieurs redirections, et
+  le destinataire de ton email peut donc l'avoir reçu sur une autre de ses redirections.
+</p>
+<p>
+  Pour signaler que l'adresse pour laquelle tu as reçu une erreur est en panne, et
+  pour savoir si ton correspondant a reçu l'email sur une autre redirection, il te
+  suffit d'indiquer l'addresse email incriminée ci-dessous et que cliquer sur «&nbsp;Ok&nbsp;».
+</p>
 <div class="center">
   <form action="emails/broken" method="post">
   {xsrf_token_field}
index 2975e84..af8c048 100644 (file)
@@ -22,7 +22,7 @@
 
 {if $ok}
 <p>
-  {if $sexe}Chère{else}Cher{/if} {$prenom},
+  {if $sexe}Chère{else}Cher{/if} {$yourself},
 </p>
 
 <p>
index cdf4d1e..c9bf0cf 100644 (file)
 
 <h1>Perdus de vue</h1>
 
-<p>Ces {$lost_emails->total()} camarades n'ont pas ou plus d'adresse email valides</p>
+<p>Ces {$lost_emails->total()} camarades n'ont pas ou plus d'adresse email valides.</p>
 
 <table class="bicol">
   <tr>
-    <th>Utilisateur</th>
+    <th colspan="2">Utilisateur</th>
   </tr>
+  {assign var="promo" value=""}
   {iterate from=$lost_emails item="looser"}
     <tr class="{cycle values="pair,impair"}">
+      <td>{if $promo neq $looser.promo}{assign var="promo" value=$looser.promo}{$promo}{/if}</td>
       <td>
         <a href="profile/{$looser.hruid}" class="popup2">{$looser.hruid}</a>
       </td>
index 3b4d0e1..a0d501a 100644 (file)
       $('#to_contacts option[value=""]').remove();
       $('#cc_contacts option[value=""]').remove();
     });
+
+    $(document).ready(function() {
+      $("[name='to']").focus();
+    });
   {/literal}
 //]]>
 </script>
 <form action="emails/send" method="post" enctype="multipart/form-data" id="form_mail" onsubmit="return check(this);">
   {xsrf_token_field}
   <table class="bicol" cellpadding="2" cellspacing="0">
-    <tr> 
+    <tr>
       <th colspan="2">Destinataires</th>
     </tr>
-    <tr> 
+    <tr>
       <td class="titre">de&nbsp;:</td>
       <td>
         <input type='hidden' name='signature' value='1' />
 {/if}' />
       </td>
     </tr>
-    <tr> 
+    <tr>
       <td class="titre">à&nbsp;:</td>
       <td>
         <input type='text' name='to' size='60' value="{$smarty.request.to}" />
       </td>
     </tr>
-    <tr> 
+    <tr>
       <td class="titre">copie&nbsp;:</td>
       <td>
         <input type='text' name='cc' size='60' value="{$smarty.request.cc}" />
       </td>
     </tr>
-    <tr> 
+    <tr>
       <td class="titre">copie cachée&nbsp;:</td>
       <td>
         <input type='text' name='bcc' size='60' value="{$smarty.request.bcc}" />
         <div style="float: right; width: 40%;">
           <select id="to_contacts" name="to_contacts[]" multiple="multiple" style="width: 100%; height: 5em">
           {foreach key=key item=contact from=$contacts}
-          {if in_array($contact->hrpid,$smarty.request.to_contacts)}
+          {if t($smarty.request.to_contacts) && in_array($contact->hrpid,$smarty.request.to_contacts)}
           <option value="{$contact->hrpid}">
             {$contact->full_name}
           </option>
           <br />
           <select id="cc_contacts" name="cc_contacts[]" multiple="multiple" style="width: 100%; height: 5em">
           {foreach key=key item=contact from=$contacts}
-          {if in_array($contact->hrpid,$smarty.request.cc_contacts)}
+          {if t($smarty.request.cc_contacts) && in_array($contact->hrpid,$smarty.request.cc_contacts)}
           <option value="{$contact->hrpid}">
             {$contact->full_name}
           </option>
         <div style="float: right; width: 40%">
           <select id="contacts" name="all_contacts[]" multiple="multiple" style="height: 10em; width: 100%">
             {foreach item=contact from=$contacts}
-            {if !in_array($contact->hrpid,$smarty.request.to_contacts) && !in_array($contact->hrpid,$smarty.request.cc_contacts)}
+            {if !(isset($smarty.request.to_contacts|smarty:nodefaults) && isset($smarty.request.cc_contacts|smarty:nodefaults)) ||
+                (!in_array($contact->hrpid,$smarty.request.to_contacts) && !in_array($contact->hrpid,$smarty.request.cc_contacts))}
             <option value="{$contact->hrpid}">
               {$contact->full_name}
             </option>
index 5a5744c..83eb602 100644 (file)
 {else}
 
 <h1 id='pagetop'>
-Bienvenue {$smarty.session.display_name}{if $birthday}
+Bienvenue {$smarty.session.user->displayName()}{if $birthday}
   &nbsp;et joyeux anniversaire de la part de toute l'équipe&nbsp;!
 {else},
 {/if}
 </h1>
 
-{if $smarty.session.host}
+{if $smarty.session.user->host}
 <div class="smaller">
   {if $birthday}T{else}t{/if}a connexion précédente date du
-  <strong>{$smarty.session.lastlogin|date_format:"%x, %X"}</strong>
-  depuis la machine <strong>{$smarty.session.host}</strong>.
+  <strong>{$smarty.session.user->lastlogin|date_format:"%x, %X"}</strong>
+  depuis la machine <strong>{$smarty.session.user->host}</strong>.
 </div>
 {/if}
 
@@ -52,8 +52,8 @@ Bienvenue {$smarty.session.display_name}{if $birthday}
     <tr class="pair" style="height: 18px">
       <td class="half titre" style="height: 18px; padding-top: 1px; padding-bottom: 1px;">
         {if $smarty.foreach.events.first}
-        {if $smarty.session.token}
-        <a href="rss/{$smarty.session.hruid}/{$smarty.session.token}/rss.xml" style="display:block;float:right" title="Annonces">
+        {if $smarty.session.user->token}
+        <a href="rss/{$smarty.session.hruid}/{$smarty.session.user->token}/rss.xml" style="display:block;float:right" title="Annonces">
           {icon name=feed title='fil rss'}
         </a>
         {else}
@@ -92,8 +92,8 @@ Bienvenue {$smarty.session.display_name}{if $birthday}
     {if !$has_evts}
     <tr>
       <td class="half">
-        {if $smarty.session.token}
-        <a href="rss/{$smarty.session.hruid}/{$smarty.session.token}/rss.xml" style="display:block;float:right" title="Annonces">
+        {if $smarty.session.user->token}
+        <a href="rss/{$smarty.session.hruid}/{$smarty.session.user->token}/rss.xml" style="display:block;float:right" title="Annonces">
           {icon name=feed title='fil rss'}
         </a>
         {else}
index c15d41a..f845cb9 100644 (file)
@@ -42,7 +42,7 @@ Les différentes règles sont appliquées par ordre de priorité décroissante.
 
 {literal}
 <script type="text/javascript">
-  $('#body td table tr').each(function() { 
+  $('#body td table tr').each(function() {
     var uidcell = $('td:eq(3)',this);
     if (uidcell.length != 1) {
       return;
index 0a38678..a2bb9fd 100644 (file)
@@ -73,7 +73,7 @@ $(document).ready(function() {
             $('#fusion-reload a').click(function(a) {
                 document.location = a.currentTarget.href;
                 document.location.reload();
-            }); 
+            });
         });
         return false;
     });
index 9d46f58..e6a0478 100644 (file)
@@ -32,7 +32,7 @@
     });
 //-->
 {/literal}
-</script> 
+</script>
 <h2><a href="fusionax">Fusion des annuaires X.org - AX</a></h2>
 
 <h2>Import de l'annuaire AX</h2>
index dc01339..55731d7 100644 (file)
@@ -23,7 +23,7 @@
 <h2>Fusion des annuaires X.org - AX</h2>
 <ul>
 <li>Voir la <a href="Fusion">documentation</a></li>
-<li><a href="fusionax/import">Import de la base AX</a> {if $lastimport} - (dernier import le {$lastimport}){/if}</li> 
+<li><a href="fusionax/import">Import de la base AX</a> {if $lastimport} - (dernier import le {$lastimport}){/if}</li>
 <li>Mise en <a href="fusionax/ids">correspondance simple</a></li>
 <li>Création des <a href="fusionax/view">VIEW annexes nécessaires aux corrélations</a></li>
 <li>Corrélation des <a href="fusionax/deceased">dates de décès</a></li>
index c5e8069..b88b872 100644 (file)
@@ -51,8 +51,8 @@
     {if !$dead && $registered}</a>{/if}
   </div>
   <div class="autre">
-    {foreach from=$profile->nationalities() item=nat}
-    <img src='images/flags/{$nat}.gif' alt='{$nat}' height='11' title='{$nat}' />&nbsp;
+    {foreach from=$profile->nationalities() item=country key=code}
+    <img src='images/flags/{$code}.gif' alt='{$code}' height='11' title='{$country}' />&nbsp;
     {/foreach}
     {$profile->promo()}{*
     *}{if $dead}, {"décédé"|sex:"décédée":$profile} le {$profile->deathdate|date_format}{/if}
index 2d7846d..643acf7 100644 (file)
       </tr>
       <tr class="impair">
         <td colspan="2">
-          <form action="#" method="post" id="changepass">
+          <form action="#" method="post">
           <table class="tinybicol">
             <tr>
               <td class="titre">Nouveau mot de passe</td>
-              <td><input type="password" name="nouveau" onfocus="document.forms.changepass2.password_sync[1].checked = true;" /></td>
+              <td><input type="password" name="new1" onfocus="document.forms.changepass2.password_sync[1].checked = true;" /></td>
             </tr>
             <tr>
               <td class="titre">Vérification</td>
-              <td><input type="password" name="nouveau2" onfocus="document.forms.changepass2.password_sync[1].checked = true;" /></td>
+              <td><input type="password" name="new2" onfocus="document.forms.changepass2.password_sync[1].checked = true;" /></td>
             </tr>
             <tr>
               <td class="titre">Sécurité</td>
-              <td>{checkpasswd prompt="nouveau" submit="create_account" text="Créer mon compte !"}</td>
+              <td>{checkpasswd prompt="new" submit="create_account" text="Créer mon compte !"}</td>
             </tr>
           </table>
           </form>
         {if $password_sync}
           <input type="submit" value="Créer mon compte !" />
         {else}
-          <input type="hidden" name="response2"  value="" />
-          <input type="submit" name="create_account" value="Créer mon compte !" onclick="EnCryptedResponse(); return false;" />
+          <input type="hidden" name="pwhash" value="" />
+          <input type="submit" name="create_account" value="Créer mon compte !" onclick="return hashResponse('new1', 'new2', true);" />
         {/if}
       </td>
     </tr>
   {else}
   <tr class="impair"><td colspan="2">
     Changer le mot de passe de ton compte Google Apps&nbsp;:<br /><br />
-    <form action="googleapps/password" method="post" id="changepass">
+    <form action="googleapps/password" method="post">
+      {xsrf_token_field}
       <table class="bicol">
         <tr>
           <td class="titre">Nouveau mot de passe</td>
-          <td><input type="password" name="nouveau" /></td>
+          <td><input type="password" name="new1" /></td>
         </tr>
         <tr>
           <td class="titre">Vérification</td>
-          <td><input type="password" name="nouveau2" /></td>
+          <td><input type="password" name="new2" /></td>
         </tr>
         <tr>
           <td class="titre">Sécurité</td>
-          <td>{checkpasswd prompt="nouveau" submit="create_account" text="Changer mon mot de passe"}</td>
+          <td>{checkpasswd prompt="new1" submit="create_account" text="Changer mon mot de passe"}</td>
         </tr>
         <tr>
           <td></td>
-          <td><input type="submit" name="create_account" value="Changer" onclick="EnCryptedResponse(); return false;" /></td>
+          <td>
+            <input type="hidden" name="pwhash" value="" />
+            <input type="submit" name="create_account" value="Changer" onclick="return hashResponse('new1', 'new2', true);" />
+          </td>
         </tr>
       </table>
     </form>
-    <form action="googleapps/password" method="post" id="changepass2">
-      {xsrf_token_field}
-      <input type="hidden" name="response2"  value="" />
-    </form><br />
+    <br />
     Pour une sécurité optimale, ton mot de passe circule de manière sécurisée (https).
     Il est chiffré irréversiblement sur nos serveurs, ainsi que sur ceux de Google.
   </td></tr>
index 66b5614..a322c8d 100644 (file)
           {if $job->user_site} [<a href='{$job->user_site}'>Page perso</a>]{/if}</strong></td>
         </tr>
         {/if}
-        {if $job->sector}
+        {if count($job->terms)}
         <tr>
-          <td><em>Secteur&nbsp;: </em></td>
-          <td><strong>{$job->sector}{if $job->subsector} ({$job->subsector}){/if}</strong></td>
+          <td><em>Mots-clefs&nbsp;: </em></td>
+          <td><ul>
+            {foreach from=$job->terms item=term}
+            <li><strong>{$term->full_name}</strong></li>
+            {/foreach}
+          </ul></td>
         </tr>
         {/if}
 
index ac5d69d..536985c 100644 (file)
@@ -55,9 +55,9 @@
         range.innerHTML = "L\'annonce est destinée à la promotion " + min + ".";
       } else {
         range.innerHTML = "L\'annonce est destinée aux promotions de " + min + " à " + max + ' (incluses).';
-      } 
+      }
       return true;
-    } 
+    }
     {/literal}
 //]]></script>
       <input type="text" name="{$min_field_name|default:"promo_min"}" id="{$prefix}promo_min"
index d1c00bb..2757bff 100644 (file)
 {*                                                                        *}
 {**************************************************************************}
 
-{if $with_text_value}
+{if t($with_text_value)}
 <div>
 {/if}
-<select name="{$name}"{if $onchange} onchange="{$onchange}"{/if}{if $id} id="{$id}"{/if}>
+<select name="{$name}"{if t($onchange)} onchange="{$onchange}"{/if}{if t($id)} id="{$id}"{/if}>
     <option value=""> - </option>
+  {if $list}
   {iterate from=$list item='option'}
     <option value="{$option.id}">{$option.field|htmlspecialchars}</option>
   {/iterate}
+  {/if}
 </select>
-{if $with_text_value}
+{if t($with_text_value)}
 <input type="hidden" value="" name="{$name}Txt" />
 </div>
 {/if}
index 1fce6e7..7b59719 100644 (file)
@@ -27,7 +27,7 @@
 <strong>Site web&nbsp;:</strong>
 <input type="text" name="url" size="25" maxlength="200" value="{$valid->url}" /><br />
 <strong>Email&nbsp;:</strong>
-<input type="text" name="url" size="25" maxlength="200" value="{$valid->email}" /><br />
+<input type="text" name="email" size="25" maxlength="200" value="{$valid->email}" /><br />
 <strong>Holding&nbsp;:</strong>
 <input type="text" name="holdingid" size="25" maxlength="200" value="{$valid->holdingid}" /><br />
 <strong>Code NAF&nbsp;:</strong>
@@ -35,7 +35,7 @@
 <strong>Code AX&nbsp;:</strong>
 <input type="text" name="AX_code" size="25" maxlength="200" value="{$valid->AX_code}" /><br />
 <strong>Adresse&nbsp;:</strong>
-<textarea cols="30" rows="4" name="address">{$valid->address['text']}</textarea><br />
+<textarea cols="30" rows="4" name="address">{$valid->address.text}</textarea><br />
 <strong>Téléphone&nbsp;:</strong>
 <input type="text" name="tel" size="25" maxlength="200" value="{$valid->tel}" /><br />
 <strong>Fax&nbsp;:</strong>
index 377a77c..8d92f73 100644 (file)
@@ -28,7 +28,7 @@
 <input type="submit" name="preview" value="Aperçu" onclick="previewWiki('msg_{$valid->id()}', 'preview_{$valid->id()}', true, 'preview_{$valid->id()}'); return false;" /><br />
 <strong>Site&nbsp;:</strong> <input type="text" name="pay_site" size="45" value="{$valid->site}" />
 <br>
-<strong>Montant&nbsp;:</strong> <input type="text" name="pay_montant" size="5" value="{$valid->montant}" /> 
+<strong>Montant&nbsp;:</strong> <input type="text" name="pay_montant" size="5" value="{$valid->montant}" />
 (min <input type="text" name="pay_montant_min" size="5" value="{$valid->montant_min}" />
 &nbsp;->&nbsp; max <input type="text" name="pay_montant_max" size="5" value="{$valid->montant_max}" />)
 
index 58112e1..855ade8 100644 (file)
@@ -55,7 +55,7 @@
 </tr>
 <tr class="pair">
   <td class="titre">Adresse&nbsp;:</td>
-  <td>{$valid->address[text]}</td>
+  <td>{$valid->address.text}</td>
 </tr>
 <tr class="pair">
   <td class="titre">Téléphone&nbsp;:</td>
diff --git a/templates/include/jobterms.branch.tpl b/templates/include/jobterms.branch.tpl
new file mode 100644 (file)
index 0000000..71a384c
--- /dev/null
@@ -0,0 +1,42 @@
+{**************************************************************************}
+{*                                                                        *}
+{*  Copyright (C) 2003-2010 Polytechnique.org                             *}
+{*  http://opensource.polytechnique.org/                                  *}
+{*                                                                        *}
+{*  This program is free software; you can redistribute it and/or modify  *}
+{*  it under the terms of the GNU General Public License as published by  *}
+{*  the Free Software Foundation; either version 2 of the License, or     *}
+{*  (at your option) any later version.                                   *}
+{*                                                                        *}
+{*  This program is distributed in the hope that it will be useful,       *}
+{*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *}
+{*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *}
+{*  GNU General Public License for more details.                          *}
+{*                                                                        *}
+{*  You should have received a copy of the GNU General Public License     *}
+{*  along with this program; if not, write to the Free Software           *}
+{*  Foundation, Inc.,                                                     *}
+{*  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA               *}
+{*                                                                        *}
+{**************************************************************************}
+[
+{assign var=started value=0}
+{iterate from=$subTerms item=term}
+  {if $started},{/if}
+  {assign var=started value=1}
+  {ldelim}
+    "data" :
+    {ldelim}
+      "title" : "{$term.name|replace:'"':'\\"'}{if $filter} ({$term.nb} {$filter}{if $term.nb > 1}s{/if}){/if}",
+      "attr" : {ldelim}
+        {if $attrfunc}"href" : "javascript:{$attrfunc}('{$treeid}','{$term.jtid}',\"{$term.full_name|replace:'"':'\\\\\\"'}\")",{/if}
+        "title" : "{$term.full_name|replace:'"':'\\"'}"
+      {rdelim}
+    {rdelim},
+    "attr" : {ldelim} "id" : "job_terms_tree_{$treeid}_{$term.jtid}" {rdelim},
+    "state": "closed"
+  {rdelim}
+{/iterate}
+]
+
+{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index d41a48c..0daa537 100644 (file)
     <div class="nom">
       {if $profile->isFemale()}&bull;{/if}
       {if !$dead && $registered}<a href="profile/{$profile->hrid()}" class="popup2">{/if}
-      {$profile->full_name}
+      {$profile->directory_name}
       {if !$dead && $registered}</a>{/if}
     </div>
 
     <div class="edu">
-      {foreach from=$profile->nationalities() item=nat}
-      <img src='images/flags/{$nat}.gif' alt='{$nat}' height='11' title='{$nat}' />&nbsp;
+      {foreach from=$profile->nationalities() item=country key=code}
+      <img src='images/flags/{$code}.gif' alt='{$code}' height='11' title='{$country}' />&nbsp;
       {/foreach}
       {$profile->promo()}{*
-      *}{foreach from=$profile->getExtraEducations(4) item=edu}, {display_education edu=$edu profile=$profile}{/foreach}{*
+      *}{foreach from=$profile->getExtraEducations(4) item=edu}, {display_education edu=$edu profile=$profile full=false}{/foreach}{*
       *}{if $dead}, {"décédé"|sex:"décédée":$profile} le {$profile->deathdate|date_format}{/if}
     </div>
   </div>
index ea6dbcc..24e157d 100644 (file)
@@ -33,9 +33,7 @@
 {else}
 <td class="center" style="vertical-align: bottom; padding-bottom: 15px">
   <a href="profile/{$profile->hrid()}" class="popup2">
-    <span {if $profile->name_tooltip}class="hinted"
-    title="{$profile->directory_name}"{/if}>{$profile->directory_name}</span> 
-    {if $trombi_with_promo && $profile->promo()}({$profile->promo()}){/if}
+    {$profile->private_name} {if $trombi_with_promo && $profile->promo()}({$profile->promo()}){/if}
   </a>
 </td>
 {/if}
index 5e39a92..dc4cee0 100644 (file)
@@ -35,6 +35,6 @@ Cordialement,<br />
 -- <br />
 l'équipe de Polytechnique.org<br />
 Le portail des élèves & anciens élèves de l'École polytechnique
-{/if}
+{elseif $mail_part eq "escaped_html"}Cordialement,<br />-- <br />l&#39;équipe de Polytechnique.org<br />Le portail des élèves & anciens élèves de l&#39;École polytechnique{/if}
 
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index e389a9d..b6cde5b 100644 (file)
@@ -20,7 +20,7 @@
 {*                                                                        *}
 {**************************************************************************}
 
+
 <table cellpadding="8" cellspacing="2" style="width:100%;">
   {foreach from=$trombi_list item=p}
   {cycle values="1,2,3" assign="loop"}
@@ -37,7 +37,7 @@
       {/if}
       <br />
       <a href="{if $urlmainsite}{$urlmainsite}{/if}profile/{$p.forlife}" class="popup2">
-        <span {if $p.name_tooltip}class="hinted" title="{$p.name_tooltip}"{/if}>{$p.name_display}</span>{if $trombi_show_promo} ({$p.promo_display}){/if}
+        {$p.name_display}{if $trombi_show_promo} ({$p.promo_display}){/if}
       </a>
     </td>
   {if $loop eq "3"}
index 3bf7a4f..6c73b39 100644 (file)
   <tr>
     <td><strong>Liste {$platal->argv[1]}&nbsp;:</strong></td>
     <td>
-      {if $on neq members}
+      {if $on neq 'members'}
       [<a href='{$platal->ns}lists/members/{$platal->argv[1]}'>liste des membres</a>]
       {else}
       [liste des membres]
       {/if}
-      {if $on neq trombi}
+      {if $on neq 'trombi'}
       [<a href='{$platal->ns}lists/annu/{$platal->argv[1]}'>annuaire/trombi</a>]
       {else}
       [annuaire/trombi]
       {/if}
-      {if $on neq archives}
+      {if $on neq 'archives'}
       [<a href='{$platal->ns}lists/archives/{$platal->argv[1]}'>archives</a>]
       {else}
       [archives]
   <tr>
     <td><strong>Administrer la liste&nbsp;:</strong></td>
     <td>
-      {if $on neq moderate}
+      {if $on neq 'moderate'}
       [<a href='{$platal->ns}lists/moderate/{$platal->argv[1]}'>modération</a>]
       {else}
       [modération]
       {/if}
-      {if $on neq admin}
+      {if $on neq 'admin'}
       [<a href='{$platal->ns}lists/admin/{$platal->argv[1]}'>ajout/retrait de membres</a>]
       {else}
       [ajout/retrait de membres]
       {/if}
-      {if $on neq options}
+      {if $on neq 'options'}
       [<a href='{$platal->ns}lists/options/{$platal->argv[1]}'>options</a>]
       {else}
       [options]
       {/if}
-      {if $on neq delete}
+      {if $on neq 'delete'}
       [<a href='{$platal->ns}lists/delete/{$platal->argv[1]}'>détruire</a>]
       {else}
       [détruire liste]
   <tr>
     <td><strong>Administrer (avancé)&nbsp;:</strong></td>
     <td>
-      {if $on neq soptions}
+      {if $on neq 'soptions'}
       [<a href='{$platal->ns}lists/soptions/{$platal->argv[1]}'>options avancées</a>]
       {else}
       [options avancées]
       {/if}
-      {if $on neq check}
+      {if $on neq 'check'}
       [<a href='{$platal->ns}lists/check/{$platal->argv[1]}'>vérifications</a>]
       {else}
       [vérifications]
@@ -94,7 +94,7 @@
   {if $it_is_xnet && ($details.own || $is_admin)}
   <tr>
     <td><strong>Synchroniser&nbsp;:</strong></td>
-    {if $on neq sync}
+    {if $on neq 'sync'}
     <td>[<a href="{$platal->ns}lists/sync/{$platal->argv[1]}">synchroniser avec l'annuaire</a>]</td>
     {else}
     <td>[synchroniser avec l'annuaire]</td>
index 4a7034e..726446c 100644 (file)
@@ -29,7 +29,7 @@
 <ul>
   <li>Pour demander ton inscription à une liste de diffusion, il suffit
     de cliquer sur l'icône {icon name=add} située en fin de ligne.</li>
-  <li>Si la liste est à inscription modérée, l'icône {icon name=flag_orange title="en cours"} 
+  <li>Si la liste est à inscription modérée, l'icône {icon name=flag_orange title="en cours"}
     apparaîtra tant que ton inscription n'aura pas été validée par un modérateur.</li>
   <li>Pour te désinscrire d'une liste dont tu es membre, il suffit de cliquer sur la croix
     {icon name=cross title="désinscription"} située en fin de ligne.</li>
index 83440b9..575f8a6 100644 (file)
@@ -30,7 +30,7 @@
   {/if}
 </td>
 <td>
-  <a href='{$platal->ns}lists/members/{$liste.list}'>{$liste.list}</a> 
+  <a href='{$platal->ns}lists/members/{$liste.list}'>{$liste.list}</a>
 </td>
 <td>
   {$liste.desc|smarty:nodefaults}<br/>
index adaa262..df7d909 100644 (file)
@@ -86,7 +86,7 @@
 {if $owners|@count}
 <table class='tinybicol' cellpadding='0' cellspacing='0'>
   {foreach from=$owners item=xs key=promo}
-  {foreach from=$xs item=x name=all}
+  {foreach from=$xs item=user name=all}
   <tr>
     <td class='titre'>
       {if $smarty.foreach.all.first}
       {/if}
     </td>
     <td>
-      {if $promo && strpos($x.l, '@') === false}
-      {if $x.b}<a href="https://www.polytechnique.org/marketing/broken/{$x.l}">{icon name=error}</a>{/if}
-      <a href="profile/{$x.l}" class="popup2">{$x.n}</a>
-      {elseif $x.x}
-      <a href="{$platal->ns}member/{$x.x}">{$x.n}</a>
-      {elseif $x.n}
-      {$x.n}
+      {if $promo && $user.x}
+      {if $user.b}{assign var=lostUsers value=true}{/if}
+      {profile user=$user.x promo=false}
+      {elseif $user.x}
+      <a href="{$platal->ns}member/{$user.x}">{if $user.n|trim}{$x.n}{else}{$user.l}{/if}</a>
+      {elseif $user.n}
+      {$user.n}
       {else}
-      {$x.l}
+      {$user.l}
       {/if}
     </td>
-    {if $x.p}
+    {if $user.p}
     <td class="right">
-      {$x.p}
+      {$user.p}
     </td>
     {/if}
   </tr>
   </a>
   </td></tr>
   {/if}
-
-  </tr>
-
-  {foreach from=$members item=xs key=promo}
-  {foreach from=$xs item=x name=all}
+  {assign var=lostUsers value=false}
+  {foreach from=$members item=users key=promo}
+  {foreach from=$users item=user name=all}
   <tr>
     <td class='titre' style="width: 20%">
       {if $smarty.foreach.all.first}
       {/if}
     </td>
     <td>
-      {if $promo && strpos($x.l, '@') === false}
-      {if $x.b}<a href="https://www.polytechnique.org/marketing/broken/{$x.l}">{icon name=error}</a>{/if}
-      <a href="profile/{$x.l}" class="popup2">{$x.n}</a>
-      {elseif $x.x}
-      <a href="{$platal->ns}member/{$x.x}">{if $x.n|trim}{$x.n}{else}{$x.l}{/if}</a>
-      {elseif $x.n}
-      {$x.n}
+      {if $promo && $user.x}
+      {if $user.b}{assign var=lostUsers value=true}{/if}
+      {profile user=$user.x promo=false}
+      {elseif $user.x}
+      <a href="{$platal->ns}member/{$user.x}">{if $user.n|trim}{$x.n}{else}{$user.l}{/if}</a>
+      {elseif $user.n}
+      {$user.n}
       {else}
-      {$x.l}
+      {$user.l}
       {/if}
     </td>
-    {if $x.p}
+    {if $user.p}
     <td class="right">
-      {$x.p}
+      {$user.p}
     </td>
     {/if}
   </tr>
   {/foreach}
   {/foreach}
 </table>
+
+{if $lostUsers}
+<p class="smaller">
+  {icon name=error}&nbsp;Un camarade signalé par ce symbole n'a plus d'adresse de redirection et ne peut donc
+  plus être contacté via son adresse polytechnique.org. Si tu connais sa nouvelle adresse, tu peux nous la communiquer en
+  cliquant sur le symbole.
+</p>
+{/if}
+
 {/if}
 
 
index 4e725c5..5607d4e 100644 (file)
@@ -188,11 +188,11 @@ $('.checkboxToggle').click(function (event)
     if (event.target.tagName === 'INPUT') {
       return;
     }
-    
+
     var checkbox = $(this).parent().find(':checkbox');
-    
+
     checkbox = checkbox.attr('checked', !checkbox.attr('checked'));
-    
+
     event.stopPropagation();
   });
 {/literal}
index 526cf88..b8a4cd7 100644 (file)
@@ -45,7 +45,7 @@
         <input type='hidden' name='mid' value='{$smarty.get.mid}' />
         <input type='submit' name='mok' value='Accepter !'
           onclick="return confirm('Es-tu sûr de vouloir Envoyer cet email sur la liste&nbsp;?')"/>&nbsp;
-        <input type='submit' name='mno' value='Refuser !' 
+        <input type='submit' name='mno' value='Refuser !'
           onclick="return confirm('Es-tu sûr de vouloir Refuser cet email&nbsp;?')"/>&nbsp;
         <input type='submit' name='mdel' value='Spam !' style='color:red;'
           onclick="return confirm('Es-tu sûr de vouloir Détruire cet email&nbsp;?')"/>
index 1c9f0e2..f1bbc02 100644 (file)
@@ -28,7 +28,7 @@
 
 {elseif $user && !$user->alive}
 <p class="erreur">
-  {$user->fullName()} (X{$user->promo()}) est malheureusement décédé{if $user->isFemale()}e{/if}.
+  {$user->fullName("promo")} est malheureusement décédé{if $user->isFemale()}e{/if}.
   Nous ne réaliserons maintenance sur son adresse Polytechnique.org qu'à la demande explicite
   de sa famille. Pour tout renseignement, merci de <a href="mailto:contact@polytechnique.org">
   contacter le support</a>.
@@ -36,7 +36,7 @@
 
 {elseif $user}
 <h1>
-  Recherche d'adresses pour {$user->fullName()} (X{$user->promo()}).
+  Recherche d'adresses pour {$user->fullName("promo")}.
 </h1>
 
 {if !$user->email}
 {elseif $user->last}
 <p>
   {$user->fullName()} a encore des adresses de redirection actives malgré des pannes détectées sur certaines d'entre elles. Si
-  tu es sûr{if $smarty.session.femme}e{/if} que son adresse Polytechnique.org est en panne, tu peux proposer une nouvelle
+  tu es sûr{if $smarty.session.user->gender}e{/if} que son adresse Polytechnique.org est en panne, tu peux proposer une nouvelle
   adresse email à ajouter à ses redirections. Merci d'ajouter un commentaire pour nous indiquer la raison de cette proposition.
 </p>
 {else}
 <p>
-  Nous n'avons actuellement enregistré aucune panne sur les adresses de redirection de {$user->fullName()}. Si tu es 
-  sûr{if $smarty.session.femme}e{/if} que son adresse de redirection actuelle est en panne, tu peux nous proposer
+  Nous n'avons actuellement enregistré aucune panne sur les adresses de redirection de {$user->fullName()}. Si tu es
+  sûr{if $smarty.session.user->gender}e{/if} que son adresse de redirection actuelle est en panne, tu peux nous proposer
   une nouvelle adresse, accompagnée d'un commentaire nous expliquant les raisons exactes de cette proposition.
 </p>
 {/if}
@@ -70,7 +70,7 @@
 <form method="post" action="{$platal->path}">
   {xsrf_token_field}
   <table class="bicol" summary="Fiche camarade">
-    <tr><th colspan="2">Proposition d'adresse pour<br />{$user->fullName()} (X{$user->promo()})</th></tr>
+    <tr><th colspan="2">Proposition d'adresse pour<br />{$user->fullName("promo")}</th></tr>
     <tr class="pair">
       <td>Adresse email&nbsp;:</td>
       <td>
index 1694238..c5d27aa 100644 (file)
 <br />
 
 <p>
-Nombre d'X vivants d'après notre base de données&nbsp;: {$stats.vivants}<br />
-Nombre d'X vivants inscrits à Polytechnique.org&nbsp;: {$stats.inscrits}<br />
-Soit un pourcentage d'inscrits de&nbsp;: {$stats.ins_rate} %<br />
+nombre d'X vivants d'après notre base de données&nbsp;: {$statistics.alive}<br />
+nombre d'X vivants inscrits à Polytechnique.org&nbsp;: {$statistics.registered}<br />
+Soit un pourcentage d'inscrits de&nbsp;: {$statistics.registeredRate} %<br />
 </p>
 
 <p>
 Parmi ceux-ci&nbsp;:<br />
-Nombre d'X vivants depuis 1972 d'après notre base de données&nbsp;: {$stats.vivants72}<br />
-Nombre d'X vivants depuis 1972 inscrits à Polytechnique.org&nbsp;: {$stats.inscrits72}<br />
-Soit un pourcentage d'inscrits de&nbsp;: {$stats.ins72_rate} %<br />
+nombre d'X vivants depuis 1972 d'après notre base de données&nbsp;: {$statistics.alive72}<br />
+nombre d'X vivants depuis 1972 inscrits à Polytechnique.org&nbsp;: {$statistics.registered72}<br />
+Soit un pourcentage d'inscrits de&nbsp;: {$statistics.registeredRate72} %<br />
 </p>
 
 <p>
-Nombre de Polytechniciennes vivantes&nbsp;: {$stats.vivantes}<br />
-Nombre de Polytechniciennes vivantes et inscrites&nbsp;: {$stats.inscrites}<br />
-Soit un pourcentage d'inscrites de&nbsp;: {$stats.inse_rate} %<br />
+nombre de Polytechniciennes vivantes&nbsp;: {$statistics.womenAlive}<br />
+nombre de Polytechniciennes vivantes et inscrites&nbsp;: {$statistics.womenRegistered}<br />
+Soit un pourcentage d'inscrites de&nbsp;: {$statistics.womenRegisteredRate} %<br />
 </p>
 
 <p>
-Nombre d'<a href="marketing/this_week">inscrits ces 7 derniers jours</a>&nbsp;: {$nbInsSem}<br />
-Nombre d'<a href="marketing/relance">inscriptions en cours</a> (2ème phase non terminée)&nbsp;: {$nbInsEnCours}
+nombre d'<a href="marketing/this_week">inscrits ces 7 derniers jours</a>&nbsp;: {$registrations.week}<br />
+nombre d'<a href="marketing/relance">inscriptions en cours</a> (2ème phase non terminée)&nbsp;: {$registrations.pending}
 </p>
 
 <table class="bicol">
@@ -69,34 +69,37 @@ Nombre d'<a href="marketing/relance">inscriptions en cours</a> (2ème phase non
   </tr>
   <tr>
     <td>&nbsp;</td>
-    <td class="titre">Abouti</td>
     <td class="titre">Non abouti</td>
+    <td class="titre">Abouti</td>
     <td class="titre">Total</td>
   </tr>
   <tr>
     <td>Personnel</td>
-    <td>{$nbInsMarketOkPerso}</td>
-    <td>{$nbInsMarketNoPerso}</td>
-    <td>{$nbInsMarketOkPerso+$nbInsMarketNoPerso}</td>
+    <td>{$marketings.noPerso}</td>
+    <td rowspan="3" style="vertical-align: middle">{$marketings.ok}</td>
+    <td rowspan="3" style="vertical-align: middle">{$marketings.ok+$marketings.noPerso+$marketings.noXorg+$marketings.noAX}</td>
   </tr>
   <tr>
     <td>Par Polytechnique.org</td>
-    <td>{$nbInsMarketOkXorg}</td>
-    <td>{$nbInsMarketNoXorg}</td>
-    <td>{$nbInsMarketOkXorg+$nbInsMarketNoXorg}</td>
+    <td>{$marketings.noXorg}</td>
+  </tr>
+  <tr>
+    <td>Par l'AX</td>
+    <td>{$marketings.noAX}</td>
   </tr>
   <tr>
     <td>Cette semaine</td>
-    <td>{$nbInsMarketOkWeek}</td>
-    <td>{$nbInsMarketNoWeek}</td>
-    <td>{$nbInsMarketOkWeek+$nbInsMarketNoWeek}</td>
+    <td>{$marketings.noWeek}</td>
+    <td>{$marketings.okWeek}</td>
+    <td>{$marketings.okWeek+$marketings.noWeek}</td>
   </tr>
   <tr>
     <td class="titre">Total</td>
-    <td>{$nbInsMarketOkPerso+$nbInsMarketOkXorg}</td>
-    <td>{$nbInsMarketNoPerso+$nbInsMarketNoXorg}</td>
-    <td>{$nbInsMarketOkPerso+$nbInsMarketOkXorg+$nbInsMarketNoPerso+$nbInsMarketNoXorg}</td>
+    <td>{$marketings.noPerso+$marketings.noXorg+$marketings.noAX}</td>
+    <td>{$marketings.ok}</td>
+    <td>{$marketings.ok+$marketings.noPerso+$marketings.noXorg+$marketings.noAX}</td>
   </tr>
 </table>
 
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
+
index 6b786c9..e7fdb79 100644 (file)
@@ -27,7 +27,7 @@
 {#globals.baseurl#}/register/%%hash%%
 ==========================================================
 
-Il ne te faut que 5 minutes sur https://www.polytechnique.org/ pour rejoindre la communauté polytechnicienne sur le web grâce aux services de Polytechnique.org dont profitent déjà {$num_users} camarades. Cela te permettra, entre autres, de contacter un X en connaissant seulement son nom et son prénom et de bénéficier à vie d'une adresse prestigieuse {$u.forlife_email} et de son alias discret {$u.forlife_email2} (m4x = mail for X).
+Il ne te faut que 5 minutes sur https://www.polytechnique.org/ pour rejoindre la communauté polytechnicienne sur le web grâce aux services de Polytechnique.org dont profitent déjà {$globals->core->NbIns|number_format} camarades. Cela te permettra, entre autres, de contacter un X en connaissant seulement son nom et son prénom et de bénéficier à vie d'une adresse prestigieuse {$u.forlife_email} et de son alias discret {$u.forlife_email2} (m4x = mail for X).
 
 Pas de nouvelle boîte aux lettres à relever, il suffit de la rediriger vers ton adresse personnelle et/ou professionnelle que tu indiques et que tu peux changer à ta guise, sans que tes correspondants n'aient à actualiser leur carnet d'adresses.
 
@@ -37,8 +37,6 @@ N'hésite pas à parler de Polytechnique.org à nos camarades pas encore inscrit
 {$personal_notes}
 À bientôt sur Polytechnique.org <https://www.polytechnique.org>,
 
-Bien cordialement,
--- 
 {$sign}
 
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index 0cdf5a2..f157b6c 100644 (file)
       <td>{profile user=$it}</td>
       <td>{if $it->lastKnownEmail()}{mailto address=$it->lastKnownEmail()}{/if}</td>
       <td class="center">
-        {if $it->lastMarketingRelance() && $it->lastMarketingRelance() != '0000-00-00'}
-        Relance le&nbsp;: {$it->lastMarketingRelance()}
-        {elseif $it->lastKnownEmail()}
-        En cours&nbsp;: {$it->lastKnownEmail()}
+        {if $it->pendingRegistrationDate() > $it->lastMarketingDate()}
+        En cours&nbsp;: {$it->pendingRegistrationEmail()}
+        {elseif $it->lastMarketingDate() && $it->lastMarketingDate() != '0000-00-00'}
+        Relance le&nbsp;: {$it->lastMarketingDate()}
         {else}
         -
         {/if}
index e0951c5..e20cfb5 100644 (file)
@@ -95,8 +95,8 @@ peut sans aucun doute l'aider à se décider&nbsp;!
         </label><br />
         <label>
           <input type="radio" name="origine" value="staff"
-                 onclick='$("#sender").html("{$xorg_signature}"); $("#tr_perso").hide();
-                          $("#personal_notes_display").hide();' />
+                 onclick='$("#sender").html("{include file=include/signature.mail.tpl mail_part=$mail_part}");
+                          $("#tr_perso").hide(); $("#personal_notes_display").hide();' />
           au nom de l'équipe Polytechnique.org
         </label>
       </td>
index 30b571b..e1a86be 100644 (file)
@@ -22,7 +22,7 @@
 
 
 <h1>
-{if $actif}Modification du mot de passe SMTP/NNTP{else}Activation de ton compte SMTP/NNTP{/if}  
+{if $actif}Modification du mot de passe SMTP/NNTP{else}Activation de ton compte SMTP/NNTP{/if}
 </h1>
 
 {literal}
 <p>
   {icon name=error title="Attention"} Nous te déconseillons fortement d'utiliser le même
   mot de passe que pour la connexion au site. En effet, ce mot de passe sert à accéder à des
-  services <em>moins</em> sécurisés, ce qui nécessite son enregistrement en clair dans 
+  services <em>moins</em> sécurisés, ce qui nécessite son enregistrement en clair dans
   notre base de données.
 </p>
 
 </p>
 {include wiki=Xorg.NNTPSecurise}
 {elseif $smarty.request.doc eq "smtp"}
-<p> 
+<p>
   <a href="{$platal->pl_self()}?doc=nntp">Pourquoi et comment</a> utiliser le serveur NNTP de {#globals.core.sitename#}.<br />
 </p>
 {include wiki=Xorg.SMTPSecurise}
index d25c94c..83d5d24 100644 (file)
@@ -22,7 +22,7 @@
 
 <h1>Fil RSS</h1>
 
-{if !$smarty.session.token}
+{if !$smarty.session.user->token}
 <p>
   Tu viens de cliquer sur le lien d'activation des fils RSS. Les fils RSS du site
   ne sont pas activés dans tes préférences.
@@ -52,11 +52,11 @@ En voici les adresses&nbsp;:
 <ul>
   <li>
   Anonces sur la page d'entrée&nbsp;:
-  <a href="rss/{$smarty.session.hruid}/{$smarty.session.token}/rss.xml" title="Annonces">{icon name=feed title='fil rss'}</a>
+  <a href="rss/{$smarty.session.hruid}/{$smarty.session.user->token}/rss.xml" title="Annonces">{icon name=feed title='fil rss'}</a>
   </li>
   <li>
   Ton carnet polytechnicien&nbsp;:
-  <a href="carnet/rss/{$smarty.session.hruid}/{$smarty.session.token}/rss.xml" title="Notifications">{icon name=feed title='fil rss'}</a>
+  <a href="carnet/rss/{$smarty.session.hruid}/{$smarty.session.user->token}/rss.xml" title="Notifications">{icon name=feed title='fil rss'}</a>
   </li>
 </ul>
 <p>
index 063ad73..a88b734 100644 (file)
@@ -33,7 +33,7 @@
 <strong>Si vous êtes un recruteur ou une entreprise, / if you are a recruiter or a company,</strong>
 <ul>
   <li class="spaced">
-    vous avez la possibilité 
+    vous avez la possibilité
     <strong><a href="http://www.manageurs.com/?langue=fr">d'utiliser le site
         Manageurs.com</a></strong> pour rentrer en contact avec les
     polytechniciens, mettre en ligne des offres d'emploi, consulter l'annuaire
similarity index 90%
rename from templates/platal/motdepasse.tpl
rename to templates/platal/password.tpl
index 0343c03..07b01b2 100644 (file)
 <br />
 <fieldset style="width: 70%; margin-left: 15%">
   <legend>{icon name=lock} Saisie du nouveau mot de passe</legend>
-  <form action="{$smarty.server.REQUEST_URI}" method="post" id="changepass">
+  <form action="{$smarty.server.REQUEST_URI}" method="post">
+  {xsrf_token_field}
     <table style="width: 100%">
       <tr>
         <td class="titre">
           Mot de passe&nbsp;:
         </td>
         <td>
-          <input type="password" size="10" maxlength="256" name="nouveau" />
+          <input type="password" size="10" maxlength="256" name="new1" />
         </td>
       </tr>
       <tr>
@@ -52,7 +53,7 @@
           Retape-le une fois&nbsp;:
         </td>
         <td>
-          <input type="password" size="10" maxlength="256" name="nouveau2" />
+          <input type="password" size="10" maxlength="256" name="new2" />
         </td>
       </tr>
       <tr>
           Sécurité
         </td>
         <td>
-          {checkpasswd prompt="nouveau" submit="submitn"}
+          {checkpasswd prompt="new1" submit="submitn"}
         </td>
       </tr>
       <tr>
         <td colspan="2" class="center">
-          <input type="submit" value="Changer" name="submitn" onclick="EnCryptedResponse(); return false;" />
+          <input type="hidden" name="pwhash" value="" />
+          <input type="submit" value="Changer" name="submitn" onclick="return hashResponse('new1', 'new2', true);" />
         </td>
       </tr>
     </table>
   </form>
-  <form action="{$smarty.server.REQUEST_URI}" method="post" id="changepass2">
-  <div>
-  {xsrf_token_field}
-  <input type="hidden" name="response2"  value="" />
-  </div>
-  </form>
 </fieldset>
 
 <p>
index 05b8d4e..590cf80 100644 (file)
@@ -61,7 +61,7 @@
   </tr>
   <tr class="impair">
     <td class="half">
-      {if $smarty.session.email_format eq html}
+      {if $smarty.session.user->email_format eq 'html'}
       <h3>
         <a href="javascript:dynpostkv('prefs','email_format','text')">Recevoir les emails en format texte</a>
       </h3>
@@ -83,7 +83,7 @@
     </td>
     <td class="half">
       <h3>
-        {if $smarty.session.token}
+        {if $smarty.session.user->token}
         <a href="javascript:dynpostkv('prefs','rss',0)">Désactiver les fils rss</a>
         {else}
         <a href="javascript:dynpostkv('prefs','rss',1)">Activer les fils rss</a>
index ae484a7..f284018 100644 (file)
@@ -36,7 +36,7 @@
         <select name="medal_sel" onchange="updateMedal()">
           <option value=''>&nbsp;</option>
           {foreach from=$medal_list key=type item=list}
-          <optgroup label="{$trad[$type]}&hellip;">
+          <optgroup label="{$fullType[$type]}&hellip;">
             {foreach from=$list item=m}
             <option value="{$m.id}">{$m.text}</option>
             {/foreach}
@@ -50,8 +50,8 @@
       {foreach from=$medals item=medal key=id}
       {include file="profile/deco.medal.tpl" medal=$medal id=$id}
       {/foreach}
-      <div class="center"><small>Si ta décoration ou ta médaille ne figure pas dans la liste,
-      <a href="mailto:support@{#globals.mail.domain#}">contacte-nous</a>.</small></div>
+      <p class="center"><small>Si ta décoration ou ta médaille ne figure pas dans la liste,
+      <a href="mailto:support@{#globals.mail.domain#}">contacte-nous</a>.</small></p>
     </td>
   </tr>
 </table>
index 1cd0112..e5df00c 100644 (file)
@@ -22,6 +22,6 @@
 
 educationDegree     = new Array({education_degree});
 educationDegreeAll  = new Array({education_degree_all});
-educationDegreeName = new Array({education_degree_name}); 
+educationDegreeName = new Array({education_degree_name});
 
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index 0ded2bc..a35e521 100644 (file)
@@ -21,7 +21,7 @@
 {**************************************************************************}
 
 {javascript name=ajax}
-{assign var=sectors value=$profile->getMentoringSectors()}
+{assign var=terms value=$profile->getMentoringTerms()}
 {assign var=countries value=$profile->getMentoringCountries()}
 <div id="fiche">
 <div id="fiche_referent">
@@ -33,7 +33,7 @@
   </div>
   <div class="spacer"></div>
 
-  {if $profile->expertise != '' || $sectors|count || $countries|count }
+  {if $profile->expertise != '' || $terms|count || $countries|count }
   <div id="part">
     <h2>Informations de référent&nbsp;:</h2>
     {if $profile->expertise}
       <span>{$profile->expertise|nl2br}</span>
     </div>
     {/if}
-    {if $sectors|count}
+    {if $terms|count}
     <div class="rubrique_referent">
-      <em>Secteurs&nbsp;:</em><br />
+      <em>Mots-clefs&nbsp;:</em><br />
       <ul>
-        {foreach from=$sectors item="sector" key="i"}
-        <li>{$sector.sector}{if $sector.subsector != ''} ({$sector.subsector}){/if}</li>
+        {foreach from=$terms item="term"}
+        <li>{$term->full_name}</li>
         {/foreach}
       </ul>
     </div>
index aae79e1..cdac3c3 100644 (file)
@@ -22,7 +22,7 @@
 
 <table class="bicol" style="margin-bottom: 1em" summary="Profil : Noms">
   <tr>
-    <th colspan="3">Noms</th>
+    <th colspan="3">Noms{if $validation} <small>(validations en attente de modération)</small>{/if}</th>
   </tr>
   <tr>
     <td class="titre">
index bdcc013..77641e6 100644 (file)
@@ -22,9 +22,9 @@
 
 <h1>Mes groupes X sur Polytechnique.net</h1>
 
-<p class="center"> 
-[<a href="http://www.polytechnique.net/login/plan">Tous les groupes X</a>] 
-</p> 
+<p class="center">
+[<a href="http://www.polytechnique.net/login/plan">Tous les groupes X</a>]
+</p>
 
 {foreach from=$assos item="asso"}
 <div style="width:48%;float:left" >
index ec4008f..08570ce 100644 (file)
@@ -20,6 +20,7 @@
 {*                                                                        *}
 {**************************************************************************}
 
+<script type="text/javascript" src="javascript/jquery.jstree.js"></script>
 {assign var=jobid value="job_"|cat:$i}
 {assign var=jobpref value="jobs[`$i`]"}
 {assign var=sector_text value="sector_text_"|cat:$i}
@@ -49,7 +50,7 @@
         </div>
         Entreprise n°{$i+1}&nbsp;:
         {if $job.tmp_name}{$job.tmp_name} <small>(en cours de validation)</small>{else}
-        <input type="text" class="enterpriseName {if $job.name_error}error{/if}" size="35" maxlength="100"
+        <input type="text" class="enterpriseName{if $job.name_error} error{/if}" size="35" maxlength="100"
                name="{$jobpref}[name]" value="{$job.name}" />
         {/if}
         <a href="javascript:removeJob('{$jobid}','{$jobpref}')">
       <td class="titre">Téléphone</td>
       <td>
         <input type="text" maxlength="28" {if $job.hq_tel_error}class="error"{/if}
-               name="{$jobpref}[hq_phone]" value="{$job.hq_phone}" />
+               name="{$jobpref}[hq_fixed]" value="{$job.hq_fixed}" />
       </td>
     </tr>
     <tr class="{$entreprise}" style="display: none">
       <td colspan="2" class="center" style="font-style: italic">Ta place dans l'entreprise</td>
     </tr>
     <tr class="pair {$sector_text}">
-      <td class="titre">Secteur d'activité</td>
-      <td>
-        <input type="text" class="sectorName {if $job.sector_error}error{/if}" size="35" maxlength="100"
-               name="{$jobpref}[subSubSectorName]" value="{$job.subSubSectorName}" />
-        <a href="javascript:displayAllSector({$i})">{icon name="table" title="Tous les secteurs"}</a>
+      <td class="titre">Mots-clefs</td>
+      <td class="job_terms">
+        <input type="text" class="term_search" size="35"/>
+        <a href="javascript:toggleJobTermsTree({$i})">{icon name="table" title="Tous les mots-clefs"}</a>
+        <script type="text/javascript">
+        /* <![CDATA[ */
+        $(function() {ldelim}
+          {foreach from=$job.terms item=term}
+          addJobTerm("{$i}", "{$term.jtid}", "{$term.full_name|replace:'"':'\\"'}");
+          {/foreach}
+          $('#job_{$i} .term_search').autocomplete(platal_baseurl + 'profile/jobterms',
+            {ldelim}
+              "formatItem" : displayJobTerm,
+              "extraParams" : {ldelim} "jobid" : "{$i}" {rdelim},
+              "width" : $('#job_{$i} .term_search').width()*2,
+              "onItemSelect" : selectJobTerm,
+              "matchSubset" : false
+            {rdelim});
+        {rdelim});
+        /* ]]> */
+        </script>
+      </td>
+    </tr>
+    <tr class="pair">
+      <td colspan="2" class="term_tree">
       </td>
     </tr>
     <tr class="pair {$sector}" style="display: none">
index 2139d39..c257a8a 100644 (file)
@@ -20,6 +20,8 @@
 {*                                                                        *}
 {**************************************************************************}
 
+{javascript name=jquery.jstree}
+{javascript name=jobtermstree}
 {foreach from=$jobs item=job key=i}
 {include file="profile/jobs.job.tpl" i=$i job=$job new=false}
 {/foreach}
index 52688b9..56951e6 100644 (file)
@@ -20,7 +20,9 @@
 {*                                                                        *}
 {**************************************************************************}
 
-<div>{icon name=information title="Afficher ma fiche référent"}Tu peux consulter ta <a class="popup2" href="referent/{$smarty.session.hruid}">fiche référent</a> qui n'est accessible que par les X.
+{javascript name=jobtermstree}
+
+<div>{icon name=information title="Afficher ma fiche référent"}Tu peux consulter ta <a class="popup2" href="referent/{$hrpid}">fiche référent</a> qui n'est accessible que par les X.
 </div>
 {if (!$expertise)||(!($sectors|@count))}
   <br /><div>
   </tr>
 </table>
 
+<script type="text/javascript" src="javascript/jquery.jstree.js"></script>
+
 <table class="bicol" style="margin-bottom: 1em" summary="Profil&nbsp;: Mentoring">
   <tr>
-    <th>
+    <th colspan="2">
       <div class="flags" style="float: left">
         <input type="checkbox" name="accesX" checked="checked" disabled="disabled" />
         {icon name="flag_red" value="privé"}
       </div>
-      Secteurs d'activité dans lesquels tu as beaucoup exercé
+      Mots clefs qui représentent le mieux ton expérience
     </th>
   </tr>
   <tr>
-    <td id="sectorSelection">
-      <div style="float: left; width: 30%" class="titre">Secteur</div>
-      <select name="sectorSelection" onchange="updateSector()">
-        <option value="">&nbsp;</option>
-        {iterate from=$sectorList item=sector}
-        <option value="{$sector.id}">{$sector.name}</option>
-        {/iterate}
-      </select>
-    </td>
+    <td colspan="2">
+      Il est préférable de mentionner des notions précises : <em>Pizzaïolo</em> plutôt que <em>Hôtellerie</em>.
+      En effet Les recherches sur le mot-clef <em>Hôtellerie</em> te trouveront dans les deux cas mais une
+      recherche sur <em>Production culinaire</em> ou <em>Pizzaïolo</em> non.
+    <td/>
   </tr>
   <tr>
-    <td>
-      <div style="float: left; width: 30%" class="titre">Sous-secteur</div>
-      <span id="subSectorSelection"></span>
+    <td class="titre" style="width:30%">Mots-clefs</td>
+    <td class="job_terms">
+      <input type="text" class="term_search" size="35"/>
+      <a href="javascript:toggleJobTermsTree(-1)">{icon name="table" title="Tous les mots-clefs"}</a>
+      <script type="text/javascript">
+      /* <![CDATA[ */
+      $(function() {ldelim}
+        {foreach from=$terms item=term}
+        addJobTerm(-1, "{$term.jtid}", "{$term.full_name|replace:'"':'\\"'}");
+        {/foreach}
+        $('.term_search').autocomplete(platal_baseurl + 'profile/jobterms',
+          {ldelim}
+            "formatItem" : displayJobTerm,
+            "extraParams" : {ldelim} "jobid" : "-1" {rdelim},
+            "width" : $('.term_search').width()*2,
+            "onItemSelect" : selectJobTerm,
+            "matchSubset" : false
+          {rdelim});
+      {rdelim});
+      /* ]]> */
+      </script>
     </td>
   </tr>
-  <tr class="pair">
-    <td id="sectors">
-      {if $sectors|@count}
-      {foreach from=$sectors item=sector key=s}
-      {foreach from=$sector item=subSector key=ss}
-      <div id="sectors_{$s}_{$ss}" style="clear: both; margin-top: 0.5em" class="titre">
-        <a href="javascript:removeSector('{$s}','{$ss}')" style="display: block; float: right">
-          {icon name=cross title="Supprimer ce secteur"}
-        </a>
-        <input type="hidden" name="sectors[{$s}][{$ss}]" value="{$subSector}" />
-        {$subSector}
-      </div>
-      {/foreach}
-      {/foreach}
-      {/if}
+  <tr>
+    <td colspan="2" class="term_tree">
     </td>
   </tr>
 </table>
diff --git a/templates/profile/notification.mail.tpl b/templates/profile/notification.mail.tpl
new file mode 100644 (file)
index 0000000..26c3cb4
--- /dev/null
@@ -0,0 +1,45 @@
+{**************************************************************************}
+{*                                                                        *}
+{*  Copyright (C) 2003-2010 Polytechnique.org                             *}
+{*  http://opensource.polytechnique.org/                                  *}
+{*                                                                        *}
+{*  This program is free software; you can redistribute it and/or modify  *}
+{*  it under the terms of the GNU General Public License as published by  *}
+{*  the Free Software Foundation; either version 2 of the License, or     *}
+{*  (at your option) any later version.                                   *}
+{*                                                                        *}
+{*  This program is distributed in the hope that it will be useful,       *}
+{*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *}
+{*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *}
+{*  GNU General Public License for more details.                          *}
+{*                                                                        *}
+{*  You should have received a copy of the GNU General Public License     *}
+{*  along with this program; if not, write to the Free Software           *}
+{*  Foundation, Inc.,                                                     *}
+{*  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA               *}
+{*                                                                        *}
+{**************************************************************************}
+
+{config_load file="mails.conf" section="profile"}
+{if $mail_part eq 'head'}
+{from full=#from#}
+{cc full=#cc#}
+{subject text="Modification de ton profil"}
+{elseif $mail_part eq 'wiki'}
+{if $sex}Chère{else}Cher{/if} {$yourself},
+
+Les champs suivants de ton profil ont été modifiés le {$date|date_format:"%x"} :
+{foreach from=$modifications item=modification}
+*{$modification.field} : « {$modification.oldText} » est devenu « {$modification.newText} » (effectuée par {$modification.full_name}).
+{/foreach}
+
+Tu peux voir ta fiche là :
+*{$globals->baseurl}/profile/{$hrpid}
+Tu peux aussi l'éditer toi-même là :
+*{$globals->baseurl}/profile/edit/{$hrpid}
+
+{include file="signature.mail.tpl"}
+
+{/if}
+
+{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index 15a34e5..db5d919 100644 (file)
@@ -29,7 +29,7 @@
     <option value="mobile"{if $tel.type eq 'mobile'} selected="selected"{/if}>Mobile</option>
     <option value="fax"{if $tel.type eq 'fax'} selected="selected"{/if}>Fax</option>
   </select>
-  <input type="text" size="19" maxlength="28" name="{$telpref}[tel]" {if $tel.error}class="error"{/if} value="{$tel.tel}" />
+  <input type="text" size="19" maxlength="28" name="{$telpref}[display]" {if $tel.error}class="error"{/if} value="{$tel.display}" />
   <a class="removeTel" href="javascript:removeTel('{$prefname}','{$prefid}','{$telid}')">
     {icon name=cross title="Supprimer ce numéro de téléphone"}
   </a>
index 4402224..926f807 100644 (file)
@@ -42,7 +42,7 @@ function chgMainWinLoc(strPage)
 <div id="fiche">
   <div id="photo" class="part">
     {assign var=photo value=$profile->getPhoto(false)}
-    {if $photo}<img alt="Photo de {$profile->fullName()}" src="photo/{$profile->hrid()}" width="{$photo->width()}"/>{/if}
+    {if $photo}<img alt="Photo de {$profile->fullName()}" src="photo/{$profile->hrid()}{if $with_pending_pic}/req{/if}" width="{$photo->width()}"/>{/if}
 
     {if $logged && $view eq 'private' && ( $profile->section|smarty:nodefaults || $profile->getBinets()|smarty:nodefaults || ($owner && $owner->groups()|smarty:nodefaults))}
       <h2>À l'X&hellip;</h2>
@@ -87,10 +87,7 @@ function chgMainWinLoc(strPage)
   <div id="fiche_identite" class="part">
     <div class="civilite">
       {if $profile->isFemale()}&bull;{/if}
-        <span {if $profile->name_tooltip neq ""}class="hinted" title="{$profile->name_tooltip}"{/if}>{$profile->shortName()}</span>
-      {if $logged}
-        {if $profile->nickname} (alias {$profile->nickname}){/if}
-      {/if}
+        {if $view eq 'private'}{$profile->private_name}{else}{$profile->public_name}{/if}
 
       {if $logged}
         &nbsp;{if !$profile->isDead()}<a href="vcard/{$owner->login()}.vcf">{*
@@ -155,11 +152,13 @@ function chgMainWinLoc(strPage)
       {/if}
       <div class='spacer'></div>
     </div>
+    {else}
+    <div class='spacer'></div>
     {/if}
 
     <div class='formation'>
-      {foreach from=$profile->nationalities() item=nat}
-        <img src='images/flags/{$nat}.gif' alt='{$nat}' height='11' title='{$nat}' />&nbsp;
+      {foreach from=$profile->nationalities() item=country key=code}
+      <img src='images/flags/{$code}.gif' alt='{$code}' height='11' title='{$country}' />&nbsp;
       {/foreach}
 
       {$profile->promo()}
@@ -173,21 +172,24 @@ function chgMainWinLoc(strPage)
         &nbsp;-&nbsp;Formation&nbsp;:
         <ul>
         {foreach from=$educations item=edu}
-          <li>{display_education edu=$edu profile=$profile}</li>
+          <li>{display_education edu=$edu profile=$profile full=true}</li>
         {/foreach}
         </ul>
       {/if}
 
       {assign var=corps value=$profile->getCorps()}
       {if $corps && ($corps->current || $corps->original)}
-      <ul>
+        <ul>
         {if $corps->current}
-          <li>Corps actuel&nbsp;: {$corps->current_name} {$corps->current_rank}</li>
+          <li>
+            Corps actuel&nbsp;: {$corps->current_name}
+            {if $corps->current_rank}({$corps->current_rank}){/if}
+          </li>
         {/if}
-        {if $corps->original}
+        {if $corps->current != $corps->original && $corps->original}
           <li>Corps d'origine&nbsp;: {$corps->original_name}</li>
         {/if}
-      </ul>
+        </ul>
       {/if}
 
     </div>
diff --git a/templates/profile/referent.tpl b/templates/profile/referent.tpl
deleted file mode 100644 (file)
index 1265508..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-{**************************************************************************}
-{*                                                                        *}
-{*  Copyright (C) 2003-2010 Polytechnique.org                             *}
-{*  http://opensource.polytechnique.org/                                  *}
-{*                                                                        *}
-{*  This program is free software; you can redistribute it and/or modify  *}
-{*  it under the terms of the GNU General Public License as published by  *}
-{*  the Free Software Foundation; either version 2 of the License, or     *}
-{*  (at your option) any later version.                                   *}
-{*                                                                        *}
-{*  This program is distributed in the hope that it will be useful,       *}
-{*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *}
-{*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *}
-{*  GNU General Public License for more details.                          *}
-{*                                                                        *}
-{*  You should have received a copy of the GNU General Public License     *}
-{*  along with this program; if not, write to the Free Software           *}
-{*  Foundation, Inc.,                                                     *}
-{*  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA               *}
-{*                                                                        *}
-{**************************************************************************}
-
-
-{if $plset_count}
-{include core=plset.tpl}
-{else}
-{include wiki=Docs.Emploi}
-{/if}
-
-<a id="mentors"></a>
-
-<p>
-Actuellement, {$mentors_number} mentors et référents se sont déclarés sur {#globals.core.sitename#}.
-</p>
-
-{javascript name=ajax}
-<script type="text/javascript">//<![CDATA[
-
-var baseurl = platal_baseurl + "referent/";
-{literal}
-var Ajax2 = new AjaxEngine();
-
-function setSector(sector)
-{
-    if (sector == '') {
-        document.getElementById('scat').style.display = 'none';
-        document.getElementById('country').style.display = 'none';
-        document.getElementById('keywords').style.display = 'none';
-        document.getElementById('search_referent').disabled = 'disabled';
-    } else {
-        Ajax.update_html('ssect_chg', baseurl + 'ssect/' + sector);
-        Ajax2.update_html('country_chg', baseurl + 'country/' + sector);
-        document.getElementById('scat').style.display = ''; 
-        document.getElementById('country').style.display = ''; 
-        document.getElementById('keywords').style.display = ''; 
-        document.getElementById('search_referent').disabled = '';
-    }
-}
-
-function setSSectors()
-{
-    var sect  = document.getElementById('sect_field').value;
-    var ssect = document.getElementById('ssect_field').value;
-    Ajax2.update_html('country_chg', baseurl + 'country/' + sect + '/' + ssect);
-}
-
-{/literal}
-//]]></script>
-
-<form action="{$smarty.server.REQUEST_URI}" method="get">
-  <table cellpadding="0" cellspacing="0" summary="Formulaire de recherche de referents" class="bicol">
-    <tr class="impair">
-      <td class="titre">
-        Secteur de compétence<br />du référent
-      </td>
-      <td>
-        <select name="sector" id="sect_field" onchange="setSector(this.value)">
-          <option name=""></option>
-          {html_options options=$sectors selected=$sectorSelection}
-        </select>
-      </td>
-    </tr>
-    <tr class="impair" style="display: none" id="scat">
-      <td class="titre">
-        Sous-secteur
-      </td>
-      <td id="ssect_chg">
-      </td>
-    </tr>
-    <tr class="pair" style="display: none" id="country">
-      <td class="titre">
-        Pays bien connu du référent
-      </td>
-      <td id="country_chg">
-      </td>
-    </tr>
-    <tr class="impair" style="display: none" id="keywords">
-      <td class="titre">
-        Expertise (rentre un ou plusieurs mots clés)
-      </td>
-      <td >
-        <input type="text" name="expertise" size="30" value="{$expertise_champ}" />
-      </td>
-    </tr>
-  </table>
-  <div class="center" style="margin-top: 1em;">
-    <input id="search_referent" type="submit" value="Chercher" name="Chercher" />
-  </div>
-</form>
-
-<script type="text/javascript">
-setSector(document.getElementById('sect_field').value);
-</script>
-{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index bd86370..ee2ce77 100644 (file)
@@ -69,7 +69,7 @@
       </th>
     </tr>
     <tr>
-      <td class="titre"> 
+      <td class="titre">
         Nom <span class="smaller">(à l'X)</span>
       </td>
       <td>
index d781942..960b8ef 100644 (file)
@@ -32,7 +32,7 @@
   Tu n'as pour le moment aucun homonyme dans notre base de données. Nous allons
   donc te donner l'adresse <strong>{$smarty.session.subState.bestalias}@{#globals.mail.domain#}</strong>,
   en plus de ton adresse à vie <strong>{$smarty.session.subState.forlife}@{#globals.mail.domain#}</strong>.
-  Note que tu pourrais perdre l'adresse <strong>{$smarty.session.subState.bestalias}@{#globals.mail.domain#}</strong> 
+  Note que tu pourrais perdre l'adresse <strong>{$smarty.session.subState.bestalias}@{#globals.mail.domain#}</strong>
   si un homonyme s'inscrivait, même si cela reste assez rare.
   </p>
   {else}
   de ton adresse à vie <strong>{$smarty.session.subState.forlife}@{#globals.mail.domain#}</strong>.
   </p>
   {/if}
-  
+
   <p>
   Ces adresses sont des redirections vers une ou plusieurs adresses email de ton choix.
   Indiques-en une pour terminer ton inscription. Tu pourras la modifier ou ajouter d'autres
   adresses une fois inscrit.
   </p>
   <p>
-  Attention, cette adresse doit <strong>impérativement être valide</strong> pour que nous puissions 
+  Attention, cette adresse doit <strong>impérativement être valide</strong> pour que nous puissions
   t'envoyer tes informations de connexion.
   </p>
 
         <span class="smaller">au moins 6 caractères</span>
       </td>
       <td>
-        <input type="hidden" name="response2" />
-        <input type="password" size="10" maxlength="256" name="password" /><br/>
+        <input type="hidden" name="pwhash" />
+        <input type="password" size="10" maxlength="256" name="password1" /><br/>
         <input type="password" size="10" maxlength="256" name="password2" /> (retape ton mot de passe)<br />
-        {checkpasswd prompt="password" text="Terminer la pré-inscription"}
+        {checkpasswd prompt="password1" text="Terminer la pré-inscription"}
       </td>
     </tr>
   </table>
     </tr>
     <tr class="impair">
       <td class="center">
-        <input type="submit" name="submitn" value="Continuer" onclick="EncryptedResponseInNestedForm(); return false;" />
+        <input type="submit" name="submitn" value="Continuer" onclick="return hashResponse('password1', 'password2', true);" />
       </td>
     </tr>
   </table>
 </form>
-<form action="register" id="changepass">
-  <div>
-    <input type="hidden" name="nouveau" />
-    <input type="hidden" name="nouveau2" />
-  </div>
-</form>
 {/if}
 
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index 478c428..3809b4d 100644 (file)
 
 <h1>Recherche dans l'annuaire</h1>
 
+{javascript name=jquery.form}
+
 <script type="text/javascript">// <!--
   var baseurl = platal_baseurl + "search/";
   {literal}
+  String.prototype.htmlEntities = function () {
+    return this.replace(/&/g,'&amp;').replace(new RegExp('<','g'),'&lt;').replace(/>/g,'&gt;');
+  };
   // display an autocomplete row : blabla (nb of found matches)
   function make_format_autocomplete(block) {
     return function(row) {
         regexp = new RegExp('(' + RegExp.escape(block.value) + ')', 'i');
 
-        name = row[0].replace(regexp, '<strong>$1<\/strong>');
+        name = row[0].htmlEntities().replace(regexp, '<strong>$1<\/strong>');
 
         if (row[1] === "-1") {
           return '&hellip;';
         }
 
+        if (row[1] === "-2") {
+          return '<em>aucun camarade trouvé pour '+row[0].htmlEntities()+'<\/em>';
+        }
+
         camarades = (row[1] > 1) ? "camarades" : "camarade";
 
-        return name + '<em>&nbsp;&nbsp;-&nbsp;&nbsp;' + row[1] + '&nbsp;' + camarades + '<\/em>';
+        return name + '<em>&nbsp;&nbsp;-&nbsp;&nbsp;' + row[1].htmlEntities() + '&nbsp;' + camarades + '<\/em>';
       };
   }
 
       });
   }
 
+  // when choosing a job term in tree, hide tree and set job term field
+  function searchForJobTerm(treeid, jtid, full_name) {
+    $(".term_tree").remove();
+    $("input[name='jobtermTxt']").val(full_name).addClass("hidden_valid").show();
+    $("input[name='jobterm']").val(jtid);
+  }
+
+  function cancel_autocomplete(field, realfield) {
+    $(".autocomplete[name='"+field+"']").removeClass('hidden_valid').val('').focus();
+    if (typeof(realfield) != "undefined") {
+      $(".autocompleteTarget[name='"+realfield+"']").val('');
+    }
+    return;
+  }
+
   // when choosing autocomplete from list, must validate
   function select_autocomplete(name) {
       nameRealField = name.replace(/Txt$/, '');
       // if changing country, might want to open region choice
       if (nameRealField == 'country')
         return function(i) {
+            if (i.extra[0] < 0) {
+              cancel_autocomplete('countryTxt', 'country');
+              i.extra[1] = '';
+            }
             changeCountry(i.extra[1]);
           }
 
       if (nameRealField == 'school')
         return function(i) {
+            if (i.extra[0] < 0) {
+              cancel_autocomplete('schoolTxt', 'school');
+              i.extra[1] = '';
+            }
             changeSchool(i.extra[1]);
           }
 
       return function(i) {
         nameRealField = this.field.replace(/Txt$/, '');
 
+        if (i.extra[0] < 0) {
+          cancel_autocomplete(this.field, nameRealField);
+          return;
+        }
+
         $(".autocompleteTarget[name='"+nameRealField+"']").attr('value',i.extra[1]);
 
         $(".autocomplete[name='"+this.field+"']").addClass('hidden_valid');
           $(this).parent().find('.autocompleteTarget').val('');
         });
     });
+/** Regexps to wipe out from search queries */
+var default_form_values = [ /&woman=0(&|$)/, /&subscriber=0(&|$)/, /&alive=0(&|$)/, /&egal[12]=[^&]*&promo[12]=(&|$)/g, /&[^&=]+=(&|$)/g ];
+/** Uses javascript to clean form from all empty fields */
+function cleanForm(f) {
+  var query = $(f).formSerialize();
+  var old_query;
+  for each (var reg in default_form_values) if (typeof(reg) != "undefined") {
+    do {
+      old_query = query;
+      query = query.replace(reg, '$1');
+    } while (old_query != query);
+  }
+  query = query.replace(/^&*(.*)&*$/, '$1');
+  if (query == "rechercher=Chercher") {
+    alert("Aucun critère n'a été spécifié");
+    return false;
+  }
+  document.location = f.action + '?' + query;
+  return false;
+}
 -->
 {/literal}</script>
 <p class="center">[<a href="search">Revenir à la recherche simple</a>]</p>
-<form id="recherche" action="search/adv" method="get">
+<form id="recherche" action="search/adv" method="get" onsubmit="return cleanForm(this)">
   <table class="bicol" cellpadding="3" summary="Recherche">
     <tr>
       <th colspan="2">
     </tr>
     <tr>
       <td colspan="2">
-      <label for="only_current"><input name="only_current" id="only_current" type="checkbox"{if $smarty.request.only_current}  
-checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont actuellement.</label></td>
+        <label for="only_current">
+          <input name="only_current" id="only_current" type="checkbox"{if $smarty.request.only_current} checked="checked"{/if}/>
+          Chercher uniquement les adresses où les camarades sont actuellement.
+        </label>
+      </td>
     </tr>
     <tr>
       <th colspan="2">Activité</th>
@@ -302,12 +362,12 @@ checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont
       <td><input type="text" class="autocomplete" name="description" size="32" value="{$smarty.request.description}" /></td>
     </tr>
     <tr>
-      <td>Secteur</td>
+      <td>Mots-clefs</td>
       <td>
-        <input name="secteurTxt" type="text" class="autocomplete" style="display:none" size="32"
-               value="{$smarty.request.secteurTxt}"/>
-        <input name="secteur" class="autocompleteTarget" type="hidden" value="{$smarty.request.secteur}"/>
-        <a href="secteur" class="autocompleteToSelect">{icon name="table" title="Tous les secteurs"}</a>
+        <input name="jobtermTxt" type="text" class="autocomplete{if $smarty.request.jobterm} hidden_valid{/if}" style="display:none" size="32"
+               value="{$smarty.request.jobtermTxt}"/>
+        <input name="jobterm" class="autocompleteTarget" type="hidden" value="{$smarty.request.jobterm}"/>
+        <a href="jobterm" class="autocompleteToSelect">{icon name="table" title="Tous les mots-clefs"}</a>
       </td>
     </tr>
     <tr>
index ee1045a..381d450 100644 (file)
 <ul class="noprint">
   {if $with_soundex && ($smarty.request.firstname || $smarty.request.name)}
   <li>Étendre ta recherche par <strong>
-    <a  href="search/adv{$plset_search}with_soundex=1">proximité sonore</a>
+    <a  href="search/adv{$plset_args}with_soundex=1">proximité sonore</a>
   </strong>
   </li>
   {/if}
 
-  <li><strong><a href="search/adv{$plset_search|regex_replace:"/rechercher=[^&]*/":""}">Modifier</a>
+  <li><strong><a href="search/adv{$plset_args|regex_replace:"/rechercher=[^&]*/":""}">Modifier</a>
   </strong> ta recherche
   </li>
 
     <a href="search/adv">recherche avancée</a>
   </strong>
   </li>
-  
+
   <li>Effectuer une nouvelle <strong>
     <a href="search">recherche simple</a>
   </strong>
   </li>
 </ul>
-  
+
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index cc3de24..8cdeac7 100644 (file)
@@ -47,7 +47,7 @@ Parfois on ne sait plus si le nom qu'on recherche s'écrit «&nbsp;Lenormand&nbs
 </p>
 <p>
 Pour éviter ce genre d'écueils, il suffit de chercher&nbsp;: <code>Le Normand</code><br />
-En effet, le moteur de recherche va alors chercher tous les utilisateurs dont le nom 
+En effet, le moteur de recherche va alors chercher tous les utilisateurs dont le nom
 contient 'Le' <strong>et</strong> 'Normand' sans distinction de casse et sans tenir compte des accents.
 </p>
 <p>
diff --git a/templates/search/referent.tpl b/templates/search/referent.tpl
new file mode 100644 (file)
index 0000000..ab57b71
--- /dev/null
@@ -0,0 +1,166 @@
+{**************************************************************************}
+{*                                                                        *}
+{*  Copyright (C) 2003-2010 Polytechnique.org                             *}
+{*  http://opensource.polytechnique.org/                                  *}
+{*                                                                        *}
+{*  This program is free software; you can redistribute it and/or modify  *}
+{*  it under the terms of the GNU General Public License as published by  *}
+{*  the Free Software Foundation; either version 2 of the License, or     *}
+{*  (at your option) any later version.                                   *}
+{*                                                                        *}
+{*  This program is distributed in the hope that it will be useful,       *}
+{*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *}
+{*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *}
+{*  GNU General Public License for more details.                          *}
+{*                                                                        *}
+{*  You should have received a copy of the GNU General Public License     *}
+{*  along with this program; if not, write to the Free Software           *}
+{*  Foundation, Inc.,                                                     *}
+{*  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA               *}
+{*                                                                        *}
+{**************************************************************************}
+
+
+{if $plset_count}
+{include core=plset.tpl}
+{else}
+{include wiki=Docs.Emploi}
+{/if}
+
+<a id="mentors"></a>
+
+<p>
+Actuellement, {$mentors_number} mentors et référents se sont déclarés sur {#globals.core.sitename#}.
+</p>
+
+{javascript name=ajax}
+{javascript name=jquery.jstree}
+{javascript name=jobtermstree}
+<script type="text/javascript">//<![CDATA[
+
+var baseurl = platal_baseurl + "referent/";
+{literal}
+var Ajax2 = new AjaxEngine();
+
+/** Hides or display tree of all job terms */
+function toggleJobTermsTree()
+{
+  $('#mentoring_terms').closest('tr').toggle();
+  return false;
+}
+
+/** Function called by autocomplete when a term is selected */
+function selectJobTerm(li)
+{
+    if (li.extra[1] < 0) {
+        return;
+    }
+    chooseJobTermInTree(null,li.extra[1],li.selectValue);
+}
+
+/** Prepares display for a jobterm in select's dropdown
+ * @param row the returned row from ajax : text, nb, id
+ */
+function displayJobTerm(row)
+{
+  if (row[1] < 0) {
+    return '<em>... précise ta recherche ... <\/em>';
+  }
+  return row[0]+' ('+row[1]+' camarade'+((row[1] > 1)?'s':'')+')';
+}
+
+/** Function called by job terms tree when an item is clicked */
+function chooseJobTermInTree(treeid, jtid, full_name)
+{
+  $('#jobtermText').val(full_name);
+  $('#mentoring_terms').closest('tr').hide();
+  updateJobTerm(jtid, $('#country_chg select').val());
+}
+
+/** Changes job term and proposes the different countries linked */
+function updateJobTerm(jtid, country)
+{
+  $('#jobterm').val(jtid);
+  $('#country_chg').closest('tr').show();
+  $('#keywords').show();
+  $('#country_chg').load(platal_baseurl + 'search/referent/countries/' + jtid, function(response, status, xhr) {
+    if (country) {
+      if (status != "error") {
+        $('#country_chg select').val(country);
+      }
+    }
+  });
+}
+
+/** Function called when validating form */
+function validateSearchForm(f)
+{
+  if (!f.jobterm.value) {
+    alert('Il faut choisir un mot clef avant de lancer la recherche.');
+    $('#jobtermText').val('').focus();
+    return false;
+  }
+  return true;
+}
+
+{/literal}
+//]]></script>
+
+<form action="{$smarty.server.REQUEST_URI}" method="get" onsubmit="return validateSearchForm(this)">
+  <table cellpadding="0" cellspacing="0" summary="Formulaire de recherche de référents" class="bicol">
+    <tr class="impair">
+      <td class="titre">
+        Mot-clef&nbsp;:
+      </td>
+      <td>
+        <input type="text" name="jobtermText" id="jobtermText" size="32" value="{$smarty.request.jobtermText}"/>
+        <input type="hidden" name="jobterm" id="jobterm" value="{$smarty.request.jobterm}"/>
+        <a id="jobTermsTreeToggle" href="#">{icon name=table title="Tous les mots-clefs"}</a>
+      </td>
+    </tr>
+    <tr class="impair" style="display:none">
+      <td colspan="2">
+        <div id="mentoring_terms"></div>
+      </td>
+    </tr>
+    <tr class="pair" style="display:none">
+      <td class="titre">
+        Pays bien connus du référent&nbsp;:
+      </td>
+      <td id="country_chg">
+      </td>
+    </tr>
+    <tr class="impair" style="display:none" id="keywords">
+      <td class="titre">
+        Expertise (recherche texte)&nbsp;:
+      </td>
+      <td>
+        <input type="text" value="{$smarty.request.expertise}" size="30" name="expertise" />
+      </td>
+    </tr>
+  </table>
+  <div class="center" style="margin-top: 1em;">
+    <input id="search_referent" type="submit" value="Chercher" />
+  </div>
+</form>
+
+<script type="text/javascript">
+{literal}
+$(function() {
+  createJobTermsTree('#mentoring_terms', 'profile/ajax/tree/jobterms/mentors', 'mentor', 'chooseJobTermInTree');
+  $("#jobtermText").autocomplete(baseurl + "autocomplete",
+  {
+    "selectOnly":1,
+    "width":$("#jobtermText").width()*2,
+    "onItemSelect" : selectJobTerm,
+    "formatItem" : displayJobTerm,
+    "matchSubset" : false
+  });
+  $('#jobTermsTreeToggle').click(toggleJobTermsTree);
+{/literal}
+  {if $smarty.request.jobterm}
+  updateJobTerm("{$smarty.request.jobterm}", "{$smarty.request.country}");
+  {/if}
+{rdelim});
+</script>
+{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index 25275c7..f36feab 100644 (file)
@@ -27,7 +27,7 @@
   http://www.polytechnique.org/bandeau.css.
   Pour avoir l'icone, pour des raisons de sécurité il n'y a pas d'accès
   direct, il faut alors rediriger bandeau/icone.png vers celle du site&nbsp;:
-  http://www.polytechnique.org/bandeau/icone.png 
+  http://www.polytechnique.org/bandeau/icone.png
 -->
 
 <!-- Don't copy this list of emails!!!
index 2ab77f8..5bb7c46 100644 (file)
 {/if}
 
 <div class="menu_title">Personnaliser</div>
+{if $smarty.session.user->checkPerms('mail')}
 <div class="menu_item"><a href="emails">Mes emails</a></div>
+{/if}
+{if $smarty.session.user->hasProfile()}
 <div class="menu_item"><a href="profile/edit">Mon profil</a></div>
+{/if}
+{if $smarty.session.user->checkPerms('directory_private')}
 <div class="menu_item"><a href="carnet/contacts">Mes contacts</a></div>
 <div class="menu_item"><a href="carnet">Mon carnet</a></div>
+{/if}
 <div class="menu_item"><a href="password">Mon mot de passe</a></div>
 <div class="menu_item"><a href="prefs">Mes préférences</a></div>
 
 <div class="menu_title">Services</div>
+{if $smarty.session.user->checkPerms('mail')}
 <div class="menu_item"><a href="emails/send">Envoyer un email</a></div>
+{/if}
+{if $smarty.session.user->checkPerms('forums')}
 <div class="menu_item"><a href="banana/">Forums &amp; PA</a></div>
-{if $smarty.session.googleapps}
+{/if}
+{if $smarty.session.user->googleapps}
 <div class="menu_item"><a href="http://gmail.polytechnique.org/">Emails Google Apps</a></div>
 {/if}
+{if $smarty.session.user->checkPerms('lists')}
 <div class="menu_item"><a href="lists">Listes de diffusion</a></div>
+{/if}
+{if $smarty.session.user->checkPerms('payment')}
 <div class="menu_item"><a href="payment">Télépaiements</a></div>
+{/if}
 <div class="menu_item"><a href="emails/antispam/submit">Soumettre un spam</a></div>
 <div class="menu_item"><a href="emails/broken">Patte cassée</a></div>
 
 <div class="menu_title">Communauté X</div>
 <div class="menu_item"><a href="search">Annuaire</a></div>
+{if $smarty.session.user->checkPerms('directory_private')}
 <div class="menu_item"><a href="jobs">Emploi &amp; Carrières</a></div>
+{/if}
+{if $smarty.session.user->checkPerms('groups')}
 <div class="menu_item"><a href="groupes-x">Mes groupes X</a></div>
+{/if}
 <div class="menu_item"><a href="survey">Sondages</a></div>
 
 <div class="menu_title">Informations</div>
index 184f8f8..64e6bfd 100644 (file)
               </td>
               <td class="inscrits">
                 {$globals->core->NbIns|number_format} polytechniciens sur le web
+                {if t($smarty.request.quick)}
+                  {assign var=requestQuick value=$smarty.request.quick}
+                {else}
+                  {assign var=requestQuick value="Recherche dans l'annuaire"}
+                {/if}
                 <form action="search" method="get">
                     <div>
-                        <input type="text" size="20" name="quick" id="quick" class="quick_search"
-                               value="{$smarty.request.quick|default:'Recherche dans l\'annuaire'}"
-                               onfocus="if (this.value === 'Recherche dans l\'annuaire') this.value='';
-                                        $('#quick_button').show()"
-                               onblur="if (this.value === '') this.value='{$smarty.request.quick|default:'Recherche dans l\'annuaire'|escape:javascript}'"
-                               />
                         <button id="quick_button" type="submit" style="display: none"
                                 onclick="if ($('#quick').val() === 'Recherche dans l\'annuaire') $('#quick').val('')">
                           OK
                         </button>
+                        <input type="text" size="20" name="quick" id="quick" class="quick_search"
+                               value="{$requestQuick}"
+                               onfocus="if (this.value === 'Recherche dans l\'annuaire') this.value='';
+                                        $('#quick_button').show()"
+                               onblur="if (this.value === '') this.value='{$requestQuick|escape:javascript}'"
+                               />
                     </div>
                 </form>
                 {if $smarty.session.auth gt AUTH_PUBLIC && $smarty.session.notifs}
index c929dc1..66e41e2 100644 (file)
@@ -30,7 +30,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index fd314ef..ce82b94 100644 (file)
@@ -31,7 +31,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index a1e2280..8857323 100644 (file)
@@ -31,7 +31,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index 773b903..dd63773 100644 (file)
@@ -30,7 +30,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index e983733..fe108ed 100644 (file)
@@ -31,7 +31,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index b61e0cd..35c62dc 100644 (file)
@@ -31,7 +31,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index 568b79c..41f517c 100644 (file)
@@ -31,7 +31,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index 017c769..a262554 100644 (file)
@@ -31,7 +31,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index 1a1cb5c..d34754d 100644 (file)
@@ -29,7 +29,7 @@
   <body>
     {include core=plpage.devel.tpl}
 
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <table id="suid" cellpadding="0" cellspacing="0">
       <tr>
         <td>
index 78d358e..3953c99 100644 (file)
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid} 
-    <div id="suid"> 
-      <a href="exit"> 
-        Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()}) 
-      </a> 
-    </div> 
-    {/if} 
+    {if t($smarty.session.suid)}
+    <div id="suid">
+      <a href="exit">
+        Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
+      </a>
+    </div>
+    {/if}
 
   {if $simple}
 
index b06dbc8..58562a8 100644 (file)
@@ -30,7 +30,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index c3e897e..637090b 100644 (file)
@@ -35,7 +35,7 @@
     {else}
 
     {include file=skin/common.bandeau.tpl}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index 1dad2ae..24c785b 100644 (file)
@@ -31,7 +31,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index 7ea2fa1..9fc4419 100644 (file)
@@ -31,7 +31,7 @@
     {if !$simple}
       {include file=skin/common.bandeau.tpl}
     {/if}
-    {if $smarty.session.suid}
+    {if t($smarty.session.suid)}
     <div id="suid">
       <a href="exit">
         Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
index e349535..6de1aae 100644 (file)
@@ -60,7 +60,7 @@
 <p>
   Tu trouveras ici les interruptions de service de Polytechnique.org qui ont été
   constatées <strong>durant les trois dernières semaines</strong>, ou qui sont prévues dans le futur.
-  Il est à noter qu'à ce jour la quasi-totalité des coupures proviennent 
+  Il est à noter qu'à ce jour la quasi-totalité des coupures proviennent
   de défaillances du réseau de l'École, où nos serveurs sont hébergés (rupture de la
   connexion internet de l'École, problème électrique&hellip;).
 </p>
index cc63cdd..11e0858 100644 (file)
@@ -36,7 +36,7 @@
         </a>
       </td>
     </tr>
-    <script type="text/javascript">//<![CDATA[ 
+    <script type="text/javascript">//<![CDATA[
       var id = new Array();
       id['choices'] = {$survey_current.choices|@count};
       id['subquestions'] = {$survey_current.subquestions|@count};
       function newField(name, tid)
       {
         fid = "t" + id[name];
-        $("#" + name + "_" + tid).before('<div id="' + name + '_' + fid + '">' 
+        $("#" + name + "_" + tid).before('<div id="' + name + '_' + fid + '">'
             + '<input id="' + name + '_' + fid + '_field" type="text" name="survey_question[' + name + '][' + fid + ']" size="50" maxlength="200" value="" />&nbsp;'
             + '<a href="javascript:removeField(&quot;' + name + '&quot;,&quot;' + fid + '&quot;)"><img src="images/icons/delete.gif" alt="" title="Supprimer" /></a>'
-            + '</div>'); 
-        id[name]++; 
+            + '</div>');
+        id[name]++;
         $("#" + name + "_" + fid + "_field").focus();
       }
       function removeField(name, tid)
       {
         $("#" + name + "_" + tid).remove();
       }
-      {/literal} 
-    //]]></script> 
+      {/literal}
+    //]]></script>
 
 {* vim:set et sw=2 sts=2 ts=8 enc=utf-8: *}
index b57f4ae..3bc93cf 100644 (file)
       {literal}
       $(document).ready(function() {
         function hidePromo(value) {
-          if (value == "0" || value == "") { 
-            $("#ln_promo").hide(); 
+          if (value == "0" || value == "") {
+            $("#ln_promo").hide();
             $("#ln_promo_exp").hide();
-          } else { 
+          } else {
             $("#ln_promo").show();
             $("#ln_promo_exp").show();
-          } 
+          }
         }
         $("[name='survey_question[mode]']").change(function() { hidePromo(this.value); });
         hidePromo({/literal}"{$survey_current.mode}"{literal});
index 29aa292..9a97536 100644 (file)
@@ -22,6 +22,8 @@
 
 <h1>Sondages</h1>
 
+{* Survey::MODE_ALL equals 0. *}
+{assign var=SurveyMODE_ALL value=0}
 <table class="bicol">
   <tr>
     <th>
@@ -29,7 +31,7 @@
     </th>
   </tr>
   {iterate item=s from=$survey_current}
-  {if $smarty.session.auth || $s.mode == Survey::MODE_ALL}
+  {if $smarty.session.auth || $s.mode == $SurveyMODE_ALL}
   <tr class="{cycle name=cs_cycle values="impair,pair"}">
     <td class="half">
       &bull;
@@ -58,7 +60,7 @@
     </th>
   </tr>
   {iterate item=s from=$survey_old}
-    {if $smarty.session.auth || $s.mode == Survey::MODE_ALL}
+    {if $smarty.session.auth || $s.mode == $SurveyMODE_ALL}
   <tr class="{cycle name=os_cycle values="impair,pair"}">
     <td class="half">
       &bull;
index 0b18177..7ce6cf6 100644 (file)
       <tr>
         <td class="titre">Promotions&nbsp;:</td>
         <td>
-          {if $survey.promos eq "#"} 
+          {if $survey.promos eq "#"}
           <span class="erreur">erreur</span>
-          {elseif $survey.promos eq ""} 
-          aucune restriction 
-          {else} 
-          {$survey.promos} 
+          {elseif $survey.promos eq ""}
+          aucune restriction
+          {else}
+          {$survey.promos}
           {/if}
         </td>
       </tr>
index 9c6ffaf..a75ad85 100644 (file)
@@ -30,7 +30,7 @@
       <div class="cat {if $cat eq institutions}sel{/if}"><a href="groups/institutions">Institutions</a></div>
       <div class="cat {if $cat eq promotions}sel{/if}"><a href="groups/promotions">Promotions</a></div>
     </td>
-    
+
     {if $doms}
     <td style="vertical-align: top">
       {foreach from=$doms item=g}
index 00b8fa8..b8a29af 100644 (file)
               {/if}
             {/foreach}
           {/foreach}
-          {assign var=asso_id value=$asso->id}
+          {if t($asso)}{assign var=asso_id value=$asso->id}{/if}
+          {if t($smarty.session.suid)}{assign var=suid value=true}{else}{assign var=suid value=false}{/if}
           {if $asso && $is_admin ||
-                      ($smarty.session.suid && ($smarty.session.suid.perms->hasFlag('admin') ||
+                      ($suid && ($smarty.session.suid.perms->hasFlag('admin') ||
                                                 $smarty.session.suid.may_update[$asso_id]))}
           <h1>Voir le site comme&hellip;</h1>
           <form method="post" action="{$platal->ns}change_rights">
             <div>
               <select name="right" onchange="this.form.submit()" style="margin: 0; padding: 0">
-                {if hasPerm('admin') || ($smarty.session.suid && $smarty.session.suid.perms->hasFlag('admin'))}
+                {if hasPerm('admin') || ($suid && $smarty.session.suid.perms->hasFlag('admin'))}
                 <option value="admin" {if hasPerm('admin')}selected="selected"{/if}>Administrateur</option>
                 {/if}
                 <option value="anim" {if $is_admin && !hasPerm('admin')}selected="selected"{/if}>Animateur</option>
index d6f1690..d466b20 100644 (file)
@@ -26,7 +26,7 @@
   {if $evt.titre || count($moments) eq 1}
   {$evt.nb_tot} personne{if $evt.nb_tot > 1}s ont réalisé leur {else} a réalisé son {/if}
   {else}
-  {$evt.nb} personne{if $evt.nb > 1}s ont réalisé leur{else} a réalisé son {/if}
+  {$evt.nb} personne{if $evt.nb > 1}s ont réalisé leur {else} a réalisé son {/if}
   {/if}
   inscription à l'événement {$evt.intitule} {if $evt.titre}- {$evt.titre} {/if}
   qui aura lieu {$evt.date}.
index 759323f..6816e40 100644 (file)
@@ -249,9 +249,9 @@ Ton inscription à [METS LE NOM DE L'ÉVÉNEMENT ICI] a bien été enregistrée
     </tr>
   {/foreach}
   </table>
+
   <div class="center">
-    {if $evt.eid}<input type="hidden" name="organisateur_uid" value="{$evt.organisateur_uid}" />{/if}
+    {if $evt.eid}<input type="hidden" name="uid" value="{$evt.uid}" />{/if}
     <input type="submit" name="valid" value="Valider" />
     &nbsp;
     <input type="reset" value="Annuler" />
index 16f6c84..9447847 100644 (file)
@@ -24,7 +24,7 @@
 <h1>{$asso->nom}&nbsp;: Événements</h1>
 {else}
 <h1>
-  {$asso->nom}&nbsp;: 
+  {$asso->nom}&nbsp;:
   {if $archive}[<a href="{$platal->ns}events">Événements</a>] {else}Événements {/if}
   {if $archive}Archives {else}[<a href="{$platal->ns}events/archive">Archives</a>] {/if}
 </h1>
@@ -97,7 +97,7 @@
 
   <tr>
     <td class="titre">Annonceur&nbsp;:</td>
-    <td>{profile user=$e.organisateur_uid promo=true groupperms=false}</td>
+    <td>{profile user=$e.uid promo=true groupperms=false}</td>
   </tr>
 
   {if $is_admin || $e.show_participants || ($e.deadline_inscription && $e.inscr_open)}
index db519ae..3f74368 100644 (file)
 </p>
 
 <p class='descr'>
+  {assign var=profile value=$event.organizer->profile()}
   Cet événement a lieu <strong>{$event.date}</strong> et a été proposé par
-  <a href='https://www.polytechnique.org/profile/{$event.alias}' class='popup2'>
-    {$event.prenom} {$event.nom} ({$event.promo}).
-  </a>
+  <a href='https://www.polytechnique.org/profile/{$profile->hrpid}' class='popup2'>
+    {$event.organizer->fullName('promo')}
+  </a>.
 </p>
 
 <p class='descr'>
@@ -39,7 +40,7 @@
 
 {if $admin || $event.show_participants}
 <p class='descr'>
-  Tu peux 
+  Tu peux
   <a href="{$platal->ns}events/admin/{$event.eid}">
     consulter la liste des participants
     {icon name=group title="Liste des participants"}</a>
@@ -98,7 +99,7 @@
           {elseif $event.paid < $event.topay}
           Tu dois encore payer {math equation="a-b" a=$event.topay b=$event.paid|replace:'.':','}&nbsp;&euro;
           (tu as déjà payé {$event.paid|replace:'.':','}&nbsp;&euro;).
-          {else} 
+          {else}
           Tu as déjà payé {$event.paid|replace:'.':','}&nbsp;&euro; pour ton inscription.
           {/if}
         </div>
index 92ecf00..b387273 100644 (file)
@@ -26,6 +26,7 @@ function visibilityChange(box)
 {
     var state = (box.checked ? 'none' : '');
     document.getElementById('promo_titre').style.display = state;
+    document.getElementById('promo_explanation').style.display = state;
     document.getElementById('promo_min_tr').style.display = state;
     document.getElementById('promo_max_tr').style.display = state;
     document.getElementById('promo_range_tr').style.display = state;
@@ -163,7 +164,10 @@ function visibilityChange(box)
       </td>
     </tr>
     <tr id="promo_titre" {if $art.public}style="display: none"{/if}>
-      <th colspan="2">Promotions cibles</th>
+      <th colspan="2">Promotions d'entrée cibles</th>
+    </tr>
+    <tr id="promo_explanation" {if $art.public}style="display: none"{/if}>
+      <td colspan="2"><span class="smaller">{icon name=information} par exemple 2004 pour les X2004</span></td>
     </tr>
     {include file="include/field.promo.tpl" promo_min=$art.promo_min promo_max=$art.promo_max}
     {if $art.public}
index 08ae87f..a190767 100644 (file)
@@ -30,14 +30,14 @@ Le groupe {$asso->nom} compte {$nb_tot} membres&nbsp;:
   {if $is_admin}
   <li>
     <a href="{$platal->ns}member/new">
-      {icon name=add title="Ajouter un membre"} 
+      {icon name=add title="Ajouter un membre"}
       Ajouter un membre
     </a>
   </li>
   {if $asso->has_ml}
   <li>
     <a href="{$platal->ns}admin/annuaire">
-      {icon name=wand title="Synchroniser"} 
+      {icon name=wand title="Synchroniser"}
       Synchroniser annuaire et listes de diffusion
     </a>
   </li>
@@ -45,13 +45,13 @@ Le groupe {$asso->nom} compte {$nb_tot} membres&nbsp;:
   {/if}
   <li>
     <a href="{$platal->ns}annuaire/csv/{$asso->diminutif}.csv">
-      {icon name=page_excel title="Fichier Excel"} 
+      {icon name=page_excel title="Fichier Excel"}
       Obtenir au format Excel
     </a>
   </li>
   <li>
     <a href="{$platal->ns}annuaire/vcard/photos/{$asso->diminutif}.vcf">
-      {icon name=vcard title="Carte de visite"} 
+      {icon name=vcard title="Carte de visite"}
       Ajouter les membres à ton carnet d'adresse
     </a>
     (<a href="{$platal->ns}annuaire/vcard/{$asso->diminutif}.vcf">sans les photos</a>)
@@ -102,9 +102,11 @@ Le groupe {$asso->nom} compte {$nb_tot} membres&nbsp;:
     <th>Actions</th>
     {/if}
   </tr>
+  {assign var=lostUsers value=false}
   {foreach from=$users item=user}
   <tr>
     <td>
+      {if $user->lost}{assign var=lostUsers value=true}{/if}
       {profile user=$user promo=false}
     </td>
     <td>
@@ -149,7 +151,7 @@ Le groupe {$asso->nom} compte {$nb_tot} membres&nbsp;:
 </p>
 {/if}
 
-{if $broken}
+{if $lostUsers}
 <p class="smaller">
   {icon name=error}&nbsp;Un camarade signalé par ce symbole n'a plus d'adresse de redirection et ne peut donc
   plus être contacté via son adresse polytechnique.org. Si tu connais sa nouvelle adresse, tu peux nous la communiquer en
index 35e08c6..0119ece 100644 (file)
 <table class="tinybicol">
   <tr>
     <th>
-      {if $smarty.session.token}
-      <a href='{$platal->ns}rss/{$smarty.session.hruid}/{$smarty.session.token}/rss.xml' style="display:block;float:right">
+      {if $smarty.session.user->token}
+      <a href='{$platal->ns}rss/{$smarty.session.hruid}/{$smarty.session.user->token}/rss.xml' style="display:block;float:right">
         {icon name=feed title='fil rss'}
       </a>
       {else}
   </tr>
   {iterate item=art from=$article_index}
   <tr>
-    <td>&bull; 
+    <td>&bull;
     {if $art.nonlu}
       <a href="{$platal->ns}#art{$art.id}"><strong>
     {else}
index 0308240..ffd10e6 100644 (file)
       </td>
       <td>
         <select name="cat">
-          <option value="groupesx" {if $asso->cat eq GroupesX}selected="selected"{/if}>Groupes X</option>
-          <option value="binets" {if $asso->cat eq Binets}selected="selected"{/if}>Binets</option>
-          <option value="promotions" {if $asso->cat eq Promotions}selected="selected"{/if}>Promotions</option>
-          <option value="institutions" {if $asso->cat eq Institutions}selected="selected"{/if}>Institutions</option>
+          <option value="groupesx" {if $asso->cat eq 'GroupesX'}selected="selected"{/if}>Groupes X</option>
+          <option value="binets" {if $asso->cat eq 'Binets'}selected="selected"{/if}>Binets</option>
+          <option value="promotions" {if $asso->cat eq 'Promotions'}selected="selected"{/if}>Promotions</option>
+          <option value="institutions" {if $asso->cat eq 'Institutions'}selected="selected"{/if}>Institutions</option>
         </select>
       </td>
     </tr>
index 1a5eccc..acab579 100644 (file)
@@ -39,7 +39,7 @@
   <tr>
     {if $art.photo}
     <td rowspan="{if ($is_logged || $admin) && $art.contacts}3{else}2{/if}" style="width: 100px">
-      <img src="{$platal->ns}announce/photo/{$art.id}" alt="{$art.titre}" style="width: 100px" /> 
+      <img src="{$platal->ns}announce/photo/{$art.id}" alt="{$art.titre}" style="width: 100px" />
     </td>
     {/if}
     <td style="padding-bottom: 1em">
index f20f07e..3553465 100644 (file)
@@ -60,7 +60,7 @@
 {elseif $smarty.post.inscrire}
 
 <p class="descr">
-<strong>Ta demande d'inscription a bien été envoyée&nbsp;!</strong> Tu seras averti{if $smarty.session.femme}e{/if} par email de la suite qui lui sera donnée.
+<strong>Ta demande d'inscription a bien été envoyée&nbsp;!</strong> Tu seras averti{if $smarty.session.user->gender}e{/if} par email de la suite qui lui sera donnée.
 <p>
 <p class="descr">[<a href="{$platal->ns}">Retour à la page d'accueil de {$asso->nom}</a>]</p>
 
index b5f5d1b..019f3fa 100644 (file)
@@ -49,7 +49,7 @@ masculin ou féminin, par son prénom, ou son nom.
   }
   {/literal}
 //]]></script>
+
 <form action="{$platal->ns}mail" method="post" enctype="multipart/form-data" onsubmit="return check(this);">
   {xsrf_token_field}
   <table class='bicol'>
@@ -83,7 +83,7 @@ masculin ou féminin, par son prénom, ou son nom.
         <label><input type="checkbox" name="membres[ext]" value="1"  {if $smarty.request.membres.ext}checked="checked"{/if} />
         <em>écrire à tous les extérieurs de l'annuaire du groupe</em></label><br />
         <label><input type="checkbox" name="membres[groupe]" value="1"  {if $smarty.request.membres.groupe}checked="checked"{/if} />
-        <em>écrire à toutes les personnes morales de l'annuaire du groupe</label></em>
+        <em>écrire à toutes les personnes morales de l'annuaire du groupe</em></label>
         <a href="{$platal->ns}annuaire" class='popup'>(voir annuaire)</a><br />
       </td>
     </tr>
@@ -108,19 +108,19 @@ masculin ou féminin, par son prénom, ou son nom.
       <td class="titre">
         Sujet&nbsp;:
       </td>
-      <td><input type="text" name="sujet" value="{$smarty.request.sujet}" size=55 maxlength=70></td>
+      <td><input type="text" name="sujet" value="{$smarty.request.sujet}" size="55" maxlength="70" /></td>
     </tr>
     <tr>
       <td colspan="2" class="smaller">
-        <input type="checkbox" name="wiki" value="1" checked="1" onchange="updateWikiView(this);" id="wiki_syntaxe"/>
+        <input type="checkbox" name="wiki" value="1" checked="checked" onchange="updateWikiView(this);" id="wiki_syntaxe"/>
         <label for="wiki_syntaxe">activer </label><a href="wiki_help" class="popup3">la syntaxe wiki</a>
         <label for="wiki_syntaxe">pour le formattage du message</label>
       </td>
     </tr>
     <tr id="preview" class="pair" style="display: none">
-      <td colspan="2" id="mail_preview">
+      <td colspan="2">
         <div id="mail_preview"></div>
-        <div class="center"><input type="submit" name="send" value="Envoyer le message"></div>
+        <div class="center"><input type="submit" name="send" value="Envoyer le message" /></div>
       </td>
     </tr>
     <tr>
index a6db51e..05b9b09 100644 (file)
@@ -80,6 +80,7 @@ function searchX()
     <tr>
       <td colspan="2">
         <input type="checkbox" id="x" name="x" onchange="xStateChange(this);" />
+        {* TODO: adapts text for masters and doctorates when required. *}
         <label for="x">Coche cette case s'il s'agit d'un X non inscrit à Polytechnique.org.</label>
       </td>
     </tr>
@@ -93,7 +94,8 @@ function searchX()
     </tr>
     <tr id="xpromo" style="display: none">
       <td class="titre">Promotion&nbsp;:</td>
-      <td><input type="text" id="promo" name="promo" size="4" value="" onkeyup="searchX();" /></td>
+      {* TODO: add examples for masters and doctorates when required. *}
+      <td><input type="text" id="promo" name="promo" size="4" value="" onkeyup="searchX();" /> <small>(X2004)</small></td>
     </tr>
     <tr id="xsearch" style="display: none" class="pair">
       <td colspan="2" id="search_result">
index 30ca337..9bc5502 100644 (file)
@@ -31,7 +31,7 @@
 </p>
 
 {else}
+
 <h1>{$asso->nom}&nbsp;: gestion des membres</h1>
 
 <h2>
index 1b506c6..596f8ac 100644 (file)
@@ -71,7 +71,7 @@
         Type d'utilisateur&nbsp;:
       </td>
       <td>
-        <select name="type" onchange="showInformations(this); return true"{if $user->profile()} disabled="disabled"{/if}>
+        <select name="type" onchange="showInformations(this); return true">
           <option value="xnet" {if $user->type neq 'virtual'}selected="selected"{/if}>Personne physique</option>
           <option value="virtual" {if $user->type eq "virtual"}selected="selected"{/if}>Personne morale</option>
         </select>
@@ -82,7 +82,7 @@
         Nom affiché&nbsp;:
       </td>
       <td>
-        <input type="text" value="{$user->displayName()}" name="display_name" size="40"{if $user->profile()} disabled="disabled"{/if} />
+        <input type="text" value="{$user->displayName()}" name="display_name" size="40" />
       </td>
     </tr>
     <tr class="impair">
         Nom complet&nbsp;:
       </td>
       <td>
-        <input type="text" value="{$user->fullName()}" name="full_name" size="40"{if $user->profile()} disabled="disabled"{/if} />
+        <input type="text" value="{$user->fullName()}" name="full_name" size="40" />
+      </td>
+    </tr>
+    <tr class="impair">
+      <td class="titre">
+        Nom annuaire&nbsp;:
+      </td>
+      <td>
+        <input type="text" value="{$user->directoryName()}" name="directory_name" size="40" />
       </td>
     </tr>
     <tr id="sexe" class="impair" {if $user->type eq "virtual"}style="display: none"{/if}>
         Sexe&nbsp;:
       </td>
       <td>
-        <select name="sex"{if $user->profile()} disabled="disabled"{/if}>
+        <select name="sex">
           <option value="male"{if !$user->isFemale()} selected="selected"{/if}>Homme</option>
           <option value="female"{if $user->isFemale()} selected="selected"{/if}>Femme</option>
         </select>
       </td>
     </tr>
+    {/if}
+    {if !$user->profile() || !$user->perms}
     <tr class="impair">
       <td class="titre">
         Email&nbsp;:
       </td>
       <td>
-        <input type="text" value="{$user->forlifeEmail()}" name="email" size="40"{if $user->profile()} disabled="disabled"{/if} />
+        <input type="text" value="{$user->forlifeEmail()}" name="email" size="40" />
       </td>
     </tr>
     {/if}
     <input type="submit" name='change' value="Valider ces changements" />
     &nbsp;
     <input type="reset" value="Annuler ces changements" />
-  </div>                                                                      
+  </div>
 
 </form>
 
index 15d1806..ad23030 100644 (file)
@@ -42,7 +42,7 @@
 <form action="{$platal->ns}subscribe/valid" method="post">
   <table class="tinybicol">
     <tr>
-      <th><a href="javascript:toggleSelection()">{icon name="arrow_refresh" title="Inverser la sélection"}</a></th> 
+      <th><a href="javascript:toggleSelection()">{icon name="arrow_refresh" title="Inverser la sélection"}</a></th>
       <th>Prénom Nom (Promotion)</th>
       <th>Date de demande</th>
       <th></th>
index cdba5f4..9e677bc 100644 (file)
@@ -23,7 +23,7 @@
 <p>[<a href='{$platal->ns}lists'>retour à la page des listes</a>]</p>
 
 <h1>Membres de {$platal->argv[1]}</h1>
-      
+
 <table class='tinybicol'>
   {if $mem|@count}
   {foreach from=$mem item=m}
index 678a6f3..177ec28 100644 (file)
@@ -45,7 +45,7 @@ par les administrateurs avant d'être transmis aux membres de la liste.  Une lis
 l'accord préalable des responsables du groupe.
 </p>
 <p class="descr">
-La dernière colonne du tableau t'indique si tu es inscrit{if $smarty.session.femme}e{/if} ou non à
+La dernière colonne du tableau t'indique si tu es inscrit{if $smarty.session.user->gender}e{/if} ou non à
 la liste. Dans le premier cas, une croix rouge te permet de te désabonner. Dans le second cas, une
 croix verte te permet de t'inscrire, après accord des responsables si l'inscription est modérée.
 </p>
@@ -101,11 +101,11 @@ croix verte te permet de t'inscrire, après accord des responsables si l'inscrip
 </table>
 
 <p class="descr">
-{icon name=wrench title="Modérateur"} tu es {if $smarty.session.femme}modératrice{else}moderateur{/if} sur cette liste.<br />
+{icon name=wrench title="Modérateur"} tu es {if $smarty.session.user->gender}modératrice{else}moderateur{/if} sur cette liste.<br />
 {icon name=weather_cloudy title="Liste privée"} cette liste est invisible aux non-membres de la liste. S'en désabonner
 t'empêcherait de t'y réabonner par la suite sans l'aide d'un administrateur.
 </p>
-        
+
 <h2>Voici les alias existants pour le groupe {$asso->nom}&nbsp;:</h2>
 
 <table cellspacing="0" cellpadding="0" class='large'>
index bd790f1..de2d2f2 100644 (file)
@@ -36,7 +36,7 @@
     <tr>
       <td class='checkboxToggle'>{profile user=$u promo=false}</td>
       <td class='checkboxToggle'>{$u->promo()}</td>
-      <td class='checkboxToggle'><input type="checkbox" class="moderate_email" name="add[{$u->forlifeEmail()}]" id="add{$u->forlifeEmail()}"/></td>
+      <td class='checkboxToggle'><input type="checkbox" class="moderate_email" name="add[{$u->hruid}]" id="add{$u->hruid}"/></td>
     </tr>
     {/foreach}
     <tr>
index 9897c8a..1cb69c1 100644 (file)
@@ -2,7 +2,7 @@ alter table emails add column panne_level tinyint(1) not null default 0 after pa
 alter table emails change flags flags enum('active', 'filter', 'panne') not null default 'active';
 UPDATE emails SET last = panne WHERE last = 0 AND panne != 0;
 UPDATE emails
-   SET panne_level = 1 
- WHERE flags = 'active' 
+   SET panne_level = 1
+ WHERE flags = 'active'
        AND DATE_ADD(panne, INTERVAL 2 MONTH) > CURDATE();
 
index 6892cba..c7cebde 100644 (file)
@@ -1,4 +1,4 @@
-alter table skins change date date date not null default 0; 
+alter table skins change date date date not null default 0;
 INSERT INTO skins (id, name, date, comment, auteur, skin_tpl, ext)
      VALUES (13, 'Keynote', '2006-08-09', 'Skin inspirée d\'un thème de Keynote',
              'Florent Bruneau', 'keynote.tpl', 'png');
index 991e529..cf0592d 100644 (file)
@@ -1,5 +1,5 @@
 UPDATE newsletter_art SET body =
-REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(body, 
+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(body,
 "[b]", "'''"),
 "[/b]", "'''"),
 "[i]", "''"),
index 4217921..051da0c 100644 (file)
@@ -5,7 +5,7 @@ alter table aliases change column type type enum('a_vie','alias','homonyme','lis
 alter table aliases add index (flags);
 
     update  aliases AS a
-left  join  aliases AS b 
+left  join  aliases AS b
        ON(a.id=b.id and b.alias like '%.%' and length(b.alias)<length(a.alias) and b.type!='homonyme')
        set  a.flags=CONCAT(a.flags,',bestalias')
      where  a.alias LIKE '%.%' and b.alias IS NULL and a.type!='homonyme';
index 8176088..7cb27bd 100644 (file)
@@ -36,7 +36,6 @@ insert into profile_medals (type, text, img)
             ('ordre',     'Ordre du Mérite Agricole',                   'ordre_ma.jpg'),
             ('ordre',     'Ordre du Mérite Maritime',                   'ordre_mm.jpg'),
             ('ordre',     'Ordre des Arts et des Lettres',              'ordre_al.jpg'),
-            
             ('croix',     'Croix de Guerre 1914 - 1918',                'croix_1418.jpg'),
             ('croix',     'Croix de Guerre 1939 - 1945',                'croix_3945.jpg'),
             ('croix',     'Croix des T. O. E.',                         'croix_toe.jpg'),
index ceb670d..09f4540 100644 (file)
@@ -3,8 +3,8 @@ ADD pub ENUM('private', 'ax', 'public') DEFAULT 'private' NOT NULL,
 ADD adr_pub ENUM('private', 'ax', 'public') DEFAULT 'private' NOT NULL,
 ADD tel_pub ENUM('private', 'ax', 'public') DEFAULT 'private' NOT NULL;
 UPDATE entreprises SET
-pub = IF(FIND_IN_SET('entreprise_public', visibilite), 'public', IF(FIND_IN_SET('entreprise_ax', visibilite), 'ax', 'private')), 
-adr_pub = IF(FIND_IN_SET('adr_public', visibilite), 'public', IF(FIND_IN_SET('adr_ax', visibilite), 'ax', 'private')), 
+pub = IF(FIND_IN_SET('entreprise_public', visibilite), 'public', IF(FIND_IN_SET('entreprise_ax', visibilite), 'ax', 'private')),
+adr_pub = IF(FIND_IN_SET('adr_public', visibilite), 'public', IF(FIND_IN_SET('adr_ax', visibilite), 'ax', 'private')),
 tel_pub = IF(FIND_IN_SET('tel_public', visibilite), 'public', IF(FIND_IN_SET('tel_ax', visibilite),'ax', 'private'));
 ALTER TABLE entreprises DROP visibilite;
 ALTER TABLE entreprises
index b24b372..3d3cac0 100644 (file)
@@ -1 +1 @@
-UPDATE watch_cat SET mail = "Ces camarades nous ont quittés", mail_sg = "Ce camarade nous a quittés" WHERE id = 3; 
+UPDATE watch_cat SET mail = "Ces camarades nous ont quittés", mail_sg = "Ce camarade nous a quittés" WHERE id = 3;
index 668c6a8..0172ca9 100644 (file)
@@ -1,7 +1,7 @@
 ALTER TABLE virtual CHANGE `type` `type` ENUM('user', 'list', 'dom', 'evt') DEFAULT 'user' NOT NULL;
 
 ALTER TABLE groupex.asso ADD `pub` ENUM( 'public', 'private' ) DEFAULT 'public' NOT NULL AFTER `ax` ;
-INSERT INTO virtual_domains VALUES ('evts.polytechnique.org'); 
+INSERT INTO virtual_domains VALUES ('evts.polytechnique.org');
 
 use groupex;
 
index ae7fd08..e48c48e 100644 (file)
@@ -1,2 +1,2 @@
 INSERT INTO admin_h2 VALUES(2, 11, 'Géoloc', 70);
-INSERT INTO admin_a VALUES(11, 'Synchro', 'admin/geoloc.php',0); 
+INSERT INTO admin_a VALUES(11, 'Synchro', 'admin/geoloc.php',0);
diff --git a/upgrade/1.0.1/00_job.sql b/upgrade/1.0.1/00_job.sql
new file mode 100644 (file)
index 0000000..fa7b4ec
--- /dev/null
@@ -0,0 +1,65 @@
+ALTER TABLE profile_job_enum MODIFY COLUMN acronym VARCHAR(255) DEFAULT NULL;
+ALTER TABLE profile_job_enum MODIFY COLUMN url VARCHAR(255) DEFAULT NULL;
+ALTER TABLE profile_job_enum MODIFY COLUMN email VARCHAR(255) DEFAULT NULL;
+ALTER TABLE profile_job_enum MODIFY COLUMN NAF_code CHAR(5) DEFAULT NULL;
+ALTER TABLE profile_job_enum MODIFY COLUMN AX_code BIGINT(10) DEFAULT NULL;
+
+CREATE TABLE `profile_job_term_enum` (
+  `jtid` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'term id',
+  `name` varchar(255) NOT NULL COMMENT 'name used in hierarchical context',
+  `full_name` varchar(255) NOT NULL COMMENT 'name to use whithout context',
+  PRIMARY KEY (`jtid`)
+) ENGINE=InnoDB, CHARSET=utf8, COMMENT='job terms';
+
+CREATE TABLE `profile_job_term_relation` (
+  `jtid_1` int unsigned NOT NULL COMMENT 'first term id',
+  `jtid_2` int unsigned NOT NULL COMMENT 'second term id',
+  `rel` enum('narrower','related') NOT NULL DEFAULT 'narrower' COMMENT 'relation between the second to the first term (second is narrower than first)',
+  `computed` enum('original','computed') NOT NULL DEFAULT 'original' COMMENT 'relations can be computed from two original relations',
+  PRIMARY KEY (`jtid_1`, `computed`, `jtid_2`),
+  FOREIGN KEY (`jtid_1`) REFERENCES `profile_job_term_enum` (`jtid`) ON DELETE CASCADE ON UPDATE CASCADE,
+  INDEX `jtid_2` (`jtid_2`),
+  FOREIGN KEY (`jtid_2`) REFERENCES `profile_job_term_enum` (`jtid`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB, CHARSET=utf8, COMMENT='job terms relations';
+
+CREATE TABLE `profile_job_term_search` (
+  `search` varchar(50) NOT NULL COMMENT 'search token for a term',
+  `jtid` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'term id',
+  PRIMARY KEY (`search`, `jtid`),
+  INDEX `jtid` (`jtid`),
+  FOREIGN KEY (`jtid`) REFERENCES `profile_job_term_enum` (`jtid`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB, CHARSET=utf8, COMMENT='search tokens of job terms';
+
+CREATE TABLE `profile_job_term` (
+  `pid` int NOT NULL COMMENT 'profile id',
+  `jid` tinyint unsigned NOT NULL COMMENT 'job id in profile',
+  `jtid` int unsigned NOT NULL COMMENT 'term id',
+  `computed` enum('original','computed') NOT NULL DEFAULT 'original' COMMENT 'terms can be added by user or computed from entreprise',
+  PRIMARY KEY (`pid`, `jid`, `jtid`),
+  INDEX `jtid` (`jtid`),
+  FOREIGN KEY (`jid`) REFERENCES `profile_job` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  FOREIGN KEY (`jtid`) REFERENCES `profile_job_term_enum` (`jtid`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB, CHARSET=utf8, COMMENT='job terms for jobs in profiles';
+
+CREATE TABLE `profile_mentor_term` (
+  `pid` int NOT NULL COMMENT 'profile id',
+  `jtid` int unsigned NOT NULL COMMENT 'term id',
+  PRIMARY KEY (`pid`, `jtid`),
+  INDEX `jtid` (`jtid`),
+  FOREIGN KEY (`jtid`) REFERENCES `profile_job_term_enum` (`jtid`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB, CHARSET=utf8, COMMENT='job terms for mentorship in profiles';
+
+CREATE TABLE `profile_job_entreprise_term` (
+  `eid` int unsigned NOT NULL COMMENT 'entreprise id',
+  `jtid` int unsigned NOT NULL COMMENT 'term id',
+  PRIMARY KEY (`eid`, `jtid`),
+  INDEX `jtid` (`jtid`),
+  FOREIGN KEY (`eid`) REFERENCES `profile_job_enum` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  FOREIGN KEY (`jtid`) REFERENCES `profile_job_term_enum` (`jtid`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB, CHARSET=utf8, COMMENT='job terms associated to entreprises';
+
+-- Adds the root term --
+INSERT INTO `profile_job_term_enum` (`jtid`, `name`) VALUES (0, '');
+UPDATE `profile_job_term_enum` SET `jtid` = 0 WHERE `name` = '';
+
+-- vim:set syntax=mysql:
diff --git a/upgrade/1.0.1/01_profiles.sql b/upgrade/1.0.1/01_profiles.sql
new file mode 100644 (file)
index 0000000..c7187ae
--- /dev/null
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS profile_modifications;
+
+CREATE TABLE profile_modifications (
+  pid INT(11) NOT NULL,
+  uid INT(11) NOT NULL,
+  field VARCHAR(60) NOT NULL,
+  oldText TEXT NOT NULL,
+  newText TEXT NOT NULL,
+  pub ENUM('private', 'ax', 'public') NOT NULL DEFAULT 'private',
+  PRIMARY KEY(pid, uid, field)
+) ENGINE=InnoDB, CHARSET=utf8;
+
+-- vim:set syntax=mysql:
diff --git a/upgrade/1.0.1/02_accounts.sql b/upgrade/1.0.1/02_accounts.sql
new file mode 100644 (file)
index 0000000..db6d59a
--- /dev/null
@@ -0,0 +1,26 @@
+ALTER TABLE accounts ADD COLUMN directory_name VARCHAR(255) DEFAULT NULL AFTER full_name,
+                     ADD COLUMN user_perms SET('groups', 'mail', 'directory_ax', 'directory_private',
+                                               'edit_directory', 'forums', 'lists', 'payment')
+                                           DEFAULT NULL
+                                           COMMENT "Extra permissions for the account in addition to those specified by the account type"
+                                           AFTER type;
+UPDATE  accounts AS a
+   SET  a.directory_name = (SELECT  pd.directory_name
+                              FROM  profile_display  AS pd
+                        INNER JOIN  account_profiles AS ap ON (ap.uid = pd.pid AND FIND_IN_SET('owner', perms))
+                             WHERE  a.uid = ap.uid);
+
+ALTER TABLE account_types
+CHANGE COLUMN perms perms SET('groups', 'mail', 'directory_ax', 'directory_private',
+                              'edit_directory', 'forums', 'lists', 'payment') NOT NULL;
+
+REPLACE INTO account_types VALUES ('x', 'groups,mail,directory_private,forums,lists,payment'),
+                                  ('master', 'groups,directory_private,forums,lists,payment'),
+                                  ('phd', 'groups,directory_private,forums,lists,payment'),
+                                  ('pi', 'groups,forums,lists'),
+                                  ('ax', 'groups,directory_ax,edit_directory'),
+                                  ('xnet', 'groups'),
+                                  ('virtual', '');
+
+
+-- vim:set syntax=mysql:
diff --git a/upgrade/1.0.1/03_medals.sql b/upgrade/1.0.1/03_medals.sql
new file mode 100644 (file)
index 0000000..6dcc331
--- /dev/null
@@ -0,0 +1,29 @@
+ALTER TABLE profile_medal_enum MODIFY COLUMN type ENUM('ordre','croix','militaire','honneur','resistance','prix','sport') NOT NULL DEFAULT 'ordre';
+
+INSERT INTO  profile_medal_enum (type, text, flags)
+     VALUES  ('sport', 'Championnat du monde de vol à voile', 'validation'),
+             ('sport', 'Championnat d\'Europe de vol à voile', 'validation'),
+             ('sport', 'Championnat de France de vol à voile', 'validation');
+
+INSERT INTO  profile_medal_grade_enum (mid, gid, text, pos)
+     SELECT  id, 1, 'Or', 1
+       FROM  profile_medal_enum
+      WHERE  text = 'Championnat du monde de vol à voile'
+             OR text = 'Championnat d\'Europe de vol à voile'
+             OR text = 'Championnat de France de vol à voile';
+
+INSERT INTO  profile_medal_grade_enum (mid, gid, text, pos)
+     SELECT  id, 2, 'Argent', 2
+       FROM  profile_medal_enum
+      WHERE  text = 'Championnat du monde de vol à voile'
+             OR text = 'Championnat d\'Europe de vol à voile'
+             OR text = 'Championnat de France de vol à voile';
+
+INSERT INTO  profile_medal_grade_enum (mid, gid, text, pos)
+     SELECT  id, 3, 'Bronze', 3
+       FROM  profile_medal_enum
+      WHERE  text = 'Championnat du monde de vol à voile'
+             OR text = 'Championnat d\'Europe de vol à voile'
+             OR text = 'Championnat de France de vol à voile';
+
+-- vim:set syntax=mysql:
diff --git a/upgrade/1.0.1/04_phones.sql b/upgrade/1.0.1/04_phones.sql
new file mode 100644 (file)
index 0000000..70c1ea9
--- /dev/null
@@ -0,0 +1,8 @@
+ALTER TABLE profile_phones MODIFY COLUMN pid INT(6) NOT NULL DEFAULT 0;
+ALTER TABLE profile_phones MODIFY COLUMN link_id INT(6) NOT NULL DEFAULT 0;
+
+DELETE FROM profile_phones WHERE search_tel = '' OR display_tel = '' OR link_type = 'hq';
+
+UPDATE geoloc_countries SET phoneFormat = '(+p) # ## ## ## ##' WHERE phoneFormat = '0# ## ## ## ##';
+
+-- vim:set syntax=mysql:
diff --git a/upgrade/1.0.1/05_jobs.sql b/upgrade/1.0.1/05_jobs.sql
new file mode 100644 (file)
index 0000000..59eac99
--- /dev/null
@@ -0,0 +1,4 @@
+UPDATE  profile_job_enum
+   SET  NAF_code = NULL, AX_code = NULL;
+
+-- vim:set syntax=mysql:
diff --git a/upgrade/1.0.1/06_ids.sql b/upgrade/1.0.1/06_ids.sql
new file mode 100644 (file)
index 0000000..4d10344
--- /dev/null
@@ -0,0 +1,90 @@
+-- accounts and profiles are the tables where uid and pid are defined through an auto increment.
+ALTER TABLE accounts MODIFY COLUMN uid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT;
+ALTER TABLE profiles MODIFY COLUMN pid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT;
+
+-- Following tables all refer to accounts.uid.
+ALTER TABLE account_auth_openid MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE account_lost_passwords MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE account_profiles MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE aliases MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE announce_read MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE announces MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE axletter_ins MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE axletter_rights MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE carvas MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE contacts MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE email_list_moderate MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE email_options MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE email_send_save MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE email_watch MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE emails MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE forum_innd MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE forum_profiles MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE forum_subs MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE group_announces MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE group_announces_read MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE group_event_participants MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE group_member_sub_requests MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE group_members MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE homonyms MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE ip_watch MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE log_last_sessions MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE log_sessions MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE newsletter_ins MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE payment_transactions MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_modifications MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE register_marketing MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE register_mstats MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE register_pending MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE register_subs MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE reminder MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE requests MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE requests_hidden MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE watch MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE watch_nonins MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE watch_promo MODIFY COLUMN uid INT(11) UNSIGNED DEFAULT NULL;
+
+-- Following tables all refer to accounts.uid, but they use a different name.
+ALTER TABLE contacts MODIFY COLUMN contact INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE email_list_moderate MODIFY COLUMN mid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE gapps_accounts MODIFY COLUMN l_userid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE gapps_queue MODIFY COLUMN q_owner_id INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE gapps_queue MODIFY COLUMN q_recipient_id INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE gapps_nicknames MODIFY COLUMN l_userid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE homonyms MODIFY COLUMN homonyme_id INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE log_sessions MODIFY COLUMN suid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE register_marketing MODIFY COLUMN sender INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE register_mstats MODIFY COLUMN sender INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE watch_nonins MODIFY COLUMN ni_id INT(11) UNSIGNED DEFAULT NULL;
+
+-- Rename columns that should be called uid.
+ALTER TABLE group_events CHANGE COLUMN organisateur_uid uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE survey_votes CHANGE COLUMN user_id uid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE surveys CHANGE COLUMN author_id uid INT(11) UNSIGNED DEFAULT NULL;
+
+-- Following tables all refer to profiles.pid.
+ALTER TABLE account_profiles MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE requests MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE search_name MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE watch_profile MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_addresses MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_binets MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_corps MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_display MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_education MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_job MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_job_term MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_langskills MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_medals MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_mentor MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_mentor_country MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_mentor_sector MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_mentor_term MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_modifications MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_name MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_networking MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_phones MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_photos MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_skills MODIFY COLUMN pid INT(11) UNSIGNED DEFAULT NULL;
+
+-- vim:set syntax=mysql:
diff --git a/upgrade/1.0.1/07_ids_foreign_keys.sql b/upgrade/1.0.1/07_ids_foreign_keys.sql
new file mode 100644 (file)
index 0000000..af70000
--- /dev/null
@@ -0,0 +1,101 @@
+-- Prepares table having uid or pid set to 0.
+UPDATE aliases SET uid = NULL WHERE uid = 0;
+UPDATE log_sessions SET uid = NULL WHERE uid = 0;
+UPDATE log_sessions SET suid = NULL WHERE suid = 0;
+UPDATE register_marketing SET sender = NULL WHERE sender = 0;
+UPDATE register_mstats SET sender = NULL WHERE sender = 0;
+UPDATE requests SET pid = NULL WHERE pid = 0;
+UPDATE profile_addresses SET pid = NULL WHERE pid = 0;
+
+-- Deltes erroneous data.
+DELETE FROM homonyms WHERE NOT EXISTS (SELECT * FROM accounts WHERE accounts.uid = homonyms.homonyme_id);
+DELETE FROM register_marketing WHERE NOT EXISTS (SELECT * FROM accounts WHERE accounts.uid = register_marketing.uid);
+DELETE FROM watch_nonins WHERE NOT EXISTS (SELECT * FROM accounts WHERE accounts.uid = watch_nonins.ni_id);
+DELETE FROM log_last_sessions WHERE NOT EXISTS (SELECT * FROM accounts WHERE accounts.uid = log_last_sessions.uid);
+DELETE FROM forum_profiles WHERE NOT EXISTS (SELECT * FROM accounts WHERE accounts.uid = forum_profiles.uid);
+DELETE FROM watch WHERE NOT EXISTS (SELECT * FROM accounts WHERE accounts.uid = watch.uid);
+DELETE FROM group_event_participants WHERE NOT EXISTS (SELECT * FROM accounts WHERE accounts.uid = group_event_participants.uid);
+DELETE FROM group_members WHERE NOT EXISTS (SELECT * FROM accounts WHERE accounts.uid = group_members.uid);
+
+-- Following tables all refer to accounts.uid.
+ALTER TABLE account_auth_openid ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE account_lost_passwords ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE account_profiles ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE aliases ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE announce_read ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE announces ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE axletter_ins ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE axletter_rights ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE carvas ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE contacts ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE email_list_moderate ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE email_options ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE email_send_save ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE email_watch ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE forum_innd ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE forum_profiles ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE forum_subs ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE group_announces ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE group_announces_read ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE group_events ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE group_event_participants ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE group_member_sub_requests ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE group_members ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE homonyms ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE ip_watch ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE log_last_sessions ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE log_sessions ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE newsletter_ins ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE payment_transactions ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_modifications ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE register_marketing ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE register_mstats ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE register_pending ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE register_subs ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE reminder ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE requests ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE requests_hidden ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE survey_votes ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE surveys ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE watch ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE watch_nonins ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE watch_promo ADD FOREIGN KEY (uid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- Following tables all refer to accounts.uid, but they use a different name.
+ALTER TABLE contacts ADD FOREIGN KEY (contact) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE email_list_moderate ADD FOREIGN KEY (mid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE gapps_accounts ADD FOREIGN KEY (l_userid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE gapps_queue ADD FOREIGN KEY (q_owner_id) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE gapps_queue ADD FOREIGN KEY (q_recipient_id) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE gapps_nicknames ADD FOREIGN KEY (l_userid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE homonyms ADD FOREIGN KEY (homonyme_id) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE log_sessions ADD FOREIGN KEY (suid) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE register_marketing ADD FOREIGN KEY (sender) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE register_mstats ADD FOREIGN KEY (sender) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE watch_nonins ADD FOREIGN KEY (ni_id) REFERENCES accounts (uid) ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- Following tables all refer to profiles.pid.
+ALTER TABLE account_profiles ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE requests ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE search_name ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE watch_profile ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_binets ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_corps ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_display ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_education ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job_term ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_langskills ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_medals ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_mentor ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_mentor_country ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_mentor_sector ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_mentor_term ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_modifications ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_name ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_networking ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_phones ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_photos ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_skills ADD FOREIGN KEY (pid) REFERENCES profiles (pid) ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- vim:set syntax=mysql:
diff --git a/upgrade/1.0.1/08_profile_foreign_keys.sql b/upgrade/1.0.1/08_profile_foreign_keys.sql
new file mode 100644 (file)
index 0000000..b0ce65f
--- /dev/null
@@ -0,0 +1,86 @@
+-- Modify tables that are refered to.
+ALTER TABLE profile_education_enum MODIFY COLUMN id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT;
+ALTER TABLE profile_education_degree_enum MODIFY COLUMN id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT;
+ALTER TABLE profile_education_field_enum MODIFY COLUMN id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT;
+ALTER TABLE profile_section_enum MODIFY COLUMN id TINYINT(2) UNSIGNED NOT NULL DEFAULT 0;
+
+-- Following tables all needs a sligth change in their definition to match their foreign correspondance.
+ALTER TABLE profile_addresses MODIFY COLUMN localityId BIGINT(20) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_addresses MODIFY COLUMN subAdministrativeAreaId INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_addresses MODIFY COLUMN administrativeAreaId INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_binets MODIFY COLUMN binet_id TINYINT(3) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_education MODIFY COLUMN eduid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_education MODIFY COLUMN degreeid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_education MODIFY COLUMN fieldid INT(11) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_education_enum MODIFY COLUMN country CHAR(2) DEFAULT 'FR';
+ALTER TABLE profile_education_degree MODIFY COLUMN eduid INT(11) UNSIGNED DEFAULT 0;
+ALTER TABLE profile_education_degree MODIFY COLUMN degreeid INT(11) UNSIGNED DEFAULT 0;
+ALTER TABLE profile_job MODIFY COLUMN jobid INT(6) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_job MODIFY COLUMN sectorid TINYINT(2) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_job MODIFY COLUMN subsectorid SMALLINT(3) UNSIGNED DEFAULT NULL;
+ALTER TABLE profile_job MODIFY COLUMN subsubsectorid SMALLINT(3) UNSIGNED DEFAULT NULL;
+
+-- Prepares table having ids set to 0.
+DELETE FROM profile_mentor_country WHERE country = 'YU' OR country = '00';
+UPDATE profile_addresses SET localityId = NULL WHERE localityId = 0;
+UPDATE profile_addresses SET subAdministrativeAreaId = NULL WHERE subAdministrativeAreaId = 0;
+UPDATE profile_addresses SET administrativeAreaId = NULL WHERE administrativeAreaId = 0;
+UPDATE profile_addresses SET countryId = NULL WHERE countryId = '';
+UPDATE profile_education SET eduid = NULL WHERE eduid = 0;
+UPDATE profile_education SET degreeid = NULL WHERE degreeid = 0;
+UPDATE profile_education SET fieldid = NULL WHERE fieldid = 0;
+UPDATE profile_education_enum SET country = NULL WHERE country = '';
+UPDATE profile_job SET jobid = NULL WHERE jobid = 0;
+UPDATE profile_job SET sectorid = NULL WHERE sectorid = 0;
+UPDATE profile_job SET subsectorid = NULL WHERE subsectorid = 0;
+UPDATE profile_job SET subsubsectorid = NULL WHERE subsubsectorid = 0;
+UPDATE profile_job_enum SET holdingid = NULL WHERE holdingid = 0;
+
+-- Adds missing data in foreign tables.
+INSERT INTO  geoloc_countries (iso_3166_1_a2, iso_3166_1_a3, iso_3166_1_num, worldRegion, country,
+                               countryFR, capital, nationalityFR, licensePlate, belongsTo, phonePrefix)
+     VALUES  ('GF', 'GUF', 254, 'EU', 'French Guiana', 'Guyane française', 'Cayenne', NULL, 'FR', 'FR', 594),
+             ('GP', 'GLP', 312, 'EU', 'Guadeloupe', 'Guadeloupe', 'Basse-Terre', NULL, 'FR', 'FR', 590),
+             ('MQ', 'MTQ', 474, 'EU', 'Martinique', 'Martinique', 'Fort-de-France', NULL, 'FR', 'FR', 596),
+             ('NC', 'NCL', 540, 'EU', 'New Caledonia', 'Nouvelle-Calédonie', 'Nouméa', NULL, 'FR', 'FR', 687),
+             ('PF', 'PYF', 258, 'EU', 'French Polynesia', 'Polynésie française', 'Papeete', NULL, 'FR', 'FR', 689),
+             ('PR', 'PRI', 630, 'NA', 'Puerto Rico', 'Porto Rico', 'San Juan', NULL, 'USA', 'US', 1787),
+             ('MP', 'MNP', 580, 'NA', 'Northern Mariana Islands', 'Îles Mariannes du Nord', ' Saipan', NULL, 'USA', 'US', 1670);
+
+-- Following tables all refer to profiles.pid.
+ALTER TABLE profile_addresses ADD FOREIGN KEY (localityId) REFERENCES geoloc_localities (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_addresses ADD FOREIGN KEY (subAdministrativeAreaId) REFERENCES geoloc_subadministrativeareas (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_addresses ADD FOREIGN KEY (administrativeAreaId) REFERENCES geoloc_administrativeareas (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_addresses ADD FOREIGN KEY (countryId) REFERENCES geoloc_countries (iso_3166_1_a2) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_binets ADD FOREIGN KEY (binet_id) REFERENCES profile_binet_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_corps ADD FOREIGN KEY (original_corpsid) REFERENCES profile_corps_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_corps ADD FOREIGN KEY (current_corpsid) REFERENCES profile_corps_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_corps ADD FOREIGN KEY (rankid) REFERENCES profile_corps_rank_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_education ADD FOREIGN KEY (eduid) REFERENCES profile_education_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_education ADD FOREIGN KEY (degreeid) REFERENCES profile_education_degree_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_education ADD FOREIGN KEY (fieldid) REFERENCES profile_education_field_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_education_enum ADD FOREIGN KEY (country) REFERENCES geoloc_countries (iso_3166_1_a2) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_education_degree ADD FOREIGN KEY (eduid) REFERENCES profile_education_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_education_degree ADD FOREIGN KEY (degreeid) REFERENCES profile_education_degree_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job ADD FOREIGN KEY (jobid) REFERENCES profile_job_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job ADD FOREIGN KEY (sectorid) REFERENCES profile_job_sector_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job ADD FOREIGN KEY (subsectorid) REFERENCES profile_job_subsector_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job ADD FOREIGN KEY (subsubsectorid) REFERENCES profile_job_subsubsector_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job_alternates ADD FOREIGN KEY (subsubsectorid) REFERENCES profile_job_subsubsector_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job_enum ADD FOREIGN KEY (holdingid) REFERENCES profile_job_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job_subsector_enum ADD FOREIGN KEY (sectorid) REFERENCES profile_job_sector_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job_subsubsector_enum ADD FOREIGN KEY (sectorid) REFERENCES profile_job_sector_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_job_subsubsector_enum ADD FOREIGN KEY (subsectorid) REFERENCES profile_job_subsector_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_langskills ADD FOREIGN KEY (lid) REFERENCES profile_langskill_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_medal_grade_enum ADD FOREIGN KEY (mid) REFERENCES profile_medal_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_mentor_country ADD FOREIGN KEY (country) REFERENCES geoloc_countries (iso_3166_1_a2) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_mentor_sector ADD FOREIGN KEY (sectorid) REFERENCES profile_job_sector_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_skills ADD FOREIGN KEY (cid) REFERENCES profile_skill_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_name ADD FOREIGN KEY (typeid) REFERENCES profile_name_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profile_networking ADD FOREIGN KEY (nwid) REFERENCES profile_networking_enum (nwid) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profiles ADD FOREIGN KEY (section) REFERENCES profile_section_enum (id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profiles ADD FOREIGN KEY (nationality1) REFERENCES geoloc_countries (iso_3166_1_a2) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profiles ADD FOREIGN KEY (nationality2) REFERENCES geoloc_countries (iso_3166_1_a2) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE profiles ADD FOREIGN KEY (nationality3) REFERENCES geoloc_countries (iso_3166_1_a2) ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- vim:set syntax=mysql:
diff --git a/upgrade/1.0.1/alternate_subsubsectors.php b/upgrade/1.0.1/alternate_subsubsectors.php
deleted file mode 100755 (executable)
index e94dadd..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/php5
-<?php
-require_once 'connect.db.inc.php';
-
-$globals->debug = 0; //do not store backtraces
-
-$data = implode('', file('arbo-UTF8.xml'));
-$parser = xml_parser_create();
-xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
-xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
-xml_parse_into_struct($parser, $data, $values, $tags);
-xml_parser_free($parser);
-
-// loop through the structures
-foreach ($values as $val) {
-    if ($val['tag'] == 'grand-domaine' && $val['type'] == 'open') {
-        $res = XDB::execute('INSERT INTO  profile_job_sector_enum (name)
-                                  VALUES  ({?})',
-                            ucfirst(mb_strtolower($val['attributes']['intitule'])));
-        $sectorid = XDB::insertId();
-    }
-    if ($val['tag'] == 'domaine' && $val['type'] == 'open') {
-        $res = XDB::execute('INSERT INTO  profile_job_subsector_enum (sectorid, name)
-                                  VALUES  ({?}, {?})',
-                            $sectorid, $val['attributes']['intitule']);
-        $subsectorid = XDB::insertId();
-    }
-    if ($val['tag'] == 'domaine-intermediaire' && $val['type'] == 'open') {
-        $res = XDB::execute('INSERT INTO  profile_job_subsector_enum (sectorid, name, flags)
-                                  VALUES  ({?}, {?}, \'optgroup\')',
-                            $sectorid, $val['attributes']['intitule']);
-    }
-    if ($val['tag'] == 'fiche' && $val['type'] == 'open') {
-        $res = XDB::execute('INSERT INTO  profile_job_subsubsector_enum (sectorid, subsectorid, name)
-                                  VALUES  ({?}, {?}, {?})',
-                            $sectorid, $subsectorid, $val['attributes']['intitule']);
-        $subsubsectorid = XDB::insertId();
-        $id = 0;
-    }
-    if ($val['tag'] == 'appellation' && $val['type'] == 'complete') {
-        $res = XDB::execute('INSERT INTO  profile_job_alternates (id, subsubsectorid, name)
-                                  VALUES  ({?}, {?}, {?})',
-                            $id, $subsubsectorid, $val['attributes']['intitule']);
-        ++$id;
-    }
-}
-
-/* vim:set et sw=4 sts=4 ts=4: */
-?>
diff --git a/upgrade/1.0.1/arbo-UTF8.xml b/upgrade/1.0.1/arbo-UTF8.xml
new file mode 100644 (file)
index 0000000..991afe0
--- /dev/null
@@ -0,0 +1,12917 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<arborescence>
+<grand-domaine code="A" intitule="AGRICULTURE ET PÊCHE, ESPACES NATURELS ET ESPACES VERTS, SOINS AUX ANIMAUX">
+<domaine code="A11" intitule="Engins agricoles et forestiers">
+<fiche
+ code="A1101" intitule="Conduite d'engins d'exploitation agricole et forestière">
+<liste_appellations>
+<appellation intitule="Chauffeur / Chauffeuse de machines agricoles" />
+<appellation intitule="Conducteur / Conductrice d'abatteuses" />
+<appellation intitule="Conducteur / Conductrice de tête d'abattage" />
+<appellation intitule="Conducteur / Conductrice de tracteur" />
+<appellation intitule="Conducteur / Conductrice de vendangeuse" />
+<appellation intitule="Conducteur / Conductrice d'engins de débardage" />
+<appellation intitule="Conducteur / Conductrice d'engins d'exploitation agricole" />
+<appellation intitule="Conducteur / Conductrice d'engins d'exploitation forestière" />
+<appellation intitule="Conducteur / Conductrice d'engins forestiers" />
+<appellation intitule="Débardeur / Débardeuse" />
+<appellation intitule="Débardeur forestier / Débardeuse forestière" />
+<appellation intitule="Opérateur / Opératrice d'abatteuse" />
+<appellation intitule="Pilote de machines d'abattage" />
+<appellation intitule="Tractoriste agricole" />
+<appellation intitule="Tractoriste forestier / Tractoriste forestière" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="A12" intitule="Espaces naturels et espaces verts">
+<fiche
+ code="A1201" intitule="Bûcheronnage et élagage">
+<liste_appellations>
+<appellation intitule="Arboriste" />
+<appellation intitule="Arboriste grimpeur / grimpeuse" />
+<appellation intitule="Bûcheron / Bûcheronne" />
+<appellation intitule="Bûcheron élagueur / Bûcheronne élagueuse" />
+<appellation intitule="Charbonnier / Charbonnière" />
+<appellation intitule="Commis / Commise de coupe" />
+<appellation intitule="Ehouppeur / Ehouppeuse" />
+<appellation intitule="Elagueur / Elagueuse" />
+<appellation intitule="Elagueur / Elagueuse espaces verts" />
+<appellation intitule="Elagueur-botteur / Elagueuse-botteuse" />
+<appellation intitule="Elagueur-grimpeur / Elagueuse-grimpeuse" />
+<appellation intitule="Grimpeur-élagueur / Grimpeuse-élagueuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1202" intitule="Entretien des espaces naturels">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'aménagement des circuits pédestres, équestres et Vtt" />
+<appellation intitule="Agent / Agente d'aménagement des haies et fossés" />
+<appellation intitule="Agent / Agente d'entretien de la nature" />
+<appellation intitule="Agent / Agente d'entretien de l'espace rural" />
+<appellation intitule="Agent / Agente d'entretien des espaces naturels" />
+<appellation intitule="Agent / Agente d'entretien des rivières" />
+<appellation intitule="Agent / Agente d'entretien nature du littoral" />
+<appellation intitule="Chef d'équipe d'entretien d'espaces naturels" />
+<appellation intitule="Ouvrier / Ouvrière d'entretien des espaces naturels" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1203" intitule="Entretien des espaces verts">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'entretien des parcs et jardins" />
+<appellation intitule="Chef d'équipe d'entretien des espaces verts" />
+<appellation intitule="Chef d'équipe paysagiste" />
+<appellation intitule="Jardinier / Jardinière" />
+<appellation intitule="Jardinier / Jardinière d'espaces verts" />
+<appellation intitule="Jardinier / Jardinière paysagiste" />
+<appellation intitule="Ouvrier / Ouvrière d'entretien des espaces verts" />
+<appellation intitule="Ouvrier / Ouvrière des espaces verts" />
+<appellation intitule="Ouvrier / Ouvrière du paysage" />
+<appellation intitule="Ouvrier / Ouvrière paysagiste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1204" intitule="Protection du patrimoine naturel">
+<liste_appellations>
+<appellation intitule="Agent / Agente technique des parcs nationaux" />
+<appellation intitule="Agent chargé / Agente chargée de protection et de sauvegarde du patrimoine naturel" />
+<appellation intitule="Eco garde" />
+<appellation intitule="Garde de parc naturel" />
+<appellation intitule="Garde du littoral" />
+<appellation intitule="Garde forestier / forestière" />
+<appellation intitule="Garde moniteur / monitrice de parc national" />
+<appellation intitule="Garde moniteur / monitrice de parc naturel" />
+<appellation intitule="Garde national / nationale de la chasse et de la faune sauvage" />
+<appellation intitule="Garde technicien / technicienne de réserve naturelle" />
+<appellation intitule="Garde-chasse" />
+<appellation intitule="Garde-pêche" />
+<appellation intitule="Garde-rivière" />
+<appellation intitule="Technicien / Technicienne cynégétique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1205" intitule="Sylviculture">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maîtrise d'exploitation forestière" />
+<appellation intitule="Agent technique forestier / forestière" />
+<appellation intitule="Chef de district forestier" />
+<appellation intitule="Contremaître / Contremaîtresse d'exploitation forestière" />
+<appellation intitule="Exploitant forestier / Exploitante forestière" />
+<appellation intitule="Forestier / Forestière" />
+<appellation intitule="Manoeuvre forestier / forestière" />
+<appellation intitule="Ouvrier forestier / Ouvrière forestière" />
+<appellation intitule="Ouvrier sylvicole / Ouvrière sylvicole" />
+<appellation intitule="Ouvrier sylviculteur / Ouvrière sylvicutrice" />
+<appellation intitule="Populiculteur / Populicultrice" />
+<appellation intitule="Sylviculteur / Sylvicultrice" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="A13" intitule="Études et assistance technique">
+<fiche
+ code="A1301" intitule="Conseil et assistance technique en agriculture">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice agricole" />
+<appellation intitule="Animateur / Animatrice d'organismes agricoles" />
+<appellation intitule="Conseiller / Conseillère agricole" />
+<appellation intitule="Conseiller / Conseillère d'agriculture" />
+<appellation intitule="Conseiller / Conseillère de gestion agricole" />
+<appellation intitule="Conseiller / Conseillère d'élevage en production laitière" />
+<appellation intitule="Conseiller / Conseillère en irrigation" />
+<appellation intitule="Conseiller / Conseillère en machinisme agricole" />
+<appellation intitule="Conseiller / Conseillère technique agricole" />
+<appellation intitule="Conseiller / Conseillère viticole" />
+<appellation intitule="Conseiller forestier / Conseillère forestière" />
+<appellation intitule="Hydraulicien / Hydraulicienne en agriculture" />
+<appellation intitule="Technicien / Technicienne arboricole" />
+<appellation intitule="Technicien / Technicienne avicole" />
+<appellation intitule="Technicien / Technicienne bâtiments d'élevage" />
+<appellation intitule="Technicien / Technicienne bovin" />
+<appellation intitule="Technicien / Technicienne caprin" />
+<appellation intitule="Technicien / Technicienne cunicole" />
+<appellation intitule="Technicien / Technicienne d'agriculture" />
+<appellation intitule="Technicien / Technicienne de culture maraîchère" />
+<appellation intitule="Technicien / Technicienne de maintenance végétale" />
+<appellation intitule="Technicien / Technicienne de production animale" />
+<appellation intitule="Technicien / Technicienne d'élevage" />
+<appellation intitule="Technicien / Technicienne des travaux forestiers" />
+<appellation intitule="Technicien / Technicienne d'expérimentation" />
+<appellation intitule="Technicien / Technicienne du génie rural" />
+<appellation intitule="Technicien / Technicienne du génie sanitaire et environnement" />
+<appellation intitule="Technicien / Technicienne en agriculture biologique" />
+<appellation intitule="Technicien / Technicienne en alimentation animale" />
+<appellation intitule="Technicien / Technicienne en fabrication fromagère" />
+<appellation intitule="Technicien / Technicienne équin" />
+<appellation intitule="Technicien / Technicienne horticole" />
+<appellation intitule="Technicien / Technicienne ovin" />
+<appellation intitule="Technicien / Technicienne porcin" />
+<appellation intitule="Technicien / Technicienne semences" />
+<appellation intitule="Technicien / Technicienne viticole" />
+<appellation intitule="Technicien foncier / Technicienne foncière en agriculture" />
+<appellation intitule="Technicien forestier / Technicienne forestière" />
+<appellation intitule="Technicien forestier / Technicienne forestière d'études et de recherche" />
+<appellation intitule="Technicien laitier / Technicienne laitière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1302" intitule="Contrôle et diagnostic technique en agriculture">
+<liste_appellations>
+<appellation intitule="Agent / Agente de collecte d'embryons" />
+<appellation intitule="Agent / Agente de production laitière" />
+<appellation intitule="Agent / Agente sanitaire apicole" />
+<appellation intitule="Agent / Agente sanitaire de l'agriculture" />
+<appellation intitule="Agent / Agente technique agricole" />
+<appellation intitule="Agent / Agente technique d'élevage" />
+<appellation intitule="Agent / Agente technique en produits de traitement" />
+<appellation intitule="Assistant / Assistante sanitaire apicole" />
+<appellation intitule="Contrôleur / Contrôleuse de croissance de l'agriculture" />
+<appellation intitule="Contrôleur / Contrôleuse de culture" />
+<appellation intitule="Contrôleur / Contrôleuse de performance" />
+<appellation intitule="Contrôleur / Contrôleuse viticole" />
+<appellation intitule="Contrôleur laitier / Contrôleuse laitière" />
+<appellation intitule="Contrôleur-pointeur / Contrôleuse-pointeuse" />
+<appellation intitule="Inséminateur artificiel / Inséminatrice artificielle" />
+<appellation intitule="Peseur laitier / Peseuse laitière" />
+<appellation intitule="Technicien / Technicienne agricole" />
+<appellation intitule="Technicien / Technicienne de contrôle de croissance de l'agriculture" />
+<appellation intitule="Technicien / Technicienne de contrôle laitier" />
+<appellation intitule="Technicien / Technicienne de production laitière" />
+<appellation intitule="Technicien / Technicienne des services vétérinaires" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1303" intitule="Ingénierie en agriculture et environnement naturel">
+<liste_appellations>
+<appellation intitule="Agro-économiste" />
+<appellation intitule="Bio-ingénieur / Bio-ingénieure" />
+<appellation intitule="Chargé / Chargée de mission en agriculture" />
+<appellation intitule="Chargé / Chargée de recherche en agriculture" />
+<appellation intitule="Chargé / Chargée d'études agricoles" />
+<appellation intitule="Chargé / Chargée d'études économiques en agriculture" />
+<appellation intitule="Chargé / Chargée d'études en développement agricole" />
+<appellation intitule="Chargé / Chargée d'études en développement rural" />
+<appellation intitule="Chargé / Chargée d'études environnement" />
+<appellation intitule="Expérimentateur / Expérimentatrice en agriculture" />
+<appellation intitule="Expert / Experte cynégétique" />
+<appellation intitule="Expert / Experte en aquaculture" />
+<appellation intitule="Expert agricole et foncier / Experte agricole et foncière" />
+<appellation intitule="Expert forestier / Experte forestière" />
+<appellation intitule="Ingénieur / Ingénieure agro-environnement" />
+<appellation intitule="Ingénieur / Ingénieure agro-halieute" />
+<appellation intitule="Ingénieur / Ingénieure agronome" />
+<appellation intitule="Ingénieur / Ingénieure arboricole" />
+<appellation intitule="Ingénieur / Ingénieure des eaux et forêts" />
+<appellation intitule="Ingénieur / Ingénieure des techniques forestières" />
+<appellation intitule="Ingénieur / Ingénieure des travaux agricoles" />
+<appellation intitule="Ingénieur / Ingénieure des travaux des eaux et forêts" />
+<appellation intitule="Ingénieur / Ingénieure des travaux ruraux" />
+<appellation intitule="Ingénieur / Ingénieure d'études et de recherche agricoles" />
+<appellation intitule="Ingénieur / Ingénieure du génie rural" />
+<appellation intitule="Ingénieur / Ingénieure du génie rural des eaux et forêts -IGREF-" />
+<appellation intitule="Ingénieur / Ingénieure en expérimentation animale" />
+<appellation intitule="Ingénieur / Ingénieure en expérimentation végétale" />
+<appellation intitule="Ingénieur / Ingénieure en techniques d'expérimentation animale" />
+<appellation intitule="Ingénieur / Ingénieure halieute" />
+<appellation intitule="Ingénieur / Ingénieure horticole" />
+<appellation intitule="Ingénieur / Ingénieure paysagiste" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="A14" intitule="Production">
+<fiche
+ code="A1401" intitule="Aide agricole de production fruitière ou viticole">
+<liste_appellations>
+<appellation intitule="Aide agricole en arboriculture" />
+<appellation intitule="Aide agricole en production fruitière" />
+<appellation intitule="Aide agricole en viticulture" />
+<appellation intitule="Aide arboricole" />
+<appellation intitule="Aide viticole" />
+<appellation intitule="Aide-arboriculteur / Aide-arboricultrice" />
+<appellation intitule="Aide-pépiniériste" />
+<appellation intitule="Aide-viticulteur / Aide-viticultrice" />
+<appellation intitule="Cueilleur / Cueilleuse de cerises" />
+<appellation intitule="Cueilleur / Cueilleuse de fruits" />
+<appellation intitule="Cueilleur / Cueilleuse de pêches" />
+<appellation intitule="Cueilleur / Cueilleuse de poires" />
+<appellation intitule="Cueilleur / Cueilleuse de pommes" />
+<appellation intitule="Planteur / Planteuse de bananes" />
+<appellation intitule="Porteur / Porteuse de hottes" />
+<appellation intitule="Vendangeur / Vendangeuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1402" intitule="Aide agricole de production légumière ou végétale">
+<liste_appellations>
+<appellation intitule="Aide agricole en maraîchage-horticulture" />
+<appellation intitule="Aide agricole en polyculture" />
+<appellation intitule="Aide agricole en production florale" />
+<appellation intitule="Aide agricole en production légumière" />
+<appellation intitule="Aide agricole en production végétale" />
+<appellation intitule="Aide horticole" />
+<appellation intitule="Aide maraîcher / maraîchère" />
+<appellation intitule="Castreur / Castreuse de maïs" />
+<appellation intitule="Coupeur / Coupeuse de canne à sucre" />
+<appellation intitule="Cueilleur / Cueilleuse de feuilles de tabac" />
+<appellation intitule="Planteur / Planteuse de café - thé" />
+<appellation intitule="Planteur / Planteuse de canne à sucre" />
+<appellation intitule="Planteur / Planteuse de tabac" />
+<appellation intitule="Ramasseur / Ramasseuse d'ail" />
+<appellation intitule="Ramasseur / Ramasseuse d'asperges" />
+<appellation intitule="Ramasseur / Ramasseuse de champignons" />
+<appellation intitule="Ramasseur / Ramasseuse de légumes" />
+<appellation intitule="Ramasseur / Ramasseuse de pommes de terre" />
+<appellation intitule="Ramasseur / Ramasseuse d'endives" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1403" intitule="Aide d'élevage agricole et aquacole">
+<liste_appellations>
+<appellation intitule="Aide agricole en production laitière" />
+<appellation intitule="Aide de conchyliculture" />
+<appellation intitule="Aide de pisciculture" />
+<appellation intitule="Aide d'élevage aquacole" />
+<appellation intitule="Aide d'élevage bovin" />
+<appellation intitule="Aide d'élevage caprin" />
+<appellation intitule="Aide d'élevage cunicole (lapins)" />
+<appellation intitule="Aide d'élevage de chevaux" />
+<appellation intitule="Aide d'élevage en production de volaille" />
+<appellation intitule="Aide d'élevage en production laitière" />
+<appellation intitule="Aide d'élevage ostréicole" />
+<appellation intitule="Aide d'élevage ovin" />
+<appellation intitule="Aide d'élevage porcin" />
+<appellation intitule="Aide-vacher / Aide-vachère" />
+<appellation intitule="Palefrenier / Palefrenière" />
+<appellation intitule="Ramasseur / Ramasseuse de volaille" />
+<appellation intitule="Ramasseur / Ramasseuse d'oeufs" />
+<appellation intitule="Sexeur / Sexeuse de volailles" />
+<appellation intitule="Tondeur / Tondeuse de moutons" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1404" intitule="Aquaculture">
+<liste_appellations>
+<appellation intitule="Algoculteur / Algocultrice (algues)" />
+<appellation intitule="Aquaculteur / Aquacultrice" />
+<appellation intitule="Astaciculteur / Astacicultrice (écrevisses)" />
+<appellation intitule="Chef d'exploitation aquacole" />
+<appellation intitule="Conchyliculteur / Conchylicultrice (coquillages)" />
+<appellation intitule="Crustaciculteur / Crustacicultrice (crustacés)" />
+<appellation intitule="Echiniculteur / Echinicultrice (oursins)" />
+<appellation intitule="Mytiliculteur / Mytilicultrice (moules)" />
+<appellation intitule="Ostréiculteur / Ostréicultrice (huîtres)" />
+<appellation intitule="Ouvrier / Ouvrière aquacole" />
+<appellation intitule="Ouvrier / Ouvrière mytilicole" />
+<appellation intitule="Ouvrier / Ouvrière ostréicole" />
+<appellation intitule="Ouvrier / Ouvrière piscicole" />
+<appellation intitule="Pectiniculteur / Pectinicultrice (coquilles Saint-Jacques)" />
+<appellation intitule="Pisciculteur / Piscicultrice" />
+<appellation intitule="Salmoniculteur / Salmonicultrice (saumons)" />
+<appellation intitule="Truiticulteur / Truiticultrice (truites)" />
+<appellation intitule="Vénériculteur / Vénéricultrice (palourdes)" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1405" intitule="Arboriculture et viticulture">
+<liste_appellations>
+<appellation intitule="Arboriculteur / Arboricultrice" />
+<appellation intitule="Arboriculteur ornemental / Arboricultrice ornementale" />
+<appellation intitule="Chef de culture arboricole" />
+<appellation intitule="Chef de culture viticole" />
+<appellation intitule="Chef de station fruitière" />
+<appellation intitule="Chef d'exploitation en arboriculture" />
+<appellation intitule="Contremaître / Contremaîtresse en arboriculture" />
+<appellation intitule="Fruiticulteur / Fruiticultrice" />
+<appellation intitule="Kiwiculteur / Kiwicultrice" />
+<appellation intitule="Oléiculteur / Oléicultrice" />
+<appellation intitule="Ouvrier / Ouvrière arboricole" />
+<appellation intitule="Ouvrier / Ouvrière en arboriculture" />
+<appellation intitule="Ouvrier / Ouvrière en viticulture" />
+<appellation intitule="Ouvrier viticole / Ouvrière viticole" />
+<appellation intitule="Pomiculteur / Pomicultrice" />
+<appellation intitule="Producteur / Productrice d'ananas" />
+<appellation intitule="Producteur / Productrice de bananes" />
+<appellation intitule="Pruniculteur / Prunicultrice" />
+<appellation intitule="Régisseur / Régisseuse d'exploitation viticole" />
+<appellation intitule="Responsable d'exploitation viticole" />
+<appellation intitule="Tailleur / Tailleuse de vigne" />
+<appellation intitule="Vigneron manipulant / Vigneronne manipulante" />
+<appellation intitule="Viticulteur / Viticultrice" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1406" intitule="Encadrement équipage de la pêche">
+<liste_appellations>
+<appellation intitule="Capitaine de pêche" />
+<appellation intitule="Commandant / Commandante de pêche" />
+<appellation intitule="Lieutenant / Lieutenante de pêche" />
+<appellation intitule="Patron / Patronne à la pêche" />
+<appellation intitule="Patron / Patronne de pêche" />
+<appellation intitule="Second / Seconde de pêche" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1407" intitule="Élevage bovin ou équin">
+<liste_appellations>
+<appellation intitule="Agriculteur / Agricultrice de production laitière" />
+<appellation intitule="Anier / Anière" />
+<appellation intitule="Bouvier / Bouvière" />
+<appellation intitule="Conducteur / Conductrice d'atelier de production animale bovine ou équine" />
+<appellation intitule="Conducteur / Conductrice d'atelier de vaches allaitantes" />
+<appellation intitule="Eleveur / Eleveuse d'ânes" />
+<appellation intitule="Eleveur / Eleveuse de bisons" />
+<appellation intitule="Eleveur / Eleveuse de bovins" />
+<appellation intitule="Eleveur / Eleveuse de chevaux" />
+<appellation intitule="Eleveur / Eleveuse de poneys" />
+<appellation intitule="Eleveur / Eleveuse de poulains" />
+<appellation intitule="Eleveur / Eleveuse de taurillons" />
+<appellation intitule="Eleveur / Eleveuse de vaches laitières" />
+<appellation intitule="Eleveur / Eleveuse de vaches laitières et de bétail viande" />
+<appellation intitule="Eleveur / Eleveuse de veaux de boucherie" />
+<appellation intitule="Eleveur / Eleveuse en production bovine et/ou équine" />
+<appellation intitule="Eleveur-sélectionneur / Eleveuse-sélectionneuse en production bovine et/ou équine" />
+<appellation intitule="Etalonnier / Etalonnière" />
+<appellation intitule="Gardian" />
+<appellation intitule="Manadier / Manadière" />
+<appellation intitule="Ouvrier / Ouvrière agricole en production bovine" />
+<appellation intitule="Ouvrier / Ouvrière agricole en production équine" />
+<appellation intitule="Ouvrier / Ouvrière agricole en production laitière" />
+<appellation intitule="Ouvrier / Ouvrière de production bovine" />
+<appellation intitule="Ouvrier / Ouvrière d'élevage en production bovine" />
+<appellation intitule="Ouvrier / Ouvrière d'élevage en production bovine biologique" />
+<appellation intitule="Ouvrier / Ouvrière d'élevage en production équine" />
+<appellation intitule="Ouvrier / Ouvrière d'élevage laitier bovin" />
+<appellation intitule="Producteur / Productrice de lait bovin" />
+<appellation intitule="Producteur / Productrice de viande bovine" />
+<appellation intitule="Producteur / Productrice de viande équine" />
+<appellation intitule="Responsable de troupeau" />
+<appellation intitule="Responsable d'élevage bovin" />
+<appellation intitule="Responsable d'élevage équin" />
+<appellation intitule="Vacher / Vachère" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1408" intitule="Élevage d'animaux sauvages ou de compagnie">
+<liste_appellations>
+<appellation intitule="Animalier / Animalière de laboratoire" />
+<appellation intitule="Animalier / Animalière en parc zoologique" />
+<appellation intitule="Apiculteur / Apicultrice" />
+<appellation intitule="Coturniculteur / Coturnicultrice (cailles)" />
+<appellation intitule="Cyniculteur / Cynicultrice (gibiers)" />
+<appellation intitule="Dresseur / Dresseuse de chiens" />
+<appellation intitule="Eleveur / Eleveuse d'animaux à fourrure" />
+<appellation intitule="Eleveur / Eleveuse d'animaux de compagnie" />
+<appellation intitule="Eleveur / Eleveuse d'autruches" />
+<appellation intitule="Eleveur / Eleveuse de cervidés" />
+<appellation intitule="Eleveur / Eleveuse de chats" />
+<appellation intitule="Eleveur / Eleveuse de chiens" />
+<appellation intitule="Eleveur / Eleveuse de chiens guides" />
+<appellation intitule="Eleveur / Eleveuse de crocodiles" />
+<appellation intitule="Eleveur / Eleveuse de grands gibiers" />
+<appellation intitule="Eleveur / Eleveuse de lamas" />
+<appellation intitule="Eleveur / Eleveuse de petits gibiers" />
+<appellation intitule="Eleveur / Eleveuse de reptiles" />
+<appellation intitule="Eleveur / Eleveuse de reptiles aquatiques" />
+<appellation intitule="Eleveur / Eleveuse de rongeurs" />
+<appellation intitule="Eleveur / Eleveuse de visons" />
+<appellation intitule="Eleveur / Eleveuse d'escargots" />
+<appellation intitule="Eleveur / Eleveuse d'insectes" />
+<appellation intitule="Féliniculteur / Félinicultrice (félins)" />
+<appellation intitule="Garçon / Serveuse de chenil" />
+<appellation intitule="Héliciculteur / Hélicicultrice (escargots)" />
+<appellation intitule="Lombriculteur / Lombricultrice (lombrics)" />
+<appellation intitule="Ouvrier / Ouvrière cynicole" />
+<appellation intitule="Raniculteur / Ranicultrice (grenouilles)" />
+<appellation intitule="Sériciculteur / Séricicultrice (vers à soie)" />
+<appellation intitule="Zootechnicien / Zootechnicienne" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1409" intitule="Élevage de lapins et volailles">
+<liste_appellations>
+<appellation intitule="Accouveur / Accouveuse" />
+<appellation intitule="Aviculteur / Avicultrice" />
+<appellation intitule="Eleveur / Eleveuse de lapins" />
+<appellation intitule="Eleveur / Eleveuse de lapins angoras" />
+<appellation intitule="Eleveur / Eleveuse de lapins ou de volailles" />
+<appellation intitule="Eleveur / Eleveuse de volailles" />
+<appellation intitule="Eleveur-sélectionneur / Eleveuse-sélectionneuse en production de lapins" />
+<appellation intitule="Eleveur-sélectionneur / Eleveuse-sélectionneuse en production de volailles" />
+<appellation intitule="Engraisseur / Engraisseuse de lapins ou de volailles" />
+<appellation intitule="Gaveur / Gaveuse" />
+<appellation intitule="Naisseur / Naisseuse en production de lapins ou de volailles" />
+<appellation intitule="Ouvrier / Ouvrière agricole en production de lapins" />
+<appellation intitule="Ouvrier / Ouvrière agricole en production de volailles" />
+<appellation intitule="Ouvrier / Ouvrière agricole spécialisation aviculture" />
+<appellation intitule="Ouvrier / Ouvrière avicole" />
+<appellation intitule="Ouvrier / Ouvrière cunicole (lapins)" />
+<appellation intitule="Ouvrier / Ouvrière d'accouvage" />
+<appellation intitule="Ouvrier / Ouvrière d'élevage en production de lapins" />
+<appellation intitule="Ouvrier / Ouvrière d'élevage en production de volailles" />
+<appellation intitule="Responsable de poulailler" />
+<appellation intitule="Responsable d'élevage avicole" />
+<appellation intitule="Responsable d'élevage cunicole (lapins)" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1410" intitule="Élevage ovin ou caprin">
+<liste_appellations>
+<appellation intitule="Berger / Bergère" />
+<appellation intitule="Berger / Bergère de production laitière" />
+<appellation intitule="Berger / Bergère d'estives" />
+<appellation intitule="Berger fromager / Bergère fromagère" />
+<appellation intitule="Chevrier / Chevrière" />
+<appellation intitule="Chevrier fromager / Chevrière fromagère" />
+<appellation intitule="Eleveur / Eleveuse d'agneaux" />
+<appellation intitule="Eleveur / Eleveuse de brebis laitières" />
+<appellation intitule="Eleveur / Eleveuse de caprins" />
+<appellation intitule="Eleveur / Eleveuse de chèvres" />
+<appellation intitule="Eleveur / Eleveuse de chèvres angoras" />
+<appellation intitule="Eleveur / Eleveuse de moutons" />
+<appellation intitule="Eleveur / Eleveuse d'ovins" />
+<appellation intitule="Eleveur / Eleveuse en production ovine et caprine" />
+<appellation intitule="Eleveur laitier / Eleveuse laitière en production ovine et caprine" />
+<appellation intitule="Eleveur-sélectionneur / Eleveuse-sélectionneuse d'ovins et de caprins" />
+<appellation intitule="Moutonnier / Moutonnière" />
+<appellation intitule="Ouvrier / Ouvrière agricole en production caprine" />
+<appellation intitule="Ouvrier / Ouvrière agricole en production laitière d'ovins ou de caprins" />
+<appellation intitule="Ouvrier / Ouvrière agricole en production ovine" />
+<appellation intitule="Ouvrier / Ouvrière de production ovine" />
+<appellation intitule="Ouvrier / Ouvrière d'élevage en production caprine" />
+<appellation intitule="Ouvrier / Ouvrière d'élevage en production ovine" />
+<appellation intitule="Ouvrier / Ouvrière d'élevage laitier en production ovine ou caprine" />
+<appellation intitule="Producteur / Productrice de lait d'ovin et de caprin" />
+<appellation intitule="Responsable d'élevage en production caprine" />
+<appellation intitule="Responsable d'élevage en production ovine" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1411" intitule="Élevage porcin">
+<liste_appellations>
+<appellation intitule="Chef de production agricole porcine" />
+<appellation intitule="Chef d'élevage porcin" />
+<appellation intitule="Chef d'exploitation agricole porcine" />
+<appellation intitule="Conducteur / Conductrice d'atelier de production animale porcine" />
+<appellation intitule="Eleveur / Eleveuse de porcins" />
+<appellation intitule="Eleveur / Eleveuse de porcs" />
+<appellation intitule="Eleveur / Eleveuse en production porcine" />
+<appellation intitule="Eleveur-sélectionneur / Eleveuse-sélectionneuse en production porcine" />
+<appellation intitule="Engraisseur / Engraisseuse de porcelets" />
+<appellation intitule="Naisseur-engraisseur porcin / Naisseuse-engraisseuse porcine" />
+<appellation intitule="Ouvrier / Ouvrière agricole en production porcine" />
+<appellation intitule="Ouvrier / Ouvrière de production porcine" />
+<appellation intitule="Ouvrier / Ouvrière d'élevage en production porcine" />
+<appellation intitule="Ouvrier agricole polyvalent / Ouvrière agricole polyvalente en élevage porcin" />
+<appellation intitule="Porcher / Porchère" />
+<appellation intitule="Producteur / Productrice hors sol porcin" />
+<appellation intitule="Régisseur / Régisseuse d'exploitation agricole porcine" />
+<appellation intitule="Régisseur / Régisseuse en agriculture porcine" />
+<appellation intitule="Régisseur / Régisseuse polyculture élevage porcin" />
+<appellation intitule="Responsable d'élevage porcin" />
+<appellation intitule="Second / Seconde d'exploitation porcine" />
+<appellation intitule="Technicien spécialisé / Technicienne spécialisée en conduite d'élevage porcin" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1412" intitule="Fabrication et affinage de fromages">
+<liste_appellations>
+<appellation intitule="Affineur / Affineuse de fromages" />
+<appellation intitule="Fabricant-affineur / Fabricante-affineuse de fromages" />
+<appellation intitule="Fromager / Fromagère" />
+<appellation intitule="Fromager-affineur / Fromagère-affineuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1413" intitule="Fermentation de boissons alcoolisées">
+<liste_appellations>
+<appellation intitule="Brasseur / Brasseuse de bière" />
+<appellation intitule="Brasseur-malteur / Brasseuse-malteuse" />
+<appellation intitule="Caviste" />
+<appellation intitule="Chef caviste" />
+<appellation intitule="Chef de cave" />
+<appellation intitule="Cidrier / Cidrière" />
+<appellation intitule="Employé / Employée de chai" />
+<appellation intitule="Maître / Maîtresse de chai" />
+<appellation intitule="OEnologue" />
+<appellation intitule="OEnologue conseil" />
+<appellation intitule="OEnologue en recherche développement" />
+<appellation intitule="Ouvrier / Ouvrière de chai" />
+<appellation intitule="Ouvrier / Ouvrière de cidrerie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1414" intitule="Horticulture et maraîchage">
+<liste_appellations>
+<appellation intitule="Aspigiculteur / Aspigicultrice" />
+<appellation intitule="Bulbiculteur / Bulbicultrice" />
+<appellation intitule="Champignonniste" />
+<appellation intitule="Chef de culture champignonniste" />
+<appellation intitule="Chef de culture en exploitation maraîchère" />
+<appellation intitule="Chef de culture floriculture" />
+<appellation intitule="Chef de culture horticole" />
+<appellation intitule="Chef de culture maraîchère" />
+<appellation intitule="Chef de culture pépinière" />
+<appellation intitule="Chef d'exploitation en maraîchage-horticulture" />
+<appellation intitule="Conducteur / Conductrice de travaux horticoles" />
+<appellation intitule="Cressiculteur / Cressicultrice" />
+<appellation intitule="Cultivateur / Cultivatrice de primeurs" />
+<appellation intitule="Cultivateur / Cultivatrice d'endives" />
+<appellation intitule="Directeur / Directrice des cultures" />
+<appellation intitule="Endivier / Endivière" />
+<appellation intitule="Floriculteur / Floricultrice" />
+<appellation intitule="Horticulteur / Horticultrice" />
+<appellation intitule="Lavandiculteur / Lavandicultrice" />
+<appellation intitule="Maraîcher / Maraîchère" />
+<appellation intitule="Osiériculteur / Osiéricultrice" />
+<appellation intitule="Ouvrier / Ouvrière agricole en maraîchage-horticulture" />
+<appellation intitule="Ouvrier / Ouvrière champignonniste" />
+<appellation intitule="Ouvrier / Ouvrière de champignonnière" />
+<appellation intitule="Ouvrier / Ouvrière de culture maraîchère" />
+<appellation intitule="Ouvrier / Ouvrière en production horticole biologique" />
+<appellation intitule="Ouvrier / Ouvrière en production maraîchère biologique" />
+<appellation intitule="Ouvrier / Ouvrière en production pépinière biologique" />
+<appellation intitule="Ouvrier / Ouvrière horticole" />
+<appellation intitule="Ouvrier / Ouvrière horticole serriste" />
+<appellation intitule="Ouvrier / Ouvrière pépiniériste" />
+<appellation intitule="Ouvrier / Ouvrière serriste" />
+<appellation intitule="Ouvrier maraîcher / Ouvrière maraîchère" />
+<appellation intitule="Ouvrier maraîcher / Ouvrière maraîchère de culture légumière" />
+<appellation intitule="Ouvrier maraîcher / Ouvrière maraîchère primeuriste" />
+<appellation intitule="Pépiniériste" />
+<appellation intitule="Pépiniériste viticole" />
+<appellation intitule="Primeuriste" />
+<appellation intitule="Producteur / Productrice de plantes à parfum" />
+<appellation intitule="Producteur / Productrice de plantes aromatiques" />
+<appellation intitule="Producteur / Productrice de plantes in vitro" />
+<appellation intitule="Producteur / Productrice de plantes médicinales" />
+<appellation intitule="Producteur / Productrice de semences" />
+<appellation intitule="Producteur / Productrice de tabac" />
+<appellation intitule="Producteur / Productrice de tomates" />
+<appellation intitule="Responsable de champignonnière" />
+<appellation intitule="Rosiériste" />
+<appellation intitule="Second / Seconde d'exploitation horticole" />
+<appellation intitule="Semencier / Semencière" />
+<appellation intitule="Serriste" />
+<appellation intitule="Tabaculteur / Tabacultrice" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1415" intitule="Equipage de la pêche">
+<liste_appellations>
+<appellation intitule="Bosco" />
+<appellation intitule="Goémonier / Goémonière" />
+<appellation intitule="Maître / Maîtresse d'équipage à la pêche" />
+<appellation intitule="Marin calier" />
+<appellation intitule="Marin fileyeur" />
+<appellation intitule="Marin glaceur" />
+<appellation intitule="Marin grande pêche" />
+<appellation intitule="Marin-pêcheur" />
+<appellation intitule="Marin-trancheur" />
+<appellation intitule="Pêcheur / Pêcheuse à pied" />
+<appellation intitule="Ramendeur / Ramendeuse" />
+<appellation intitule="Timonier / Timonière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1416" intitule="Polyculture, élevage">
+<liste_appellations>
+<appellation intitule="Agriculteur / Agricultrice" />
+<appellation intitule="Agriculteur / Agricultrice en polyculture" />
+<appellation intitule="Betteravier / Betteravière" />
+<appellation intitule="Céréalier / Céréalière" />
+<appellation intitule="Chef de culture céréalière" />
+<appellation intitule="Chef de production agricole" />
+<appellation intitule="Chef d'équipe d'exploitation agricole" />
+<appellation intitule="Chef d'équipe en polyculture élevage" />
+<appellation intitule="Chef d'exploitation agricole" />
+<appellation intitule="Contremaître / Contremaîtresse agricole" />
+<appellation intitule="Contremaître / Contremaîtresse d'exploitation agricole" />
+<appellation intitule="Cultivateur / Cultivatrice de grandes cultures" />
+<appellation intitule="Cultivateur / Cultivatrice de plein champ" />
+<appellation intitule="Exploitant / Exploitante agricole" />
+<appellation intitule="Gérant / Gérante d'exploitation agricole" />
+<appellation intitule="Intendant / Intendante d'exploitation agricole" />
+<appellation intitule="Maïsiculteur / Maïsicultrice" />
+<appellation intitule="Ouvrier / Ouvrière agricole de grandes cultures" />
+<appellation intitule="Ouvrier / Ouvrière en polyculture élevage" />
+<appellation intitule="Ouvrier agricole polyvalent / Ouvrière agricole polyvalente" />
+<appellation intitule="Polyculteur éleveur / Polycultrice éleveuse" />
+<appellation intitule="Producteur / Productrice de cannes à sucre" />
+<appellation intitule="Producteur / Productrice de pommes de terre" />
+<appellation intitule="Producteur / Productrice de protéagineux" />
+<appellation intitule="Producteur / Productrice d'oléagineux" />
+<appellation intitule="Régisseur / Régisseuse d'exploitation agricole" />
+<appellation intitule="Régisseur / Régisseuse en agriculture" />
+<appellation intitule="Riziculteur / Rizicultrice" />
+<appellation intitule="Second / Seconde d'exploitation en polyculture élevage" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1417" intitule="Saliculture">
+<liste_appellations>
+<appellation intitule="Paludier / Paludière" />
+<appellation intitule="Producteur / Productrice de sel" />
+<appellation intitule="Saliculteur / Salicultrice" />
+<appellation intitule="Salinier / Salinière" />
+<appellation intitule="Saunier / Saunière" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="A15" intitule="Soins aux animaux">
+<fiche
+ code="A1501" intitule="Aide aux soins animaux">
+<liste_appellations>
+<appellation intitule="Aide-vétérinaire" />
+<appellation intitule="Auxiliaire de santé animale" />
+<appellation intitule="Auxiliaire de soins aux animaux" />
+<appellation intitule="Auxiliaire de soins vétérinaires" />
+<appellation intitule="Auxiliaire de vétérinaire" />
+<appellation intitule="Auxiliaire Spécialisé / Spécialisée Vétérinaire -ASV-" />
+<appellation intitule="Auxiliaire vétérinaire" />
+<appellation intitule="Auxiliaire Vétérinaire Qualifié / Qualifiée -AVQ-" />
+<appellation intitule="Soigneur / Soigneuse de chevaux" />
+<appellation intitule="Soigneur / Soigneuse de ménagerie" />
+<appellation intitule="Soigneur / Soigneuse d'équidés" />
+<appellation intitule="Soigneur / Soigneuse en parc zoologique" />
+<appellation intitule="Soigneur / Soigneuse en pension animale" />
+<appellation intitule="Soigneur animalier / Soigneuse animalière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1502" intitule="Podologie animale">
+<liste_appellations>
+<appellation intitule="Maréchal-ferrant / Maréchale-ferrant" />
+<appellation intitule="Pareur / Pareuse d'onglon" />
+<appellation intitule="Pédicure pour bovin" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1503" intitule="Toilettage des animaux">
+<liste_appellations>
+<appellation intitule="Assistant toiletteur / Assistante toiletteuse" />
+<appellation intitule="Baigneur-peigneur / Baigneuse-peigneuse d'animaux" />
+<appellation intitule="Toiletteur / Toiletteuse canin" />
+<appellation intitule="Toiletteur / Toiletteuse d'animaux" />
+<appellation intitule="Toiletteur / Toiletteuse pour chiens" />
+<appellation intitule="Tondeur / Tondeuse d'animaux" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="A1504" intitule="Santé animale">
+<liste_appellations>
+<appellation intitule="Vétérinaire" />
+<appellation intitule="Vétérinaire assistant / assistante" />
+<appellation intitule="Vétérinaire biologiste" />
+<appellation intitule="Vétérinaire canin" />
+<appellation intitule="Vétérinaire équin" />
+<appellation intitule="Vétérinaire mixte" />
+<appellation intitule="Vétérinaire praticien / praticienne" />
+<appellation intitule="Vétérinaire rural / rurale" />
+<appellation intitule="Vétérinaire sanitaire" />
+<appellation intitule="Vétérinaire sapeur-pompier / sapeuse-pompière" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="B" intitule="ART ET FAÇONNAGE D'OUVRAGES D'ART">
+<domaine code="B11" intitule="Arts plastiques">
+<fiche
+ code="B1101" intitule="Création en arts plastiques">
+<liste_appellations>
+<appellation intitule="Aquarelliste" />
+<appellation intitule="Artiste conceptuel / conceptuelle" />
+<appellation intitule="Artiste peintre" />
+<appellation intitule="Artiste peintre à l'aérographe" />
+<appellation intitule="Artiste peintre décorateur / décoratrice" />
+<appellation intitule="Artiste plasticien / plasticienne" />
+<appellation intitule="Artiste sérigraphe" />
+<appellation intitule="Artiste sonore" />
+<appellation intitule="Calligraphe" />
+<appellation intitule="Créateur / Créatrice en arts plastiques" />
+<appellation intitule="Dessinateur / Dessinatrice d'art" />
+<appellation intitule="Dessinateur-illustrateur / Dessinatrice-illustratrice" />
+<appellation intitule="Lithographe" />
+<appellation intitule="Pastelliste" />
+<appellation intitule="Peintre animalier / animalière" />
+<appellation intitule="Peintre cartonnier / cartonnière" />
+<appellation intitule="Peintre d'art" />
+<appellation intitule="Peintre en fresque" />
+<appellation intitule="Peintre en trompe-l'oeil" />
+<appellation intitule="Peintre lithographe" />
+<appellation intitule="Peintre mosaïste" />
+<appellation intitule="Peintre paysagiste" />
+<appellation intitule="Performeur / Performeuse" />
+<appellation intitule="Plasticien / Plasticienne" />
+<appellation intitule="Portraitiste" />
+<appellation intitule="Sculpteur / Sculptrice" />
+<appellation intitule="Sculpteur / Sculptrice ornemaniste" />
+<appellation intitule="Sculpteur / Sculptrice statuaire" />
+<appellation intitule="Sculpteur animalier / Sculptrice animalière" />
+<appellation intitule="Sculpteur-médailleur / Sculptrice-médailleuse" />
+<appellation intitule="Sculpteur-modeleur / Sculptrice-modeleuse" />
+<appellation intitule="Vidéaste" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="B12" intitule="Céramique">
+<fiche
+ code="B1201" intitule="Réalisation d'objets décoratifs et utilitaires en céramique et matériaux de synthèse">
+<liste_appellations>
+<appellation intitule="Céramiste concepteur / conceptrice" />
+<appellation intitule="Céramiste d'art" />
+<appellation intitule="Céramiste praticien / praticienne" />
+<appellation intitule="Garnisseur / Garnisseuse en céramique" />
+<appellation intitule="Modeleur sculpteur / Modeleuse sculptrice en céramique" />
+<appellation intitule="Modeleur sculpteur / Modeleuse sculptrice en matériaux de synthèse" />
+<appellation intitule="Opérateur / Opératrice en restauration de céramique" />
+<appellation intitule="Potier / Potière" />
+<appellation intitule="Potier / Potière en réfractaire" />
+<appellation intitule="Restaurateur / Restauratrice de céramique" />
+<appellation intitule="Santonnier / Santonnière" />
+<appellation intitule="Tourneur / Tourneuse en poterie" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="B13" intitule="Décoration">
+<fiche
+ code="B1301" intitule="Décoration d'espaces vente">
+<liste_appellations>
+<appellation intitule="Agenceur / Agenceuse d'intérieur de magasin" />
+<appellation intitule="Décorateur / Décoratice étalagiste" />
+<appellation intitule="Etalagiste" />
+<appellation intitule="Etalagiste décorateur / décoratrice" />
+<appellation intitule="Etalagiste en articles de luxe" />
+<appellation intitule="Etalagiste en bijouterie" />
+<appellation intitule="Etalagiste en chaussures" />
+<appellation intitule="Etalagiste en maroquinerie" />
+<appellation intitule="Etalagiste en parfumerie" />
+<appellation intitule="Etalagiste en prêt-à-porter" />
+<appellation intitule="Merchandiser visuel / Merchandiseuse visuelle" />
+<appellation intitule="Scénographe produits" />
+<appellation intitule="Scénographe-muséographe" />
+<appellation intitule="Visuel/visual marchandiseur / marchandiseuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1302" intitule="Décoration d'objets d'art et artisanaux">
+<liste_appellations>
+<appellation intitule="Argenteur / Argenteuse en orfèvrerie" />
+<appellation intitule="Argenteur / Argenteuse sur feuille" />
+<appellation intitule="Argenteur / Argenteuse sur verre ou cristal" />
+<appellation intitule="Décorateur / Décoratrice en verrerie" />
+<appellation intitule="Décorateur / Décoratrice sur verre" />
+<appellation intitule="Doreur / Doreuse d'art" />
+<appellation intitule="Doreur / Doreuse ornemaniste" />
+<appellation intitule="Doreur / Doreuse sur tranche" />
+<appellation intitule="Emailleur / Emailleuse d'art" />
+<appellation intitule="Emailleur / Emailleuse sur verre" />
+<appellation intitule="Fileur-étireur / Fileuse-étireuse à la main" />
+<appellation intitule="Finisseur / Finisseuse d'art" />
+<appellation intitule="Finisseur-décorateur / Finisseuse-décoratrice d'objets d'art et artisanaux" />
+<appellation intitule="Imprimeur / Imprimeuse papier peint à la planche" />
+<appellation intitule="Laqueur / Laqueuse sur bois" />
+<appellation intitule="Laqueur-décorateur / Laqueuse-décoratrice" />
+<appellation intitule="Laqueur-doreur / Laqueuse-doreuse" />
+<appellation intitule="Ouvrier / Ouvrière de décoration à la main" />
+<appellation intitule="Patineur / Patineuse sur bois à la main" />
+<appellation intitule="Peintre à la main sur verre" />
+<appellation intitule="Peintre finisseur / finisseuse à la main" />
+<appellation intitule="Peintre sur céramique" />
+<appellation intitule="Peintre sur soie" />
+<appellation intitule="Peintre-fileur-décorateur / Peintre-fileuse-décoratrice en céramique" />
+<appellation intitule="Peintre-fileur-incrustateur / Peintre-fileuse-incrustatrice à la main" />
+<appellation intitule="Ponceur-vernisseur / Ponceuse-vernisseuse à la main" />
+<appellation intitule="Restaurateur / Restauratrice de tableaux" />
+<appellation intitule="Restaurateur / Restauratrice sur verre" />
+<appellation intitule="Restaurateur-doreur / Restauratrice-doreuse sur oeuvres d'art" />
+<appellation intitule="Retoucheur / Retoucheuse bois" />
+<appellation intitule="Vernisseur / Vernisseuse au tampon" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1303" intitule="Gravur">
+<liste_appellations>
+<appellation intitule="Aquafortiste" />
+<appellation intitule="Ciseleur / Ciseleuse" />
+<appellation intitule="Etampeur / Etampeuse" />
+<appellation intitule="Graveur / Graveuse à l'acide" />
+<appellation intitule="Graveur / Graveuse à l'eau forte" />
+<appellation intitule="Graveur / Graveuse au sable" />
+<appellation intitule="Graveur / Graveuse d'art" />
+<appellation intitule="Graveur / Graveuse en miroiterie" />
+<appellation intitule="Graveur / Graveuse en orfèvrerie" />
+<appellation intitule="Graveur / Graveuse en taille douce" />
+<appellation intitule="Graveur / Graveuse héraldique" />
+<appellation intitule="Graveur / Graveuse ornementaliste" />
+<appellation intitule="Graveur / Graveuse sur bois" />
+<appellation intitule="Graveur / Graveuse sur cristal" />
+<appellation intitule="Graveur / Graveuse sur métal" />
+<appellation intitule="Graveur / Graveuse sur pierre" />
+<appellation intitule="Graveur / Graveuse sur verre" />
+<appellation intitule="Graveur et fondeur / Graveuse et fondeuse de caractères" />
+<appellation intitule="Graveur-ciseleur / Graveuse-ciseleuse" />
+<appellation intitule="Graveur-polisseur / Graveuse-polisseuse de roches" />
+<appellation intitule="Guillocheur / Guillocheuse" />
+<appellation intitule="Taille-doucier / Taille-doucière" />
+<appellation intitule="Tailleur / Tailleuse sur cristal" />
+<appellation intitule="Tailleur-graveur / Tailleuse-graveuse" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="B14" intitule="Fibres et papier">
+<fiche
+ code="B1401" intitule="Réalisation d'objets en lianes, fibres et brins végétaux">
+<liste_appellations>
+<appellation intitule="Canneur / Canneuse de chaises" />
+<appellation intitule="Canneur rempailleur / Canneuse rempailleuse" />
+<appellation intitule="Rempailleur / Rempailleuse de chaises" />
+<appellation intitule="Rotinier / Rotinière" />
+<appellation intitule="Vannier / Vannière" />
+<appellation intitule="Vannier osiériculteur / Vannière osiéricultrice" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1402" intitule="Reliure et restauration de livres et archives">
+<liste_appellations>
+<appellation intitule="Chef d'atelier en reliure artisanale" />
+<appellation intitule="Conservateur-restaurateur / Conservatrice-restauratrice de livres" />
+<appellation intitule="Relieur / Relieuse d'art" />
+<appellation intitule="Relieur / Relieuse main" />
+<appellation intitule="Relieur-doreur / Relieuse-doreuse" />
+<appellation intitule="Restaurateur / Restauratrice de livres anciens" />
+<appellation intitule="Restaurateur / Restauratrice de papier" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="B15" intitule="Instruments de musique">
+<fiche
+ code="B1501" intitule="Fabrication et réparation d'instruments de musique">
+<liste_appellations>
+<appellation intitule="Accordeur / Accordeuse de pianos" />
+<appellation intitule="Accordeur-réparateur / Accordeuse-réparatrice de pianos" />
+<appellation intitule="Archetier / Archetière" />
+<appellation intitule="Clétier / Clétière" />
+<appellation intitule="Fabricant / Fabricante d'accordéons" />
+<appellation intitule="Fabricant / Fabricante d'anches" />
+<appellation intitule="Fabricant / Fabricante de percussions" />
+<appellation intitule="Facteur / Factrice de clavecins" />
+<appellation intitule="Facteur / Factrice de harpes" />
+<appellation intitule="Facteur / Factrice de percussions" />
+<appellation intitule="Facteur / Factrice de pianos" />
+<appellation intitule="Facteur / Factrice d'instruments à vent" />
+<appellation intitule="Facteur / Factrice d'instruments à vent-bois" />
+<appellation intitule="Facteur / Factrice d'instruments à vent-cuivre" />
+<appellation intitule="Facteur / Factrice d'instruments anciens" />
+<appellation intitule="Facteur / Factrice d'instruments de musique" />
+<appellation intitule="Facteur / Factrice d'orgues" />
+<appellation intitule="Facteur-réparateur / Factrice-réparatrice d'instruments de musique" />
+<appellation intitule="Facteur-restaurateur / Factrice-restauratrice d'instruments de musique" />
+<appellation intitule="Luthier / Luthière" />
+<appellation intitule="Luthier / Luthière du quatuor" />
+<appellation intitule="Luthier / Luthière guitare" />
+<appellation intitule="Luthier / Luthière vents" />
+<appellation intitule="Monteur / Monteuse en cordes de piano" />
+<appellation intitule="Restaurateur / Restauratrice de pianos" />
+<appellation intitule="Restaurateur / Restauratrice d'instruments à cordes" />
+<appellation intitule="Restaurateur / Restauratrice d'instruments à percussion" />
+<appellation intitule="Restaurateur / Restauratrice d'instruments à vent" />
+<appellation intitule="Restaurateur / Restauratrice d'instruments de musique" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="B16" intitule="Métal, verre, bijouterie et horlogerie">
+<fiche
+ code="B1601" intitule="Métallerie d'art">
+<liste_appellations>
+<appellation intitule="Armurier / Armurière d'art" />
+<appellation intitule="Bronzier / Bronzière" />
+<appellation intitule="Bronzier / Bronzière d'art" />
+<appellation intitule="Chaudronnier / Chaudronnière d'art" />
+<appellation intitule="Coutelier / Coutelière d'art" />
+<appellation intitule="Coutelier-réparateur / Coutelière-réparatrice" />
+<appellation intitule="Dinandier / Dinandière" />
+<appellation intitule="Estampeur / Estampeuse d'art" />
+<appellation intitule="Etainier / Etainière" />
+<appellation intitule="Ferronnier / Ferronnière d'art" />
+<appellation intitule="Ferronnier / Ferronnière feuillagiste" />
+<appellation intitule="Fondeur / Fondeuse de bronze" />
+<appellation intitule="Fondeur / Fondeuse de cloches" />
+<appellation intitule="Forgeron / Forgeronne d'art" />
+<appellation intitule="Métallier / Métallière d'art" />
+<appellation intitule="Monteur / Monteuse en bronze" />
+<appellation intitule="Serrurier / Serrurière d'art" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1602" intitule="Réalisation d'objets artistiques et fonctionnels en verre">
+<liste_appellations>
+<appellation intitule="Chef de place verrier / verrière" />
+<appellation intitule="Façonnier / Façonnière d'objets en verre" />
+<appellation intitule="Fileur / Fileuse de verre" />
+<appellation intitule="Flaconneur / Flaconneuse" />
+<appellation intitule="Fondeur / Fondeuse verre main" />
+<appellation intitule="Restaurateur / Restauratrice de vitraux" />
+<appellation intitule="Sculpteur / Sculptrice sur verre" />
+<appellation intitule="Souffleur / Souffleuse au moule" />
+<appellation intitule="Souffleur / Souffleuse de verre" />
+<appellation intitule="Souffleur / Souffleuse de verre à la canne" />
+<appellation intitule="Souffleur / Souffleuse de verre au chalumeau" />
+<appellation intitule="Souffleur / Souffleuse de verre-néoniste" />
+<appellation intitule="Thermoformeur / Thermoformeuse en verre" />
+<appellation intitule="Verrier / Verrière à la calotte" />
+<appellation intitule="Verrier / Verrière à la canne" />
+<appellation intitule="Verrier / Verrière à la flamme" />
+<appellation intitule="Verrier / Verrière à la main" />
+<appellation intitule="Verrier / Verrière à main levée" />
+<appellation intitule="Verrier / Verrière assortiments" />
+<appellation intitule="Verrier / Verrière d'art" />
+<appellation intitule="Verrier / Verrière moulure" />
+<appellation intitule="Verrier transformateur / Verrière transformatrice à froid" />
+<appellation intitule="Vitrailliste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1603" intitule="Réalisation d'ouvrages en bijouterie, joaillerie et orfèvrerie">
+<liste_appellations>
+<appellation intitule="Bijoutier / Bijoutière" />
+<appellation intitule="Bijoutier / Bijoutière fantaisie" />
+<appellation intitule="Bijoutier joaillier / Bijoutière joaillière" />
+<appellation intitule="Chaîniste" />
+<appellation intitule="Diamantaire" />
+<appellation intitule="Enfileur / Enfileuse de perles" />
+<appellation intitule="Gemmologue" />
+<appellation intitule="Gemmologue tailleur / tailleuse" />
+<appellation intitule="Glypticien / Glypticienne" />
+<appellation intitule="Graveur / Graveuse sur pierres fines" />
+<appellation intitule="Joaillier / Joaillière" />
+<appellation intitule="Joaillier / Joaillière modéliste" />
+<appellation intitule="Lapidaire diamant" />
+<appellation intitule="Lapidaire pierres fines et précieuses" />
+<appellation intitule="Médailleur / Médailleuse" />
+<appellation intitule="Modéliste en bijouterie, orfèvrerie, joaillerie" />
+<appellation intitule="Modéliste-maquettiste en bijouterie" />
+<appellation intitule="Monteur / Monteuse en orfèvrerie" />
+<appellation intitule="Orfèvre" />
+<appellation intitule="Planeur / Planeuse à la main en orfèvrerie" />
+<appellation intitule="Restaurateur / Restauratrice en orfèvrerie" />
+<appellation intitule="Sertisseur / Sertisseuse" />
+<appellation intitule="Sertisseur / Sertisseuse en bijouterie, joaillerie" />
+<appellation intitule="Tailleur / Tailleuse de diamant" />
+<appellation intitule="Tailleur / Tailleuse de pierres fines" />
+<appellation intitule="Tourneur-repousseur / Tourneuse-repousseuse en orfèvrerie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1604" intitule="Réparatio">
+<liste_appellations>
+<appellation intitule="Emboîteur / Emboîteuse en horlogerie" />
+<appellation intitule="Horloger / Horlogère" />
+<appellation intitule="Horloger-réparateur / Horlogère-réparatrice" />
+<appellation intitule="Monteur / Monteuse en systèmes horlogers" />
+<appellation intitule="Opérateur / Opératrice d'assemblage en horlogerie" />
+<appellation intitule="Opérateur / Opératrice de posage emboîtage en horlogerie" />
+<appellation intitule="Pendulier / Pendulière" />
+<appellation intitule="Réparateur / Réparatrice en systèmes horlogers" />
+<appellation intitule="Réparateur rhabilleur / Réparatrice rhabilleuse en horlogerie" />
+<appellation intitule="Visiteur horloger / Visiteuse horlogère" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="B17" intitule="Taxidermie">
+<fiche
+ code="B1701" intitule="Conservation et reconstitution d'espèces animales">
+<liste_appellations>
+<appellation intitule="Naturaliste-taxidermiste" />
+<appellation intitule="Ostéologue" />
+<appellation intitule="Poseur décorateur / Poseuse décoratrice en conservation animale" />
+<appellation intitule="Préparateur / Préparatrice en ostéologie-moulage" />
+<appellation intitule="Préparateur / Préparatrice gestionnaire de collection en taxidermie" />
+<appellation intitule="Restaurateur / Restauratrice de collections zoologiques" />
+<appellation intitule="Taxidermiste" />
+<appellation intitule="Taxidermiste restaurateur / restauratrice" />
+<appellation intitule="Technicien / Technicienne en ostéologie-moulage" />
+<appellation intitule="Technicien taxidermiste / Technicienne taxidermiste" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="B18" intitule="Tissu et cuirs">
+<fiche
+ code="B1801" intitule="Réalisation d'articles de chapellerie">
+<liste_appellations>
+<appellation intitule="Casquettier / Casquettière" />
+<appellation intitule="Chapelier / Chapelière" />
+<appellation intitule="Créateur confectionneur / Créatrice confectionneuse de chapeaux" />
+<appellation intitule="Képissier / Képissière" />
+<appellation intitule="Modiste" />
+<appellation intitule="Ouvrier chapelier / Ouvrière chapelière pédaliste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1802" intitule="Réalisation d'articles en cuir et matériaux souples (hors vêtement)">
+<liste_appellations>
+<appellation intitule="Bottier / Bottière" />
+<appellation intitule="Bourrelier / Bourrelière" />
+<appellation intitule="Ceinturier / Ceinturière" />
+<appellation intitule="Fabricant / Fabricante de chaussures sur mesure" />
+<appellation intitule="Gainier / Gainière" />
+<appellation intitule="Gantier / Gantière" />
+<appellation intitule="Garnisseur / Garnisseuse automobile" />
+<appellation intitule="Malletier / Malletière" />
+<appellation intitule="Maroquinier / Maroquinière" />
+<appellation intitule="Parurier / Parurière" />
+<appellation intitule="Sellier / Sellière" />
+<appellation intitule="Sellier-garnisseur / Sellière-garnisseuse" />
+<appellation intitule="Sellier-garnisseur / Sellière-garnisseuse automobile" />
+<appellation intitule="Sellier-harnacheur / Sellière-harnacheuse" />
+<appellation intitule="Sellier-maroquinier / Sellière-maroquinière" />
+<appellation intitule="Voilier / Voilière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1803" intitule="Réalisation de vêtements sur mesure ou en petite série">
+<liste_appellations>
+<appellation intitule="Apiéceur / Apiéceuse" />
+<appellation intitule="Corsetière" />
+<appellation intitule="Coupeur-tailleur / Coupeuse-tailleuse" />
+<appellation intitule="Couturier / Couturière" />
+<appellation intitule="Couturier tailleur / Couturière tailleuse" />
+<appellation intitule="Culottier / Culottière" />
+<appellation intitule="Doubleur finisseur / Doubleuse finisseuse en fourrure" />
+<appellation intitule="Façonnier / Façonnière de vêtements en cuir sur mesure" />
+<appellation intitule="Façonnier / Façonnière de vêtements sur mesure" />
+<appellation intitule="Fourreur / Fourreuse" />
+<appellation intitule="Giletier / Giletière" />
+<appellation intitule="Mécanicien / Mécanicienne en fourrure" />
+<appellation intitule="Ouvrier tailleur / Ouvrière tailleuse" />
+<appellation intitule="Première main" />
+<appellation intitule="Tailleur / Tailleuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1804" intitule="Réalisation d'ouvrages d'art en fils">
+<liste_appellations>
+<appellation intitule="Brodeur / Brodeuse" />
+<appellation intitule="Dentellière à la main" />
+<appellation intitule="Eventailliste" />
+<appellation intitule="Façonnier / Façonnière de fleurs artificielles" />
+<appellation intitule="Façonnier / Façonnière d'ouvrages en fils" />
+<appellation intitule="Fleuriste en tissu" />
+<appellation intitule="Licier / Licière" />
+<appellation intitule="Licier créateur / Licière créatrice" />
+<appellation intitule="Lissier / Lissière" />
+<appellation intitule="Passementier / Passementière à la main" />
+<appellation intitule="Plisseur / Plisseuse" />
+<appellation intitule="Plumassier / Plumassière" />
+<appellation intitule="Plumassier-fleuriste / Plumassière-fleuriste" />
+<appellation intitule="Première d'atelier en broderie artisanale" />
+<appellation intitule="Première d'atelier en tissage artisanal" />
+<appellation intitule="Rentrayeur / Rentrayeuse en tapis et tapisserie" />
+<appellation intitule="Restaurateur / Restauratrice de tapis et tapisserie" />
+<appellation intitule="Restaurateur / Restauratrice de tissu ancien" />
+<appellation intitule="Tapissier / Tapissière haute ou basse lice" />
+<appellation intitule="Tapissier-licier / Tapissière-licière" />
+<appellation intitule="Tapissier-lissier / Tapissière-lissière" />
+<appellation intitule="Tisserand / Tisserande d'art" />
+<appellation intitule="Tisserand créateur / Tisserande créatrice" />
+<appellation intitule="Tisseur / Tisseuse à la main" />
+<appellation intitule="Tisseur / Tisseuse de soie à la main" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1805" intitule="Stylisme">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante styliste" />
+<appellation intitule="Concepteur / Conceptrice maquettiste en accessoires de mode" />
+<appellation intitule="Concepteur créateur / Conceptrice créatrice textile" />
+<appellation intitule="Créateur / Créatrice de mode" />
+<appellation intitule="Créateur / Créatrice en art textile et impression" />
+<appellation intitule="Créateur / Créatrice infographe textile" />
+<appellation intitule="Créateur / Créatrice textile" />
+<appellation intitule="Designer / Designeuse en bijouterie" />
+<appellation intitule="Designer / Designeuse en joaillerie" />
+<appellation intitule="Designer / Designeuse textile" />
+<appellation intitule="Dessinateur / Dessinatrice de mode" />
+<appellation intitule="Dessinateur / Dessinatrice en bijouterie" />
+<appellation intitule="Dessinateur / Dessinatrice en joaillerie" />
+<appellation intitule="Dessinateur / Dessinatrice en soierie" />
+<appellation intitule="Directeur / Directrice artistique habillement" />
+<appellation intitule="Directeur / Directrice de collection habillement" />
+<appellation intitule="Directeur / Directrice studio de mode" />
+<appellation intitule="Esquisseur / Esquisseuse en dentelle" />
+<appellation intitule="Illustrateur / Illustratrice de mode" />
+<appellation intitule="Responsable de collection habillement" />
+<appellation intitule="Styliste" />
+<appellation intitule="Styliste chaussure" />
+<appellation intitule="Styliste en accessoires textile" />
+<appellation intitule="Styliste en bijoux" />
+<appellation intitule="Styliste fil" />
+<appellation intitule="Styliste graphiste" />
+<appellation intitule="Styliste habillement" />
+<appellation intitule="Styliste lingerie, corseterie" />
+<appellation intitule="Styliste maroquinerie" />
+<appellation intitule="Styliste prêt-à-porter" />
+<appellation intitule="Styliste textile" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="B1806" intitule="Tapisseri">
+<liste_appellations>
+<appellation intitule="Bourrelier-matelassier / Bourrelière-matelassière" />
+<appellation intitule="Couturier / Couturière d'ameublement" />
+<appellation intitule="Couturier tapissier / Couturière tapissière" />
+<appellation intitule="Litier / Litière" />
+<appellation intitule="Matelassier / Matelassière" />
+<appellation intitule="Tapissier / Tapissière d'ameublement" />
+<appellation intitule="Tapissier / Tapissière en sièges" />
+<appellation intitule="Tapissier-décorateur / Tapissière-décoratrice" />
+<appellation intitule="Tapissier-ensemblier / Tapissière-ensemblière" />
+<appellation intitule="Tapissier-garnisseur / Tapissière-garnisseuse" />
+<appellation intitule="Tapissier-villier / Tapissière-villière" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="C" intitule="BANQUE, ASSURANCES ET IMMOBILIER">
+<domaine code="C11" intitule="Assurances">
+<fiche
+ code="C1101" intitule="Conceptio">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée de produit en assurances" />
+<appellation intitule="Chef de produit assurance épargne retraite" />
+<appellation intitule="Chef de produit assurance vie" />
+<appellation intitule="Chef de produit en assurance Incendie, Accidents, Risques Divers -IARD-" />
+<appellation intitule="Chef de produit en assurances" />
+<appellation intitule="Chef de segment produits d'assurances" />
+<appellation intitule="Concepteur développeur / Conceptrice développeuse de produits d'assurances" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1102" intitule="Conseil clientèle en assurances">
+<liste_appellations>
+<appellation intitule="Agent commercial / Agente commerciale en assurances" />
+<appellation intitule="Attaché / Attachée de clientèle en assurances" />
+<appellation intitule="Chargé / Chargée de clientèle centre d'appels en assurances" />
+<appellation intitule="Chargé / Chargée de clientèle en assurances" />
+<appellation intitule="Collaborateur commercial / Collaboratrice commerciale en assurances" />
+<appellation intitule="Conseiller / Conseillère clientèle en assurances" />
+<appellation intitule="Conseiller / Conseillère en assurance produits d'épargne" />
+<appellation intitule="Conseiller / Conseillère en assurance vie" />
+<appellation intitule="Conseiller / Conseillère en assurances" />
+<appellation intitule="Conseiller / Conseillère gestion sinistres" />
+<appellation intitule="Conseiller / Conseillère Incendie, Accidents, Risques Divers -IARD-" />
+<appellation intitule="Conseiller / Conseillère mutualiste" />
+<appellation intitule="Conseiller / Conseillère mutualiste Incendie, Accidents, Risques Divers -IARD-" />
+<appellation intitule="Conseiller / Conseillère prévoyance santé" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en assurances" />
+<appellation intitule="Producteur / Productrice en assurances" />
+<appellation intitule="Technico-commercial / Technico-commerciale en assurances" />
+<appellation intitule="Téléconseiller / Téléconseillère en assurances" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1103" intitule="Courtage en assurances">
+<liste_appellations>
+<appellation intitule="Agent général / Agente générale d'assurances" />
+<appellation intitule="Courtier / Courtière en assurances" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1104" intitule="Direction d'exploitation en assurances">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée d'agence en assurances" />
+<appellation intitule="Responsable d'agence en assurances" />
+<appellation intitule="Responsable de bureau d'assurances" />
+<appellation intitule="Responsable de délégation départementale en assurances" />
+<appellation intitule="Responsable de délégation régionale en assurances" />
+<appellation intitule="Responsable de secteur en assurances" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1105" intitule="Études actuarielles en assurances">
+<liste_appellations>
+<appellation intitule="Actuaire" />
+<appellation intitule="Chargé / Chargée d'études actuarielles en assurances" />
+<appellation intitule="Chargé / Chargée d'études actuarielles gestion actif - passif" />
+<appellation intitule="Chargé / Chargée d'études techniques en assurances" />
+<appellation intitule="Directeur / Directrice technique en actuariat" />
+<appellation intitule="Gestionnaire actif-passif en assurances" />
+<appellation intitule="Technicien / Technicienne d'actuariat" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1106" intitule="Expertise risques en assurances">
+<liste_appellations>
+<appellation intitule="Contrôleur / Contrôleuse de sécurité des services prévention de la Sécurité Sociale" />
+<appellation intitule="Expert / Experte en assurances dommages" />
+<appellation intitule="Expert / Experte en assurances dommages et responsabilité civile" />
+<appellation intitule="Expert / Experte risques en assurances" />
+<appellation intitule="Expert évaluateur / Experte évaluatrice en assurances" />
+<appellation intitule="Ingénieur-conseil / Ingénieure-conseil des services prévention de la Sécurité Sociale" />
+<appellation intitule="Inspecteur / Inspectrice risques en assurances" />
+<appellation intitule="Inspecteur / Inspectrice risques professionnels et prévention en assurances" />
+<appellation intitule="Inspecteur / Inspectrice technique d'assurances" />
+<appellation intitule="Inspecteur-vérificateur / Inspectrice-vérificatrice en assurances" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1107" intitule="Indemnisations en assurances">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée d'indemnisations en assurances" />
+<appellation intitule="Enquêteur / Enquêtrice assurance maladie" />
+<appellation intitule="Expert / Experte en règlement de sinistres en assurances" />
+<appellation intitule="Inspecteur enquêteur / Inspectrice enquêtrice d'assurances" />
+<appellation intitule="Inspecteur indemnisateur / Inspectrice indemnisatrice en assurances" />
+<appellation intitule="Inspecteur régleur / Inspectrice régleuse d'assurances" />
+<appellation intitule="Responsable d'inspection en assurances" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1108" intitule="Management de groupe et de service en assurances">
+<liste_appellations>
+<appellation intitule="Responsable de département en assurances" />
+<appellation intitule="Responsable de groupe sinistre en assurances" />
+<appellation intitule="Responsable de service production en assurances" />
+<appellation intitule="Responsable de service souscription en assurances" />
+<appellation intitule="Responsable d'équipe production santé en assurances" />
+<appellation intitule="Responsable d'équipe règlement sinistres en assurances" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1109" intitule="Rédaction et gestion en assurances">
+<liste_appellations>
+<appellation intitule="Décompteur / Décompteuse de prestations" />
+<appellation intitule="Gestionnaire compte entreprise en assurances" />
+<appellation intitule="Gestionnaire cotisations en assurances" />
+<appellation intitule="Gestionnaire de compte retraite en assurances" />
+<appellation intitule="Gestionnaire en assurances" />
+<appellation intitule="Gestionnaire liquidation retraite" />
+<appellation intitule="Gestionnaire prestations en assurances" />
+<appellation intitule="Gestionnaire santé en assurances" />
+<appellation intitule="Gestionnaire sinistre Incendie, Accidents, Risques Divers -IARD-" />
+<appellation intitule="Liquidateur / Liquidatrice de prestations" />
+<appellation intitule="Rédacteur / Rédactrice d'assurances" />
+<appellation intitule="Rédacteur / Rédactrice production auto" />
+<appellation intitule="Rédacteur / Rédactrice production Incendie Risques Industriels (IRI)" />
+<appellation intitule="Rédacteur / Rédactrice production risques complexes" />
+<appellation intitule="Rédacteur / Rédactrice production risques de particuliers" />
+<appellation intitule="Rédacteur / Rédactrice production Risques Divers (RD)" />
+<appellation intitule="Rédacteur / Rédactrice production risques simples" />
+<appellation intitule="Rédacteur / Rédactrice production vie" />
+<appellation intitule="Rédacteur / Rédactrice règlement assurances" />
+<appellation intitule="Rédacteur / Rédactrice règlement automatique" />
+<appellation intitule="Rédacteur / Rédactrice règlement contentieux" />
+<appellation intitule="Rédacteur / Rédactrice règlement corporel" />
+<appellation intitule="Rédacteur / Rédactrice règlement incendie dommage" />
+<appellation intitule="Rédacteur / Rédactrice règlement matériel auto" />
+<appellation intitule="Rédacteur / Rédactrice règlement responsabilité civile" />
+<appellation intitule="Rédacteur / Rédactrice sinistre auto" />
+<appellation intitule="Rédacteur / Rédactrice sinistre incendie" />
+<appellation intitule="Rédacteur / Rédactrice sinistres" />
+<appellation intitule="Rédacteur / Rédactrice sinistres complexes" />
+<appellation intitule="Rédacteur / Rédactrice sinistres contentieux" />
+<appellation intitule="Rédacteur / Rédactrice sinistres risques divers" />
+<appellation intitule="Rédacteur / Rédactrice sinistres simples" />
+<appellation intitule="Rédacteur polyvalent / Rédactrice polyvalente production sinistres" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1110" intitule="Souscription d'assurances">
+<liste_appellations>
+<appellation intitule="Autorisateur / Autorisatrice en assurances" />
+<appellation intitule="Chargé / Chargée de comptes Incendie, Accidents, Risques Divers -IARD-" />
+<appellation intitule="Responsable de souscription en assurances" />
+<appellation intitule="Souscripteur / Souscriptrice assurance collective" />
+<appellation intitule="Souscripteur / Souscriptrice en assurances" />
+<appellation intitule="Souscripteur / Souscriptrice Incendie, Accidents, Risques Divers -IARD-" />
+<appellation intitule="Souscripteur / Souscriptrice responsabilité civile en assurances" />
+<appellation intitule="Souscripteur / Souscriptrice vie collective en assurances" />
+<appellation intitule="Souscripteur / Souscriptrice vie en assurances" />
+<appellation intitule="Souscripteur-autorisateur / Souscriptrice-autorisatrice en assurances" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="C12" intitule="Banque">
+<fiche
+ code="C1201" intitule="Accueil et services bancaires">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante de clientèle de banque" />
+<appellation intitule="Assistant / Assistante service clientèle" />
+<appellation intitule="Assistant / Assistante service clientèle bancaire" />
+<appellation intitule="Caissier / Caissière de bureau de change" />
+<appellation intitule="Chargé / Chargée d'accueil en banque" />
+<appellation intitule="Chargé / Chargée d'accueil et de services clientèle bancaire" />
+<appellation intitule="Conseiller / Conseillère accueil en agence bancaire" />
+<appellation intitule="Conseiller / Conseillère d'accueil en banque" />
+<appellation intitule="Guichetier / Guichetière accueil banque" />
+<appellation intitule="Guichetier / Guichetière de banque" />
+<appellation intitule="Guichetier / Guichetière de la banque postale" />
+<appellation intitule="Guichetier payeur / Guichetière payeuse" />
+<appellation intitule="Guichetier vendeur / Guichetière vendeuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1202" intitule="Analyse de crédits et risques bancaires">
+<liste_appellations>
+<appellation intitule="Analyste de crédits et risques bancaires" />
+<appellation intitule="Analyste engagements bancaires" />
+<appellation intitule="Analyste prêt bancaire" />
+<appellation intitule="Attaché / Attachée risques bancaires" />
+<appellation intitule="Chargé / Chargée d'études crédits bancaires" />
+<appellation intitule="Directeur / Directrice des risques bancaires" />
+<appellation intitule="Gestionnaire engagements bancaires" />
+<appellation intitule="Gestionnaire risques bancaires" />
+<appellation intitule="Ingénieur financier / Ingénieure financière en crédit bancaire" />
+<appellation intitule="Rédacteur / Rédactrice crédits bancaires" />
+<appellation intitule="Responsable crédit" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1203" intitule="Relation clients banque-finance">
+<liste_appellations>
+<appellation intitule="Attaché commercial / Attachée commerciale bancaire entreprise" />
+<appellation intitule="Attaché commercial / Attachée commerciale bancaire financements spécialisés" />
+<appellation intitule="Attaché commercial / Attachée commerciale banque d'affaires" />
+<appellation intitule="Chargé / Chargée d'affaires bancaires commerce international" />
+<appellation intitule="Chargé / Chargée d'affaires bancaires entreprises" />
+<appellation intitule="Chargé / Chargée d'affaires bancaires professionnelles" />
+<appellation intitule="Chargé / Chargée de clientèle bancaire grandes entreprises" />
+<appellation intitule="Chargé / Chargée de comptes professionnels" />
+<appellation intitule="Chargé / Chargée de développement clientèle entreprise" />
+<appellation intitule="Responsable clientèle bancaire entreprise" />
+<appellation intitule="Responsable grands comptes bancaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1204" intitule="Conception et expertise produits bancaires et financiers">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante marché produits bancaires" />
+<appellation intitule="Chef de produits bancaires" />
+<appellation intitule="Gestionnaire de produits bancaires" />
+<appellation intitule="Responsable de produits bancaires" />
+<appellation intitule="Responsable marché bancaire" />
+<appellation intitule="Responsable marché entreprise" />
+<appellation intitule="Responsable marché particulier" />
+<appellation intitule="Responsable marché professionnel" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1205" intitule="Conseil en gestion de patrimoine financier">
+<liste_appellations>
+<appellation intitule="Conseiller / Conseillère en développement de patrimoine" />
+<appellation intitule="Conseiller / Conseillère en gestion de capitaux" />
+<appellation intitule="Conseiller / Conseillère en gestion de fortune" />
+<appellation intitule="Conseiller / Conseillère en gestion de patrimoine financier" />
+<appellation intitule="Conseiller / Conseillère en investissements financiers" />
+<appellation intitule="Conseiller / Conseillère en investissements privés" />
+<appellation intitule="Conseiller / Conseillère en patrimoine financier" />
+<appellation intitule="Conseiller / Conseillère gestion banque privée" />
+<appellation intitule="Gestionnaire de fortune" />
+<appellation intitule="Gestionnaire de patrimoine financier" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1206" intitule="Gestion de clientèle bancaire">
+<liste_appellations>
+<appellation intitule="Attaché / Attachée de clientèle de banque" />
+<appellation intitule="Chargé / Chargée de clientèle bancaire" />
+<appellation intitule="Chargé / Chargée de clientèle commerciale" />
+<appellation intitule="Chargé / Chargée de clientèle de banque" />
+<appellation intitule="Chargé / Chargée de clientèle entreprises" />
+<appellation intitule="Chargé / Chargée de clientèle particuliers" />
+<appellation intitule="Chargé / Chargée de clientèle professionnelle" />
+<appellation intitule="Chargé / Chargée de gestion bancaire" />
+<appellation intitule="Chargé / Chargée de relations clientèle bancaire" />
+<appellation intitule="Conseiller / Conseillère de clientèle bancaire" />
+<appellation intitule="Conseiller / Conseillère en produit épargne" />
+<appellation intitule="Conseiller commercial professionnel / Conseillère commerciale professionnelle secteur bancaire" />
+<appellation intitule="Conseiller financier / Conseillère financière banque postale" />
+<appellation intitule="Conseiller financier / Conseillère financière clientèle professionnelle" />
+<appellation intitule="Gestionnaire de clientèle bancaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1207" intitule="Management en exploitation bancaire">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe de direction bancaire" />
+<appellation intitule="Chef d'agence bancaire" />
+<appellation intitule="Directeur / Directrice d'agence bancaire" />
+<appellation intitule="Directeur / Directrice de caisse bancaire locale" />
+<appellation intitule="Directeur / Directrice de centre d'affaires bancaires" />
+<appellation intitule="Rédacteur / Rédactrice Banque de France" />
+<appellation intitule="Responsable d'agence bancaire" />
+<appellation intitule="Responsable de bureau de banque" />
+<appellation intitule="Responsable de bureau de banque périodique" />
+<appellation intitule="Responsable de caisse bancaire régionale" />
+<appellation intitule="Responsable de groupe d'agence bancaire" />
+<appellation intitule="Responsable de service de caisse régionale bancaire" />
+<appellation intitule="Responsable d'exploitation bancaire" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="C13" intitule="Finance">
+<fiche
+ code="C1301" intitule="Front office marchés financiers">
+<liste_appellations>
+<appellation intitule="Cambiste" />
+<appellation intitule="Commis / Commise d'agent de change" />
+<appellation intitule="Commis / Commise de société d'investissement" />
+<appellation intitule="Gestionnaire d'organisme de placement collectif en valeurs mobilières -OPCVM-" />
+<appellation intitule="Négociateur / Négociatrice en Bourse" />
+<appellation intitule="Négociateur / Négociatrice salle des marchés" />
+<appellation intitule="Opérateur / Opératrice produits dérivés financiers" />
+<appellation intitule="Opérateur / Opératrice sur marchés financiers" />
+<appellation intitule="Trader / Tradeuse" />
+<appellation intitule="Vendeur / Vendeuse produits de marchés financiers" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1302" intitule="Gestion back et middle-office marchés financiers">
+<liste_appellations>
+<appellation intitule="Attaché / Attachée de gestion sous mandat" />
+<appellation intitule="Gérant / Gérante de banque privée" />
+<appellation intitule="Gérant / Gérante de Société d'Investissement à Capital Variable -SICAV-" />
+<appellation intitule="Gérant / Gérante d'obligations" />
+<appellation intitule="Gérant / Gérante d'Organisme de Placement Collectif en Valeurs Mobilières -OPCMV-" />
+<appellation intitule="Gérant / Gérante obligataire" />
+<appellation intitule="Gestionnaire des opérations sur les marchés financiers" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1303" intitule="Gestion de portefeuilles sur les marchés financiers">
+<liste_appellations>
+<appellation intitule="Agent / Agente de back-office" />
+<appellation intitule="Agent / Agente de middle-office" />
+<appellation intitule="Chargé / Chargée de back-office" />
+<appellation intitule="Expert / Experte back-office" />
+<appellation intitule="Expert / Experte middle-office" />
+<appellation intitule="Gérant / Gérante de portefeuille financier" />
+<appellation intitule="Gestionnaire de middle-office" />
+<appellation intitule="Opérateur / Opératrice back-office" />
+<appellation intitule="Opérateur / Opératrice middle-office" />
+<appellation intitule="Responsable de back-office" />
+<appellation intitule="Responsable de middle-office" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="C14" intitule="Gestion administrative banque et assurances">
+<fiche
+ code="C1401" intitule="Gestion banque et assurance">
+<liste_appellations>
+<appellation intitule="Agent / Agente technique de banque" />
+<appellation intitule="Agent / Agente technique des régimes de retraite complémentaire et de prévoyance" />
+<appellation intitule="Agent administratif / Agente administrative back-office marché" />
+<appellation intitule="Agent administratif / Agente administrative d'assurances" />
+<appellation intitule="Agent administratif / Agente administrative de banque" />
+<appellation intitule="Agent administratif / Agente administrative des opérations bancaires" />
+<appellation intitule="Agent administratif / Agente administrative middle-office marché" />
+<appellation intitule="Aide-rédacteur / Aide-rédactrice d'assurances" />
+<appellation intitule="Assistant administratif / Assistante administrative d'assurances" />
+<appellation intitule="Employé central / Employée centrale chèque" />
+<appellation intitule="Technicien / Technicienne de gestion électronique de documents -GED-" />
+<appellation intitule="Technicien administratif / Technicienne administrative de banque" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="C15" intitule="Immobilier">
+<fiche
+ code="C1501" intitule="Gérance immobilière">
+<liste_appellations>
+<appellation intitule="Administrateur / Administratrice de biens immobiliers" />
+<appellation intitule="Cadre de la gestion en patrimoine immobilier" />
+<appellation intitule="Chargé / Chargée de clientèle principale en immobilier" />
+<appellation intitule="Chef d'agence locatif immobilier" />
+<appellation intitule="Chef d'unité de gestion immobilière" />
+<appellation intitule="Conseiller / Conseillère technique en immobilier" />
+<appellation intitule="Directeur / Directrice d'agence de gestion d'immeubles HLM" />
+<appellation intitule="Directeur / Directrice de gérance locative en immobilier" />
+<appellation intitule="Directeur / Directrice de la gestion immobilière" />
+<appellation intitule="Directeur / Directrice de la gestion locative immobilière" />
+<appellation intitule="Directeur / Directrice des services immobiliers" />
+<appellation intitule="Directeur / Directrice du patrimoine immobilier" />
+<appellation intitule="Directeur / Directrice immobilier" />
+<appellation intitule="Gérant / Gérante de copropriété" />
+<appellation intitule="Gérant / Gérante de groupe d'immeubles" />
+<appellation intitule="Gestionnaire de copropriété" />
+<appellation intitule="Gestionnaire de patrimoine immobilier" />
+<appellation intitule="Gestionnaire de portefeuille immobilier" />
+<appellation intitule="Gestionnaire d'immeubles" />
+<appellation intitule="Inspecteur / Inspectrice de gérance immobilière" />
+<appellation intitule="Inspecteur / Inspectrice de gestion immobilière" />
+<appellation intitule="Principal / Principale de copropriété" />
+<appellation intitule="Principal / Principale de régie en immobilier" />
+<appellation intitule="Responsable d'antenne HLM" />
+<appellation intitule="Responsable d'antenne locative" />
+<appellation intitule="Responsable de copropriété" />
+<appellation intitule="Responsable de groupes d'immeubles" />
+<appellation intitule="Responsable de patrimoine immobilier" />
+<appellation intitule="Responsable de site immobilier" />
+<appellation intitule="Responsable d'unité de gestion d'immeubles" />
+<appellation intitule="Responsable d'unité de gestion locatif immobilier" />
+<appellation intitule="Syndic de copropriété" />
+<appellation intitule="Syndic d'immeuble" />
+<appellation intitule="Syndic social" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1502" intitule="Gestion locative immobilière">
+<liste_appellations>
+<appellation intitule="Agent / Agente de gestion APL" />
+<appellation intitule="Agent / Agente de gestion locative en immobilier" />
+<appellation intitule="Agent / Agente de peuplement" />
+<appellation intitule="Agent / Agente d'état des lieux" />
+<appellation intitule="Assistant / Assistante de gestion locative en immobilier" />
+<appellation intitule="Assistant / Assistante de gestion syndic immobilier" />
+<appellation intitule="Assistant / Assistante gestionnaire en immobilier" />
+<appellation intitule="Chargé / Chargée d'attribution en immobilier" />
+<appellation intitule="Chargé / Chargée de clientèle en immobilier locatif" />
+<appellation intitule="Chargé / Chargée de gestion locative en immobilier" />
+<appellation intitule="Chargé / Chargée du précontentieux immobilier" />
+<appellation intitule="Chargé / Chargée du quittancement" />
+<appellation intitule="Chargé / Chargée d'unité de gestion immobilière" />
+<appellation intitule="Employé / Employée de gestion de copropriété" />
+<appellation intitule="Employé / Employée de gestion immobilier" />
+<appellation intitule="Gestionnaire administratif / administrative immobilier" />
+<appellation intitule="Gestionnaire de galerie marchande" />
+<appellation intitule="Régisseur / Régisseuse d'immeubles" />
+<appellation intitule="Responsable de clientèle immobilier locatif" />
+<appellation intitule="Responsable de gestion immobilière locative" />
+<appellation intitule="Responsable de secteur immobilier locatif" />
+<appellation intitule="Responsable locatif immobilier" />
+<appellation intitule="Secrétaire de groupe d'immeubles" />
+<appellation intitule="Secrétaire de syndic immobilier" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1503" intitule="Management de projet immobilier">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante en montage d'opérations immobilières" />
+<appellation intitule="Chargé / Chargée d'affaires immobilières" />
+<appellation intitule="Chargé / Chargée de mission immobilière" />
+<appellation intitule="Chargé / Chargée de programme immobilier neuf" />
+<appellation intitule="Chargé / Chargée de prospection et de développement foncier" />
+<appellation intitule="Chargé / Chargée d'études immobilières" />
+<appellation intitule="Chargé / Chargée d'expansion immobilière" />
+<appellation intitule="Chargé / Chargée d'opérations immobilières" />
+<appellation intitule="Chargé / Chargée d'opérations logement social" />
+<appellation intitule="Conducteur / Conductrice d'opérations immobilières" />
+<appellation intitule="Constructeur / Constructrice de maisons individuelles" />
+<appellation intitule="Développeur attaché foncier / Développeuse attachée foncière" />
+<appellation intitule="Directeur / Directrice de développement immobilier" />
+<appellation intitule="Directeur / Directrice de la construction immobilière" />
+<appellation intitule="Directeur / Directrice de la promotion immobilière" />
+<appellation intitule="Directeur / Directrice de nouveaux programmes immobiliers" />
+<appellation intitule="Directeur / Directrice des investissements immobiliers" />
+<appellation intitule="Directeur / Directrice des programmes immobiliers" />
+<appellation intitule="Gestionnaire de programmes immobiliers" />
+<appellation intitule="Inspecteur foncier / Inspectrice foncière" />
+<appellation intitule="Lotisseur / Lotisseuse" />
+<appellation intitule="Monteur / Monteuse d'opérations immobilières" />
+<appellation intitule="Négociateur foncier / Négociatrice foncière" />
+<appellation intitule="Pilote d'opérations immobilières" />
+<appellation intitule="Promoteur-constructeur / Promotrice-constructrice" />
+<appellation intitule="Prospecteur foncier / Prospectrice foncière" />
+<appellation intitule="Prospecteur monteur / Prospectrice monteuse en opérations immobilières" />
+<appellation intitule="Prospecteur négociateur foncier / Prospectrice négociatrice foncière" />
+<appellation intitule="Responsable de nouveaux programmes immobiliers" />
+<appellation intitule="Responsable de programme immobilier" />
+<appellation intitule="Responsable de projet de renouvellement urbain" />
+<appellation intitule="Responsable développement foncier" />
+<appellation intitule="Responsable développement/expansion immobilière" />
+<appellation intitule="Responsable d'expansion foncière" />
+<appellation intitule="Responsable foncier / foncière" />
+<appellation intitule="Responsable foncier monteur / foncière monteuse d'opérations" />
+<appellation intitule="Responsable habitat - logement" />
+<appellation intitule="Responsable programme réhabilitation immobilière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="C1504" intitule="Transaction immobilière">
+<liste_appellations>
+<appellation intitule="Agent / Agente de location immobilière" />
+<appellation intitule="Agent / Agente immobilier" />
+<appellation intitule="Agent commercial / Agente commerciale en immobilier" />
+<appellation intitule="Assistant commercial / Assistante commerciale en immobilier" />
+<appellation intitule="Attaché commercial / Attachée commerciale en immobilier" />
+<appellation intitule="Conseiller / Conseillère de location en immobilier" />
+<appellation intitule="Conseiller / Conseillère de transaction en immobilier" />
+<appellation intitule="Conseiller / Conseillère de vente en immobilier" />
+<appellation intitule="Conseiller / Conseillère en immobilier d'entreprise" />
+<appellation intitule="Conseiller / Conseillère immobilier" />
+<appellation intitule="Mandataire en vente de fonds de commerce" />
+<appellation intitule="Marchand / Marchande de biens immobiliers" />
+<appellation intitule="Négociateur / Négociatrice en immobilier" />
+<appellation intitule="Négociateur / Négociatrice en immobilier d'entreprise" />
+<appellation intitule="Négociateur / Négociatrice en location immobilière" />
+<appellation intitule="Négociateur / Négociatrice immobilier" />
+<appellation intitule="Négociateur / Négociatrice immobilier en bureau de vente" />
+<appellation intitule="Prospecteur négociateur / Prospectrice négociatrice en immobilier" />
+<appellation intitule="Responsable d'agence immobilière" />
+<appellation intitule="Responsable de clientèle en transaction immobilière" />
+<appellation intitule="Responsable de vente immobilière" />
+<appellation intitule="Vendeur / Vendeuse en immobilier neuf" />
+<appellation intitule="Vendeur / Vendeuse immobilier" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="D" intitule="COMMERCE, VENTE ET GRANDE DISTRIBUTION">
+<domaine code="D11" intitule="Commerce alimentaire et métiers de bouche">
+<fiche
+ code="D1101" intitule="Boucherie">
+<liste_appellations>
+<appellation intitule="Aide-boucher / Aide-bouchère" />
+<appellation intitule="Boucher / Bouchère" />
+<appellation intitule="Boucher / Bouchère chevalin" />
+<appellation intitule="Boucher / Bouchère hippophagique" />
+<appellation intitule="Boucher désosseur / Bouchère désosseuse" />
+<appellation intitule="Boucher-charcutier / Bouchère-charcutière" />
+<appellation intitule="Boucher-traiteur / Bouchère-traiteuse" />
+<appellation intitule="Boucher-tripier / Bouchère-tripière" />
+<appellation intitule="Boucher-volailler / Bouchère-volaillère" />
+<appellation intitule="Chef boucher / bouchère" />
+<appellation intitule="Ouvrier boucher / Ouvrière bouchère" />
+<appellation intitule="Second boucher / Seconde bouchère" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1102" intitule="Boulangeri">
+<liste_appellations>
+<appellation intitule="Aide-boulanger / Aide-boulangère" />
+<appellation intitule="Boulanger / Boulangère" />
+<appellation intitule="Boulanger-pâtissier / Boulangère-pâtissière" />
+<appellation intitule="Boulanger-pâtissier-traiteur / Boulangère-pâtissière-traiteuse" />
+<appellation intitule="Boulanger-traiteur / Boulangère-traiteuse" />
+<appellation intitule="Chef boulanger / boulangère" />
+<appellation intitule="Ouvrier boulanger / Ouvrière boulangère" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1103" intitule="Charcuteri">
+<liste_appellations>
+<appellation intitule="Aide-charcutier / Aide-charcutière" />
+<appellation intitule="Charcutier / Charcutière" />
+<appellation intitule="Charcutier-traiteur / Charcutier-traiteuse" />
+<appellation intitule="Chef charcutier-traiteur / charcutière-traiteuse" />
+<appellation intitule="Chef de fabrication en charcuterie" />
+<appellation intitule="Chef de laboratoire en charcuterie" />
+<appellation intitule="Ouvrier charcutier / Ouvrière charcutière" />
+<appellation intitule="Rôtisseur / Rôtisseuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1104" intitule="Pâtisserie, confiserie, chocolaterie et glacerie">
+<liste_appellations>
+<appellation intitule="Aide-pâtissier / Aide-pâtissière" />
+<appellation intitule="Biscuitier / Biscuitière" />
+<appellation intitule="Chef pâtissier / pâtissière" />
+<appellation intitule="Chocolatier / Chocolatière" />
+<appellation intitule="Confiseur / Confiseuse" />
+<appellation intitule="Entremettier / Entremettière" />
+<appellation intitule="Glacier / Glacière" />
+<appellation intitule="Ouvrier pâtissier / Ouvrière pâtissière" />
+<appellation intitule="Pâtissier / Pâtissière" />
+<appellation intitule="Pâtissier tourier / Pâtissière tourière" />
+<appellation intitule="Pâtissier-chocolatier / Pâtissière-chocolatière" />
+<appellation intitule="Pâtissier-confiseur / Pâtissière-confiseuse" />
+<appellation intitule="Pâtissier-traiteur / Pâtissière-traiteuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1105" intitule="Poissonnerie">
+<liste_appellations>
+<appellation intitule="Ecailler / Ecaillère en poissonnerie" />
+<appellation intitule="Employé / Employée de marée" />
+<appellation intitule="Employé / Employée en poissonnerie" />
+<appellation intitule="Fileteur / Fileteuse" />
+<appellation intitule="Mareyeur / Mareyeuse" />
+<appellation intitule="Poissonnier / Poissonnière" />
+<appellation intitule="Poissonnier-traiteur / Poissonnière-traiteuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1106" intitule="Vente en alimentation">
+<liste_appellations>
+<appellation intitule="Epicier / Epicière" />
+<appellation intitule="Marchand / Marchande de fruits et légumes" />
+<appellation intitule="Vendeur / Vendeuse de fruits et légumes" />
+<appellation intitule="Vendeur / Vendeuse de primeurs" />
+<appellation intitule="Vendeur / Vendeuse en alimentation générale" />
+<appellation intitule="Vendeur / Vendeuse en boucherie" />
+<appellation intitule="Vendeur / Vendeuse en boucherie-charcuterie" />
+<appellation intitule="Vendeur / Vendeuse en boulangerie-pâtisserie" />
+<appellation intitule="Vendeur / Vendeuse en charcuterie" />
+<appellation intitule="Vendeur / Vendeuse en chocolaterie" />
+<appellation intitule="Vendeur / Vendeuse en confiserie" />
+<appellation intitule="Vendeur / Vendeuse en crèmerie" />
+<appellation intitule="Vendeur / Vendeuse en épicerie" />
+<appellation intitule="Vendeur / Vendeuse en épicerie fine" />
+<appellation intitule="Vendeur / Vendeuse en poissonnerie" />
+<appellation intitule="Vendeur / Vendeuse en produits diététiques" />
+<appellation intitule="Vendeur / Vendeuse en produits frais" />
+<appellation intitule="Vendeur / Vendeuse en rôtisserie" />
+<appellation intitule="Vendeur / Vendeuse en vins et spiritueux" />
+<appellation intitule="Vendeur / Vendeuse rayon fromages" />
+<appellation intitule="Vendeur / Vendeuse rayon traiteur" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1107" intitule="Vente en gros de produits frais">
+<liste_appellations>
+<appellation intitule="Aide vendeur / vendeuse de produits frais en gros" />
+<appellation intitule="Commercial / Commerciale en produits frais en gros" />
+<appellation intitule="Commis vendeur / Commise vendeuse de produits frais en gros" />
+<appellation intitule="Vendeur / Vendeuse au comptoir de produits frais" />
+<appellation intitule="Vendeur / Vendeuse carreau" />
+<appellation intitule="Vendeur / Vendeuse de produits frais en gros" />
+<appellation intitule="Vendeur / Vendeuse en gros de produits frais" />
+<appellation intitule="Vendeur / Vendeuse grossiste en produits frais" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="D12" intitule="Commerce non alimentaire et de prestations de confort">
+<fiche
+ code="D1201" intitule="Achat vente d'objets d'art, anciens ou d'occasion">
+<liste_appellations>
+<appellation intitule="Acheteur vendeur / Acheteuse vendeuse en dépôt-vente" />
+<appellation intitule="Antiquaire" />
+<appellation intitule="Bouquiniste" />
+<appellation intitule="Brocanteur / Brocanteuse" />
+<appellation intitule="Fripier / Fripière" />
+<appellation intitule="Galeriste" />
+<appellation intitule="Responsable de galerie d'art" />
+<appellation intitule="Vendeur / Vendeuse en antiquités" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1202" intitule="Coiffure">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante de coiffure" />
+<appellation intitule="Assistant coiffeur / Assistante coiffeuse" />
+<appellation intitule="Chef coiffeur / coiffeuse" />
+<appellation intitule="Coiffeur / Coiffeuse" />
+<appellation intitule="Coiffeur / Coiffeuse à domicile" />
+<appellation intitule="Coiffeur / Coiffeuse dames" />
+<appellation intitule="Coiffeur / Coiffeuse messieurs" />
+<appellation intitule="Coiffeur / Coiffeuse mixte" />
+<appellation intitule="Coiffeur / Coiffeuse styliste" />
+<appellation intitule="Coiffeur / Coiffeuse visagiste" />
+<appellation intitule="Coiffeur créateur / Coiffeuse créatrice" />
+<appellation intitule="Coloriste permanentiste" />
+<appellation intitule="Formateur coiffeur / Formatrice coiffeuse" />
+<appellation intitule="Gérant / Gérante salon de coiffure" />
+<appellation intitule="Gérant technicien / Gérante technicienne de salon de coiffure" />
+<appellation intitule="Posticheur / Posticheuse" />
+<appellation intitule="Responsable salon de coiffure" />
+<appellation intitule="Styliste visagiste en coiffure" />
+<appellation intitule="Technicien / Technicienne en coloration" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1203" intitule="Hydrothérapie">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'accompagnement en thermalisme" />
+<appellation intitule="Agent / Agente de cure thermale" />
+<appellation intitule="Agent / Agente de soins en hydrothérapie" />
+<appellation intitule="Agent / Agente de thermalisme" />
+<appellation intitule="Agent / Agente en hydrothérapie" />
+<appellation intitule="Agent / Agente en soins thermaux" />
+<appellation intitule="Agent hydrothermal / Agente hydrothermale" />
+<appellation intitule="Agent thermal / Agente thermale" />
+<appellation intitule="Animateur / Animatrice en aqua gymnastique" />
+<appellation intitule="Auxiliaire en hydrothérapie" />
+<appellation intitule="Baigneuse" />
+<appellation intitule="Doucheuse" />
+<appellation intitule="Hydrothérapeute" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1204" intitule="Location de véhicules ou de matériel de loisirs">
+<liste_appellations>
+<appellation intitule="Agent / Agente de comptoir en location de matériel de transport" />
+<appellation intitule="Agent / Agente de comptoir en location de véhicules" />
+<appellation intitule="Agent / Agente d'opérations de location de véhicules" />
+<appellation intitule="Chaisier / Chaisière" />
+<appellation intitule="Chargé / Chargée de location de matériel de transport ou de loisirs" />
+<appellation intitule="Chargé / Chargée de location de moyen de transport" />
+<appellation intitule="Loueur / Loueuse d'avions de tourisme" />
+<appellation intitule="Loueur / Loueuse de bateaux" />
+<appellation intitule="Loueur / Loueuse de bateaux avec permis" />
+<appellation intitule="Loueur / Loueuse de bateaux sans permis" />
+<appellation intitule="Loueur / Loueuse de bicyclettes" />
+<appellation intitule="Loueur / Loueuse de canoë kayak" />
+<appellation intitule="Loueur / Loueuse de pédalos" />
+<appellation intitule="Loueur / Loueuse de véhicules automobiles" />
+<appellation intitule="Loueur / Loueuse de véhicules hippomobiles" />
+<appellation intitule="Loueur / Loueuse de voiliers" />
+<appellation intitule="Loueur / Loueuse d'engins nautiques" />
+<appellation intitule="Plagiste" />
+<appellation intitule="Responsable de comptoir en location de voitures" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1205" intitule="Nettoyage d'articles textiles ou cuirs">
+<liste_appellations>
+<appellation intitule="Apprêteur-détacheur / Apprêteuse-détacheuse" />
+<appellation intitule="Détacheur / Détacheuse" />
+<appellation intitule="Employé / Employée de pressing" />
+<appellation intitule="Lingère" />
+<appellation intitule="Nettoyeur / Nettoyeuse en cuir et peausserie" />
+<appellation intitule="Raviveur / Raviveuse cuir et peausserie" />
+<appellation intitule="Réceptionniste de pressing" />
+<appellation intitule="Repasseur / Repasseuse" />
+<appellation intitule="Repasseur / Repasseuse première main" />
+<appellation intitule="Repasseur / Repasseuse seconde main" />
+<appellation intitule="Responsable de pressing" />
+<appellation intitule="Teinturier / Teinturière en cuir" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1206" intitule="Réparation d'articles en cuir et matériaux souples">
+<liste_appellations>
+<appellation intitule="Cordonnier / Cordonnière" />
+<appellation intitule="Cordonnier réparateur / Cordonnière réparatrice" />
+<appellation intitule="Cordonnier-bottier / Cordonnière-bottière" />
+<appellation intitule="Opérateur / Opératrice en cordonnerie et multiservices" />
+<appellation intitule="Réparateur / Réparatrice d'articles en cuir" />
+<appellation intitule="Réparateur / Réparatrice en chaussures" />
+<appellation intitule="Réparateur / Réparatrice en maroquinerie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1207" intitule="Retouches en habillement">
+<liste_appellations>
+<appellation intitule="Essayeur-retoucheur / Essayeuse-retoucheuse" />
+<appellation intitule="Réparateur / Réparatrice en habillement" />
+<appellation intitule="Retoucheur / Retoucheuse en confection" />
+<appellation intitule="Retoucheur / Retoucheuse en cuir" />
+<appellation intitule="Retoucheur / Retoucheuse en habillement" />
+<appellation intitule="Retoucheur vendeur / Retoucheuse vendeuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1208" intitule="Soins esthétiques et corporels">
+<liste_appellations>
+<appellation intitule="Animatrice beauté" />
+<appellation intitule="Conseiller / Conseillère en image personnelle" />
+<appellation intitule="Conseillère beauté" />
+<appellation intitule="Conseillère minceur" />
+<appellation intitule="Conseillère relooking" />
+<appellation intitule="Cosméticien / Cosméticienne" />
+<appellation intitule="Directeur / Directrice d'institut de beauté" />
+<appellation intitule="Employé / Employée d'institut de beauté" />
+<appellation intitule="Esthéticien / Esthéticienne" />
+<appellation intitule="Esthéticien / Esthéticienne à domicile" />
+<appellation intitule="Esthéticien-cosméticien / Esthéticienne-cosméticienne" />
+<appellation intitule="Esthéticien-manucure / Esthéticienne-manucure" />
+<appellation intitule="Formateur / Formatrice en esthétisme" />
+<appellation intitule="Gérant / Gérante d'institut de beauté" />
+<appellation intitule="Manucure" />
+<appellation intitule="Manucure vendeur / vendeuse en produits de beauté" />
+<appellation intitule="Maquilleur beauté / Maquilleuse beauté" />
+<appellation intitule="Perceur corporel / Perceuse corporelle" />
+<appellation intitule="Prothésiste ongulaire" />
+<appellation intitule="Responsable d'institut de beauté" />
+<appellation intitule="Tatoueur / Tatoueuse" />
+<appellation intitule="Visagiste en esthétique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1209" intitule="Vente de végétaux">
+<liste_appellations>
+<appellation intitule="Fleuriste" />
+<appellation intitule="Fleuriste-décorateur floral / Fleuriste-décoratrice florale" />
+<appellation intitule="Vendeur / Vendeuse conseil en jardinerie" />
+<appellation intitule="Vendeur / Vendeuse de fleurs" />
+<appellation intitule="Vendeur / Vendeuse de végétaux" />
+<appellation intitule="Vendeur / Vendeuse en jardinerie" />
+<appellation intitule="Vendeur / Vendeuse en matériel de jardinage" />
+<appellation intitule="Vendeur / Vendeuse pépiniériste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1210" intitule="Vente en animalerie">
+<liste_appellations>
+<appellation intitule="Vendeur / Vendeuse d'animaux" />
+<appellation intitule="Vendeur / Vendeuse en alimentation animale" />
+<appellation intitule="Vendeur / Vendeuse en animalerie" />
+<appellation intitule="Vendeur / Vendeuse en articles d'animalerie" />
+<appellation intitule="Vendeur / Vendeuse en produits animaliers" />
+<appellation intitule="Vendeur animalier / Vendeuse animalière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1211" intitule="Vente en articles de sport et loisirs">
+<liste_appellations>
+<appellation intitule="Buraliste" />
+<appellation intitule="Disquaire" />
+<appellation intitule="Kiosquier / Kiosquière" />
+<appellation intitule="Libraire" />
+<appellation intitule="Vendeur / Vendeuse buraliste" />
+<appellation intitule="Vendeur / Vendeuse de journaux" />
+<appellation intitule="Vendeur / Vendeuse en articles de librairie papeterie" />
+<appellation intitule="Vendeur / Vendeuse en articles de papeterie" />
+<appellation intitule="Vendeur / Vendeuse en articles de sport" />
+<appellation intitule="Vendeur / Vendeuse en articles pour fumeurs" />
+<appellation intitule="Vendeur / Vendeuse en bureau de tabac" />
+<appellation intitule="Vendeur / Vendeuse en cycles" />
+<appellation intitule="Vendeur / Vendeuse en disques" />
+<appellation intitule="Vendeur / Vendeuse en encadrement" />
+<appellation intitule="Vendeur / Vendeuse en équipement de sport" />
+<appellation intitule="Vendeur / Vendeuse en fournitures artistiques" />
+<appellation intitule="Vendeur / Vendeuse en instruments et accessoires de musique" />
+<appellation intitule="Vendeur / Vendeuse en jeux électroniques" />
+<appellation intitule="Vendeur / Vendeuse en jeux et loterie" />
+<appellation intitule="Vendeur / Vendeuse en jouets" />
+<appellation intitule="Vendeur / Vendeuse en kiosque" />
+<appellation intitule="Vendeur / Vendeuse en librairie" />
+<appellation intitule="Vendeur / Vendeuse en loisirs créatifs" />
+<appellation intitule="Vendeur / Vendeuse en produits culturels" />
+<appellation intitule="Vendeur / Vendeuse en produits culturels et ludiques" />
+<appellation intitule="Vendeur / Vendeuse en produits ludiques" />
+<appellation intitule="Vendeur / Vendeuse en ski" />
+<appellation intitule="Vendeur armurier / Vendeuse armurière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1212" intitule="Vente en décoration et équipement du foyer">
+<liste_appellations>
+<appellation intitule="Cuisiniste" />
+<appellation intitule="Droguiste" />
+<appellation intitule="Quincaillier / Quincaillière" />
+<appellation intitule="Vendeur / Vendeuse de bois au détail" />
+<appellation intitule="Vendeur / Vendeuse de cuisines" />
+<appellation intitule="Vendeur / Vendeuse de salles de bains" />
+<appellation intitule="Vendeur / Vendeuse de verre à la coupe" />
+<appellation intitule="Vendeur / Vendeuse en accessoires automobile" />
+<appellation intitule="Vendeur / Vendeuse en aménagement du foyer" />
+<appellation intitule="Vendeur / Vendeuse en articles de décoration" />
+<appellation intitule="Vendeur / Vendeuse en articles d'électricité" />
+<appellation intitule="Vendeur / Vendeuse en arts de la table" />
+<appellation intitule="Vendeur / Vendeuse en bricolage" />
+<appellation intitule="Vendeur / Vendeuse en carrelage" />
+<appellation intitule="Vendeur / Vendeuse en chauffage-ventilation-isolation" />
+<appellation intitule="Vendeur / Vendeuse en droguerie" />
+<appellation intitule="Vendeur / Vendeuse en électroménager" />
+<appellation intitule="Vendeur / Vendeuse en équipement du foyer" />
+<appellation intitule="Vendeur / Vendeuse en image et son" />
+<appellation intitule="Vendeur / Vendeuse en informatique" />
+<appellation intitule="Vendeur / Vendeuse en linge de maison" />
+<appellation intitule="Vendeur / Vendeuse en literie" />
+<appellation intitule="Vendeur / Vendeuse en luminaires" />
+<appellation intitule="Vendeur / Vendeuse en matériaux de construction" />
+<appellation intitule="Vendeur / Vendeuse en menuiserie" />
+<appellation intitule="Vendeur / Vendeuse en meubles" />
+<appellation intitule="Vendeur / Vendeuse en outillage" />
+<appellation intitule="Vendeur / Vendeuse en petit électroménager" />
+<appellation intitule="Vendeur / Vendeuse en plomberie sanitaire" />
+<appellation intitule="Vendeur / Vendeuse en produits blancs" />
+<appellation intitule="Vendeur / Vendeuse en produits bruns" />
+<appellation intitule="Vendeur / Vendeuse en quincaillerie" />
+<appellation intitule="Vendeur / Vendeuse en revêtement de mur, sol" />
+<appellation intitule="Vendeur / Vendeuse en téléphonie" />
+<appellation intitule="Vendeur / Vendeuse en tissus" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1213" intitule="Vente en gros de matériel et équipements">
+<liste_appellations>
+<appellation intitule="Vendeur / Vendeuse comptoir de matériels et équipements" />
+<appellation intitule="Vendeur / Vendeuse comptoir en biens d'équipement" />
+<appellation intitule="Vendeur / Vendeuse grossiste de matériels et équipements" />
+<appellation intitule="Vendeur / Vendeuse grossiste en biens de consommation" />
+<appellation intitule="Vendeur / Vendeuse grossiste en équipement de la personne" />
+<appellation intitule="Vendeur / Vendeuse grossiste en équipement du foyer" />
+<appellation intitule="Vendeur / Vendeuse grossiste en équipements professionnels" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1214" intitule="Vente en habillement et accessoires de la personne">
+<liste_appellations>
+<appellation intitule="Vendeur / Vendeuse en accessoires de la personne" />
+<appellation intitule="Vendeur / Vendeuse en articles de chapellerie" />
+<appellation intitule="Vendeur / Vendeuse en articles de mercerie" />
+<appellation intitule="Vendeur / Vendeuse en articles de puériculture" />
+<appellation intitule="Vendeur / Vendeuse en bijouterie" />
+<appellation intitule="Vendeur / Vendeuse en bijoux fantaisie" />
+<appellation intitule="Vendeur / Vendeuse en chaussures" />
+<appellation intitule="Vendeur / Vendeuse en cosmétique" />
+<appellation intitule="Vendeur / Vendeuse en horlogerie" />
+<appellation intitule="Vendeur / Vendeuse en hygiène de la personne" />
+<appellation intitule="Vendeur / Vendeuse en lingerie" />
+<appellation intitule="Vendeur / Vendeuse en maroquinerie" />
+<appellation intitule="Vendeur / Vendeuse en optique lunetterie" />
+<appellation intitule="Vendeur / Vendeuse en orfèvrerie/joaillerie" />
+<appellation intitule="Vendeur / Vendeuse en parapharmacie" />
+<appellation intitule="Vendeur / Vendeuse en parfumerie" />
+<appellation intitule="Vendeur / Vendeuse en prêt-à-porter" />
+<appellation intitule="Vendeur / Vendeuse en prêt-à-porter enfant" />
+<appellation intitule="Vendeur / Vendeuse en prêt-à-porter féminin" />
+<appellation intitule="Vendeur / Vendeuse en prêt-à-porter masculin" />
+<appellation intitule="Vendeur en prêt-à-porter de luxe" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="D13" intitule="Direction de magasin de détail">
+<fiche
+ code="D1301" intitule="Management  de magasin de détail">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe responsable de magasin de détail" />
+<appellation intitule="Directeur / Directrice de magasin de détail" />
+<appellation intitule="Gérant / Gérante de bureau de tabac" />
+<appellation intitule="Gérant / Gérante de commerce de détail" />
+<appellation intitule="Gérant / Gérante de magasin d'alimentation" />
+<appellation intitule="Gérant / Gérante de magasin d'alimentation générale" />
+<appellation intitule="Gérant / Gérante de station-service" />
+<appellation intitule="Gérant / Gérante de supérette" />
+<appellation intitule="Gérant / Gérante mandataire de succursale de magasin d'alimentation" />
+<appellation intitule="Responsable de boutique" />
+<appellation intitule="Responsable de boutique de prêt-à-porter" />
+<appellation intitule="Responsable de magasin d'accessoires de la personne" />
+<appellation intitule="Responsable de magasin d'animalerie" />
+<appellation intitule="Responsable de magasin d'articles de loisirs" />
+<appellation intitule="Responsable de magasin de détail" />
+<appellation intitule="Responsable de magasin de proximité" />
+<appellation intitule="Responsable de magasin de végétaux" />
+<appellation intitule="Responsable de magasin d'équipement de la maison" />
+<appellation intitule="Responsable de magasin d'équipement de sports" />
+<appellation intitule="Responsable de point de vente de détail" />
+<appellation intitule="Responsable de station de lavage" />
+<appellation intitule="Responsable de station-service" />
+<appellation intitule="Responsable de supérette" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="D14" intitule="Force de vente">
+<fiche
+ code="D1401" intitule="Assistanat commercial">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante achat" />
+<appellation intitule="Assistant / Assistante administration des ventes" />
+<appellation intitule="Assistant / Assistante des ventes" />
+<appellation intitule="Assistant / Assistante export" />
+<appellation intitule="Assistant / Assistante import" />
+<appellation intitule="Assistant administratif et commercial / Assistante administrative et commerciale" />
+<appellation intitule="Assistant commercial / Assistante commerciale" />
+<appellation intitule="Attaché commercial / Attachée commerciale sédentaire" />
+<appellation intitule="Collaborateur commercial / Collaboratrice commerciale" />
+<appellation intitule="Commercial / Commerciale sédentaire" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale sédentaire" />
+<appellation intitule="Délégué commercial / Déléguée commerciale sédentaire" />
+<appellation intitule="Employé commercial / Employée commerciale sédentaire" />
+<appellation intitule="Secrétaire commercial / commerciale" />
+<appellation intitule="Technicien / Technicienne administration des ventes" />
+<appellation intitule="Technicien / Technicienne de la vente par correspondance" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1402" intitule="Relation commerciale grands comptes et entreprise">
+<liste_appellations>
+<appellation intitule="Attaché commercial / Attachée commerciale en biens de consommation auprès des entreprises" />
+<appellation intitule="Attaché commercial / Attachée commerciale en biens d'équipement professionnels" />
+<appellation intitule="Attaché commercial / Attachée commerciale en biens intermédiaires et matières premières auprès des entreprises" />
+<appellation intitule="Attaché commercial / Attachée commerciale en services auprès des entreprises" />
+<appellation intitule="Attaché commercial / Attachée commerciale en transport-logistique" />
+<appellation intitule="Attaché commercial / Attachée commerciale export" />
+<appellation intitule="Attaché commercial / Attachée commerciale grandes et moyennes surfaces de vente (GMS)" />
+<appellation intitule="Commercial / Commerciale en biens de consommation auprès des entreprises" />
+<appellation intitule="Commercial / Commerciale en biens d'équipement auprès des entreprises" />
+<appellation intitule="Commercial / Commerciale en biens intermédiaires et matières premières auprès des entreprises" />
+<appellation intitule="Commercial / Commerciale en services auprès des entreprises" />
+<appellation intitule="Commercial vendeur / Commerciale vendeuse d'espaces publicitaires" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en biens de consommation auprès des entreprises" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en biens d'équipement auprès des entreprises" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en biens intermédiaires et matières premières auprès des entreprises" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en services auprès des entreprises" />
+<appellation intitule="Délégué commercial / Déléguée commerciale en biens de consommation auprès des entreprises" />
+<appellation intitule="Délégué commercial / Déléguée commerciale en biens d'équipement auprès des entreprises" />
+<appellation intitule="Délégué commercial / Déléguée commerciale en biens intermédiaires et matières premières auprès des entreprises" />
+<appellation intitule="Délégué commercial / Déléguée commerciale en services auprès des entreprises" />
+<appellation intitule="Représentant / Représentante en biens de consommation auprès des entreprises" />
+<appellation intitule="Représentant / Représentante en biens d'équipement auprès des entreprises" />
+<appellation intitule="Représentant / Représentante en biens intermédiaires et matières premières auprès des entreprises" />
+<appellation intitule="Représentant / Représentante en services auprès des entreprises" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1403" intitule="Relation commerciale auprès de particuliers">
+<liste_appellations>
+<appellation intitule="Attaché commercial / Attachée commerciale auprès des particuliers" />
+<appellation intitule="Chef de groupe de vendeurs à domicile" />
+<appellation intitule="Commercial / Commerciale auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale auprès d'une clientèle de particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en aménagement de cuisines auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en cheminées auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en déménagement" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en mobile homes auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en piscines auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en portes/fermetures auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en produits cosmétiques auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en ravalement de façades auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en salles de bains auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en stores auprès des particuliers" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en vérandas auprès des particuliers" />
+<appellation intitule="Conseiller vendeur / Conseillère vendeuse à domicile" />
+<appellation intitule="Conseiller vendeur / Conseillère vendeuse en laisser sur place auprès des particuliers" />
+<appellation intitule="Délégué commercial / Déléguée commerciale auprès des particuliers" />
+<appellation intitule="Recouvreur / Recouvreuse de créances" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1207" intitule="Retouches en habillement">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante de vente automobile" />
+<appellation intitule="Attaché commercial / Attachée commerciale en automobiles" />
+<appellation intitule="Chef de groupe véhicules d'occasion" />
+<appellation intitule="Chef de groupe véhicules neufs" />
+<appellation intitule="Commercial / Commerciale en automobiles" />
+<appellation intitule="Conseiller / Conseillère des ventes automobiles" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en automobiles" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en véhicules industriels" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale en véhicules ou bateaux" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale motocycles" />
+<appellation intitule="Conseiller vendeur / Conseillère vendeuse d'autocars" />
+<appellation intitule="Conseiller vendeur / Conseillère vendeuse de bateaux de plaisance" />
+<appellation intitule="Conseiller vendeur / Conseillère vendeuse de véhicules de loisirs" />
+<appellation intitule="Conseiller vendeur / Conseillère vendeuse de véhicules poids lourds" />
+<appellation intitule="Délégué commercial / Déléguée commerciale en automobiles" />
+<appellation intitule="Gérant / Gérante de négoce automobile" />
+<appellation intitule="Négociant / Négociante de véhicules d'occasion" />
+<appellation intitule="Négociant / Négociante de véhicules neufs" />
+<appellation intitule="Technicien / Technicienne de la vente automobile" />
+<appellation intitule="Technicien / Technicienne de la vente de motocycles" />
+<appellation intitule="Vendeur / Vendeuse automobile" />
+<appellation intitule="Vendeur / Vendeuse de caravanes/camping car" />
+<appellation intitule="Vendeur / Vendeuse de motocycles" />
+<appellation intitule="Vendeur / Vendeuse de véhicules neufs" />
+<appellation intitule="Vendeur / Vendeuse en véhicules anciens" />
+<appellation intitule="Vendeur / Vendeuse en véhicules de collection" />
+<appellation intitule="Vendeur / Vendeuse en véhicules d'occasion" />
+<appellation intitule="Vendeur / Vendeuse en véhicules industriels" />
+<appellation intitule="Vendeur / Vendeuse secteur véhicules d'occasion" />
+<appellation intitule="Vendeur / Vendeuse secteur véhicules neufs" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1405" intitule="Conseil en information médicale">
+<liste_appellations>
+<appellation intitule="Attaché / Attachée à l'information médicale" />
+<appellation intitule="Conseiller / Conseillère en information médicale" />
+<appellation intitule="Conseiller / Conseillère en information pharmaceutique" />
+<appellation intitule="Délégué / Déléguée à l'information médicale" />
+<appellation intitule="Délégué / Déléguée dentaire" />
+<appellation intitule="Délégué / Déléguée médicopharmaceutique" />
+<appellation intitule="Délégué / Déléguée pharmaceutique" />
+<appellation intitule="Délégué / Déléguée vétérinaire" />
+<appellation intitule="Délégué médical / Déléguée médicale" />
+<appellation intitule="Délégué médical hospitalier / Déléguée médicale hospitalière" />
+<appellation intitule="Visiteur / Visiteuse pharmaceutique" />
+<appellation intitule="Visiteur médical / Visiteuse médicale" />
+<appellation intitule="Visiteur médical hospitalier / Visiteuse médicale hospitalière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1406" intitule="Management en force de vente">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée d'expansion commerciale d'enseigne" />
+<appellation intitule="Chef de secteur des ventes" />
+<appellation intitule="Chef des ventes" />
+<appellation intitule="Délégué régional / Déléguée régionale des ventes" />
+<appellation intitule="Directeur / Directrice des ventes" />
+<appellation intitule="Directeur / Directrice des ventes internationales" />
+<appellation intitule="Directeur national / Directrice nationale des ventes" />
+<appellation intitule="Directeur régional / Directrice régionale des ventes" />
+<appellation intitule="Directeur régional / Directrice régionale des ventes export" />
+<appellation intitule="Inspecteur / Inspectrice des ventes" />
+<appellation intitule="Inspecteur / Inspectrice du cadre en assurances" />
+<appellation intitule="Inspecteur commercial / Inspectrice commerciale" />
+<appellation intitule="Responsable animateur / animatrice des forces de vente" />
+<appellation intitule="Responsable animateur / animatrice des ventes" />
+<appellation intitule="Responsable de la force de vente" />
+<appellation intitule="Responsable des ventes" />
+<appellation intitule="Responsable des ventes comptes-clés" />
+<appellation intitule="Responsable des ventes zone export" />
+<appellation intitule="Responsable régional / régionale des ventes" />
+<appellation intitule="Responsable ventes indirectes" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1407" intitule="Relation technico-commerciale">
+<liste_appellations>
+<appellation intitule="Attaché technico-commercial / Attachée technico-commerciale" />
+<appellation intitule="Cadre technico-commercial / technico-commerciale" />
+<appellation intitule="Courtier / Courtière en vins" />
+<appellation intitule="Ingénieur commercial / Ingénieure commerciale" />
+<appellation intitule="Ingénieur technico-commercial / Ingénieure technico-commerciale" />
+<appellation intitule="Ingénieur technico-commercial / Ingénieure technico-commerciale en informatique" />
+<appellation intitule="Négociant / Négociante en bois" />
+<appellation intitule="Responsable technico-commercial / technico-commerciale" />
+<appellation intitule="Technico-commercial / Technico-commerciale" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1408" intitule="Téléconseil et télévente">
+<liste_appellations>
+<appellation intitule="Conseiller / Conseillère clientèle à distance" />
+<appellation intitule="Responsable de centre d'appels" />
+<appellation intitule="Responsable de plateau de centre d'appels" />
+<appellation intitule="Superviseur / Superviseuse de centre d'appels" />
+<appellation intitule="Technicien / Technicienne de la vente à distance" />
+<appellation intitule="Téléacteur / Téléactrice" />
+<appellation intitule="Téléconseiller / Téléconseillère" />
+<appellation intitule="Téléopérateur / Téléopératrice" />
+<appellation intitule="Téléprospecteur / Téléprospectrice" />
+<appellation intitule="Télévendeur / Télévendeuse" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="D15" intitule="Grande distribution">
+<fiche
+ code="D1501" intitule="Animation de vente">
+<liste_appellations>
+<appellation intitule="Agent / Agente de promotion des ventes" />
+<appellation intitule="Animateur / Animatrice de vente" />
+<appellation intitule="Animateur commercial / Animatrice commerciale" />
+<appellation intitule="Animateur-démonstateur / Animatrice-démonstratrice" />
+<appellation intitule="Démonstrateur / Démonstratrice" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1502" intitule="Management-gestion de rayon produits alimentaires">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe au chef de rayon produits alimentaires" />
+<appellation intitule="Adjoint / Adjointe au responsable de rayon produits alimentaires" />
+<appellation intitule="Chef de rayon boucherie" />
+<appellation intitule="Chef de rayon boucherie/charcuterie" />
+<appellation intitule="Chef de rayon boulangerie" />
+<appellation intitule="Chef de rayon boulangerie/pâtisserie" />
+<appellation intitule="Chef de rayon charcuterie" />
+<appellation intitule="Chef de rayon crèmerie fromagerie" />
+<appellation intitule="Chef de rayon épicerie" />
+<appellation intitule="Chef de rayon fruits et légumes" />
+<appellation intitule="Chef de rayon liquides" />
+<appellation intitule="Chef de rayon pâtisserie" />
+<appellation intitule="Chef de rayon poissonnerie" />
+<appellation intitule="Chef de rayon produits alimentaires" />
+<appellation intitule="Chef de rayon produits alimentaires hors produits frais" />
+<appellation intitule="Chef de rayon produits frais" />
+<appellation intitule="Chef de rayon produits traiteur" />
+<appellation intitule="Chef de rayon surgelés" />
+<appellation intitule="Manager / Manageuse de rayon alimentaire hors produits frais" />
+<appellation intitule="Manager / Manageuse produits frais" />
+<appellation intitule="Manager / Manageuse rayon alimentaire" />
+<appellation intitule="Responsable de rayon alimentaire hors produits frais" />
+<appellation intitule="Responsable de rayon produits alimentaires" />
+<appellation intitule="Responsable de rayon produits frais" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1503" intitule="Management-gestion de rayon produits non alimentaires">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe au chef de rayon produits non alimentaires" />
+<appellation intitule="Adjoint / Adjointe au responsable de rayon produits non alimentaires" />
+<appellation intitule="Chef de rayon bazar" />
+<appellation intitule="Chef de rayon bricolage" />
+<appellation intitule="Chef de rayon électroménager" />
+<appellation intitule="Chef de rayon équipement de la maison" />
+<appellation intitule="Chef de rayon équipement de la personne" />
+<appellation intitule="Chef de rayon hygiène et parfumerie" />
+<appellation intitule="Chef de rayon informatique" />
+<appellation intitule="Chef de rayon jardinerie et animalerie" />
+<appellation intitule="Chef de rayon jouets" />
+<appellation intitule="Chef de rayon librairie papeterie" />
+<appellation intitule="Chef de rayon photo image et son" />
+<appellation intitule="Chef de rayon produits culturels" />
+<appellation intitule="Chef de rayon produits non alimentaires" />
+<appellation intitule="Chef de rayon puériculture" />
+<appellation intitule="Chef de rayon sport" />
+<appellation intitule="Chef de rayon téléphonie" />
+<appellation intitule="Chef de rayon textile" />
+<appellation intitule="Manager / Manageuse de rayon produits non alimentaires" />
+<appellation intitule="Responsable de rayon produits non alimentaires" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1504" intitule="Direction de magasin de grande distribution">
+<liste_appellations>
+<appellation intitule="Directeur / Directrice de grand magasin" />
+<appellation intitule="Directeur / Directrice de grande surface" />
+<appellation intitule="Directeur / Directrice de Grande Surface de Bricolage -GSB-" />
+<appellation intitule="Directeur / Directrice de Grande Surface Spécialisée -GSS-" />
+<appellation intitule="Directeur / Directrice de magasin à grande surface" />
+<appellation intitule="Directeur / Directrice de magasin de grande distribution" />
+<appellation intitule="Directeur / Directrice de réseau de la distribution" />
+<appellation intitule="Directeur / Directrice de supermarché" />
+<appellation intitule="Directeur / Directrice de zone de la distribution" />
+<appellation intitule="Directeur / Directrice d'enseigne de la grande distribution" />
+<appellation intitule="Directeur / Directrice d'hypermarché" />
+<appellation intitule="Directeur adjoint / Directrice adjointe d'hypermarché" />
+<appellation intitule="Directeur régional / Directrice régionale de supermarché" />
+<appellation intitule="Directeur régional / Directrice régionale d'hyper ou de supermarché" />
+<appellation intitule="Directeur régional / Directrice régionale d'hypermarché" />
+<appellation intitule="Responsable adjoint / adjointe de magasin de grande distribution" />
+<appellation intitule="Responsable de réseau de la distribution" />
+<appellation intitule="Responsable ventes de la distribution" />
+<appellation intitule="Superviseur / Superviseuse d'hypermarché ou de supermarché" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1505" intitule="Personnel de caisse">
+<liste_appellations>
+<appellation intitule="Caissier / Caissière" />
+<appellation intitule="Caissier / Caissière de parking" />
+<appellation intitule="Caissier / Caissière de station-service" />
+<appellation intitule="Caissier / Caissière en libre-service" />
+<appellation intitule="Caissier / Caissière pompiste" />
+<appellation intitule="Caissier / Caissière roller" />
+<appellation intitule="Caissier / Caissière spectacle" />
+<appellation intitule="Hôte / Hôtesse de caisse" />
+<appellation intitule="Péager / Péagère" />
+<appellation intitule="Péagiste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1506" intitule="Marchandisage">
+<liste_appellations>
+<appellation intitule="Marchandiseur / Marchandiseuse" />
+<appellation intitule="Optimisateur / Optimisatrice de linéaires" />
+<appellation intitule="Promoteur / Promotrice de linéaires" />
+<appellation intitule="Responsable de service marchandisage" />
+<appellation intitule="Responsable de service merchandising" />
+<appellation intitule="Responsable merchandising" />
+<appellation intitule="Technicien / Technicienne en marchandisage" />
+<appellation intitule="Technicien / Technicienne en merchandising" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1507" intitule="Mise en rayon libre-service">
+<liste_appellations>
+<appellation intitule="Employé / Employée de libre-service" />
+<appellation intitule="Employé / Employée de rayon" />
+<appellation intitule="Employé / Employée de rayon libre-service" />
+<appellation intitule="Employé / Employée en approvisionnement de rayon" />
+<appellation intitule="Employé polyvalent / Employée polyvalente de libre-service" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1508" intitule="Encadrement du personnel de caisses">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe chef de caisses" />
+<appellation intitule="Chef de caisses" />
+<appellation intitule="Chef de département caisses" />
+<appellation intitule="Chef de secteur caisses" />
+<appellation intitule="Manager / Manageuse de caisses" />
+<appellation intitule="Responsable de caisses" />
+<appellation intitule="Responsable de ligne de caisses" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="D1509" intitule="Management de département en grande distribution">
+<liste_appellations>
+<appellation intitule="Chef de département alimentaire" />
+<appellation intitule="Chef de département en grande distribution" />
+<appellation intitule="Chef de département produits culturels" />
+<appellation intitule="Chef de département produits frais" />
+<appellation intitule="Chef de département produits non alimentaires" />
+<appellation intitule="Chef de département textile" />
+<appellation intitule="Chef de groupe en grande distribution" />
+<appellation intitule="Chef de secteur bazar" />
+<appellation intitule="Chef de secteur commerce" />
+<appellation intitule="Chef de secteur distribution" />
+<appellation intitule="Chef de secteur en hypermarché" />
+<appellation intitule="Chef de secteur magasin" />
+<appellation intitule="Chef de secteur non alimentaire" />
+<appellation intitule="Chef de secteur produits alimentaires" />
+<appellation intitule="Chef de secteur Produits de Grande Consommation -PGC-" />
+<appellation intitule="Directeur / Directrice de divisions d'hypermarché" />
+<appellation intitule="Responsable de branche d'hypermarché" />
+<appellation intitule="Responsable de département en grande distribution" />
+<appellation intitule="Responsable espace culturel en grande distribution" />
+<appellation intitule="Responsable univers" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="E" intitule="COMMUNICATION, MEDIA ET MULTIMÉDIA">
+<domaine code="E11" intitule="Édition et communication">
+<fiche
+ code="E1101" intitule="Animation de site multimédia">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice de communauté virtuelle" />
+<appellation intitule="Animateur / Animatrice de forum sur internet" />
+<appellation intitule="Animateur / Animatrice web" />
+<appellation intitule="Chargé / Chargée des relations avec les internautes" />
+<appellation intitule="E-commercial / E-commerciale" />
+<appellation intitule="Modérateur / Modératrice web" />
+<appellation intitule="Web commercial / commerciale" />
+<appellation intitule="Web vendeur / vendeuse" />
+<appellation intitule="Webmaster animateur / animatrice" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1102" intitule="Ecriture d'ouvrages, de livres">
+<liste_appellations>
+<appellation intitule="Adaptateur-traducteur / Adaptatrice-traductrice" />
+<appellation intitule="Auteur / Auteure carnettiste" />
+<appellation intitule="Auteur / Auteure de bande dessinée" />
+<appellation intitule="Auteur / Auteure dramatique" />
+<appellation intitule="Auteur / Auteure humoriste" />
+<appellation intitule="Auteur / Auteure littéraire" />
+<appellation intitule="Auteur écrivain / Auteure écrivaine" />
+<appellation intitule="Auteur écrivain / Auteure écrivaine multimédia" />
+<appellation intitule="Auteur-adaptateur / Auteure-adaptatrice" />
+<appellation intitule="Biographe" />
+<appellation intitule="Biographe littéraire" />
+<appellation intitule="Dialoguiste" />
+<appellation intitule="Directeur / Directrice d'écriture de scénario" />
+<appellation intitule="Ecrivain / Ecrivaine" />
+<appellation intitule="Ecrivain public / Ecrivaine publique" />
+<appellation intitule="Essayiste" />
+<appellation intitule="Librettiste" />
+<appellation intitule="Parolier / Parolière" />
+<appellation intitule="Poète" />
+<appellation intitule="Romancier / Romancière" />
+<appellation intitule="Scénariste" />
+<appellation intitule="Writer designer" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1103" intitule="Communication">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante de communication" />
+<appellation intitule="Assistant / Assistante parlementaire" />
+<appellation intitule="Assistant / Assistante relations presse" />
+<appellation intitule="Assistant / Assistante relations publiques" />
+<appellation intitule="Attaché / Attachée de presse" />
+<appellation intitule="Chargé / Chargée de communication" />
+<appellation intitule="Chargé / Chargée de communication externe" />
+<appellation intitule="Chargé / Chargée de communication interne" />
+<appellation intitule="Chargé / Chargée de communication scientifique" />
+<appellation intitule="Chargé / Chargée de communication sociale" />
+<appellation intitule="Chargé / Chargée de presse" />
+<appellation intitule="Chargé / Chargée des relations extérieures" />
+<appellation intitule="Chargé / Chargée des relations presse" />
+<appellation intitule="Chargé / Chargée des relations publiques" />
+<appellation intitule="Chef du service d'information et de communication" />
+<appellation intitule="Conseiller / Conseillère en communication" />
+<appellation intitule="Conseiller / Conseillère technique en communication" />
+<appellation intitule="Consultant / Consultante en communication" />
+<appellation intitule="Coordonnateur / Coordonnatrice des relations internationales" />
+<appellation intitule="Directeur / Directrice de la communication" />
+<appellation intitule="Lobbyiste" />
+<appellation intitule="Rédacteur / Rédactrice des débats" />
+<appellation intitule="Responsable de communication en entreprise" />
+<appellation intitule="Responsable de communication externe" />
+<appellation intitule="Responsable de communication interne" />
+<appellation intitule="Responsable de la communication" />
+<appellation intitule="Responsable de l'information et de la communication" />
+<appellation intitule="Responsable des relations extérieures" />
+<appellation intitule="Responsable des relations internes" />
+<appellation intitule="Responsable des relations presse" />
+<appellation intitule="Responsable du service de presse" />
+<appellation intitule="Sténographe des débats" />
+<appellation intitule="Webmaster chargé / chargée de communication" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1104" intitule="Conception de contenus multimédias">
+<liste_appellations>
+<appellation intitule="Chef de création artistique communication multimédia" />
+<appellation intitule="Chef de groupe de création multimédia" />
+<appellation intitule="Concepteur / Conceptrice artistique communication multimédia" />
+<appellation intitule="Concepteur / Conceptrice de jeux vidéo" />
+<appellation intitule="Concepteur / Conceptrice en publicité" />
+<appellation intitule="Concepteur / Conceptrice multimédia" />
+<appellation intitule="Concepteur réalisateur / Conceptrice réalisatrice communication" />
+<appellation intitule="Concepteur rédacteur / Conceptrice rédactrice communication" />
+<appellation intitule="Concepteur rédacteur / Conceptrice rédactrice publicitaire" />
+<appellation intitule="Directeur / Directrice artistique communication multimédia" />
+<appellation intitule="Directeur / Directrice de création communication multimédia" />
+<appellation intitule="Game designer / designeuse" />
+<appellation intitule="Responsable de conception communication multimédia" />
+<appellation intitule="Webmaster concepteur / conceptrice de site web" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1105" intitule="Coordination d'édition">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante d'édition" />
+<appellation intitule="Conseiller / Conseillère littéraire" />
+<appellation intitule="Directeur / Directrice de collection en édition" />
+<appellation intitule="Directeur / Directrice d'édition électronique et multimédia" />
+<appellation intitule="Directeur / Directrice d'édition en ligne" />
+<appellation intitule="Directeur / Directrice des publications" />
+<appellation intitule="Directeur / Directrice éditorial" />
+<appellation intitule="Directeur / Directrice littéraire" />
+<appellation intitule="Editeur / Editrice" />
+<appellation intitule="Editeur / Editrice junior" />
+<appellation intitule="Editeur / Editrice multimédia" />
+<appellation intitule="Lecteur / Lectrice" />
+<appellation intitule="Responsable de produits d'édition" />
+<appellation intitule="Responsable d'édition" />
+<appellation intitule="Responsable service édition" />
+<appellation intitule="Secrétaire d'édition" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1106" intitule="Journalisme et information média">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée de rédaction" />
+<appellation intitule="Chef de rubrique" />
+<appellation intitule="Correspondant / Correspondante de Presse à l'étranger" />
+<appellation intitule="Correspondant local / Correspondante locale de la Presse" />
+<appellation intitule="Critique d'art, cinéma, théâtre, littérature, musique" />
+<appellation intitule="Cyber-journaliste" />
+<appellation intitule="Directeur / Directrice de la rédaction" />
+<appellation intitule="Directeur / Directrice d'information" />
+<appellation intitule="Éditorialiste" />
+<appellation intitule="Envoyé spécial / Envoyée spéciale de Presse" />
+<appellation intitule="Grand reporter / Grande reportrice" />
+<appellation intitule="Journaliste" />
+<appellation intitule="Journaliste agencier / agencière" />
+<appellation intitule="Journaliste chargé / chargée de publication" />
+<appellation intitule="Journaliste de « communication de ville »" />
+<appellation intitule="Journaliste de presse audiovisuelle" />
+<appellation intitule="Journaliste de presse écrite" />
+<appellation intitule="Journaliste de presse radiophonique" />
+<appellation intitule="Journaliste d'entreprise" />
+<appellation intitule="Journaliste en ligne" />
+<appellation intitule="Journaliste localier / localière" />
+<appellation intitule="Journaliste présentateur / présentatrice radio" />
+<appellation intitule="Journaliste présentateur / présentatrice TV" />
+<appellation intitule="Journaliste rédacteur / rédactrice" />
+<appellation intitule="Journaliste reporter / reportrice d'images" />
+<appellation intitule="Journaliste scientifique" />
+<appellation intitule="Journaliste spécialisé / spécialisée" />
+<appellation intitule="Journaliste sportif / sportive" />
+<appellation intitule="Journaliste territorial / territoriale" />
+<appellation intitule="Journaliste Web" />
+<appellation intitule="Photojournaliste" />
+<appellation intitule="Pigiste" />
+<appellation intitule="Rédacteur / Rédactrice de presse" />
+<appellation intitule="Rédacteur / Rédactrice en chef" />
+<appellation intitule="Rédacteur en chef adjoint / Rédactrice en chef adjointe" />
+<appellation intitule="Rédacteur rewriter traducteur / Rédactrice rewriteuse traductrice" />
+<appellation intitule="Rédacteur traducteur / Rédactrice traductrice" />
+<appellation intitule="Reporter / Reportrice" />
+<appellation intitule="Reporter / Reportrice photographe" />
+<appellation intitule="Reporter dessinateur / dessinatrice" />
+<appellation intitule="Responsable d'édition en presse" />
+<appellation intitule="Responsable éditorial / éditoriale" />
+<appellation intitule="Secrétaire de rédaction" />
+<appellation intitule="Secrétaire de rédaction -PAO-" />
+<appellation intitule="Secrétaire général / générale de la rédaction" />
+<appellation intitule="Sténographe rédacteur / rédactrice" />
+<appellation intitule="Webmaster éditorialiste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1107" intitule="Organisation d'événementiel">
+<liste_appellations>
+<appellation intitule="Conseiller / Conseillère en organisation de mariages" />
+<appellation intitule="Conseiller / Conseillère en organisation d'événementiel de particuliers" />
+<appellation intitule="Organisateur / Organisatrice de manifestations" />
+<appellation intitule="Organisateur / Organisatrice de mariages et de séminaires" />
+<appellation intitule="Organisateur / Organisatrice de réceptions" />
+<appellation intitule="Organisateur / Organisatrice de soirées" />
+<appellation intitule="Régisseur / Régisseuse d'évènementiel" />
+<appellation intitule="Responsable évènement" />
+<appellation intitule="Wedding planner" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1108" intitule="Traduction, interprétariat">
+<liste_appellations>
+<appellation intitule="Expert traducteur / Experte traductrice interprète" />
+<appellation intitule="Interprète" />
+<appellation intitule="Interprète d'affaires" />
+<appellation intitule="Interprète de conférences" />
+<appellation intitule="Interprète de contacts" />
+<appellation intitule="Interprète de liaison" />
+<appellation intitule="Interprète en langage des signes" />
+<appellation intitule="Interprète-traducteur / Interprète-traductrice" />
+<appellation intitule="Traducteur / Traductrice" />
+<appellation intitule="Traducteur / Traductrice audiovisuel" />
+<appellation intitule="Traducteur / Traductrice d'édition" />
+<appellation intitule="Traducteur / Traductrice littéraire" />
+<appellation intitule="Traducteur / Traductrice terminologue" />
+<appellation intitule="Traducteur expert / Traductrice experte" />
+<appellation intitule="Traducteur expert / Traductrice experte judiciaire" />
+<appellation intitule="Traducteur technique / Traductrice  technique" />
+<appellation intitule="Traducteur-interprète / Traductrice-interprète" />
+<appellation intitule="Traducteur-réviseur / Traductrice-réviseuse" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="E12" intitule=" Images et sons">
+<fiche
+ code="E1201" intitule="Photographie">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante photographe" />
+<appellation intitule="Chef de studio de photographie" />
+<appellation intitule="Chef opérateur / opératrice photographe" />
+<appellation intitule="Opérateur / Opératrice photographe" />
+<appellation intitule="Photographe" />
+<appellation intitule="Photographe aérien / aérienne" />
+<appellation intitule="Photographe animalier / animalière" />
+<appellation intitule="Photographe créateur / créatrice" />
+<appellation intitule="Photographe culturel / culturelle" />
+<appellation intitule="Photographe d'architecture" />
+<appellation intitule="Photographe d'art" />
+<appellation intitule="Photographe de mode" />
+<appellation intitule="Photographe de plateau de tournage" />
+<appellation intitule="Photographe de portrait" />
+<appellation intitule="Photographe de presse" />
+<appellation intitule="Photographe de reportage" />
+<appellation intitule="Photographe de sport" />
+<appellation intitule="Photographe d'illustrations" />
+<appellation intitule="Photographe en industrie graphique" />
+<appellation intitule="Photographe filmeur / filmeuse" />
+<appellation intitule="Photographe généraliste" />
+<appellation intitule="Photographe illustrateur / illustratrice" />
+<appellation intitule="Photographe industriel / industrielle" />
+<appellation intitule="Photographe itinérant / itinérante" />
+<appellation intitule="Photographe médical / médicale" />
+<appellation intitule="Photographe opérateur-tireur / opératrice-tireuse" />
+<appellation intitule="Photographe publicitaire" />
+<appellation intitule="Photographe retoucheur / retoucheuse" />
+<appellation intitule="Photographe scientifique" />
+<appellation intitule="Photographe scolaire" />
+<appellation intitule="Photographe social / sociale" />
+<appellation intitule="Photographe tireur-agrandisseur / tireuse-agrandisseuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1202" intitule="Production en laboratoire cinématographique">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'encadrement de laboratoire cinématographique" />
+<appellation intitule="Colleur / Colleuse de films cinématographiques" />
+<appellation intitule="Contrôleur / Contrôleuse sensitomètrique en traitement de films cinématographiques" />
+<appellation intitule="Dédoubleur / Dédoubleuse de films cinématographiques" />
+<appellation intitule="Dérusheur / Dérusheuse" />
+<appellation intitule="Développeur / Développeuse de négatifs de films cinématographiques" />
+<appellation intitule="Développeur / Développeuse de positifs de films cinématographiques" />
+<appellation intitule="Employé / Employée de laboratoire de tirage cinématographique" />
+<appellation intitule="Essuyeur / Essuyeuse de films cinématographiques" />
+<appellation intitule="Etalonneur / Etalonneuse de laboratoire cinématographique" />
+<appellation intitule="Monteur / Monteuse négatif de laboratoire cinématographique" />
+<appellation intitule="Monteur / Monteuse négatif d'édition cinématographique" />
+<appellation intitule="Monteur / Monteuse positif de laboratoire cinématographique" />
+<appellation intitule="Monteur / Monteuse premier positif" />
+<appellation intitule="Opérateur / Opératrice de laboratoire cinématographique" />
+<appellation intitule="Opérateur / Opératrice de laboratoire de tirage cinématographique" />
+<appellation intitule="Opérateur / Opératrice de télécinéma" />
+<appellation intitule="Ouvrier / Ouvrière de laboratoire cinématographique" />
+<appellation intitule="Projectionniste de laboratoire cinématographique" />
+<appellation intitule="Responsable de laboratoire cinématographique" />
+<appellation intitule="Responsable de laboratoire de tirage cinématographique" />
+<appellation intitule="Restaurateur / Restauratrice de films cinématographiques" />
+<appellation intitule="Sécheur / Sécheuse de films cinématographiques" />
+<appellation intitule="Sécheur / Sécheuse en laboratoire cinématographique" />
+<appellation intitule="Technicien / Technicienne de laboratoire de tirage cinématographique" />
+<appellation intitule="Tireur / Tireuse premier positif" />
+<appellation intitule="Tireur / Tireuse série de laboratoire cinématographique" />
+<appellation intitule="Vérificateur / Vérificatrice en laboratoire cinématographique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1203" intitule="Production en laboratoire photographique">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'encadrement de laboratoire photographique" />
+<appellation intitule="Assistant / Assistante de laboratoire photographique" />
+<appellation intitule="Chef de laboratoire photographique" />
+<appellation intitule="Contrôleur / Contrôleuse sensisométrique en développement photographique" />
+<appellation intitule="Développeur / Développeuse de photographies" />
+<appellation intitule="Développeur-vendeur / Développeuse-vendeuse en photographies" />
+<appellation intitule="Etalonneur-filtreur / Etalonneuse-filtreuse en développement photographique" />
+<appellation intitule="Laborantin / Laborantine de laboratoire photographique" />
+<appellation intitule="Opérateur / Opératrice de laboratoire photographique" />
+<appellation intitule="Opérateur / Opératrice de minilaboratoire photographique" />
+<appellation intitule="Opérateur / Opératrice sur machines automatisées de développement photographique" />
+<appellation intitule="Repiqueur / Repiqueuse en tirage photographique" />
+<appellation intitule="Responsable de laboratoire photographique" />
+<appellation intitule="Responsable de minilaboratoire de tirage photographique" />
+<appellation intitule="Retoucheur / Retoucheuse de photos numériques" />
+<appellation intitule="Retoucheur / Retoucheuse en tirage photographique" />
+<appellation intitule="Technicien / Technicienne de laboratoire photographique" />
+<appellation intitule="Tireur / Tireuse en photographie" />
+<appellation intitule="Tireur-agrandisseur / Tireuse-agrandisseuse en photographie" />
+<appellation intitule="Tireur-agrandisseur / Tireuse-agrandisseuse noir et blanc en photographie" />
+<appellation intitule="Tireur-développeur / Tireuse-développeuse en photographie" />
+<appellation intitule="Tireur-filtreur / Tireuse-filtreuse en photographie" />
+<appellation intitule="Trieur-assembleur / Trieuse-assembleuse en photographie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1204" intitule="Projection cinéma">
+<liste_appellations>
+<appellation intitule="Chef de cabine de projection" />
+<appellation intitule="Chef d'équipe opérateur / opératrice de projection" />
+<appellation intitule="Chef opérateur / opératrice de projection" />
+<appellation intitule="Opérateur / Opératrice de projection" />
+<appellation intitule="Opérateur / Opératrice projectionniste" />
+<appellation intitule="Projectionniste" />
+<appellation intitule="Responsable technique de la projection" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1205" intitule="Réalisation de contenus multimédias">
+<liste_appellations>
+<appellation intitule="Affichiste" />
+<appellation intitule="Animateur / Animatrice 2D" />
+<appellation intitule="Animateur / Animatrice 3D" />
+<appellation intitule="Chef de fabrication d'édition publicitaire" />
+<appellation intitule="Chef de studio de créations graphiques" />
+<appellation intitule="Coloriste numérique" />
+<appellation intitule="Décorateur / Décoratice graphiste" />
+<appellation intitule="Designer / Designeuse d'interactivité" />
+<appellation intitule="Designer / Designeuse graphique" />
+<appellation intitule="Dessinateur / Dessinatrice de bande dessinée" />
+<appellation intitule="Dessinateur / Dessinatrice de presse" />
+<appellation intitule="Dessinateur / Dessinatrice d'édition" />
+<appellation intitule="Dessinateur / Dessinatrice en publicité" />
+<appellation intitule="Dessinateur / Dessinatrice graphiste" />
+<appellation intitule="Gouacheur / Gouacheuse en films d'animation" />
+<appellation intitule="Graphiste concepteur / conceptrice" />
+<appellation intitule="Graphiste multimédia" />
+<appellation intitule="Illustrateur / Illustratrice" />
+<appellation intitule="Illustrateur / Illustratrice graphiste" />
+<appellation intitule="Infographiste" />
+<appellation intitule="Infographiste effets spéciaux" />
+<appellation intitule="Infographiste en image de synthèse" />
+<appellation intitule="Infographiste en multimédia" />
+<appellation intitule="Infographiste intégrateur / intégratrice" />
+<appellation intitule="Infographiste web master" />
+<appellation intitule="Intégrateur / Intégratrice graphiste" />
+<appellation intitule="Intégrateur / Intégratrice multimédia" />
+<appellation intitule="Layout man / woman" />
+<appellation intitule="Maquettiste en arts graphiques" />
+<appellation intitule="Modélisateur / Modélisatrice 3D" />
+<appellation intitule="Réalisateur / Réalisatrice multimédia" />
+<appellation intitule="Roughman / Roughwoman en arts graphiques" />
+<appellation intitule="Story boarder" />
+<appellation intitule="Technicien / Technicienne en image de synthèse 3D" />
+<appellation intitule="Vidéographiste" />
+<appellation intitule="Web designer / designeuse" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="E13" intitule="Industries graphiques">
+<fiche
+ code="E1301" intitule="Conduite de machines d'impression">
+<liste_appellations>
+<appellation intitule="Aide conducteur / conductrice de machines d'impression" />
+<appellation intitule="Bobineur / Bobineuse en industrie graphique" />
+<appellation intitule="Bobinier / Bobinière en industrie graphique" />
+<appellation intitule="Bobinier-receveur / Bobinière-receveuse en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice 1 ou 2 couleurs sur machines à feuilles" />
+<appellation intitule="Conducteur / Conductrice 4 couleurs ou plus sur machines à bobines" />
+<appellation intitule="Conducteur / Conductrice 4 couleurs ou plus sur machines à feuilles" />
+<appellation intitule="Conducteur / Conductrice de machines à imprimer" />
+<appellation intitule="Conducteur / Conductrice de machines à imprimer complexe" />
+<appellation intitule="Conducteur / Conductrice de machines à imprimer offset" />
+<appellation intitule="Conducteur / Conductrice de machines à sérigraphier" />
+<appellation intitule="Conducteur / Conductrice de machines de flexographie" />
+<appellation intitule="Conducteur / Conductrice de machines d'impression" />
+<appellation intitule="Conducteur / Conductrice de machines feuilles en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice de machines feuilles héliogravure" />
+<appellation intitule="Conducteur / Conductrice de machines feuilles offset" />
+<appellation intitule="Conducteur / Conductrice de machines feuilles typographie" />
+<appellation intitule="Conducteur / Conductrice de presses 4 couleurs" />
+<appellation intitule="Conducteur / Conductrice de presses numérique d'imprimerie" />
+<appellation intitule="Conducteur / Conductrice de rotatives" />
+<appellation intitule="Conducteur / Conductrice de rotatives blanchet-blanchet" />
+<appellation intitule="Conducteur / Conductrice de rotatives héliogravure" />
+<appellation intitule="Conducteur / Conductrice de rotatives monobobine impression continue" />
+<appellation intitule="Conducteur / Conductrice de rotatives monobobine multicouleur" />
+<appellation intitule="Conducteur / Conductrice de rotatives multibobine impression continue" />
+<appellation intitule="Conducteur / Conductrice de rotatives offset" />
+<appellation intitule="Conducteur / Conductrice de rotatives typographie" />
+<appellation intitule="Conducteur / Conductrice flexographe" />
+<appellation intitule="Conducteur / Conductrice héliogravure" />
+<appellation intitule="Conducteur / Conductrice offset" />
+<appellation intitule="Conducteur / Conductrice offset monocouleur" />
+<appellation intitule="Conducteur / Conductrice rotativiste" />
+<appellation intitule="Conducteur-tireur-sérigraphe / Conductrice-tireuse-sérigraphe" />
+<appellation intitule="Imprimeur / Imprimeuse" />
+<appellation intitule="Imprimeur / Imprimeuse flexographe" />
+<appellation intitule="Imprimeur / Imprimeuse offset" />
+<appellation intitule="Imprimeur / Imprimeuse rotativiste" />
+<appellation intitule="Imprimeur / Imprimeuse sérigraphe" />
+<appellation intitule="Imprimeur / Imprimeuse typographe" />
+<appellation intitule="Margeur / Margeuse en industrie graphique" />
+<appellation intitule="Margeur / Margeuse sur machine à imprimer" />
+<appellation intitule="Offsettiste" />
+<appellation intitule="Receveur / Receveuse en industrie graphique" />
+<appellation intitule="Receveur-bobineur / Receveuse-bobineuse en industrie graphique" />
+<appellation intitule="Rotativiste" />
+<appellation intitule="Rotativiste hélio" />
+<appellation intitule="Rotativiste offset" />
+<appellation intitule="Rotativiste typo" />
+<appellation intitule="Sérigraphe" />
+<appellation intitule="Tampographe" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1302" intitule="Conduite de machines de façonnage routage">
+<liste_appellations>
+<appellation intitule="Aide conducteur / conductrice de machines de façonnage" />
+<appellation intitule="Brocheur / Brocheuse en industrie graphique" />
+<appellation intitule="Chef d'atelier de routage" />
+<appellation intitule="Conducteur / Conductrice d'agrafeuses" />
+<appellation intitule="Conducteur / Conductrice d'autoplatines" />
+<appellation intitule="Conducteur / Conductrice de chaînes automatisées de brochage" />
+<appellation intitule="Conducteur / Conductrice de chaînes automatisées de reliure" />
+<appellation intitule="Conducteur / Conductrice de chaînes automatisées d'encartage-piquage" />
+<appellation intitule="Conducteur / Conductrice de chaînes de brochage" />
+<appellation intitule="Conducteur / Conductrice de couseuses en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice de couverturières" />
+<appellation intitule="Conducteur / Conductrice de machines à assembler en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice de machines à étiqueter" />
+<appellation intitule="Conducteur / Conductrice de machines à pelliculer" />
+<appellation intitule="Conducteur / Conductrice de machines à relier sans couture" />
+<appellation intitule="Conducteur / Conductrice de machines d'affranchissement" />
+<appellation intitule="Conducteur / Conductrice de machines de brochage" />
+<appellation intitule="Conducteur / Conductrice de machines de façonnage en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice de machines de finition en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice de machines de mise sous film" />
+<appellation intitule="Conducteur / Conductrice de machines de mise sous plis" />
+<appellation intitule="Conducteur / Conductrice de machines de reliure" />
+<appellation intitule="Conducteur / Conductrice de machines de routage" />
+<appellation intitule="Conducteur / Conductrice de massicot à commandes manuelles" />
+<appellation intitule="Conducteur / Conductrice de massicot en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice de massicot trilatéral" />
+<appellation intitule="Conducteur / Conductrice de perforeuses" />
+<appellation intitule="Conducteur / Conductrice de plieuses en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice de plieuses-colleuses en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice de presses à dorer en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice de rainureuses" />
+<appellation intitule="Conducteur / Conductrice de refouleuses-échancreuses" />
+<appellation intitule="Conducteur / Conductrice de relieuses à dos carré-collé" />
+<appellation intitule="Conducteur / Conductrice de vernisseuses en industrie graphique" />
+<appellation intitule="Conducteur / Conductrice d'emboîteuses" />
+<appellation intitule="Conducteur / Conductrice d'encarteuses piqueuses" />
+<appellation intitule="Conducteur / Conductrice d'enliasseuses" />
+<appellation intitule="Conducteur-régleur / Conductrice-régleuse de machines de façonnage en industrie graphique" />
+<appellation intitule="Massicotier / Massicotière en industrie graphique" />
+<appellation intitule="Opérateur / Opératrice sur machines à assembler en industrie graphique" />
+<appellation intitule="Opérateur / Opératrice sur machines à piquer en industrie graphique" />
+<appellation intitule="Opérateur / Opératrice sur machines de brochure-reliure" />
+<appellation intitule="Opérateur / Opératrice sur plieuses en industrie graphique" />
+<appellation intitule="Refendeur / Refendeuse en industrie graphique" />
+<appellation intitule="Régleur / Régleuse de machines de routage" />
+<appellation intitule="Rogneur / Rogneuse en industrie graphique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1303" intitule="Encadrement des industries graphiques">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maîtrise en industrie graphique" />
+<appellation intitule="Agent / Agente d'encadrement en industrie graphique" />
+<appellation intitule="Chef d'atelier en industrie graphique" />
+<appellation intitule="Chef de fabrication édition" />
+<appellation intitule="Chef de fabrication en industrie graphique" />
+<appellation intitule="Chef d'équipe en industrie graphique" />
+<appellation intitule="Responsable d'atelier de façonnage" />
+<appellation intitule="Responsable d'atelier de routage" />
+<appellation intitule="Responsable d'atelier d'impression" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1304" intitule="Façonnage et routage">
+<liste_appellations>
+<appellation intitule="Affranchisseur / Affranchisseuse" />
+<appellation intitule="Agent / Agente de mise sous plis" />
+<appellation intitule="Agent / Agente de routage manuel" />
+<appellation intitule="Agent / Agente d'exécution en routage et façonnage" />
+<appellation intitule="Agent / Agente d'exploitation en routage" />
+<appellation intitule="Brocheur papetier / Brocheuse papetière main" />
+<appellation intitule="Décortiqueur / Décortiqueuse" />
+<appellation intitule="Employé / Employée de routage" />
+<appellation intitule="Etiqueteur / Etiqueteuse" />
+<appellation intitule="Margeur / Margeuse en façonnage" />
+<appellation intitule="Margeur ramasseur / Margeuse ramasseuse en façonnage" />
+<appellation intitule="Margeur ramasseur / Margeuse ramasseuse en routage" />
+<appellation intitule="Opérateur / Opératrice de façonnage en industrie graphique" />
+<appellation intitule="Opérateur / Opératrice de machine manuelle d'affranchissement" />
+<appellation intitule="Opérateur / Opératrice d'exécution de façonnage" />
+<appellation intitule="Ouvrier / Ouvrière de façonnage manuel" />
+<appellation intitule="Ouvrier / Ouvrière de finition et façonnage" />
+<appellation intitule="Ouvrier cartonnier / Ouvrière cartonnière de finition" />
+<appellation intitule="Papetier / Papetière en façonnage" />
+<appellation intitule="Receveur / Receveuse en façonnage" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1305" intitule="Préparation et correction en édition et presse">
+<liste_appellations>
+<appellation intitule="Correcteur / Correctrice" />
+<appellation intitule="Correcteur / Correctrice à domicile" />
+<appellation intitule="Correcteur / Correctrice bon à tirer" />
+<appellation intitule="Correcteur / Correctrice braille" />
+<appellation intitule="Correcteur / Correctrice de presse" />
+<appellation intitule="Correcteur / Correctrice d'édition" />
+<appellation intitule="Correcteur / Correctrice d'imprimerie" />
+<appellation intitule="Correcteur / Correctrice en langues exceptionnelles" />
+<appellation intitule="Correcteur / Correctrice sur écran" />
+<appellation intitule="Correcteur éditeur / Correctrice éditrice de textes" />
+<appellation intitule="Correcteur spécialisé / Correctrice spécialisée" />
+<appellation intitule="Correcteur-réviseur / Correctrice-réviseuse" />
+<appellation intitule="Correcteur-rewriter / Correctrice-rewriteuse" />
+<appellation intitule="Lecteur-correcteur / Lectrice-correctrice" />
+<appellation intitule="Lecteur-correcteur / Lectrice-correctrice d'édition" />
+<appellation intitule="Préparateur / Préparatrice de copies" />
+<appellation intitule="Préparateur-correcteur / Préparatrice-correctrice édition/presse" />
+<appellation intitule="Rédacteur-réviseur / Rédactrice-réviseuse" />
+<appellation intitule="Réviseur / Réviseuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1306" intitule="Prépresse">
+<liste_appellations>
+<appellation intitule="Chef d'atelier prépresse" />
+<appellation intitule="Chromiste" />
+<appellation intitule="Claviste en Publication Assistée par Ordinateur -PAO-" />
+<appellation intitule="Clicheur / Clicheuse" />
+<appellation intitule="Compograveur / Compograveuse" />
+<appellation intitule="Compositeur / Compositrice en Publication Assistée par Ordinateur -PAO-" />
+<appellation intitule="Copiste" />
+<appellation intitule="Copiste offset" />
+<appellation intitule="Flasheur / Flasheuse" />
+<appellation intitule="Graphiste en Publication Assistée par Ordinateur -PAO-" />
+<appellation intitule="Graphiste metteur / metteuse en page" />
+<appellation intitule="Graveur / Graveuse hélio" />
+<appellation intitule="Intégrateur / Intégratrice texte/image" />
+<appellation intitule="Maquettiste d'exécution édition" />
+<appellation intitule="Maquettiste d'exécution en imprimerie" />
+<appellation intitule="Maquettiste d'exécution en Publication assistée par ordinateur -PAO-" />
+<appellation intitule="Maquettiste d'exécution publicitaire" />
+<appellation intitule="Metteur / Metteuse en page" />
+<appellation intitule="Metteur / Metteuse en page maquettiste" />
+<appellation intitule="Metteur / Metteuse en page texte/image" />
+<appellation intitule="Monteur / Monteuse en imposition" />
+<appellation intitule="Monteur / Monteuse offset" />
+<appellation intitule="Monteur / Monteuse sur table" />
+<appellation intitule="Monteur incorporateur / Monteuse incorporatrice en industrie graphique" />
+<appellation intitule="Monteur scanneur / Monteuse scanneuse" />
+<appellation intitule="Monteur-copiste / Monteuse-copiste en industrie graphique" />
+<appellation intitule="Opérateur / Opératrice de photocomposition" />
+<appellation intitule="Opérateur / Opératrice de prépresse" />
+<appellation intitule="Opérateur / Opératrice en Publication Assistée par Ordinateur -PAO-" />
+<appellation intitule="Opérateur / Opératrice graphiste enseigne et signalétique" />
+<appellation intitule="Opérateur / Opératrice prépresse en Publication Assistée par Ordinateur -PAO-" />
+<appellation intitule="Opérateur / Opératrice scanner" />
+<appellation intitule="Opérateur / Opératrice système en Publication assistée par ordinateur -PAO-" />
+<appellation intitule="Opérateur / Opératrice système texte/image" />
+<appellation intitule="Opérateur / Opératrice texte en Publication assistée par ordinateur -PAO-" />
+<appellation intitule="Opérateur / Opératrice texte/image en Publication assistée par ordinateur -PAO-" />
+<appellation intitule="Photocompositeur / Photocompositrice" />
+<appellation intitule="Photograveur / Photograveuse" />
+<appellation intitule="Préparateur / Préparatrice en forme imprimante" />
+<appellation intitule="Responsable d'atelier de photogravure" />
+<appellation intitule="Responsable du service prépresse" />
+<appellation intitule="Retoucheur / Retoucheuse hélio" />
+<appellation intitule="Retoucheur-chromiste / Retoucheuse-chromiste" />
+<appellation intitule="Scannériste" />
+<appellation intitule="Typographe" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1307" intitule="Reprographie">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'atelier en reprographie" />
+<appellation intitule="Chef d'atelier de reprographie" />
+<appellation intitule="Coupeur-plieur / Coupeuse-plieuse de plans" />
+<appellation intitule="Employé / Employée de reprographie" />
+<appellation intitule="Façonneur / Façonneuse de plans" />
+<appellation intitule="Opérateur / Opératrice en reprographie" />
+<appellation intitule="Opérateur / Opératrice sur machines numériques de reprographie" />
+<appellation intitule="Opérateur / Opératrice sur photocopie" />
+<appellation intitule="Opérateur / Opératrice sur photocopieurs" />
+<appellation intitule="Opérateur polyvalent / Opératrice polyvalente en reprographie" />
+<appellation intitule="Polycopiste" />
+<appellation intitule="Reprographe" />
+<appellation intitule="Technicien / Technicienne en reprographie" />
+<appellation intitule="Technicien / Technicienne en reprographie numérique" />
+<appellation intitule="Tireur / Tireuse de plans" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1308" intitule="Intervention technique en Industries graphiques">
+<liste_appellations>
+<appellation intitule="Agent / Agente technique de fabrication d'imprimerie" />
+<appellation intitule="Agent / Agente technique de fabrication en industrie graphique" />
+<appellation intitule="Agent de fabrication-deviseur / Agente de fabrication-deviseuse en industrie graphique" />
+<appellation intitule="Contrôleur / Contrôleuse qualité en industrie graphique" />
+<appellation intitule="Deviseur / Deviseuse en industrie graphique" />
+<appellation intitule="Fabricant / Fabricante en industrie graphique" />
+<appellation intitule="Responsable de fabrication en industrie graphique" />
+<appellation intitule="Responsable de planning en industrie graphique" />
+<appellation intitule="Simulateur / Simulatrice d'impression en industrie graphique" />
+<appellation intitule="Support produit en industrie graphique" />
+<appellation intitule="Technicien / Technicienne de fabrication d'édition" />
+<appellation intitule="Technicien / Technicienne de fabrication en industrie graphique" />
+<appellation intitule="Technicien / Technicienne de fabrication-deviseur en industrie graphique" />
+<appellation intitule="Technicien / Technicienne de laboratoire en industrie graphique" />
+<appellation intitule="Technicien / Technicienne de préparation contrôle composition" />
+<appellation intitule="Technicien / Technicienne de préparation contrôle impression-finition" />
+<appellation intitule="Technicien / Technicienne de préparation contrôle photogravure" />
+<appellation intitule="Technicien / Technicienne des industries graphiques" />
+<appellation intitule="Technicien / Technicienne essai-contrôle qualité en industrie graphique" />
+<appellation intitule="Technicien / Technicienne études-recherche-développement en industrie graphique" />
+<appellation intitule="Technicien supérieur / Technicienne supérieure en industrie graphique" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="E14" intitule="Publicité">
+<fiche
+ code="E1401" intitule="Développement et promotion publicitaire">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante chef de publicité" />
+<appellation intitule="Assistant / Assistante de publicité d'agence" />
+<appellation intitule="Assistant / Assistante en publicité" />
+<appellation intitule="Chef de groupe en agence" />
+<appellation intitule="Chef de groupe publicité" />
+<appellation intitule="Chef de projet publicitaire" />
+<appellation intitule="Chef de publicité" />
+<appellation intitule="Chef de publicité d'agence" />
+<appellation intitule="Chef de publicité junior" />
+<appellation intitule="Chef de publicité senior" />
+<appellation intitule="Directeur / Directrice de clientèle d'agence de publicité" />
+<appellation intitule="Responsable de projet publicitaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="E1402" intitule="Élaboration de plan média">
+<liste_appellations>
+<appellation intitule="Acheteur / Acheteuse d'espaces affichage" />
+<appellation intitule="Acheteur / Acheteuse d'espaces cinéma" />
+<appellation intitule="Acheteur / Acheteuse d'espaces Internet" />
+<appellation intitule="Acheteur / Acheteuse d'espaces -NTIC-" />
+<appellation intitule="Acheteur / Acheteuse d'espaces presse" />
+<appellation intitule="Acheteur / Acheteuse d'espaces publicitaires" />
+<appellation intitule="Acheteur / Acheteuse d'espaces radio" />
+<appellation intitule="Acheteur / Acheteuse d'espaces télévision" />
+<appellation intitule="Acheteur / Acheteuse média" />
+<appellation intitule="Assistant / Assistante média" />
+<appellation intitule="Assistant acheteur / Assistante acheteuse d'espaces" />
+<appellation intitule="Chargé / Chargée de plan média" />
+<appellation intitule="Chargé / Chargée d'études média" />
+<appellation intitule="Chef d'achat d'espaces publicitaires" />
+<appellation intitule="Chef de groupe média planning" />
+<appellation intitule="Chef de service achat d'espaces publicitaires" />
+<appellation intitule="Consultant / Consultante média" />
+<appellation intitule="Directeur / Directrice d'achat média" />
+<appellation intitule="Directeur / Directrice média" />
+<appellation intitule="Média acheteur / acheteuse" />
+<appellation intitule="Média planneur / planneuse" />
+<appellation intitule="Référenceur / Référenceuse web" />
+<appellation intitule="Responsable du plan média" />
+<appellation intitule="Responsable média" />
+<appellation intitule="Traffic manager" />
+<appellation intitule="Web planneur / planneuse" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="F" intitule="CONSTRUCTION, BÂTIMENT ET TRAVAUX PUBLICS">
+<domaine code="F11" intitule="Conceptions et études">
+<fiche
+ code="F1101" intitule="Architecture du BTP">
+<liste_appellations>
+<appellation intitule="Agréé / Agréée en architecture" />
+<appellation intitule="Architecte" />
+<appellation intitule="Architecte conseiller / conseillère" />
+<appellation intitule="Architecte consultant / consultante" />
+<appellation intitule="Architecte des monuments de France" />
+<appellation intitule="Architecte du bâtiment" />
+<appellation intitule="Architecte paysagiste" />
+<appellation intitule="Architecte paysagiste urbain / urbaine" />
+<appellation intitule="Architecteur / Architecteure" />
+<appellation intitule="Architecte-urbaniste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1102" intitule="Conceptio">
+<liste_appellations>
+<appellation intitule="Architecte décorateur / décoratrice" />
+<appellation intitule="Architecte d'intérieur" />
+<appellation intitule="Assistant décorateur / Assistante décoratrice d'intérieur" />
+<appellation intitule="Concepteur aménageur / Conceptrice aménageuse d'espaces intérieurs" />
+<appellation intitule="Conseiller / Conseillère en architecture" />
+<appellation intitule="Décorateur / Décoratice conseil" />
+<appellation intitule="Décorateur / Décoratrice d'intérieur" />
+<appellation intitule="Décorateur ensemblier / Décoratice ensemblière" />
+<appellation intitule="Designer / Designeuse d'environnement" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1103" intitule="Contrôle et diagnostic technique du bâtiment">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée d'affaires contrôle technique de construction" />
+<appellation intitule="Contrôleur / Contrôleuse technique de la construction" />
+<appellation intitule="Contrôleur / Contrôleuse technique du BTP" />
+<appellation intitule="Diagnostiqueur / Diagnostiqueuse bâtiment" />
+<appellation intitule="Diagnostiqueur / Diagnostiqueuse construction amiante" />
+<appellation intitule="Expert / Experte multirisques habitation" />
+<appellation intitule="Ingénieur / Ingénieure bâtiment contrôle technique de construction -CTC-" />
+<appellation intitule="Ingénieur / Ingénieure contrôle technique de construction -CTC-" />
+<appellation intitule="Ingénieur chargé / Ingénieure chargée d'affaires contrôle technique de construction -CTC-" />
+<appellation intitule="Ingénieur expert / Ingénieure experte BTP" />
+<appellation intitule="Inspecteur / Inspectrice technique d'immeubles" />
+<appellation intitule="Opérateur / Opératrice de repérage amiante" />
+<appellation intitule="Responsable technique diagnostic du bâtiment" />
+<appellation intitule="Technicien / Technicienne contrôle technique de construction -CTC-" />
+<appellation intitule="Technicien / Technicienne de diagnostics immobiliers" />
+<appellation intitule="Technicien / Technicienne de diagnostics techniques du bâtiment" />
+<appellation intitule="Technicien / Technicienne diagnostics amiante" />
+<appellation intitule="Technicien chargé / Technicienne chargée de diagnostics en amiante" />
+<appellation intitule="Technicien chargé / Technicienne chargée de diagnostics immobiliers" />
+<appellation intitule="Technicien diagnostiqueur / Technicienne diagnostiqueuse en immobilier" />
+<appellation intitule="Technicien expert / Technicienne experte immobilier" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1104" intitule="Dessin BTP">
+<liste_appellations>
+<appellation intitule="Collaborateur / Collaboratrice d'architecte" />
+<appellation intitule="Commis / Commise d'architecte" />
+<appellation intitule="Dessinateur / Dessinatrice d'aménagements extérieurs" />
+<appellation intitule="Dessinateur / Dessinatrice de la construction" />
+<appellation intitule="Dessinateur / Dessinatrice des travaux publics" />
+<appellation intitule="Dessinateur / Dessinatrice d'études du BTP" />
+<appellation intitule="Dessinateur / Dessinatrice d'exécution du BTP" />
+<appellation intitule="Dessinateur / Dessinatrice du bâtiment" />
+<appellation intitule="Dessinateur / Dessinatrice du BTP" />
+<appellation intitule="Dessinateur / Dessinatrice en aménagements intérieurs" />
+<appellation intitule="Dessinateur / Dessinatrice en béton armé" />
+<appellation intitule="Dessinateur / Dessinatrice en génie civil" />
+<appellation intitule="Dessinateur / Dessinatrice en métallerie" />
+<appellation intitule="Dessinateur / Dessinatrice en Voirie Réseaux Divers (VRD)" />
+<appellation intitule="Dessinateur / Dessinatrice paysagiste" />
+<appellation intitule="Dessinateur vérificateur / Dessinatrice vérificatrice du BTP" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse du BTP" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en urbanisme" />
+<appellation intitule="Projeteur / Projeteuse béton armé" />
+<appellation intitule="Projeteur / Projeteuse Voirie Réseaux Divers (VRD)" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1105" intitule="Études géologiques">
+<liste_appellations>
+<appellation intitule="Calculateur géophysicien / Calculatrice géophysicienne" />
+<appellation intitule="Géochimiste" />
+<appellation intitule="Géodésien / Géodésienne" />
+<appellation intitule="Géologue" />
+<appellation intitule="Géologue de chantier" />
+<appellation intitule="Géologue en recherche prospective" />
+<appellation intitule="Géologue minier / minière" />
+<appellation intitule="Géologue pétrolier / pétrolière" />
+<appellation intitule="Géologue prospecteur / prospectrice" />
+<appellation intitule="Géologue-topographe" />
+<appellation intitule="Géophysicien / Géophysicienne" />
+<appellation intitule="Géophysicien / Géophysicienne en interprétation" />
+<appellation intitule="Géotechnicien / Géotechnicienne" />
+<appellation intitule="Géothermicien / Géothermicienne" />
+<appellation intitule="Glaciologue" />
+<appellation intitule="Hydrogéologue" />
+<appellation intitule="Hydrologue" />
+<appellation intitule="Ingénieur / Ingénieure des réservoirs et des boues" />
+<appellation intitule="Ingénieur / Ingénieure géologue" />
+<appellation intitule="Ingénieur / Ingénieure hydrogéologue" />
+<appellation intitule="Ingénieur / Ingénieure réservoir" />
+<appellation intitule="Ingénieur géophysicien / Ingénieure géophysicienne" />
+<appellation intitule="Ingénieur mécanicien / Ingénieure mécanicienne des sols et des roches" />
+<appellation intitule="Minérallurgiste" />
+<appellation intitule="Pédologue" />
+<appellation intitule="Pétrographe" />
+<appellation intitule="Séismologue" />
+<appellation intitule="Sismologue" />
+<appellation intitule="Sondeur / Sondeuse géologue" />
+<appellation intitule="Technicien / Technicienne géologue" />
+<appellation intitule="Technicien / Technicienne géologue de sonde" />
+<appellation intitule="Technicien / Technicienne géologue de terrain" />
+<appellation intitule="Technicien / Technicienne géologue d'études" />
+<appellation intitule="Technicien / Technicienne géologue en laboratoire" />
+<appellation intitule="Volcanologue" />
+<appellation intitule="Vulcanologue" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1106" intitule="Ingénierie et études du BTP">
+<liste_appellations>
+<appellation intitule="Acousticien / Acousticienne BTP" />
+<appellation intitule="Chargé / Chargée d'affaires BTP" />
+<appellation intitule="Chargé / Chargée d'affaires de la construction" />
+<appellation intitule="Chargé / Chargée d'affaires en électricité" />
+<appellation intitule="Chargé / Chargée d'études techniques du BTP" />
+<appellation intitule="Chef de bureau d'études en BTP" />
+<appellation intitule="Chef de projet BTP" />
+<appellation intitule="Domoticien / Domoticienne" />
+<appellation intitule="Ingénieur / Ingénieure bâtiment" />
+<appellation intitule="Ingénieur / Ingénieure calcul de structure" />
+<appellation intitule="Ingénieur / Ingénieure de planification en BTP" />
+<appellation intitule="Ingénieur / Ingénieure des travaux publics" />
+<appellation intitule="Ingénieur / Ingénieure des travaux publics de l'Etat" />
+<appellation intitule="Ingénieur / Ingénieure d'études béton armé" />
+<appellation intitule="Ingénieur / Ingénieure d'études BTP" />
+<appellation intitule="Ingénieur / Ingénieure d'études constructions métalliques" />
+<appellation intitule="Ingénieur / Ingénieure d'études de prix BTP" />
+<appellation intitule="Ingénieur / Ingénieure d'études en génie climatique" />
+<appellation intitule="Ingénieur / Ingénieure d'études en génie électrique" />
+<appellation intitule="Ingénieur / Ingénieure en acoustique" />
+<appellation intitule="Ingénieur / Ingénieure en domotique" />
+<appellation intitule="Ingénieur / Ingénieure génie civil" />
+<appellation intitule="Ingénieur / Ingénieure méthodes BTP" />
+<appellation intitule="Ingénieur / Ingénieure structure BTP" />
+<appellation intitule="Ingénieur / Ingénieure technique et études de prix" />
+<appellation intitule="Ingénieur / Ingénieure travaux" />
+<appellation intitule="Ingénieur chargé / Ingénieure chargée d'affaires du BTP" />
+<appellation intitule="Ingénieur commercial / Ingénieure commerciale BTP" />
+<appellation intitule="Officier / Officière de maîtrise d'oeuvre BTP" />
+<appellation intitule="Responsable de projet BTP" />
+<appellation intitule="Responsable de travaux immobiliers" />
+<appellation intitule="Technicien / Technicienne des méthodes BTP" />
+<appellation intitule="Technicien / Technicienne d'études BTP" />
+<appellation intitule="Technicien / Technicienne en acoustique BTP" />
+<appellation intitule="Technicien / Technicienne études de prix BTP" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1107" intitule="Mesures topographiques">
+<liste_appellations>
+<appellation intitule="Aide-géomètre-topographe" />
+<appellation intitule="Arpenteur / Arpenteuse" />
+<appellation intitule="Assistant / Assistante géomètre" />
+<appellation intitule="Chargé / Chargée d'affaires foncières" />
+<appellation intitule="Dessinateur / Dessinatrice topographe" />
+<appellation intitule="Géomètre" />
+<appellation intitule="Géomètre du cadastre" />
+<appellation intitule="Géomètre expert / experte" />
+<appellation intitule="Géomètre-topographe" />
+<appellation intitule="Géomètre-topographe du bâtiment" />
+<appellation intitule="Ingénieur / Ingénieure géomètre" />
+<appellation intitule="Ingénieur / Ingénieure topographe" />
+<appellation intitule="Inspecteur / Inspectrice du cadastre" />
+<appellation intitule="Opérateur / Opératrice géomètre" />
+<appellation intitule="Opérateur / Opératrice géomètre-topographe" />
+<appellation intitule="Photogrammètre-topographe" />
+<appellation intitule="Technicien / Technicienne géomètre" />
+<appellation intitule="Topographe" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1108" intitule="Métré de la construction">
+<liste_appellations>
+<appellation intitule="Economiste de la construction" />
+<appellation intitule="Métreur / Métreuse" />
+<appellation intitule="Métreur / Métreuse bâtiment" />
+<appellation intitule="Métreur / Métreuse du BTP" />
+<appellation intitule="Métreur / Métreuse en charpente et menuiserie bois" />
+<appellation intitule="Métreur / Métreuse en électricité" />
+<appellation intitule="Métreur / Métreuse en génie climatique et sanitaire" />
+<appellation intitule="Métreur / Métreuse en métallerie et construction métallique" />
+<appellation intitule="Métreur / Métreuse en réhabilitation de l'habitat" />
+<appellation intitule="Métreur / Métreuse gros oeuvre" />
+<appellation intitule="Métreur / Métreuse second oeuvre" />
+<appellation intitule="Métreur / Métreuse travaux publics" />
+<appellation intitule="Métreur-concepteur / Métreuse-conceptrice" />
+<appellation intitule="Métreur-vérificateur / Métreuse-vérificatrice" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="F12" intitule="Conduite en encadrement de chantier - travaux">
+<fiche
+ code="F1201" intitule="Conduite de travaux du BTP">
+<liste_appellations>
+<appellation intitule="Chef de secteur travaux publics" />
+<appellation intitule="Chef de travaux" />
+<appellation intitule="Chef de travaux BTP" />
+<appellation intitule="Conducteur / Conductrice de travaux" />
+<appellation intitule="Conducteur / Conductrice de travaux du bâtiment" />
+<appellation intitule="Conducteur / Conductrice de travaux du BTP" />
+<appellation intitule="Conducteur / Conductrice de travaux en constructions métalliques" />
+<appellation intitule="Conducteur / Conductrice de travaux en électricité" />
+<appellation intitule="Conducteur / Conductrice de travaux génie civil" />
+<appellation intitule="Conducteur / Conductrice de travaux gros oeuvre" />
+<appellation intitule="Conducteur / Conductrice de travaux paysagers" />
+<appellation intitule="Conducteur / Conductrice de travaux ports maritimes et voies navigables" />
+<appellation intitule="Conducteur / Conductrice de travaux principale" />
+<appellation intitule="Conducteur / Conductrice de travaux publics" />
+<appellation intitule="Conducteur / Conductrice de travaux second oeuvre" />
+<appellation intitule="Conducteur / Conductrice de travaux tous corps d'état" />
+<appellation intitule="Conducteur / Conductrice de travaux Voirie, Réseaux Divers -VRD-" />
+<appellation intitule="Conducteur / Conductrice des travaux publics de l'Etat" />
+<appellation intitule="Conducteur / Conductrice d'opérations BTP" />
+<appellation intitule="Conducteur / Conductrice génie civil" />
+<appellation intitule="Conducteur principal / Conductrice principale des travaux publics" />
+<appellation intitule="Coordonnateur / Coordonnatrice de chantier" />
+<appellation intitule="Directeur / Directrice de travaux" />
+<appellation intitule="Directeur / Directrice de travaux BTP" />
+<appellation intitule="Ingénieur / Ingénieure de travaux" />
+<appellation intitule="Ingénieur / Ingénieure de travaux BTP" />
+<appellation intitule="Responsable de travaux" />
+<appellation intitule="Responsable de travaux BTP" />
+<appellation intitule="Superviseur / Superviseuse tous corps d'état" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1202" intitule="Direction de chantier du BTP">
+<liste_appellations>
+<appellation intitule="Chef de chantier" />
+<appellation intitule="Chef de chantier bâtiment" />
+<appellation intitule="Chef de chantier du BTP" />
+<appellation intitule="Chef de chantier électricité" />
+<appellation intitule="Chef de chantier gros oeuvre" />
+<appellation intitule="Chef de chantier montage de structures métalliques" />
+<appellation intitule="Chef de chantier principale" />
+<appellation intitule="Chef de chantier second oeuvre" />
+<appellation intitule="Chef de chantier travaux publics" />
+<appellation intitule="Chef de chantier travaux publics et voirie" />
+<appellation intitule="Commis / Commise de chantier" />
+<appellation intitule="Responsable de chantier" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1203" intitule="Direction et ingénierie d'exploitation de gisements et de carrières">
+<liste_appellations>
+<appellation intitule="Chef de carrière" />
+<appellation intitule="Chef de chantier de forage" />
+<appellation intitule="Chef de chantier pétrole, gaz" />
+<appellation intitule="Chef de gisement" />
+<appellation intitule="Chef de mission prospection minière" />
+<appellation intitule="Chef d'exploitation de carrière" />
+<appellation intitule="Chef d'exploitation de gisement" />
+<appellation intitule="Chef porion / porionne" />
+<appellation intitule="Ingénieur / Ingénieure de complétion en exploitation des gisements" />
+<appellation intitule="Ingénieur / Ingénieure de forage" />
+<appellation intitule="Ingénieur / Ingénieure de gisement" />
+<appellation intitule="Ingénieur / Ingénieure de production pétrolière" />
+<appellation intitule="Ingénieur / Ingénieure de sécurité en exploitation de gisements" />
+<appellation intitule="Ingénieur / Ingénieure de sonde" />
+<appellation intitule="Ingénieur / Ingénieure d'exploitation de gisements" />
+<appellation intitule="Ingénieur / Ingénieure d'installations minières" />
+<appellation intitule="Porion / Porionne" />
+<appellation intitule="Responsable d'exploitation de gisements et de carrières" />
+<appellation intitule="Statigraphe" />
+<appellation intitule="Stratigraphe" />
+<appellation intitule="Technicien / Technicienne d'exploitation de gisement" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1204" intitule="Sécurité et protection santé du BTP">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice de sécurité du BTP" />
+<appellation intitule="Coordonnateur / Coordonnatrice de sécurité chantier" />
+<appellation intitule="Coordonnateur / Coordonnatrice Ordonnancement, Pilotage et Coordination de chantier -OPC-" />
+<appellation intitule="Coordonnateur / Coordonnatrice Sécurité, Protection de la Santé -SPS-" />
+<appellation intitule="Ingénieur / Ingénieure sécurité en BTP" />
+<appellation intitule="Responsable environnement et sécurité chantier" />
+<appellation intitule="Responsable sécurité et protection santé du BTP" />
+<appellation intitule="Superviseur / Superviseuse sécurité chantier" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="F13" intitule="Engins de chantier">
+<fiche
+ code="F1301" intitule="Conduite de grue">
+<liste_appellations>
+<appellation intitule="Conducteur / Conductrice de grue" />
+<appellation intitule="Conducteur / Conductrice de grue à benne" />
+<appellation intitule="Conducteur / Conductrice de grue à tour" />
+<appellation intitule="Conducteur / Conductrice de grue d'armement" />
+<appellation intitule="Conducteur / Conductrice de grue de cale" />
+<appellation intitule="Conducteur / Conductrice de grue marteau" />
+<appellation intitule="Conducteur / Conductrice de grue pylône" />
+<appellation intitule="Conducteur / Conductrice de grue sapine" />
+<appellation intitule="Conducteur / Conductrice de grue sur rails" />
+<appellation intitule="Conducteur grutier / Conductrice grutière" />
+<appellation intitule="Grutier / Grutière" />
+<appellation intitule="Grutier élingueur / Grutière élingueuse" />
+<appellation intitule="Grutier pontier / Grutière pontière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1302" intitule="Conduite d'engins de terrassement et de carrière">
+<liste_appellations>
+<appellation intitule="Conducteur / Conductrice de bélier" />
+<appellation intitule="Conducteur / Conductrice de benne" />
+<appellation intitule="Conducteur / Conductrice de bouteur" />
+<appellation intitule="Conducteur / Conductrice de brise-roches" />
+<appellation intitule="Conducteur / Conductrice de bulldozer" />
+<appellation intitule="Conducteur / Conductrice de câble lasso" />
+<appellation intitule="Conducteur / Conductrice de chargeur à chenilles" />
+<appellation intitule="Conducteur / Conductrice de chargeuse" />
+<appellation intitule="Conducteur / Conductrice de chargeuse pelleteuse" />
+<appellation intitule="Conducteur / Conductrice de compacteurs" />
+<appellation intitule="Conducteur / Conductrice de décapeuses" />
+<appellation intitule="Conducteur / Conductrice de défonceuses" />
+<appellation intitule="Conducteur / Conductrice de déminage" />
+<appellation intitule="Conducteur / Conductrice de dragline" />
+<appellation intitule="Conducteur / Conductrice de drague" />
+<appellation intitule="Conducteur / Conductrice de dumper" />
+<appellation intitule="Conducteur / Conductrice de foreuses" />
+<appellation intitule="Conducteur / Conductrice de gravillonneuse" />
+<appellation intitule="Conducteur / Conductrice de haveuse" />
+<appellation intitule="Conducteur / Conductrice de jumbo" />
+<appellation intitule="Conducteur / Conductrice de locos" />
+<appellation intitule="Conducteur / Conductrice de minage" />
+<appellation intitule="Conducteur / Conductrice de niveleuse" />
+<appellation intitule="Conducteur / Conductrice de pelle" />
+<appellation intitule="Conducteur / Conductrice de pelle à chenilles" />
+<appellation intitule="Conducteur / Conductrice de pelle à pneus" />
+<appellation intitule="Conducteur / Conductrice de pelle hydraulique" />
+<appellation intitule="Conducteur / Conductrice de pelle-dragline" />
+<appellation intitule="Conducteur / Conductrice de pipelayer" />
+<appellation intitule="Conducteur / Conductrice de pont automoteur" />
+<appellation intitule="Conducteur / Conductrice de pulvimixeur" />
+<appellation intitule="Conducteur / Conductrice de rabots" />
+<appellation intitule="Conducteur / Conductrice de scraper" />
+<appellation intitule="Conducteur / Conductrice de sonnette" />
+<appellation intitule="Conducteur / Conductrice de tombereau" />
+<appellation intitule="Conducteur / Conductrice de tractopelle" />
+<appellation intitule="Conducteur / Conductrice de trancheuses" />
+<appellation intitule="Conducteur / Conductrice de traxcavator" />
+<appellation intitule="Conducteur / Conductrice de tunnelier" />
+<appellation intitule="Conducteur / Conductrice d'engins d'abattage" />
+<appellation intitule="Conducteur / Conductrice d'engins de chantier" />
+<appellation intitule="Conducteur / Conductrice d'engins de damage" />
+<appellation intitule="Conducteur / Conductrice d'engins de franchissement" />
+<appellation intitule="Conducteur / Conductrice d'engins de terrassement" />
+<appellation intitule="Conducteur / Conductrice d'engins de travaux publics" />
+<appellation intitule="Conducteur / Conductrice d'engins multifonction d'aide au déploiement" />
+<appellation intitule="Conducteur / Conductrice d'excavatrices" />
+<appellation intitule="Conducteur opérateur / Conductrice opératrice de forage rapide et de destruction" />
+<appellation intitule="Pilote opérateur / opératrice engin blindé du génie" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="F14" intitule="Extraction">
+<fiche
+ code="F1401" intitule="Extraction liquide et gazeuse">
+<liste_appellations>
+<appellation intitule="Accrocheur / Accrocheuse" />
+<appellation intitule="Chef d'équipe foreur / foreuse" />
+<appellation intitule="Electricien / Electricienne de sonde en matériel de forage" />
+<appellation intitule="Foreur / Foreuse" />
+<appellation intitule="Foreur / Foreuse chef de poste" />
+<appellation intitule="Foreur / Foreuse d'eau" />
+<appellation intitule="Foreur / Foreuse gaz" />
+<appellation intitule="Foreur / Foreuse pétrole" />
+<appellation intitule="Homme / Femme de plancher" />
+<appellation intitule="Ouvrier / Ouvrière de forage" />
+<appellation intitule="Ouvrier / Ouvrière de plancher" />
+<appellation intitule="Poseur / Poseuse de sonde" />
+<appellation intitule="Puisatier / Puisatière" />
+<appellation intitule="Technicien / Technicienne de forage" />
+<appellation intitule="Technicien / Technicienne des boues" />
+<appellation intitule="Technicien / Technicienne des fluides de forage" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1402" intitule="Extraction solide">
+<liste_appellations>
+<appellation intitule="Abatteur / Abatteuse de carrière" />
+<appellation intitule="Artificier / Artificière de carrière" />
+<appellation intitule="Boutefeu" />
+<appellation intitule="Carrier / Carrière" />
+<appellation intitule="Carrier ébaucheur / Carrière ébaucheuse" />
+<appellation intitule="Carrier fendeur / Carrière fendeuse de fond" />
+<appellation intitule="Carrier scieur / Carrière scieuse de masse" />
+<appellation intitule="Chargeur / Chargeuse aux cages" />
+<appellation intitule="Chef d'abattage de roches" />
+<appellation intitule="Chef de tir de mines" />
+<appellation intitule="Chef d'équipe de mines" />
+<appellation intitule="Chef d'équipe en carrière" />
+<appellation intitule="Conducteur / Conductrice de soutènement marchant" />
+<appellation intitule="Débiteur / Débitrice de fond" />
+<appellation intitule="Débiteur / Débitrice de pierre" />
+<appellation intitule="Extracteur / Extractrice de roches" />
+<appellation intitule="Fendeur / Fendeuse de fond" />
+<appellation intitule="Fendeur / Fendeuse de granit" />
+<appellation intitule="Fendeur / Fendeuse de roches" />
+<appellation intitule="Fendeur-débiteur / Fendeuse-débiteuse de roches" />
+<appellation intitule="Fendeur-extracteur / Fendeuse-extractrice de roches" />
+<appellation intitule="Foreur / Foreuse de roche" />
+<appellation intitule="Lauzier / Lauzière" />
+<appellation intitule="Mineur / Mineuse" />
+<appellation intitule="Orpailleur / Orpailleuse" />
+<appellation intitule="Ouvrier / Ouvrière d'about" />
+<appellation intitule="Ouvrier / Ouvrière de l'extraction solide" />
+<appellation intitule="Ouvrier / Ouvrière d'exploitation des mines" />
+<appellation intitule="Ouvrier carrier / Ouvrière carrière" />
+<appellation intitule="Préposé / Préposée aux tirs de mines" />
+<appellation intitule="Scieur / Scieuse d'ardoise" />
+<appellation intitule="Scieur / Scieuse de granit" />
+<appellation intitule="Scieur / Scieuse de pierre" />
+<appellation intitule="Scieur / Scieuse de roches" />
+<appellation intitule="Tireur / Tireuse de mines" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="F15" intitule="Montage de structures">
+<fiche
+ code="F1501" intitule="Montage de structures et de charpentes bois">
+<liste_appellations>
+<appellation intitule="Charpentier bois poseur / Charpentière bois poseuse" />
+<appellation intitule="Charpentier poseur / Charpentière poseuse" />
+<appellation intitule="Chef d'équipe en pose de charpentes bois" />
+<appellation intitule="Monteur / Monteuse de chalets en bois" />
+<appellation intitule="Monteur / Monteuse de maisons à ossature bois" />
+<appellation intitule="Monteur / Monteuse de structures bois" />
+<appellation intitule="Monteur / Monteuse en structures bois et composites" />
+<appellation intitule="Poseur / Poseuse de bardeaux" />
+<appellation intitule="Poseur / Poseuse de charpentes bois" />
+<appellation intitule="Poseur / Poseuse de charpentes en matériaux bois composites" />
+<appellation intitule="Poseur / Poseuse de charpentes industrielles" />
+<appellation intitule="Poseur / Poseuse de charpentes traditionnelles" />
+<appellation intitule="Poseur / Poseuse de fermettes" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1502" intitule="Montage de structures métalliques">
+<liste_appellations>
+<appellation intitule="Bardeur / Bardeuse" />
+<appellation intitule="Chef d'équipe en construction métallique" />
+<appellation intitule="Echafaudeur / Echafaudeuse" />
+<appellation intitule="Echafaudeur / Echafaudeuse en construction navale" />
+<appellation intitule="Monteur / Monteuse de bardages" />
+<appellation intitule="Monteur / Monteuse de chapiteau" />
+<appellation intitule="Monteur / Monteuse de grues" />
+<appellation intitule="Monteur / Monteuse de pylônes" />
+<appellation intitule="Monteur / Monteuse en charpente métallique" />
+<appellation intitule="Monteur / Monteuse en constructions métalliques" />
+<appellation intitule="Monteur / Monteuse en échafaudage" />
+<appellation intitule="Monteur / Monteuse en structures métalliques" />
+<appellation intitule="Monteur bardeur / Monteuse bardeuse" />
+<appellation intitule="Monteur-échafaudeur / Monteuse-échafaudeuse" />
+<appellation intitule="Monteur-levageur / Monteuse-levageuse" />
+<appellation intitule="Poseur / Poseuse en structures métalliques" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1503" intitule="Réalisatio">
+<liste_appellations>
+<appellation intitule="Charpentier / Charpentière" />
+<appellation intitule="Charpentier / Charpentière bois en construction navale" />
+<appellation intitule="Charpentier / Charpentière de marine" />
+<appellation intitule="Charpentier / Charpentière de restauration" />
+<appellation intitule="Charpentier escaliéteur / Charpentière escaliéteuse" />
+<appellation intitule="Charpentier naval / Charpentière navale sur ossature bois" />
+<appellation intitule="Traceur / Traceuse de charpentes en bois" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="F16" intitule="Second oeuvre">
+<fiche
+ code="F1601" intitule="Application et décoration en plâtre, stuc et staff">
+<liste_appellations>
+<appellation intitule="Gypsier / Gypsière" />
+<appellation intitule="Plâtrier / Plâtrière" />
+<appellation intitule="Plâtrier staffeur / Plâtrière staffeuse" />
+<appellation intitule="Staffeur / Staffeuse" />
+<appellation intitule="Staffeur / Staffeuse ornemaniste" />
+<appellation intitule="Stucateur / Stucateuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1602" intitule="Électricité bâtiment">
+<liste_appellations>
+<appellation intitule="Chef d'équipe électricien" />
+<appellation intitule="Electricien / Electricienne bâtiment tertiaire" />
+<appellation intitule="Electricien / Electricienne de chantier" />
+<appellation intitule="Electricien / Electricienne d'équipement" />
+<appellation intitule="Electricien / Electricienne d'équipement domestique" />
+<appellation intitule="Electricien / Electricienne du bâtiment" />
+<appellation intitule="Electricien / Electricienne tertiaire" />
+<appellation intitule="Electrotechnicien / Electrotechnicienne d'installation" />
+<appellation intitule="Enseigniste" />
+<appellation intitule="Monteur électricien / Monteuse électricienne" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1603" intitule="Installation d'équipements sanitaires et thermiques">
+<liste_appellations>
+<appellation intitule="Chauffagiste" />
+<appellation intitule="Chef d'équipe chauffagiste" />
+<appellation intitule="Chef d'équipe plombier / plombière" />
+<appellation intitule="Dépanneur / Dépanneuse de chaudières domestiques" />
+<appellation intitule="Dépanneur / Dépanneuse en chauffage central" />
+<appellation intitule="Dépanneur / Dépanneuse en installations sanitaires" />
+<appellation intitule="Installateur / Installatrice en sanitaire" />
+<appellation intitule="Monteur / Monteuse de brûleurs à fuel et gaz" />
+<appellation intitule="Monteur / Monteuse en chauffage" />
+<appellation intitule="Monteur / Monteuse en chauffage central" />
+<appellation intitule="Monteur / Monteuse en installations sanitaires" />
+<appellation intitule="Monteur / Monteuse en installations thermiques" />
+<appellation intitule="Monteur / Monteuse en plomberie chauffage" />
+<appellation intitule="Ouvrier / Ouvrière d'entretien de chaufferie" />
+<appellation intitule="Plombier / Plombière" />
+<appellation intitule="Plombier / Plombière chauffagiste" />
+<appellation intitule="Plombier / Plombière sanitaire" />
+<appellation intitule="Plombier zingueur / Plombière zingueuse" />
+<appellation intitule="Poseur / Poseuse de compteurs d'eau" />
+<appellation intitule="Poseur / Poseuse de compteurs gaz" />
+<appellation intitule="Ramoneur / Ramoneuse" />
+<appellation intitule="Régleur / Régleuse de chaudières" />
+<appellation intitule="Régleur-dépanneur / Régleuse-dépanneuse d'appareilsà gaz" />
+<appellation intitule="Technicien / Technicienne d'équipements de piscine" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1604" intitule="Montage d'agencements">
+<liste_appellations>
+<appellation intitule="Agenceur / Agenceuse de cuisine" />
+<appellation intitule="Agenceur / Agenceuse de stands" />
+<appellation intitule="Chef d'équipe en agencement" />
+<appellation intitule="Installateur / Installatrice de cuisines" />
+<appellation intitule="Installateur / Installatrice de stands" />
+<appellation intitule="Jointeur / Jointeuse plaquiste" />
+<appellation intitule="Monteur / Monteuse d'agencement en isolation thermique" />
+<appellation intitule="Monteur / Monteuse d'agencement en isolation thermique et phonique" />
+<appellation intitule="Monteur / Monteuse de chambres blanches" />
+<appellation intitule="Monteur / Monteuse de chambres froides" />
+<appellation intitule="Monteur / Monteuse de cloisons" />
+<appellation intitule="Monteur / Monteuse de stands" />
+<appellation intitule="Monteur / Monteuse en agencement" />
+<appellation intitule="Monteur / Monteuse en chambres froides et entrepôts frigorifiques" />
+<appellation intitule="Monteur / Monteuse en éléments pré-fabriqués" />
+<appellation intitule="Monteur / Monteuse en faux-plafonds" />
+<appellation intitule="Monteur / Monteuse plaquiste" />
+<appellation intitule="Monteur-poseur / Monteuse-poseuse en agencement" />
+<appellation intitule="Plaquiste" />
+<appellation intitule="Plâtrier-plaquiste / Plâtrière-plaquiste" />
+<appellation intitule="Poseur / Poseuse de cloisons" />
+<appellation intitule="Poseur / Poseuse de cloisons préfabriquées" />
+<appellation intitule="Poseur / Poseuse de faux plafonds" />
+<appellation intitule="Poseur / Poseuse de plaques de plâtre" />
+<appellation intitule="Sapeur / Sapeuse de construction modulaire militaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1605" intitule="Montage réseaux électriques et télécoms">
+<liste_appellations>
+<appellation intitule="Agent / Agente de lignes téléphoniques" />
+<appellation intitule="Aide électricien monteur / électricienne monteuse réseaux" />
+<appellation intitule="Câbleur / Câbleuse de réseaux électriques" />
+<appellation intitule="Câbleur / Câbleuse haute et basse tension" />
+<appellation intitule="Caténairiste" />
+<appellation intitule="Chef d'équipe d'électriciens monteurs réseaux" />
+<appellation intitule="Contrôleur / Contrôleuse de caténaires" />
+<appellation intitule="Electricien / Electricienne d'éclairage public" />
+<appellation intitule="Electricien / Electricienne des Travaux Publics" />
+<appellation intitule="Electricien / Electricienne en balisage" />
+<appellation intitule="Electricien / Electricienne lignes et réseaux" />
+<appellation intitule="Electricien / Electricienne réseaux" />
+<appellation intitule="Electricien monteur / Electricienne monteuse réseaux" />
+<appellation intitule="Lignard / Lignarde" />
+<appellation intitule="Monteur / Monteuse de caténaires" />
+<appellation intitule="Monteur / Monteuse de lignes aéro souterraines" />
+<appellation intitule="Monteur / Monteuse de lignes électriques" />
+<appellation intitule="Monteur / Monteuse de lignes haute et très haute tension" />
+<appellation intitule="Monteur / Monteuse de lignes téléphoniques" />
+<appellation intitule="Monteur / Monteuse de réseaux électriques" />
+<appellation intitule="Monteur / Monteuse en éclairage public" />
+<appellation intitule="Monteur / Monteuse en lignes caténaires" />
+<appellation intitule="Monteur / Monteuse réseaux" />
+<appellation intitule="Monteur électricien / Monteuse électricienne travaux souterrains" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse haute et basse tension" />
+<appellation intitule="Monteur-électricien / Monteuse-électricienne en réseaux de distribution électrique" />
+<appellation intitule="Opérateur / Opératrice d'éclairage public" />
+<appellation intitule="Technicien / Technicienne d'exploitation de lignes électriques" />
+<appellation intitule="Technicien / Technicienne d'intervention en réseaux électriques" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1606" intitule="Peinture en bâtiment">
+<liste_appellations>
+<appellation intitule="Applicateur / Applicatrice de résines de synthèse" />
+<appellation intitule="Applicateur / Applicatrice d'enduits" />
+<appellation intitule="Chef d'équipe peinture" />
+<appellation intitule="Peintre décorateur / décoratrice" />
+<appellation intitule="Peintre d'intérieur" />
+<appellation intitule="Peintre en bâtiment" />
+<appellation intitule="Peintre en lettres" />
+<appellation intitule="Peintre enduiseur / enduiseuse" />
+<appellation intitule="Peintre finisseur / finisseuse" />
+<appellation intitule="Peintre plâtrier / plâtrière" />
+<appellation intitule="Peintre ragréeur / ragréeuse" />
+<appellation intitule="Peintre tapissier / tapissière" />
+<appellation intitule="Peintre vitrier / vitrière" />
+<appellation intitule="Poseur / Poseuse de papiers peints" />
+<appellation intitule="Poseur / Poseuse de plafonds tendus" />
+<appellation intitule="Poseur / Poseuse de tissu tendu" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1607" intitule="Pose de fermetures menuisées">
+<liste_appellations>
+<appellation intitule="Chef d'équipe en pose de menuiseries" />
+<appellation intitule="Chef d'équipe en pose de miroiterie" />
+<appellation intitule="Dépanneur / Dépanneuse en serrurerie" />
+<appellation intitule="Menuisier / Menuisière aluminium" />
+<appellation intitule="Menuisier / Menuisière PVC" />
+<appellation intitule="Menuisier poseur / Menuisière poseuse aluminium" />
+<appellation intitule="Menuisier poseur / Menuisière poseuse de fermetures" />
+<appellation intitule="Métallier poseur / Métallière poseuse de menuiseries métalliques" />
+<appellation intitule="Métallier-poseur / Métallière-poseuse" />
+<appellation intitule="Métallier-serrurier / Métallière-serrurière" />
+<appellation intitule="Miroitier / Miroitière" />
+<appellation intitule="Miroitier poseur / Miroitière poseuse aluminium" />
+<appellation intitule="Miroitier-poseur / Miroitière-poseuse" />
+<appellation intitule="Monteur techniverrier / Monteuse techniverrière" />
+<appellation intitule="Ouvrier poseur / Ouvrière poseuse de menuiserie" />
+<appellation intitule="Ouvrier poseur / Ouvrière poseuse de menuiseries extérieures" />
+<appellation intitule="Poseur / Poseuse aluminium/PVC" />
+<appellation intitule="Poseur / Poseuse de clôtures" />
+<appellation intitule="Poseur / Poseuse de fermetures" />
+<appellation intitule="Poseur / Poseuse de stores" />
+<appellation intitule="Poseur / Poseuse de vérandas" />
+<appellation intitule="Poseur / Poseuse de verrières" />
+<appellation intitule="Poseur / Poseuse de vitrages" />
+<appellation intitule="Poseur / Poseuse de volets roulants" />
+<appellation intitule="Poseur / Poseuse en fermetures de bâtiment" />
+<appellation intitule="Poseur / Poseuse en métallerie" />
+<appellation intitule="Poseur-monteur / Poseuse-monteuse en miroiterie" />
+<appellation intitule="Serrurier / Serrurière du bâtiment" />
+<appellation intitule="Serrurier-poseur / Serrurière-poseuse" />
+<appellation intitule="Vitrier / Vitrière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1608" intitule="Pose de revêtements rigides">
+<liste_appellations>
+<appellation intitule="Carreleur / Carreleuse" />
+<appellation intitule="Carreleur / Carreleuse mosaïste" />
+<appellation intitule="Carreleur-faïencier / Carreleuse-faïencière" />
+<appellation intitule="Carreleur-faïencier / Carreleuse-faïencière mosaïste" />
+<appellation intitule="Chef d'équipe carreleur / carreleuse" />
+<appellation intitule="Faïencier-poseur / Faïencière-poseuse" />
+<appellation intitule="Marbrier-poseur / Marbrière-poseuse" />
+<appellation intitule="Mosaïste" />
+<appellation intitule="Mosaïste-poseur / Mosaïste-poseuse" />
+<appellation intitule="Ouvrier carreleur / Ouvrière carreleuse" />
+<appellation intitule="Parqueteur / Parqueteuse" />
+<appellation intitule="Parqueteur menuisier / Parqueteuse menuisière" />
+<appellation intitule="Ponceur-vitrificateur / Ponceuse-vitrificatrice de parquets" />
+<appellation intitule="Poseur / Poseuse de granit" />
+<appellation intitule="Poseur / Poseuse de parquet" />
+<appellation intitule="Poseur / Poseuse de revêtements en pierre" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1609" intitule="Pose de revêtements souples">
+<liste_appellations>
+<appellation intitule="Applicateur / Applicatrice de résines sur sol" />
+<appellation intitule="Chef d'équipe solier-moquettiste / solière-moquettiste" />
+<appellation intitule="Enduiseur / Enduiseuse de sols en matière synthétique" />
+<appellation intitule="Poseur / Poseuse d'adhésifs" />
+<appellation intitule="Poseur / Poseuse de linoléum" />
+<appellation intitule="Poseur / Poseuse de moquette" />
+<appellation intitule="Poseur / Poseuse de revêtements souples de sols" />
+<appellation intitule="Poseur / Poseuse de revêtements souples muraux" />
+<appellation intitule="Poseur / Poseuse de revêtements souples murs et sols" />
+<appellation intitule="Solier-moquettiste / Solière-moquettiste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1610" intitule="Pose et restauration de couvertures">
+<liste_appellations>
+<appellation intitule="Chef d'équipe de couvreurs" />
+<appellation intitule="Couvreur / Couvreuse" />
+<appellation intitule="Couvreur / Couvreuse de chaume" />
+<appellation intitule="Couvreur / Couvreuse en monuments historiques" />
+<appellation intitule="Couvreur ardoisier / Couvreuse ardoisière" />
+<appellation intitule="Couvreur charpentier / Couvreuse charpentière" />
+<appellation intitule="Couvreur ferblantier / Couvreuse ferblantière" />
+<appellation intitule="Couvreur lauzier / Couvreuse lauzière" />
+<appellation intitule="Couvreur tuilier / Couvreuse tuilière" />
+<appellation intitule="Couvreur zingueur / Couvreuse zingueuse" />
+<appellation intitule="Zingueur / Zingueuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1611" intitule="Réalisation et restauration de façades">
+<liste_appellations>
+<appellation intitule="Cimentier ravaleur / Cimentière ravaleuse" />
+<appellation intitule="Crépisseur / Crépisseuse" />
+<appellation intitule="Enduiseur / Enduiseuse" />
+<appellation intitule="Enduiseur / Enduiseuse de sols en extérieur" />
+<appellation intitule="Façadier / Façadière" />
+<appellation intitule="Façadier-bardeur / Façadière-bardeuse" />
+<appellation intitule="Façadier-enduiseur / Façadière-enduiseuse" />
+<appellation intitule="Façadier-peintre / Façadière-peintre" />
+<appellation intitule="Façadier-ravaleur / Façadière-ravaleuse" />
+<appellation intitule="Façadier-sableur / Façadière-sableuse" />
+<appellation intitule="Maçon-projeteur / Maçonne-projeteuse" />
+<appellation intitule="Maçon-ravaleur / Maçonne-ravaleuse" />
+<appellation intitule="Peintre ravaleur / ravaleuse" />
+<appellation intitule="Ravaleur / Ravaleuse" />
+<appellation intitule="Ravaleur / Ravaleuse de façades" />
+<appellation intitule="Ravaleur-plâtrier / Ravaleuse-plâtrière" />
+<appellation intitule="Ravaleur-projeteur / Ravaleuse-projeteuse" />
+<appellation intitule="Ravaleur-ragréeur / Ravaleuse-ragréeuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1612" intitule="Taille et décoration de pierres">
+<liste_appellations>
+<appellation intitule="Marbrier / Marbrière d'art" />
+<appellation intitule="Marqueteur / Marqueteuse de pierres dures" />
+<appellation intitule="Mosaïste d'art" />
+<appellation intitule="Ravaleur / Ravaleuse de pierre de taille" />
+<appellation intitule="Sculpteur / Sculptrice ornemaniste sur pierre" />
+<appellation intitule="Tailleur / Tailleuse de pierre" />
+<appellation intitule="Tailleur / Tailleuse de pierre-fontainière" />
+<appellation intitule="Tailleur de pierre restaurateur / Tailleuse de pierre restauratrice" />
+<appellation intitule="Tailleur de pierre-marbrier / Tailleuse de pierre-marbrière" />
+<appellation intitule="Tailleur moelloneur / Tailleuse moelloneuse" />
+<appellation intitule="Tailleur-polisseur / Tailleuse-polisseuse de roches" />
+<appellation intitule="Tourneur / Tourneuse sur pierre" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1613" intitule="Travaux d'étanchéité et d'isolation">
+<liste_appellations>
+<appellation intitule="Applicateur / Applicatrice d'asphalte" />
+<appellation intitule="Applicateur / Applicatrice d'étanchéité" />
+<appellation intitule="Asphalteur / Asphalteuse" />
+<appellation intitule="Calorifugeur / Calorifugeuse" />
+<appellation intitule="Chef d'équipe en étanchéité" />
+<appellation intitule="Etanchéiste" />
+<appellation intitule="Etancheur / Etancheuse" />
+<appellation intitule="Etancheur-bardeur / Etancheuse-bardeuse" />
+<appellation intitule="Etancheur-couvreur / Etancheuse-couvreuse" />
+<appellation intitule="Monteur / Monteuse en isolation thermique industrielle" />
+<appellation intitule="Monteur-calorifugeur / Monteuse-calorifugeuse sur tuyauteries et appareils" />
+<appellation intitule="Ouvrier / Ouvrière de désenfumage" />
+<appellation intitule="Poseur / Poseuse en isolation thermique" />
+<appellation intitule="Revêtisseur-étanchéiste / Revêtisseuse-étanchéiste" />
+<appellation intitule="Tôlier-calorifugeur / Tôlière-calorifugeuse" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="F17" intitule="Travaux et gros oeuvre">
+<fiche
+ code="F1701" intitule="Construction en béton">
+<liste_appellations>
+<appellation intitule="Bancheur / Bancheuse" />
+<appellation intitule="Bancheur-coffreur / Bancheuse-coffreuse" />
+<appellation intitule="Batteur / Batteuse de pieux" />
+<appellation intitule="Bétonneur / Bétonneuse" />
+<appellation intitule="Bétonnier / Bétonnière" />
+<appellation intitule="Boiseur / Boiseuse" />
+<appellation intitule="Chef d'équipe coffreur / coffreuse" />
+<appellation intitule="Chef d'équipe ferrailleur / ferrailleuse  du BTP" />
+<appellation intitule="Coffreur / Coffreuse" />
+<appellation intitule="Coffreur / Coffreuse béton armé" />
+<appellation intitule="Coffreur / Coffreuse génie civil" />
+<appellation intitule="Coffreur / Coffreuse métallique" />
+<appellation intitule="Coffreur bancheur / Coffreuse bancheuse" />
+<appellation intitule="Coffreur glissant / Coffreuse glissante" />
+<appellation intitule="Coffreur-boiseur / Coffreuse-boiseuse" />
+<appellation intitule="Coffreur-boiseur-escaliéteur / Coffreuse-boiseuse-escaliéteuse" />
+<appellation intitule="Coffreur-ferrailleur / Coffreuse-ferrailleuse" />
+<appellation intitule="Constructeur / Constructrice en béton armé" />
+<appellation intitule="Constructeur / Constructrice en maçonnerie et béton armé" />
+<appellation intitule="Façonneur-assembleur-ferrailleur / Façonneuse-assembleuse-ferrailleuse" />
+<appellation intitule="Ferrailleur / Ferrailleuse du BTP" />
+<appellation intitule="Ferrailleur-attacheur / Ferrailleuse-attacheuse du BTP" />
+<appellation intitule="Maçon-monteur industriel / Maçonne-monteuse industrielle" />
+<appellation intitule="Monteur / Monteuse d'éléments préfabriqués" />
+<appellation intitule="Monteur / Monteuse en préfabrications lourdes" />
+<appellation intitule="Monteur-assembleur / Monteuse-assembleuse en treillis soudés" />
+<appellation intitule="Ouvrier / Ouvrière du béton" />
+<appellation intitule="Ouvrier / Ouvrière génie civil" />
+<appellation intitule="Piscinier / Piscinière en piscines collectives en béton" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1702" intitule="Construction de routes et voies">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'entretien de la voie ferrée" />
+<appellation intitule="Chef d'application d'enrobés" />
+<appellation intitule="Chef d'entretien de la voie ferrée" />
+<appellation intitule="Chef d'équipe des travaux de voirie communale" />
+<appellation intitule="Chef d'équipe mise en oeuvre d'enrobés" />
+<appellation intitule="Chef d'équipe produits noirs" />
+<appellation intitule="Compagnon / Compagnonne Voiries et Réseaux Divers -VRD-" />
+<appellation intitule="Compagnon routier / Compagnonne routière" />
+<appellation intitule="Conducteur / Conductrice de répandeuses" />
+<appellation intitule="Maçon / Maçonne Voiries et Réseaux Divers -VRD-" />
+<appellation intitule="Ouvrier / Ouvrière en voiries" />
+<appellation intitule="Ouvrier / Ouvrière Voiries et Réseaux Divers -VRD-" />
+<appellation intitule="Ouvrier poseur / Ouvrière poseuse de voies ferrées" />
+<appellation intitule="Ouvrier régleur / Ouvrière régleuse d'enrobés" />
+<appellation intitule="Paveur / Paveuse" />
+<appellation intitule="Poseur / Poseuse de bordures et caniveaux" />
+<appellation intitule="Poseur / Poseuse de panneaux de signalisation" />
+<appellation intitule="Poseur / Poseuse de voies ferrées" />
+<appellation intitule="Régaleur / Régaleuse sur voiries" />
+<appellation intitule="Régaleur-répandeur / Régaleuse-répandeuse" />
+<appellation intitule="Sapeur / Sapeuse travaux lourds et voies ferrées" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1703" intitule="Maçonnerie">
+<liste_appellations>
+<appellation intitule="Atrier / Atrière" />
+<appellation intitule="Brasqueur / Brasqueuse" />
+<appellation intitule="Briqueteur / Briqueteuse" />
+<appellation intitule="Chapiste" />
+<appellation intitule="Chef d'équipe maçon / maçonne" />
+<appellation intitule="Cimentier / Cimentière" />
+<appellation intitule="Cimentier applicateur / Cimentière applicatrice" />
+<appellation intitule="Cimentier enduiseur / Cimentière enduiseuse" />
+<appellation intitule="Fumiste" />
+<appellation intitule="Installateur-poseur / Installatrice-poseuse de piscines préfabriquées" />
+<appellation intitule="Maçon / Maçonne" />
+<appellation intitule="Maçon / Maçonne du paysage" />
+<appellation intitule="Maçon / Maçonne en monuments funéraires" />
+<appellation intitule="Maçon / Maçonne en rénovation" />
+<appellation intitule="Maçon / Maçonne en thermique industrielle" />
+<appellation intitule="Maçon / Maçonne pierre" />
+<appellation intitule="Maçon bâtisseur / Maçonne bâtisseuse de pierres sèches" />
+<appellation intitule="Maçon-applicateur / Maçonne-applicatrice" />
+<appellation intitule="Maçon-boiseur / Maçonne-boiseuse" />
+<appellation intitule="Maçon-briqueteur / Maçonne-briqueteuse" />
+<appellation intitule="Maçon-carreleur / Maçonne-carreleuse" />
+<appellation intitule="Maçon-cimentier / Maçonne-cimentière" />
+<appellation intitule="Maçon-coffreur / Maçonne-coffreuse" />
+<appellation intitule="Maçon-couvreur / Maçonne-couvreuse" />
+<appellation intitule="Maçon-enduiseur / Maçonne-enduiseuse" />
+<appellation intitule="Maçon-ferrailleur / Maçonne-ferrailleuse" />
+<appellation intitule="Maçon-finisseur / Maçonne-finisseuse" />
+<appellation intitule="Maçon-fumiste / Maçonne-fumiste" />
+<appellation intitule="Maçon-fumiste / Maçonne-fumiste en verrerie" />
+<appellation intitule="Maçon-limousinant / Maçonne-limousinante" />
+<appellation intitule="Maçon-piscinier / Maçonne-piscinière" />
+<appellation intitule="Maçon-plâtrier / Maçonne-plâtrière" />
+<appellation intitule="Moellonneur / Moellonneuse" />
+<appellation intitule="Ouvrier / Ouvrière de la maçonnerie" />
+<appellation intitule="Parpineur / Parpineuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1704" intitule="Préparation du gros oeuvre et des travaux publics">
+<liste_appellations>
+<appellation intitule="Aide maçon / maçonne Voiries et Réseaux Divers VRD" />
+<appellation intitule="Aide-maçon / Aide-maçonne" />
+<appellation intitule="Bâtisseur / Bâtisseuse du génie militaire" />
+<appellation intitule="Borneur / Borneuse" />
+<appellation intitule="Démolisseur / Démolisseuse" />
+<appellation intitule="Démolisseur-récupérateur / Démolisseuse-récupératrice de matériaux du BTP" />
+<appellation intitule="Gravatier / Gravatière" />
+<appellation intitule="Gravillonneur / Gravillonneuse" />
+<appellation intitule="Magasinier / Magasinière de dépôt d'entreprise du BTP" />
+<appellation intitule="Manoeuvre bâtiment" />
+<appellation intitule="Manoeuvre de chantier" />
+<appellation intitule="Manoeuvre gros oeuvre" />
+<appellation intitule="Manoeuvre routier / routière" />
+<appellation intitule="Manoeuvre travaux publics" />
+<appellation intitule="Ouvrier / Ouvrière en démolition" />
+<appellation intitule="Terrassier / Terrassière" />
+<appellation intitule="Tireur / Tireuse au rateau" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1705" intitule="Pose de canalisations">
+<liste_appellations>
+<appellation intitule="Agent / Agente de réseaux de canalisation" />
+<appellation intitule="Canalisateur / Canalisatrice" />
+<appellation intitule="Chef d'équipe canalisateur / canalisatrice" />
+<appellation intitule="Constructeur / Constructrice en canalisations d'hygiène publique et voies urbaines" />
+<appellation intitule="Poseur / Poseuse de canalisations" />
+<appellation intitule="Poseur / Poseuse de tuyaux" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="F1706" intitule="Préfabrication en béton industriel">
+<liste_appellations>
+<appellation intitule="Agent / Agente de fabrication de l'industrie du béton" />
+<appellation intitule="Agent / Agente de précontrainte de l'industrie du béton" />
+<appellation intitule="Agent / Agente de préfabrication de l'industrie du béton" />
+<appellation intitule="Armaturier / Armaturière de l'industrie du béton" />
+<appellation intitule="Chef d'équipe de l'industrie du béton" />
+<appellation intitule="Finisseur de / Finisseuse de l'industrie du béton" />
+<appellation intitule="Mouleur de / Mouleuse de l'industrie du béton" />
+<appellation intitule="Préparateur monteur / Préparatrice monteuse de moules de l'industrie du béton" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="G" intitule="HÔTELLERIE - RESTAURATION, TOURISME, LOISIRS ET ANIMATION">
+<domaine code="G11" intitule="Accueil et promotion touristique">
+<fiche
+ code="G1101" intitule="Accueil touristique">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'accueil touristique" />
+<appellation intitule="Chargé / Chargée d'accueil en réceptif local" />
+<appellation intitule="Chargé / Chargée d'accueil touristique" />
+<appellation intitule="Conseiller / Conseillère en séjour touristique" />
+<appellation intitule="Hôte / Hôtesse d'accueil et d'animation de croisière" />
+<appellation intitule="Hôte / Hôtesse d'accueil tourisme" />
+<appellation intitule="Hôte animateur / Hôtesse animatrice de croisière fluviale" />
+<appellation intitule="Hôte animateur / Hôtesse animatrice de croisière maritime" />
+<appellation intitule="Permanent local / Permanente locale d'agence réceptive" />
+<appellation intitule="Représentant local / Représentante locale d'agence réceptive" />
+<appellation intitule="Technicien / Technicienne d'accueil touristique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1102" intitule="Promotion du tourisme local">
+<liste_appellations>
+<appellation intitule="Agent / Agente de promotion touristique" />
+<appellation intitule="Agent / Agente de valorisation du patrimoine" />
+<appellation intitule="Animateur / Animatrice du patrimoine" />
+<appellation intitule="Animateur / Animatrice sur la promotion du patrimoine" />
+<appellation intitule="Animateur promoteur / Animatrice promotrice du patrimoine" />
+<appellation intitule="Chargé / Chargée de mission tourisme" />
+<appellation intitule="Chargé / Chargée de promotion des espaces naturels" />
+<appellation intitule="Chargé / Chargée de promotion du patrimoine" />
+<appellation intitule="Chargé / Chargée de promotion du tourisme local" />
+<appellation intitule="Chargé / Chargée de promotion touristique" />
+<appellation intitule="Chargé / Chargée de valorisation de sites touristiques" />
+<appellation intitule="Chef de projet de promotion touristique" />
+<appellation intitule="Chef de projet tourisme" />
+<appellation intitule="Directeur / Directrice de parc régional" />
+<appellation intitule="Directeur / Directrice de pays d'accueil touristique" />
+<appellation intitule="Directeur / Directrice d'office du tourisme" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="G12" intitule="Animation d'activités de loisirs">
+<fiche
+ code="G1201" intitule="Accompagnement de voyages, d'activités culturelles ou sportives">
+<liste_appellations>
+<appellation intitule="Accompagnateur / Accompagnatrice de randonnée" />
+<appellation intitule="Accompagnateur / Accompagnatrice de randonnée nature" />
+<appellation intitule="Accompagnateur / Accompagnatrice de séjour linguistique" />
+<appellation intitule="Accompagnateur / Accompagnatrice de tourisme équestre" />
+<appellation intitule="Accompagnateur / Accompagnatrice de tourisme sportif" />
+<appellation intitule="Accompagnateur / Accompagnatrice de voyages" />
+<appellation intitule="Accompagnateur / Accompagnatrice de voyages ou d'activités culturelles, sportives et de plein air" />
+<appellation intitule="Accompagnateur / Accompagnatrice d'excursions" />
+<appellation intitule="Accompagnateur / Accompagnatrice en écotourisme" />
+<appellation intitule="Accompagnateur / Accompagnatrice en moyenne montagne" />
+<appellation intitule="Accompagnateur / Accompagnatrice en tourisme vert" />
+<appellation intitule="Accompagnateur / Accompagnatrice tourisme" />
+<appellation intitule="Accompagnateur / Accompagnatrice touristique" />
+<appellation intitule="Conférencier / Conférencière de voyages" />
+<appellation intitule="Conférencier national / Conférencière nationale" />
+<appellation intitule="Coordinateur / Coordinatrice de séjour touristique" />
+<appellation intitule="Guide conférencier / conférencière des Villes et Pays d'Art et d'Histoire -VPAH-" />
+<appellation intitule="Guide de haute montagne" />
+<appellation intitule="Guide de pays" />
+<appellation intitule="Guide de tourisme d'aventure" />
+<appellation intitule="Guide de tourisme équestre" />
+<appellation intitule="Guide nature" />
+<appellation intitule="Guide sportif / sportive" />
+<appellation intitule="Guide tour leader" />
+<appellation intitule="Guide touristique" />
+<appellation intitule="Guide-accompagnateur / Guide-accompagnatrice" />
+<appellation intitule="Guide-accompagnateur / Guide-accompagnatrice de pêche" />
+<appellation intitule="Guide-accompagnateur / Guide-accompagnatrice en écotourisme" />
+<appellation intitule="Guide-interprète" />
+<appellation intitule="Guide-interprète national / nationale" />
+<appellation intitule="Guide-interprète régional / régionale" />
+<appellation intitule="Maître randonneur / Maîtresse randonneuse de tourisme" />
+<appellation intitule="Moniteur / Monitrice guide de pêche de loisirs" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1202" intitule="Animation d'activités culturelles ou ludiques">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice d'activités audiovisuelles" />
+<appellation intitule="Animateur / Animatrice d'activités culturelles et de détente" />
+<appellation intitule="Animateur / Animatrice d'activités culturelles et techniques" />
+<appellation intitule="Animateur / Animatrice d'activités culturelles, techniques ou ludiques" />
+<appellation intitule="Animateur / Animatrice d'arts plastiques" />
+<appellation intitule="Animateur / Animatrice d'atelier artistique ou ludique" />
+<appellation intitule="Animateur / Animatrice d'atelier d'activités manuelles" />
+<appellation intitule="Animateur / Animatrice d'atelier d'écriture" />
+<appellation intitule="Animateur / Animatrice d'atelier d'expression corporelle" />
+<appellation intitule="Animateur / Animatrice d'atelier en maison de retraite" />
+<appellation intitule="Animateur / Animatrice d'atelier Internet" />
+<appellation intitule="Animateur / Animatrice d'atelier lecture" />
+<appellation intitule="Animateur / Animatrice d'atelier multimédia" />
+<appellation intitule="Animateur / Animatrice d'atelier musical" />
+<appellation intitule="Animateur / Animatrice d'atelier sciences" />
+<appellation intitule="Animateur / Animatrice de club de vacances" />
+<appellation intitule="Animateur / Animatrice de cyberespace" />
+<appellation intitule="Animateur / Animatrice de village de vacances" />
+<appellation intitule="Animateur / Animatrice d'écomusée" />
+<appellation intitule="Animateur / Animatrice des arts du cirque" />
+<appellation intitule="Animateur / Animatrice d'espace multimédia" />
+<appellation intitule="Animateur / Animatrice d'initiation à la nature" />
+<appellation intitule="Animateur / Animatrice d'initiation aux Technologies de l'Information et de la Communication -TIC-" />
+<appellation intitule="Animateur / Animatrice éco interprète" />
+<appellation intitule="Animateur / Animatrice nature environnement" />
+<appellation intitule="Animateur conseiller / Animatrice conseillère en Technologies de l'Information et de la Communication -TIC-" />
+<appellation intitule="Intervenant / Intervenante en Tai Chi" />
+<appellation intitule="Professeur / Professeure de yoga" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1203" intitule="Animation de loisirs auprès d'enfants ou d'adolescents">
+<liste_appellations>
+<appellation intitule="Accompagnateur / Accompagnatrice d'enfants ou d'adolescents" />
+<appellation intitule="Animateur / Animatrice classe de découverte" />
+<appellation intitule="Animateur / Animatrice d'activités périscolaires" />
+<appellation intitule="Animateur / Animatrice de centre aéré" />
+<appellation intitule="Animateur / Animatrice de centre de loisirs" />
+<appellation intitule="Animateur / Animatrice de centre de vacances et de loisirs" />
+<appellation intitule="Animateur / Animatrice de club enfants" />
+<appellation intitule="Animateur / Animatrice de colonie de vacances" />
+<appellation intitule="Animateur / Animatrice de loisirs auprès des enfants et adolescents" />
+<appellation intitule="Animateur / Animatrice de loisirs de plage" />
+<appellation intitule="Animateur / Animatrice de loisirs pour enfants" />
+<appellation intitule="Animateur / Animatrice de mini-club enfants" />
+<appellation intitule="Animateur / Animatrice d'enfants" />
+<appellation intitule="Animateur / Animatrice d'enfants assistant sanitaire" />
+<appellation intitule="Animateur / Animatrice d'enfants en centre de vacances" />
+<appellation intitule="Animateur / Animatrice d'enfants en classe transplantée" />
+<appellation intitule="Animateur adjoint / Animatrice adjointe sanitaire auprès d'enfants ou d'adolescents" />
+<appellation intitule="Directeur / Directrice de centre aéré et de loisirs" />
+<appellation intitule="Directeur / Directrice de centre de colonie de vacances" />
+<appellation intitule="Directeur / Directrice de centre de loisirs avec hébergement" />
+<appellation intitule="Directeur / Directrice de centre de loisirs sans hébergement -CLSH-" />
+<appellation intitule="Directeur / Directrice de centre de vacances et de loisirs -CVL-" />
+<appellation intitule="Moniteur / Monitrice de centre de loisirs" />
+<appellation intitule="Moniteur / Monitrice de classe transplantée" />
+<appellation intitule="Moniteur / Monitrice de colonie de vacances" />
+<appellation intitule="Moniteur / Monitrice d'enfants" />
+<appellation intitule="Responsable de centre de loisirs" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1204" intitule="Éducation en activités sportives">
+<liste_appellations>
+<appellation intitule="Animateur sportif / Animatrice sportive" />
+<appellation intitule="Assistant éducateur / Assistante éducatrice d'activités sportives" />
+<appellation intitule="Cadre technique sportif / sportive" />
+<appellation intitule="Chef de bassin" />
+<appellation intitule="Coach sportif" />
+<appellation intitule="Conseiller sportif / Conseillère sportive" />
+<appellation intitule="Educateur / Educatrice d'activités physiques" />
+<appellation intitule="Educateur / Educatrice d'activités sportives" />
+<appellation intitule="Educateur / Educatrice handisport" />
+<appellation intitule="Educateur sportif / Educatrice sportive" />
+<appellation intitule="Entraîneur / Entraîneuse de sportifs de haut niveau" />
+<appellation intitule="Entraîneur / Entraîneuse d'équipe sportive" />
+<appellation intitule="Entraîneur sportif / Entraîneuse sportive" />
+<appellation intitule="Initiateur sportif / Initiatrice sportive" />
+<appellation intitule="Instructeur sportif / Instructrice sportive" />
+<appellation intitule="Maître nageur sauveteur / Maîtresse nageuse sauveteuse" />
+<appellation intitule="Manager animateur / Manageuse animatrice de club sportif" />
+<appellation intitule="Moniteur / Monitrice de sport" />
+<appellation intitule="Moniteur / Monitrice d'éducation physique et sportive" />
+<appellation intitule="Moniteur sportif / Monitrice sportive" />
+<appellation intitule="Préparateur / Préparatrice physique" />
+<appellation intitule="Professeur / Professeure d'activités sportives" />
+<appellation intitule="Sauveteur / Sauveteuse aquatique" />
+<appellation intitule="Surveillant / Surveillante de baignade" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1205" intitule="Personnel d'attractions ou de structures de loisirs">
+<liste_appellations>
+<appellation intitule="Agent / Agente de contrôle de salle de spectacles" />
+<appellation intitule="Agent / Agente d'exploitation des attractions" />
+<appellation intitule="Animateur / Animatrice d'attractions" />
+<appellation intitule="Animateur / Animatrice de parc de loisirs" />
+<appellation intitule="Animateur / Animatrice de personnage de parc de loisirs" />
+<appellation intitule="Assistant / Assistante de zone d'attraction" />
+<appellation intitule="Conducteur / Conductrice d'attraction" />
+<appellation intitule="Conducteur / Conductrice de manège" />
+<appellation intitule="Employé / Employée de loisirs ou d'attractions" />
+<appellation intitule="Employé / Employée de manège forain" />
+<appellation intitule="Employé / Employée de parc de loisirs" />
+<appellation intitule="Hôte / Hôtesse d'attractions" />
+<appellation intitule="Hôte / Hôtesse de golf/mini golf" />
+<appellation intitule="Hôte / Hôtesse de manège" />
+<appellation intitule="Hôte / Hôtesse de patinoire" />
+<appellation intitule="Hôte / Hôtesse de salle de jeux électroniques" />
+<appellation intitule="Opérateur / Opératrice d'attraction" />
+<appellation intitule="Opérateur / Opératrice de manège" />
+<appellation intitule="Ouvreur / Ouvreuse de salle de spectacles" />
+<appellation intitule="Ouvreur placeur / Ouvreuse placeuse de salle de spectacles" />
+<appellation intitule="Pilote d'attractions" />
+<appellation intitule="Pilote de manège" />
+<appellation intitule="Responsable des attractions" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1206" intitule="Personnel technique des jeux">
+<liste_appellations>
+<appellation intitule="Bout de table" />
+<appellation intitule="Chef de boule" />
+<appellation intitule="Chef de partie de boule" />
+<appellation intitule="Chef de partie de jeux" />
+<appellation intitule="Chef de table" />
+<appellation intitule="Croupier / Croupière" />
+<appellation intitule="Croupier / Croupière bout de table" />
+<appellation intitule="Croupier / Croupière de boule" />
+<appellation intitule="Directeur / Directrice des jeux" />
+<appellation intitule="Directeur / Directrice Machines à Sous -MAS-" />
+<appellation intitule="Directeur adjoint / Directrice adjointe des jeux" />
+<appellation intitule="Employé / Employée des jeux" />
+<appellation intitule="Membre du comité de direction des jeux" />
+<appellation intitule="Valet de jeux de table" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="G13" intitule="Conception, commercialisation et vente de produits touristiques">
+<fiche
+ code="G1301" intitule="Conception de produits touristiques">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante chef de produit tourisme" />
+<appellation intitule="Assistant / Assistante de production tourisme" />
+<appellation intitule="Assistant / Assistante de production voyages" />
+<appellation intitule="Assistant / Assistante forfaitiste" />
+<appellation intitule="Assistant / Assistante technique en tourisme d'affaires" />
+<appellation intitule="Chef de produit tourisme" />
+<appellation intitule="Concepteur / Conceptrice de prestations touristiques" />
+<appellation intitule="Concepteur / Conceptrice de produits d'écotourisme" />
+<appellation intitule="Concepteur / Conceptrice de produits en tourisme d'affaires" />
+<appellation intitule="Concepteur / Conceptrice de produits touristiques" />
+<appellation intitule="Concepteur / Conceptrice forfaitiste tourisme" />
+<appellation intitule="Directeur / Directrice de production tourisme" />
+<appellation intitule="Forfaitiste" />
+<appellation intitule="Forfaitiste groupe" />
+<appellation intitule="Forfaitiste Groupement d'Individuels Regroupés -GIR-" />
+<appellation intitule="Forfaitiste séjours linguistiques" />
+<appellation intitule="Organisateur / Organisatrice de voyages" />
+<appellation intitule="Producteur / Productrice technique de prestations touristiques" />
+<appellation intitule="Responsable service production tourisme" />
+<appellation intitule="Technicien / Technicienne de production du tourisme" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1302" intitule="Optimisation de produits touristiques">
+<liste_appellations>
+<appellation intitule="Analyst revenue management" />
+<appellation intitule="Assistant / Assistante yield manager" />
+<appellation intitule="Chargé / Chargée de l'optimisation des produits touristiques" />
+<appellation intitule="Chargé / Chargée du rendement de produits du tourisme" />
+<appellation intitule="Directeur / Directrice du rendement des produits du tourisme" />
+<appellation intitule="Gestionnaire d'allotements de transport" />
+<appellation intitule="Négociateur / Négociatrice de contrats hôteliers" />
+<appellation intitule="Responsable du rendement des produits du tourisme" />
+<appellation intitule="Responsable yield manager" />
+<appellation intitule="Revenue Manager" />
+<appellation intitule="Yield manager" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1303" intitule="Vente de voyages">
+<liste_appellations>
+<appellation intitule="Agent / Agente de comptoir en vente de voyages" />
+<appellation intitule="Agent / Agente de réservation voyages" />
+<appellation intitule="Agent / Agente de vente voyages" />
+<appellation intitule="Agent / Agente de voyages" />
+<appellation intitule="Billettiste" />
+<appellation intitule="Billettiste affaires" />
+<appellation intitule="Billettiste voyages" />
+<appellation intitule="Chargé / Chargée de point de vente voyages" />
+<appellation intitule="Chargé / Chargée de réservation groupe" />
+<appellation intitule="Chef de comptoir en vente de voyages" />
+<appellation intitule="Conseiller / Conseillère voyages" />
+<appellation intitule="Conseiller / Conseillère voyages d'affaires" />
+<appellation intitule="Conseiller / Conseillère voyages en ligne" />
+<appellation intitule="Conseiller télévendeur / Conseillère télévendeuse de voyages" />
+<appellation intitule="Conseiller vendeur / Conseillère vendeuse croisières" />
+<appellation intitule="Gestionnaire de point de vente voyages" />
+<appellation intitule="Gestionnaire de point de ventes de voyages en ligne" />
+<appellation intitule="Responsable de ventes de voyages en plateau d'affaires" />
+<appellation intitule="Technicien / Technicienne de réservation voyages" />
+<appellation intitule="Technicien / Technicienne en billetterie affaires" />
+<appellation intitule="Télébillettiste voyages" />
+<appellation intitule="Téléconseiller / Téléconseillère voyages" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="G14" intitule="Gestion et direction">
+<fiche
+ code="G1401" intitule="Assistance de direction d'hôtel-restaurant">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe du directeur en hôtellerie-restauration" />
+<appellation intitule="Assistant / Assistante à la direction d'un établissement hôtelier" />
+<appellation intitule="Assistant / Assistante à la direction d'un restaurant" />
+<appellation intitule="Assistant / Assistante du directeur en hôtellerie-restauration" />
+<appellation intitule="Assistant manager / Assistante manageuse en restauration" />
+<appellation intitule="Econome en hôtellerie-restauration" />
+<appellation intitule="Manager / Manageuse en restauration rapide" />
+<appellation intitule="Manager / Manageuse en terminal de cuisson" />
+<appellation intitule="Responsable de restauration" />
+<appellation intitule="Responsable des séminaires" />
+<appellation intitule="Responsable d'hébergement hôtelier" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1402" intitule="Management d'hôtel-restaurant">
+<liste_appellations>
+<appellation intitule="Directeur / Directrice de la restauration" />
+<appellation intitule="Directeur / Directrice de résidence hôtelière" />
+<appellation intitule="Directeur / Directrice de restaurant" />
+<appellation intitule="Directeur / Directrice d'établissement de restauration rapide" />
+<appellation intitule="Directeur / Directrice d'hôtel" />
+<appellation intitule="Directeur / Directrice d'hôtel-restaurant" />
+<appellation intitule="Exploitant / Exploitante de restaurant" />
+<appellation intitule="Exploitant / Exploitante d'hôtel" />
+<appellation intitule="Gérant / Gérante de restaurant" />
+<appellation intitule="Gérant / Gérante d'hôtel" />
+<appellation intitule="Hôtelier / Hôtelière" />
+<appellation intitule="Hôtelier-restaurateur / Hôtelière-restauratrice" />
+<appellation intitule="Responsable de restaurant" />
+<appellation intitule="Responsable d'hôtel-restaurant" />
+<appellation intitule="Restaurateur / Restauratrice" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1403" intitule="Gestion de structure de loisirs ou d'hébergement touristique">
+<liste_appellations>
+<appellation intitule="Directeur / Directrice de camping" />
+<appellation intitule="Directeur / Directrice de casino de jeux" />
+<appellation intitule="Directeur / Directrice de centre nautique" />
+<appellation intitule="Directeur / Directrice de centre sportif" />
+<appellation intitule="Directeur / Directrice de piscine" />
+<appellation intitule="Directeur / Directrice de résidence de tourisme" />
+<appellation intitule="Directeur / Directrice de salle de cinéma" />
+<appellation intitule="Directeur / Directrice d'équipement de loisirs" />
+<appellation intitule="Directeur / Directrice d'équipement sportif" />
+<appellation intitule="Directeur / Directrice d'hôtellerie de plein air" />
+<appellation intitule="Exploitant / Exploitante d'attraction foraine" />
+<appellation intitule="Exploitant / Exploitante d'attractions" />
+<appellation intitule="Exploitant / Exploitante de cabaret" />
+<appellation intitule="Exploitant / Exploitante de camping" />
+<appellation intitule="Exploitant / Exploitante de casino des jeux" />
+<appellation intitule="Exploitant / Exploitante de centre équestre" />
+<appellation intitule="Exploitant / Exploitante de cercle de jeux" />
+<appellation intitule="Exploitant / Exploitante de chambres d'hôtes" />
+<appellation intitule="Exploitant / Exploitante de cinéma" />
+<appellation intitule="Exploitant / Exploitante de discothèque" />
+<appellation intitule="Exploitant / Exploitante de gîte rural" />
+<appellation intitule="Exploitant / Exploitante de karting" />
+<appellation intitule="Exploitant / Exploitante de manège" />
+<appellation intitule="Exploitant / Exploitante de manège forain" />
+<appellation intitule="Exploitant / Exploitante de minigolf" />
+<appellation intitule="Exploitant / Exploitante de parc de parcours acrobatique" />
+<appellation intitule="Exploitant / Exploitante de parc naturel et animalier" />
+<appellation intitule="Exploitant / Exploitante de parc zoologique" />
+<appellation intitule="Exploitant / Exploitante de parcours acrobatique en hauteur" />
+<appellation intitule="Exploitant / Exploitante de patinoire" />
+<appellation intitule="Exploitant / Exploitante de salle de billard" />
+<appellation intitule="Exploitant / Exploitante de salle de bowling" />
+<appellation intitule="Exploitant / Exploitante de salle de jeux électroniques/automatiques" />
+<appellation intitule="Exploitant / Exploitante de salle de spectacles" />
+<appellation intitule="Exploitant / Exploitante de structure d'hébergement touristique" />
+<appellation intitule="Exploitant / Exploitante de tennis" />
+<appellation intitule="Exploitant / Exploitante d'équipement sportif" />
+<appellation intitule="Exploitant / Exploitante d'équipements de loisirs" />
+<appellation intitule="Exploitant / Exploitante d'équipements de loisirs de plein air" />
+<appellation intitule="Exploitant directeur / Exploitante directrice de golf" />
+<appellation intitule="Gérant / Gérante de camping" />
+<appellation intitule="Gérant / Gérante de centre nautique" />
+<appellation intitule="Gérant / Gérante de dancing" />
+<appellation intitule="Gérant / Gérante de piscine" />
+<appellation intitule="Gérant / Gérante d'équipement de loisirs" />
+<appellation intitule="Gérant / Gérante d'équipement sportif" />
+<appellation intitule="Gestionnaire de base de loisirs" />
+<appellation intitule="Gestionnaire de parc de loisirs" />
+<appellation intitule="Gestionnaire de structure de loisirs" />
+<appellation intitule="Gestionnaire de structure d'hébergement touristique" />
+<appellation intitule="Gestionnaire d'espaces naturels et de loisirs" />
+<appellation intitule="Responsable d'aquarium" />
+<appellation intitule="Responsable de parc naturel" />
+<appellation intitule="Responsable de planétarium" />
+<appellation intitule="Responsable de salle de sports" />
+<appellation intitule="Responsable de village de vacances" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1404" intitule="Management d'établissement de restauration collective">
+<liste_appellations>
+<appellation intitule="Chef de production en restauration collective" />
+<appellation intitule="Chef de secteur de restauration collective" />
+<appellation intitule="Chef gérant / gérante de restaurant de collectivité" />
+<appellation intitule="Directeur / Directrice de cuisine centrale" />
+<appellation intitule="Directeur / Directrice de restaurant de collectivité" />
+<appellation intitule="Econome en restauration collective" />
+<appellation intitule="Gérant / Gérante de cantine scolaire" />
+<appellation intitule="Gérant / Gérante de cuisine hospitalière" />
+<appellation intitule="Gérant / Gérante de mess" />
+<appellation intitule="Gérant / Gérante de restaurant de collectivité" />
+<appellation intitule="Gérant adjoint / Gérante adjointe de restaurant de collectivité" />
+<appellation intitule="Gestionnaire de restaurant de collectivité" />
+<appellation intitule="Intendant / Intendante de restaurant de collectivité" />
+<appellation intitule="Responsable de restaurant de collectivité" />
+<appellation intitule="Responsable des achats en restauration collective" />
+<appellation intitule="Responsable d'établissement de restauration collective" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="G15" intitule="Personnel d'étage en hôtellerie">
+<fiche
+ code="G1501" intitule="Personnel d'étage">
+<liste_appellations>
+<appellation intitule="Commis / Commise d'étage" />
+<appellation intitule="Employé / Employée de ménage d'hôtel" />
+<appellation intitule="Employé / Employée d'étage" />
+<appellation intitule="Employé / Employée d'étage en hôtellerie" />
+<appellation intitule="Femme de chambre" />
+<appellation intitule="Premier valet de chambre" />
+<appellation intitule="Première femme de chambre" />
+<appellation intitule="Valet / Femme de chambre" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1502" intitule="Personnel polyvalent d'hôtellerie">
+<liste_appellations>
+<appellation intitule="Agent polyvalent / Agente polyvalente d'hôtellerie" />
+<appellation intitule="Employé / Employée d'hôtel" />
+<appellation intitule="Employé polyvalent / Employée polyvalente d'hôtellerie" />
+<appellation intitule="Employé polyvalent / Employée polyvalente en établissement hôtelier" />
+<appellation intitule="Equipier / Equipière d'hôtel" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1503" intitule="Management du personnel d'étage">
+<liste_appellations>
+<appellation intitule="Aide gouvernante en hôtellerie" />
+<appellation intitule="Assistante gouvernante en hôtellerie" />
+<appellation intitule="Assistante gouvernante générale en hôtellerie" />
+<appellation intitule="Chef gouvernante en hôtellerie" />
+<appellation intitule="Gouvernante d'étage" />
+<appellation intitule="Gouvernante d'hôtel" />
+<appellation intitule="Gouvernante en établissement hôtelier" />
+<appellation intitule="Gouvernante en hôtellerie" />
+<appellation intitule="Gouvernante générale en hôtellerie" />
+<appellation intitule="Première gouvernante d'hôtel" />
+<appellation intitule="Responsable d'étage" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="G16" intitule="Production culinaire">
+<fiche
+ code="G1601" intitule="Management du personnel de cuisine">
+<liste_appellations>
+<appellation intitule="Chef cuisinier / cuisinière" />
+<appellation intitule="Chef de cuisine" />
+<appellation intitule="Chef de cuisine traiteur / traiteuse" />
+<appellation intitule="Chef des cuisines" />
+<appellation intitule="Conseiller / Conseillère culinaire" />
+<appellation intitule="Responsable de production en restauration collective" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1602" intitule="Personnel de cuisine">
+<liste_appellations>
+<appellation intitule="Chef de partie" />
+<appellation intitule="Chef de partie pâtissier / pâtissière" />
+<appellation intitule="Chef de partie poissonnier / poissonnière" />
+<appellation intitule="Chef de partie rôtisseur / rôtisseuse" />
+<appellation intitule="Chef entremettier / entremettière de restaurant" />
+<appellation intitule="Chef pâtissier / pâtissière de restaurant" />
+<appellation intitule="Chef saucier / saucière" />
+<appellation intitule="Commis / Commise de cuisine" />
+<appellation intitule="Commis / Commise de cuisine de collectivité" />
+<appellation intitule="Commis de cuisine tournant / Commise de cuisine tournante" />
+<appellation intitule="Commis pâtissier / Commise pâtissière de restaurant" />
+<appellation intitule="Cuisinier / Cuisinière" />
+<appellation intitule="Cuisinier / Cuisinière de collectivité" />
+<appellation intitule="Cuisinier / Cuisinière de laboratoire" />
+<appellation intitule="Cuisinier traiteur / Cuisinière traiteuse" />
+<appellation intitule="Grillardin / Grillardine" />
+<appellation intitule="Pâtissier / Pâtissière de restaurant" />
+<appellation intitule="Premier commis / Première commise de cuisine" />
+<appellation intitule="Second / Seconde de cuisine" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1603" intitule="Personnel polyvalent en restauration">
+<liste_appellations>
+<appellation intitule="Agent / Agente de restauration rapide" />
+<appellation intitule="Commis / Commise de self" />
+<appellation intitule="Employé / Employée de cafétéria" />
+<appellation intitule="Employé / Employée de cantine" />
+<appellation intitule="Employé / Employée de friterie" />
+<appellation intitule="Employé / Employée de restauration collective" />
+<appellation intitule="Employé / Employée de snack-bar" />
+<appellation intitule="Employé polyvalent / Employée polyvalente de restaurant" />
+<appellation intitule="Employé polyvalent / Employée polyvalente de restauration" />
+<appellation intitule="Equipier polyvalent / Equipière polyvalente de restauration rapide" />
+<appellation intitule="Préparateur livreur / Préparatrice livreuse en restauration rapide" />
+<appellation intitule="Préparateur-vendeur / Préparatrice-vendeuse de plats à emporter" />
+<appellation intitule="Préparateur-vendeur / Préparatrice-vendeuse de sandwichs" />
+<appellation intitule="Préparateur-vendeur / Préparatrice-vendeuse en point chaud" />
+<appellation intitule="Préparateur-vendeur / Préparatrice-vendeuse en terminal de cuisson" />
+<appellation intitule="Steward / Hôtesse de train" />
+<appellation intitule="Vendeur / Vendeuse de glaces" />
+<appellation intitule="Vendeur / Vendeuse de sandwichs" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1604" intitule="Fabrication de crêpes ou pizzas">
+<liste_appellations>
+<appellation intitule="Crêpier / Crêpière" />
+<appellation intitule="Pizzaïolo / Pizzaïola" />
+<appellation intitule="Préparateur-vendeur / Préparatrice-vendeuse de crêpes" />
+<appellation intitule="Préparateur-vendeur / Préparatrice-vendeuse de pizzas" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1605" intitule="Plonge en restauration">
+<liste_appellations>
+<appellation intitule="Agent / Agente de cuisine" />
+<appellation intitule="Aide de cuisine" />
+<appellation intitule="Aide de cuisine de collectivité" />
+<appellation intitule="Ecailler / Ecaillère de restaurant" />
+<appellation intitule="Plongeur / Plongeuse en restauration" />
+<appellation intitule="Plongeur-batterie / Plongeuse-batterie en restauration" />
+<appellation intitule="Responsable de la plonge en restauration" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="G17" intitule="Accueil en hôtellerie">
+<fiche
+ code="G1701" intitule="Conciergerie en hôtellerie">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante concierge d'hôtel" />
+<appellation intitule="Chef concierge d'hôtel" />
+<appellation intitule="Concierge d'entreprise" />
+<appellation intitule="Concierge d'hôtel" />
+<appellation intitule="Premier / Première concierge d'hôtel" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1702" intitule="Personnel du hall">
+<liste_appellations>
+<appellation intitule="Bagagiste en établissement hôtelier" />
+<appellation intitule="Chasseur / Chasseuse" />
+<appellation intitule="Chasseur-bagagiste / Chasseuse-bagagiste" />
+<appellation intitule="Coursier / Coursière en hôtellerie" />
+<appellation intitule="Employé / Employée du hall" />
+<appellation intitule="Equipier / Equipière bagagiste" />
+<appellation intitule="Garçon / Serveuse de hall" />
+<appellation intitule="Groom" />
+<appellation intitule="Liftier / Liftière" />
+<appellation intitule="Portier / Portière" />
+<appellation intitule="Responsable de vestiaire" />
+<appellation intitule="Valet de pied" />
+<appellation intitule="Vestiaire" />
+<appellation intitule="Vestiairiste" />
+<appellation intitule="Voiturier / Voiturière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1703" intitule="Réception en hôtellerie">
+<liste_appellations>
+<appellation intitule="Agent / Agente de réservation en hôtellerie" />
+<appellation intitule="Assistant / Assistante de réception en établissement hôtelier" />
+<appellation intitule="Chef de brigade de réception hôtelière" />
+<appellation intitule="Chef de réception en hôtellerie" />
+<appellation intitule="Employé / Employée de réception en établissement hôtelier" />
+<appellation intitule="Employé / Employée de réservation en hôtellerie" />
+<appellation intitule="Night audit" />
+<appellation intitule="Night auditor" />
+<appellation intitule="Réceptionniste de camping" />
+<appellation intitule="Réceptionniste de nuit" />
+<appellation intitule="Réceptionniste de village vacances" />
+<appellation intitule="Réceptionniste en établissement touristique" />
+<appellation intitule="Réceptionniste en hôtellerie" />
+<appellation intitule="Réceptionniste tournant / tournante en établissement hôtelier" />
+<appellation intitule="Responsable de réception hôtelière" />
+<appellation intitule="Responsable des réservations en hôtellerie" />
+<appellation intitule="Veilleur / Veilleuse de nuit en hôtellerie" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="G18" intitule="Service">
+<fiche
+ code="G1801" intitule="Café, bar brasserie">
+<liste_appellations>
+<appellation intitule="Barman / Barmaid" />
+<appellation intitule="Cafetier / Cafetière" />
+<appellation intitule="Chef barman / barmaid" />
+<appellation intitule="Commis / Commise de bar" />
+<appellation intitule="Directeur / Directrice de café bar" />
+<appellation intitule="Employé / Employée de café, bar-brasserie" />
+<appellation intitule="Exploitant / Exploitante de bar" />
+<appellation intitule="Exploitant / Exploitante de bar-brasserie" />
+<appellation intitule="Exploitant / Exploitante de café" />
+<appellation intitule="Exploitant / Exploitante de café, bar-brasserie" />
+<appellation intitule="Exploitant / Exploitante de salon de thé" />
+<appellation intitule="Garçon / Serveuse de café" />
+<appellation intitule="Garçon limonadier / Serveuse limonadière" />
+<appellation intitule="Gérant / Gérante de bar-tabac" />
+<appellation intitule="Gérant / Gérante de café, bar-brasserie" />
+<appellation intitule="Responsable de bar" />
+<appellation intitule="Responsable de bar-brasserie" />
+<appellation intitule="Serveur / Serveuse de bar" />
+<appellation intitule="Serveur / Serveuse de bar-brasserie" />
+<appellation intitule="Serveur / Serveuse de salon de thé" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1802" intitule="Management du service en restauration">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante maître d'hôtel" />
+<appellation intitule="Chef de room service" />
+<appellation intitule="Maître / Maîtresse d'hôtel" />
+<appellation intitule="Maître d'hôtel sommelier / Maîtresse d'hôtel sommelière" />
+<appellation intitule="Premier maître / Première maîtresse d'hôtel" />
+<appellation intitule="Responsable de salle" />
+<appellation intitule="Responsable des banquets" />
+<appellation intitule="Responsable des petits-déjeuners" />
+<appellation intitule="Second maître / Seconde maîtresse d'hôtel" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1803" intitule="Service en restauration">
+<liste_appellations>
+<appellation intitule="Chef de rang" />
+<appellation intitule="Commis / Commise de restaurant" />
+<appellation intitule="Commis / Commise de salle" />
+<appellation intitule="Demi-chef de rang" />
+<appellation intitule="Garçon / Serveuse de restaurant" />
+<appellation intitule="Hôte / Hôtesse de salle" />
+<appellation intitule="Serveur / Serveuse de banquet" />
+<appellation intitule="Serveur / Serveuse de restaurant" />
+<appellation intitule="Serveur / Serveuse de room service" />
+<appellation intitule="Serveur / Serveuse en restauration" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="G1804" intitule="Sommellerie">
+<liste_appellations>
+<appellation intitule="Chef sommelier / sommelière" />
+<appellation intitule="Commis sommelier / Commise sommelière" />
+<appellation intitule="Sommelier / Sommelière" />
+<appellation intitule="Sommelier-caviste / Sommelière-caviste" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="H" intitule="INDUSTRIE">
+<domaine-intermediaire code="H1" intitule="Études et supports techniques à l'industrie">
+<domaine code="H11" intitule="Affaires et supports technique client">
+<fiche
+ code="G1804" intitule="Sommellerie">
+<liste_appellations>
+<appellation intitule="Directeur / Directrice assistance technique" />
+<appellation intitule="Expert / Experte support technique" />
+<appellation intitule="Ingénieur / Ingénieure assistance technique" />
+<appellation intitule="Ingénieur / Ingénieure service client" />
+<appellation intitule="Ingénieur / Ingénieure support technique" />
+<appellation intitule="Représentant technique / Représentante technique utilisateur" />
+<appellation intitule="Responsable centre de support client" />
+<appellation intitule="Responsable support technique clients" />
+<appellation intitule="Spécialiste support technique" />
+<appellation intitule="Technicien / Technicienne support client" />
+<appellation intitule="Technicien / Technicienne support technique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1102" intitule="Management et ingénierie d'affaires">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée d'affaires en industrie" />
+<appellation intitule="Chargé / Chargée de projet d'affaires en industrie" />
+<appellation intitule="Chef de projet d'affaires d'ingénierie industrielle" />
+<appellation intitule="Ingénieur / Ingénieure d'affaires en industrie" />
+<appellation intitule="Ingénieur / Ingénieure de contrats industriels" />
+<appellation intitule="Ingénieur / Ingénieure de programme d'affaires en industrie" />
+<appellation intitule="Ingénieur / Ingénieure de projet d'affaires en industrie" />
+<appellation intitule="Ingénieur / Ingénieure de suivi d'affaires en industrie" />
+<appellation intitule="Ingénieur / Ingénieure pilotage de projets d'affaires industriels" />
+<appellation intitule="Ingénieur technico-commercial / Ingénieure technico-commerciale en affaires industrielles" />
+<appellation intitule="Responsable d'affaires en industrie" />
+<appellation intitule="Responsable de projet d'affaires en industrie" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H12" intitule="Conception, recherche, études et développement">
+<fiche
+ code="H1201" intitule="Expertise technique couleur en industrie">
+<liste_appellations>
+<appellation intitule="Agent / Agente de finissage couleurs et effets cuirs et peaux" />
+<appellation intitule="Coloriste à sec" />
+<appellation intitule="Coloriste en finissage" />
+<appellation intitule="Coloriste en impression textile" />
+<appellation intitule="Coloriste en industrie alimentaire" />
+<appellation intitule="Coloriste en industrie chimique" />
+<appellation intitule="Coloriste en industrie cosmétique" />
+<appellation intitule="Coloriste en peinture" />
+<appellation intitule="Coloriste en tannerie-mégisserie" />
+<appellation intitule="Coloriste en teinture textile" />
+<appellation intitule="Coloriste sur textiles" />
+<appellation intitule="Coloriste textile" />
+<appellation intitule="Echantillonneur / Echantillonneuse en teinture" />
+<appellation intitule="Formulateur / Formulatrice coloriste en industrie cosmétique" />
+<appellation intitule="Responsable de la teinte" />
+<appellation intitule="Technicien / Technicienne coloriste en industrie" />
+<appellation intitule="Technicien / Technicienne coloriste en recherche et développement" />
+<appellation intitule="Technicien / Technicienne finissage des peaux" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1202" intitule="Conception et dessin produits électriques et électroniques">
+<liste_appellations>
+<appellation intitule="Chef de groupe dessinateurs en électricité-électronique" />
+<appellation intitule="Dessinateur / Dessinatrice catalogue en électricité-électronique" />
+<appellation intitule="Dessinateur / Dessinatrice de schémas électriques" />
+<appellation intitule="Dessinateur / Dessinatrice de schémas en électronique" />
+<appellation intitule="Dessinateur / Dessinatrice d'études de matériel électrique et électronique" />
+<appellation intitule="Dessinateur / Dessinatrice d'études en électricité" />
+<appellation intitule="Dessinateur / Dessinatrice d'études en électricité et électronique" />
+<appellation intitule="Dessinateur / Dessinatrice d'études en électronique" />
+<appellation intitule="Dessinateur / Dessinatrice d'exécution en électricité" />
+<appellation intitule="Dessinateur / Dessinatrice d'exécution en électricité et électronique" />
+<appellation intitule="Dessinateur / Dessinatrice d'exécution en électronique" />
+<appellation intitule="Dessinateur / Dessinatrice en électricité-électronique" />
+<appellation intitule="Dessinateur / Dessinatrice petites études en électricité-électronique" />
+<appellation intitule="Dessinateur détaillant / Dessinatrice détaillante en électricité-électronique" />
+<appellation intitule="Dessinateur industriel / Dessinatrice industrielle en construction électrique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse catalogue en électricité-électronique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse de matériel électrique-électronique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse de schémas électroniques" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse d'études en électricité-électronique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en électricité-électronique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en électrotechnique" />
+<appellation intitule="Implanteur / Implanteuse de cartes électroniques" />
+<appellation intitule="Maquettiste en appareillage basse et moyenne tension" />
+<appellation intitule="Maquettiste en électronique" />
+<appellation intitule="Projeteur / Projeteuse chef de groupe en électricité-électronique" />
+<appellation intitule="Projeteur / Projeteuse en conception électronique, électrique" />
+<appellation intitule="Technicien / Technicienne en conception électronique, électrique" />
+<appellation intitule="Technicien / Technicienne en implantation et routage électronique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1203" intitule="Conception et dessin produits mécaniques">
+<liste_appellations>
+<appellation intitule="Calculateur / Calculatrice études en mécanique" />
+<appellation intitule="Chef de projet en conception industrielle en mécanique" />
+<appellation intitule="Concepteur / Conceptrice de produits industriels mécaniques" />
+<appellation intitule="Concepteur / Conceptrice en produits mécaniques" />
+<appellation intitule="Dessinateur / Dessinatrice d'études en mécanique" />
+<appellation intitule="Dessinateur / Dessinatrice d'exécution en mécanique" />
+<appellation intitule="Dessinateur / Dessinatrice en architecture mécanique" />
+<appellation intitule="Dessinateur / Dessinatrice en architecture navale" />
+<appellation intitule="Dessinateur / Dessinatrice en carrosserie automobile" />
+<appellation intitule="Dessinateur / Dessinatrice en charpente métallique" />
+<appellation intitule="Dessinateur / Dessinatrice en chaudronnerie" />
+<appellation intitule="Dessinateur / Dessinatrice en construction aéronautique" />
+<appellation intitule="Dessinateur / Dessinatrice en construction mécanique" />
+<appellation intitule="Dessinateur / Dessinatrice en construction métallique" />
+<appellation intitule="Dessinateur / Dessinatrice en construction navale" />
+<appellation intitule="Dessinateur / Dessinatrice en hydraulique et pneumatique" />
+<appellation intitule="Dessinateur / Dessinatrice en installations industrielles" />
+<appellation intitule="Dessinateur / Dessinatrice en machines spéciales" />
+<appellation intitule="Dessinateur / Dessinatrice en menuiserie aluminium" />
+<appellation intitule="Dessinateur / Dessinatrice en menuiserie PVC" />
+<appellation intitule="Dessinateur / Dessinatrice en outillage" />
+<appellation intitule="Dessinateur / Dessinatrice en plasturgie" />
+<appellation intitule="Dessinateur / Dessinatrice en structures mécaniques" />
+<appellation intitule="Dessinateur / Dessinatrice en structures métalliques" />
+<appellation intitule="Dessinateur / Dessinatrice en systèmes mécaniques" />
+<appellation intitule="Dessinateur / Dessinatrice en tôlerie" />
+<appellation intitule="Dessinateur / Dessinatrice en tuyauterie industrielle" />
+<appellation intitule="Dessinateur / Dessinatrice petites études en mécanique" />
+<appellation intitule="Dessinateur calculateur / Dessinatrice calculatrice en chaudronnerie" />
+<appellation intitule="Dessinateur industriel / Dessinatrice industrielle en mécanique" />
+<appellation intitule="Dessinateur-mouliste / Dessinatrice-mouliste" />
+<appellation intitule="Dessinateur-préparateur / Dessinatrice-préparatrice en mécanique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en architecture mécanique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en architecture navale" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en chaudronnerie" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en conception mécanique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en construction aéronautique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en construction automobile" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en construction mécanique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en construction métallique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en construction navale" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en hydraulique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en installations industrielles" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en mécanique" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en moules et outillages" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en outillages" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en plasturgie" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en structures mécaniques" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en structures métalliques" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en tôlerie" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en tuyauterie industrielle" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse mouliste" />
+<appellation intitule="Dessinateur-projeteur industriel / Dessinatrice-projeteuse industrielle en mécanique" />
+<appellation intitule="Dessinateur-projeteur-catalogue / Dessinatrice-projeteuse-catalogue en mécanique" />
+<appellation intitule="Maquettiste en conception industrielle" />
+<appellation intitule="Technicien / Technicienne en conception industrielle en mécanique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1204" intitule="Design industriel">
+<liste_appellations>
+<appellation intitule="Chef de produits design" />
+<appellation intitule="Chef de projet design" />
+<appellation intitule="Concepteur designer / Conceptrice designeuse" />
+<appellation intitule="Designer / Designeuse" />
+<appellation intitule="Designer / Designeuse automobile" />
+<appellation intitule="Designer / Designeuse ergonome" />
+<appellation intitule="Designer / Designeuse junior" />
+<appellation intitule="Designer / Designeuse maquettiste" />
+<appellation intitule="Designer / Designeuse mobilier" />
+<appellation intitule="Designer / Designeuse packaging" />
+<appellation intitule="Designer / Designeuse produit" />
+<appellation intitule="Designer créateur / Designeuse créatrice" />
+<appellation intitule="Designer industriel / Designeuse industrielle" />
+<appellation intitule="Designer manager / Designeuse manageuse" />
+<appellation intitule="Designer-chef / Designeuse-chef de projet" />
+<appellation intitule="Dessinateur / Dessinatrice en art de la table" />
+<appellation intitule="Directeur / Directrice artistique en design produit" />
+<appellation intitule="Directeur / Directrice de création designer" />
+<appellation intitule="Roughman / Roughwoman en design" />
+<appellation intitule="Styliste transport" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1205" intitule="Étude">
+<liste_appellations>
+<appellation intitule="Dessinateur / Dessinatrice en maroquinerie" />
+<appellation intitule="Modéliste chaussures" />
+<appellation intitule="Modéliste en industrie de l'habillement et autres fabrications à base d'étoffes" />
+<appellation intitule="Modéliste en industrie de l'habillement et du textile" />
+<appellation intitule="Modéliste en industrie des cuirs, peaux et matériaux associés" />
+<appellation intitule="Modéliste en maroquinerie" />
+<appellation intitule="Modéliste industriel / industrielle" />
+<appellation intitule="Modéliste-toiliste" />
+<appellation intitule="Patronnier / Patronnière en chaussures" />
+<appellation intitule="Patronnier metteur / Patronnière metteuse au point en chaussures" />
+<appellation intitule="Patronnier-gradueur / Patronnière-gradueuse en chaussures" />
+<appellation intitule="Première d'atelier" />
+<appellation intitule="Seconde d'atelier" />
+<appellation intitule="Technicien / Technicienne bureau d'études des industries de la chaussure" />
+<appellation intitule="Technicien / Technicienne bureau d'études maroquinerie" />
+<appellation intitule="Technicien / Technicienne d'études en industrie des matériaux souples" />
+<appellation intitule="Toiliste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1206" intitule="Management et ingénierie études, recherche et développement industriel">
+<liste_appellations>
+<appellation intitule="Acousticien / Acousticienne en études, recherche et développement" />
+<appellation intitule="Aérodynamicien / Aérodynamicienne en études, recherche et développement" />
+<appellation intitule="Architecte produit industriel" />
+<appellation intitule="Architecte spatial / spatiale en études, recherche et développement" />
+<appellation intitule="Assistant / Assistante de recherche clinique en industrie" />
+<appellation intitule="Assistant / Assistante technique d'ingénieur en études, recherche et développement en industrie" />
+<appellation intitule="Bioinformaticien / Bioinformaticienne en études, recherche et développement" />
+<appellation intitule="Chargé / Chargée d'études projets industriels" />
+<appellation intitule="Chef de projet études industrielles" />
+<appellation intitule="Développeur / Développeuse matériaux et procédés en industrie" />
+<appellation intitule="Directeur / Directrice des études en industrie" />
+<appellation intitule="Ergonomiste en industrie" />
+<appellation intitule="Expérimentateur / Expérimentatrice d'essais en industrie" />
+<appellation intitule="Expert / Experte technologie en industrie" />
+<appellation intitule="Galéniste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure agronome en études, recherche et développement" />
+<appellation intitule="Ingénieur / Ingénieure architecture navale" />
+<appellation intitule="Ingénieur / Ingénieure biochimiste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure biologiste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure chimiste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure d'application en industrie" />
+<appellation intitule="Ingénieur / Ingénieure de piste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure de verrerie" />
+<appellation intitule="Ingénieur / Ingénieure d'études en industrie" />
+<appellation intitule="Ingénieur / Ingénieure d'études-recherche-développement en industrie" />
+<appellation intitule="Ingénieur / Ingénieure d'exploitation des moyens en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en aéronautique en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en aérospatiale en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en armement en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en automatismes en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en automobile en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en biopuce en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en biotechnologie en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en cristallographie en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en innovations technologiques" />
+<appellation intitule="Ingénieur / Ingénieure en matériaux en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en microbiologie en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en nanotechnologie en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en propriété industrielle" />
+<appellation intitule="Ingénieur / Ingénieure en thermodynamique en industrie" />
+<appellation intitule="Ingénieur / Ingénieure en veille technologique en industrie" />
+<appellation intitule="Ingénieur / Ingénieure études de moyens en industrie" />
+<appellation intitule="Ingénieur / Ingénieure fiabilité en industrie" />
+<appellation intitule="Ingénieur / Ingénieure formulation en industrie" />
+<appellation intitule="Ingénieur / Ingénieure frigoriste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure hydrobiologiste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure hydrochimiste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure instrumentation en industrie" />
+<appellation intitule="Ingénieur / Ingénieure métallurgiste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure métrologie" />
+<appellation intitule="Ingénieur / Ingénieure militaire en recherche et développement" />
+<appellation intitule="Ingénieur / Ingénieure motoriste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure normalisation en études, recherche et développement" />
+<appellation intitule="Ingénieur / Ingénieure plasturgiste en industrie" />
+<appellation intitule="Ingénieur / Ingénieure robotique en industrie" />
+<appellation intitule="Ingénieur / Ingénieure spécification en industrie" />
+<appellation intitule="Ingénieur / Ingénieure systèmes et simulations en industrie" />
+<appellation intitule="Ingénieur / Ingénieure systèmes industriels" />
+<appellation intitule="Ingénieur / Ingénieure textile en industrie" />
+<appellation intitule="Ingénieur / Ingénieure validation systèmes en industrie" />
+<appellation intitule="Ingénieur biomédical / Ingénieure biomédicale en industrie" />
+<appellation intitule="Ingénieur calculateur / Ingénieure calculatrice en industrie" />
+<appellation intitule="Ingénieur électronicien / Ingénieure électronicienne en industrie" />
+<appellation intitule="Ingénieur mécanicien / Ingénieure mécanicienne en industrie" />
+<appellation intitule="Ingénieur mécatronicien / Ingénieure mécatronicienne en industrie" />
+<appellation intitule="Ingénieur papetier / Ingénieure papetière en industrie" />
+<appellation intitule="Ingénieur physicien / Ingénieure physicienne en industrie" />
+<appellation intitule="Ingénieur thermicien / Ingénieure thermicienne en industrie" />
+<appellation intitule="Intégrateur / Intégratrice en industrie" />
+<appellation intitule="Moniteur / Monitrice d'études cliniques en industrie" />
+<appellation intitule="Officier / Officière de marque de l'industrie" />
+<appellation intitule="Pharmacologue de l'industrie" />
+<appellation intitule="Responsable de projet industriel" />
+<appellation intitule="Responsable d'études cliniques en industrie" />
+<appellation intitule="Responsable d'études industrielles" />
+<appellation intitule="Responsable du développement pharmaceutique en industrie" />
+<appellation intitule="Rudologue en industrie" />
+<appellation intitule="Toxicologue de l'industrie" />
+<appellation intitule="Vétérinaire de l'industrie" />
+<appellation intitule="ANPE - Direction Générale - Direction de l'Intermédiation                                                                              H1206 / V0.2                                                                                                                                                               1/4 © Copyright ANPE. Reproduction interdite sans autorisation écrite                                                          NE PAS DIFFUSER                                                                                                                                    Septembre 2008" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1207" intitule="Rédaction technique">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée d'affaires en rédaction technique" />
+<appellation intitule="Nomenclaturiste en rédaction technique" />
+<appellation intitule="Rédacteur / Rédactrice de notices techniques" />
+<appellation intitule="Rédacteur / Rédactrice technique" />
+<appellation intitule="Rédacteur / Rédactrice technique automobile" />
+<appellation intitule="Rédacteur / Rédactrice technique en aéronautique-spatial" />
+<appellation intitule="Rédacteur / Rédactrice technique en agronomie" />
+<appellation intitule="Rédacteur / Rédactrice technique en biochimie" />
+<appellation intitule="Rédacteur / Rédactrice technique en biologie" />
+<appellation intitule="Rédacteur / Rédactrice technique en chimie" />
+<appellation intitule="Rédacteur / Rédactrice technique en électricité" />
+<appellation intitule="Rédacteur / Rédactrice technique en électromécanique" />
+<appellation intitule="Rédacteur / Rédactrice technique en électronique" />
+<appellation intitule="Rédacteur / Rédactrice technique en informatique" />
+<appellation intitule="Rédacteur / Rédactrice technique en mécanique" />
+<appellation intitule="Rédacteur / Rédactrice technique en métallurgie" />
+<appellation intitule="Rédacteur médical / Rédactrice médicale en industrie" />
+<appellation intitule="Responsable service rédaction technique" />
+<appellation intitule="Technicien rédacteur / Technicienne rédactrice en industrie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1208" intitule="Intervention technique en études et conception en automatisme">
+<liste_appellations>
+<appellation intitule="Automaticien / Automaticienne chef de projet" />
+<appellation intitule="Automaticien / Automaticienne d'études et conception" />
+<appellation intitule="Automaticien / Automaticienne d'études sur machines d'assemblage" />
+<appellation intitule="Automaticien / Automaticienne en bureau d'études" />
+<appellation intitule="Automaticien / Automaticienne supervision" />
+<appellation intitule="Informaticien automaticien / Informaticienne automaticienne" />
+<appellation intitule="Intégrateur / Intégratrice en informatique industrielle" />
+<appellation intitule="Roboticien automaticien / Roboticienne automaticienne" />
+<appellation intitule="Superviseur automaticien / Superviseuse automaticienne" />
+<appellation intitule="Technicien / Technicienne d'études en automatisme" />
+<appellation intitule="Technicien / Technicienne d'études en instrumentation-régulation" />
+<appellation intitule="Technicien / Technicienne d'études en systèmes mécaniques automatisés" />
+<appellation intitule="Technicien / Technicienne d'études instrumentaliste" />
+<appellation intitule="Technicien / Technicienne en conception de systèmes automatisés" />
+<appellation intitule="Technicien / Technicienne en informatique industrielle" />
+<appellation intitule="Technicien / Technicienne en robotique" />
+<appellation intitule="Technicien automaticien / Technicienne automaticienne d'études et conception" />
+<appellation intitule="Technicien supérieur / Technicienne supérieure en automatique" />
+<appellation intitule="Technicien supérieur / Technicienne supérieure en automatisme" />
+<appellation intitule="Technicien supérieur / Technicienne supérieure en automatisme et informatique industrielle" />
+<appellation intitule="Technicien supérieur / Technicienne supérieure en conception de systèmes automatisés" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1209" intitule="Intervention technique en études et développement électronique">
+<liste_appellations>
+<appellation intitule="Agent technique électronicien / Agente technique électronicienne en études et développement" />
+<appellation intitule="Concepteur développeur / Conceptrice développeuse de système électronique" />
+<appellation intitule="Technicien / Technicienne de laboratoire en électricité études et développement" />
+<appellation intitule="Technicien / Technicienne en électricité et électronique études et développement" />
+<appellation intitule="Technicien / Technicienne en électronique études et développement" />
+<appellation intitule="Technicien / Technicienne en électrotechnique études et développement" />
+<appellation intitule="Technicien / Technicienne en microélectronique études et développement" />
+<appellation intitule="Technicien / Technicienne en télécommunications études et développement" />
+<appellation intitule="Technicien / Technicienne études électriques" />
+<appellation intitule="Technicien / Technicienne processus en électricité-électronique études et développement" />
+<appellation intitule="Technicien / Technicienne validation systèmes en électrique et électronique" />
+<appellation intitule="Technicien électromécanicien / Technicienne électromécanicienne en études et développement" />
+<appellation intitule="Technicien électronicien / Technicienne électronicienne de développement" />
+<appellation intitule="Technicien électronicien / Technicienne électronicienne de laboratoire en études et développement" />
+<appellation intitule="Technicien électronicien / Technicienne électronicienne d'études" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1210" intitule="Intervention technique en études, recherche et développement">
+<liste_appellations>
+<appellation intitule="Agent / Agente de laboratoire de recherche industrielle" />
+<appellation intitule="Assistant / Assistante en instrumentation scientifique et techniques expérimentales" />
+<appellation intitule="Assistant / Assistante technique de recherche" />
+<appellation intitule="Assistant / Assistante technique d'études en recherche" />
+<appellation intitule="Assistant / Assistante technique d'expérimentation" />
+<appellation intitule="Préparateur / Préparatrice en laboratoire de recherche" />
+<appellation intitule="Technicien / Technicienne analyses et essais en recherche et développement" />
+<appellation intitule="Technicien / Technicienne biologiste en recherche-développement" />
+<appellation intitule="Technicien / Technicienne chimiste en recherche-développement" />
+<appellation intitule="Technicien / Technicienne d'analyse et d'essais métallurgique" />
+<appellation intitule="Technicien / Technicienne de développement technologique" />
+<appellation intitule="Technicien / Technicienne de la police technique et scientifique" />
+<appellation intitule="Technicien / Technicienne de laboratoire de développement analytique" />
+<appellation intitule="Technicien / Technicienne de laboratoire de recherche" />
+<appellation intitule="Technicien / Technicienne de laboratoire d'essais" />
+<appellation intitule="Technicien / Technicienne de mesure-essai en recherche et développement" />
+<appellation intitule="Technicien / Technicienne de mesures aérodynamiques" />
+<appellation intitule="Technicien / Technicienne de recherche alimentaire" />
+<appellation intitule="Technicien / Technicienne de recherche appliquée" />
+<appellation intitule="Technicien / Technicienne d'essais matériaux en recherche-développement" />
+<appellation intitule="Technicien / Technicienne d'expérimentation en recherche" />
+<appellation intitule="Technicien / Technicienne d'expérimentation en recherche-développement" />
+<appellation intitule="Technicien / Technicienne d'instrumentation scientifique" />
+<appellation intitule="Technicien / Technicienne en développement" />
+<appellation intitule="Technicien / Technicienne en développement de procédés" />
+<appellation intitule="Technicien / Technicienne en expérimentation animale" />
+<appellation intitule="Technicien / Technicienne en expérimentation végétale" />
+<appellation intitule="Technicien / Technicienne en matériaux en recherche-développement" />
+<appellation intitule="Technicien / Technicienne en mesures physiques en recherche-développement" />
+<appellation intitule="Technicien / Technicienne en mesures physiques et essais" />
+<appellation intitule="Technicien / Technicienne en recherche scientifique" />
+<appellation intitule="Technicien / Technicienne en recherche-développement" />
+<appellation intitule="Technicien / Technicienne en sciences des matériaux" />
+<appellation intitule="Technicien / Technicienne en système naturels" />
+<appellation intitule="Technicien / Technicienne en techniques expérimentales" />
+<appellation intitule="Technicien / Technicienne galéniste" />
+<appellation intitule="Technicien / Technicienne laboratoire de recherche-développement" />
+<appellation intitule="Technicien / Technicienne métallurgiste en recherche et développement" />
+<appellation intitule="Technicien / Technicienne sur grand instrument de recherche" />
+<appellation intitule="Technicien physicien / Technicienne physicienne de laboratoire de recherche-développement" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H13" intitule="Hygiène Sécurité Environnement -HSE- Industriels">
+<fiche
+ code="H1301" intitule="Inspection de conformité">
+<liste_appellations>
+<appellation intitule="Inspecteur / Inspectrice de conformité d'ascenseurs" />
+<appellation intitule="Inspecteur / Inspectrice de conformité de matériel" />
+<appellation intitule="Inspecteur / Inspectrice de conformité d'équipements sous pression" />
+<appellation intitule="Inspecteur / Inspectrice de conformité d'unités d'exploitation" />
+<appellation intitule="Inspecteur / Inspectrice de conformité en électricité" />
+<appellation intitule="Inspecteur / Inspectrice de conformité en environnement" />
+<appellation intitule="Inspecteur / Inspectrice de conformité en gaz" />
+<appellation intitule="Inspecteur / Inspectrice de conformité en levage" />
+<appellation intitule="Inspecteur / Inspectrice de conformité en pression/soudage" />
+<appellation intitule="Inspecteur / Inspectrice de conformité en sécurité incendie" />
+<appellation intitule="Inspecteur / Inspectrice de conformité en thermique" />
+<appellation intitule="Inspecteur / Inspectrice de conformité préventeur" />
+<appellation intitule="Inspecteur / Inspectrice de contrôle de conformité" />
+<appellation intitule="Inspecteur / Inspectrice de mise en conformité" />
+<appellation intitule="Inspecteur / Inspectrice d'inspection réglementaire de conformité" />
+<appellation intitule="Inspecteur / Inspectrice en inspection réglementaire pression" />
+<appellation intitule="Responsable activité inspection réglementaire de conformité" />
+<appellation intitule="Responsable inspection technique" />
+<appellation intitule="Technicien / Technicienne de contrôle de conformité" />
+<appellation intitule="Technicien / Technicienne de non-conformité" />
+<appellation intitule="Technicien / Technicienne inspection de conformité" />
+<appellation intitule="Vérificateur / Vérificatrice de conformité de sécurité industrielle" />
+<appellation intitule="Vérificateur / Vérificatrice de conformité des installations électriques" />
+<appellation intitule="Vérificateur / Vérificatrice de conformité des installations électriques d'avion" />
+<appellation intitule="Vérificateur / Vérificatrice technique de conformité" />
+<appellation intitule="Visiteur-vérificateur / Visiteuse-vérificatrice de conformité" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1302" intitule="Management et ingénierie Hygiène Sécurité Environnement -HSE- industriels">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée de l'hygiène et de la sécurité du travail en industrie" />
+<appellation intitule="Chef du service environnement en industrie" />
+<appellation intitule="Chef du service environnement-hygiène-sécurité en industrie" />
+<appellation intitule="Chef du service hygiène-sécurité en industrie" />
+<appellation intitule="Chef du service sécurité en industrie" />
+<appellation intitule="Commissaire-inspecteur / Commissaire-inspectrice des installations classées" />
+<appellation intitule="Coordonnateur / Coordonnatrice de sécurité et protection de la santé en industrie" />
+<appellation intitule="Cyndinicien / Cyndinicienne" />
+<appellation intitule="Directeur / Directrice en maîtrise des risques industriels" />
+<appellation intitule="Directeur / Directrice Hygiène, Sécurité et Environnement en industrie -HSE-" />
+<appellation intitule="Expert / Experte des risques technologiques" />
+<appellation intitule="Expert / Experte en environnement industriel" />
+<appellation intitule="Ingénieur / Ingénieure conseil en prévention des risques industriels" />
+<appellation intitule="Ingénieur / Ingénieure criticité en risques technologiques" />
+<appellation intitule="Ingénieur / Ingénieure de recherche en Hygiène, Sécurité et Environnement en industrie" />
+<appellation intitule="Ingénieur / Ingénieure écologue" />
+<appellation intitule="Ingénieur / Ingénieure en gestion des risques industriels" />
+<appellation intitule="Ingénieur / Ingénieure en prévention des risques industriels" />
+<appellation intitule="Ingénieur / Ingénieure en radioprotection" />
+<appellation intitule="Ingénieur / Ingénieure en traitement des déchets industriels" />
+<appellation intitule="Ingénieur / Ingénieure environnement en industrie" />
+<appellation intitule="Ingénieur / Ingénieure environnement-hygiène-sécurité en industrie" />
+<appellation intitule="Ingénieur / Ingénieure Hygiène, Sécurité et Environnement en industrie -HSE-" />
+<appellation intitule="Ingénieur / Ingénieure prévention en industrie" />
+<appellation intitule="Ingénieur / Ingénieure prévention-sécurité en industrie" />
+<appellation intitule="Ingénieur / Ingénieure sécurité des procédés industriels" />
+<appellation intitule="Ingénieur / Ingénieure sécurité en industrie" />
+<appellation intitule="Ingénieur / Ingénieure sécurité environnement en industrie" />
+<appellation intitule="Ingénieur / Ingénieure sûreté en industrie nucléaire" />
+<appellation intitule="Inspecteur / Inspectrice de sites industriels" />
+<appellation intitule="Officier / Officière sécurité en risques technologiques" />
+<appellation intitule="Responsable du service hygiène-sécurité" />
+<appellation intitule="Responsable du service sécurité en industrie" />
+<appellation intitule="Responsable du service sûreté en industrie nucléaire" />
+<appellation intitule="Responsable environnement en industrie" />
+<appellation intitule="Responsable environnement-hygiène-sécurité en industrie" />
+<appellation intitule="Responsable sécurité de fonctionnement en industrie" />
+<appellation intitule="Traitant / Traitante hygiène, sécurité, conditions de travail" />
+<appellation intitule="Traitant / Traitante protection environnement" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1303" intitule="Intervention technique en Hygiène Sécurité Environnement  -HSE- industriel">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice en déchets en industrie" />
+<appellation intitule="Animateur / Animatrice en Hygiène Sécurité Environnement -HSE-" />
+<appellation intitule="Animateur / Animatrice en sécurité du travail" />
+<appellation intitule="Contrôleur / Contrôleuse de sécurité en risques industriels" />
+<appellation intitule="Technicien / Technicienne en analyse de pollution" />
+<appellation intitule="Technicien / Technicienne en environnement industriel" />
+<appellation intitule="Technicien / Technicienne en environnement, sécurité et conditions de travail" />
+<appellation intitule="Technicien / Technicienne en génie sanitaire en industrie" />
+<appellation intitule="Technicien / Technicienne en hygiène et environnement" />
+<appellation intitule="Technicien / Technicienne en Hygiène, Sécurité, Environnement industriel -HSE-" />
+<appellation intitule="Technicien / Technicienne en prévention des risques industriels" />
+<appellation intitule="Technicien / Technicienne en radioprotection" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H14" intitule="Méthodes et gestion industrielles">
+<fiche
+ code="H1401" intitule="Management et ingénierie gestion industrielle et logistique">
+<liste_appellations>
+<appellation intitule="Chef du bureau central d'ordonnancement en industrie" />
+<appellation intitule="Chef du service de la gestion de la production" />
+<appellation intitule="Chef du service flux des matières ordonnancement-lancement en industrie" />
+<appellation intitule="Chef du service ordonnancement en industrie" />
+<appellation intitule="Chef du service ordonnancement planification en industrie" />
+<appellation intitule="Chef du service ordonnancement-lancement en industrie" />
+<appellation intitule="Chef du service ordonnancement-lancement-planification en industrie" />
+<appellation intitule="Chef du service planification en industrie" />
+<appellation intitule="Chef du service préparation du travail en industrie" />
+<appellation intitule="Dispatcher / Dispatcheuse de réseau de transport de fluide" />
+<appellation intitule="Dispatcher / Dispatcheuse de réseau de transport d'électricité" />
+<appellation intitule="Dispatcher / Dispatcheuse de réseau de transport d'énergie" />
+<appellation intitule="Ingénieur / Ingénieure de gestion de la production" />
+<appellation intitule="Ingénieur / Ingénieure logistique de production" />
+<appellation intitule="Ingénieur / Ingénieure ordonnancement en industrie" />
+<appellation intitule="Ingénieur / Ingénieure ordonnancement-planification en industrie" />
+<appellation intitule="Ingénieur / Ingénieure planification en industrie" />
+<appellation intitule="Ingénieur / Ingénieure supply chain en industrie" />
+<appellation intitule="Logisticien / Logisticienne de production" />
+<appellation intitule="Planificateur / Planificatrice de production industrielle" />
+<appellation intitule="Responsable d'organisation des flux" />
+<appellation intitule="Responsable flux des matières-ordonnancement-lancement en industrie" />
+<appellation intitule="Responsable gestion de la production" />
+<appellation intitule="Responsable gestion industrielle et logistique" />
+<appellation intitule="Responsable logistique de production industrielle" />
+<appellation intitule="Responsable ordonnancement en industrie" />
+<appellation intitule="Responsable ordonnancement-lancement en industrie" />
+<appellation intitule="Responsable ordonnancement-lancement-planification en industrie" />
+<appellation intitule="Responsable planification en industrie" />
+<appellation intitule="Responsable planning et gestion de production" />
+<appellation intitule="Responsable supply chain en industrie" />
+<appellation intitule="Supply chain manager en industrie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1402" intitule="Management et ingénierie méthodes et industrialisation">
+<liste_appellations>
+<appellation intitule="Chef des méthodes en industrie" />
+<appellation intitule="Chef du bureau des méthodes en industrie" />
+<appellation intitule="Chef du service méthodes en industrie" />
+<appellation intitule="Conseiller / Conseillère méthodes en industrie" />
+<appellation intitule="Consultant / Consultante en méthodes et planification en industrie" />
+<appellation intitule="Coordonnateur / Coordonnatrice de projet méthodes en industrie" />
+<appellation intitule="Coordonnateur / Coordonnatrice méthodes-ordonnancement en industrie" />
+<appellation intitule="Deviseur / Deviseuse en méthodes-industrialisation" />
+<appellation intitule="Directeur / Directrice des méthodes en industrie" />
+<appellation intitule="Directeur / Directrice industrialisation" />
+<appellation intitule="Directeur / Directrice méthodes-industrialisation" />
+<appellation intitule="Ingénieur / Ingénieure d'essais méthodes en industrie" />
+<appellation intitule="Ingénieur / Ingénieure d'études de devis en méthodes-industrialisation" />
+<appellation intitule="Ingénieur / Ingénieure gestion méthodes en industrie" />
+<appellation intitule="Ingénieur / Ingénieure industrialisation" />
+<appellation intitule="Ingénieur / Ingénieure méthodes en industrie" />
+<appellation intitule="Ingénieur / Ingénieure méthodes et organisation en industrie" />
+<appellation intitule="Ingénieur / Ingénieure méthodes et process" />
+<appellation intitule="Ingénieur / Ingénieure méthodes-industrialisation" />
+<appellation intitule="Ingénieur / Ingénieure procédés méthodes en industrie" />
+<appellation intitule="Ingénieur / Ingénieure process méthodes-industrialisation" />
+<appellation intitule="Ingénieur / Ingénieure processus méthodes-industrialisation" />
+<appellation intitule="Responsable application industrielle" />
+<appellation intitule="Responsable développement process" />
+<appellation intitule="Responsable du développement industriel" />
+<appellation intitule="Responsable essais et mise au point méthodes en industrie" />
+<appellation intitule="Responsable industrialisation" />
+<appellation intitule="Responsable méthodes" />
+<appellation intitule="Responsable méthodes d'exploitation" />
+<appellation intitule="Responsable méthodes et process" />
+<appellation intitule="Responsable méthodes industrielles" />
+<appellation intitule="Responsable méthodes outillages en industrie" />
+<appellation intitule="Responsable méthodes-industrialisation" />
+<appellation intitule="Responsable procédés en méthodes-industrialisation" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1403" intitule="Intervention technique en gestion industrielle et logistique">
+<liste_appellations>
+<appellation intitule="Agent / Agente de lancement en industrie" />
+<appellation intitule="Agent / Agente de lancement-planification en industrie" />
+<appellation intitule="Agent / Agente de planification en industrie" />
+<appellation intitule="Agent / Agente de préparation en industrie" />
+<appellation intitule="Agent / Agente d'ordonnancement en industrie" />
+<appellation intitule="Agent / Agente d'ordonnancement et de planification en industrie" />
+<appellation intitule="Agent / Agente d'ordonnancement-lancement en industrie" />
+<appellation intitule="Agent / Agente d'ordonnancement-lancement-planification en industrie" />
+<appellation intitule="Gestionnaire de flux de production" />
+<appellation intitule="Gestionnaire d'ordonnancement" />
+<appellation intitule="Ordonnanceur-approvisionneur / Ordonnanceuse-approvisionneuse" />
+<appellation intitule="Préparateur / Préparatrice de fabrication industrielle" />
+<appellation intitule="Préparateur-planificateur / Préparatrice-planificatrice de production industrielle" />
+<appellation intitule="Technicien / Technicienne de planification-lancement-ordonnancement de production industrielle" />
+<appellation intitule="Technicien / Technicienne d'ordonnancement de production industrielle" />
+<appellation intitule="Technicien / Technicienne en gestion de production industrielle" />
+<appellation intitule="Technicien / Technicienne en gestion et production laboratoire" />
+<appellation intitule="Technicien / Technicienne en logistique de production industrielle" />
+<appellation intitule="Technicien / Technicienne en logistique industrielle" />
+<appellation intitule="Technicien / Technicienne en organisation du travail de production industrielle" />
+<appellation intitule="Technicien / Technicienne ordonnancement-lancement de production industrielle" />
+<appellation intitule="Technicien / Technicienne planification de production industrielle" />
+<appellation intitule="Technicien / Technicienne planning et gestion de production industrielle" />
+<appellation intitule="Technicien organisateur / Technicienne organisatrice de la gestion de production" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1404" intitule="Intervention technique en méthodes et industrialisation">
+<liste_appellations>
+<appellation intitule="Agent / Agente de préparation de la production" />
+<appellation intitule="Agent / Agente des méthodes en industrie" />
+<appellation intitule="Agent / Agente technique bureau des méthodes en industrie" />
+<appellation intitule="Chronométreur analyseur / Chronométreuse analyseuse en production industrielle" />
+<appellation intitule="Coordinateur / Coordinatrice de soudage" />
+<appellation intitule="Formulateur / Formulatrice en méthodes-industrialisation" />
+<appellation intitule="Méthodiste d'exploitation" />
+<appellation intitule="Méthodiste industrialisation" />
+<appellation intitule="Préparateur / Préparatrice assemblage en industrie" />
+<appellation intitule="Préparateur / Préparatrice de méthodes en industrie" />
+<appellation intitule="Préparateur / Préparatrice de piste en industrie" />
+<appellation intitule="Préparateur / Préparatrice de travaux en industrie" />
+<appellation intitule="Préparateur / Préparatrice méthodes de travaux en maintenance industrielle" />
+<appellation intitule="Préparateur / Préparatrice méthodes en construction navale" />
+<appellation intitule="Préparateur / Préparatrice méthodes-industrialisation en mécanique industrielle" />
+<appellation intitule="Préparateur programmeur / Préparatrice programmeuse en méthodes industrielles" />
+<appellation intitule="Programmeur / Programmeuse en Conception de Fabrication Assistée par Ordinateur -CFAO-" />
+<appellation intitule="Technicien / Technicienne bureau technique en industrie" />
+<appellation intitule="Technicien / Technicienne d'atelier de fabrication et de méthodes" />
+<appellation intitule="Technicien / Technicienne d'atelier et de méthodes en industrie" />
+<appellation intitule="Technicien / Technicienne de développement industrie méthode" />
+<appellation intitule="Technicien / Technicienne de fabrication et de méthodes" />
+<appellation intitule="Technicien / Technicienne de formulation en méthodes-industrialisation" />
+<appellation intitule="Technicien / Technicienne de méthodes fabrication" />
+<appellation intitule="Technicien / Technicienne des temps en méthodes-industrialisation" />
+<appellation intitule="Technicien / Technicienne en application industrielle" />
+<appellation intitule="Technicien / Technicienne industrialisation" />
+<appellation intitule="Technicien / Technicienne méthodes" />
+<appellation intitule="Technicien / Technicienne méthodes atelier industriel" />
+<appellation intitule="Technicien / Technicienne méthodes de fabrication" />
+<appellation intitule="Technicien / Technicienne méthodes devis en industrie" />
+<appellation intitule="Technicien / Technicienne méthodes d'usinage" />
+<appellation intitule="Technicien / Technicienne méthodes gammiste en industrie" />
+<appellation intitule="Technicien / Technicienne méthodes outillage industriel" />
+<appellation intitule="Technicien / Technicienne méthodes process" />
+<appellation intitule="Technicien / Technicienne méthodes-industrialisation" />
+<appellation intitule="Technicien / Technicienne productique méthodes" />
+<appellation intitule="Technicien chronométreur / Technicienne chronométreuse en méthodes-industrialisation" />
+<appellation intitule="Technologue en soudage" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H15" intitule="Qualité et analyses industrielles">
+<fiche
+ code="H1501" intitule="Direction de laboratoire d'analyse industrielle">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe au responsable de laboratoire d'analyse industrielle" />
+<appellation intitule="Adjoint / Adjointe au responsable de laboratoire de contrôle en industrie" />
+<appellation intitule="Adjoint / Adjointe chef de laboratoire d'analyse industrielle" />
+<appellation intitule="Adjoint / Adjointe de laboratoire d'analyse industrielle" />
+<appellation intitule="Agent / Agente de maîtrise de laboratoire d'analyse industrielle" />
+<appellation intitule="Chef de groupe laboratoire d'analyse industrielle" />
+<appellation intitule="Chef de laboratoire d'analyse industrielle" />
+<appellation intitule="Chef de quart laboratoire d'analyse industrielle" />
+<appellation intitule="Chef de service contrôle laboratoire en industrie" />
+<appellation intitule="Chef de service laboratoire d'analyse industrielle" />
+<appellation intitule="Directeur / Directrice de laboratoire d'analyse industrielle" />
+<appellation intitule="Directeur / Directrice de laboratoire vétérinaire" />
+<appellation intitule="Ingénieur / Ingénieure contrôle du bruit" />
+<appellation intitule="Ingénieur / Ingénieure d'analyse industrielle" />
+<appellation intitule="Ingénieur / Ingénieure en analyses de l'eau et de l'air" />
+<appellation intitule="Ingénieur / Ingénieure en génie sanitaire des eaux" />
+<appellation intitule="Ingénieur / Ingénieure pollution atmosphérique" />
+<appellation intitule="Ingénieur / Ingénieure qualité de l'air" />
+<appellation intitule="Ingénieur / Ingénieure qualité de l'eau" />
+<appellation intitule="Ingénieur / Ingénieure sanitaire des eaux" />
+<appellation intitule="Ingénieur-analyste / Ingénieure-analyste de l'air" />
+<appellation intitule="Responsable de laboratoire d'analyse des eaux" />
+<appellation intitule="Responsable de laboratoire d'analyse industrielle" />
+<appellation intitule="Responsable de laboratoire de contrôle en industrie pharmaceutique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1502" intitule="Management et ingénierie qualité industrielle">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice qualité industrie" />
+<appellation intitule="Assureur / Assureuse qualité industrie" />
+<appellation intitule="Auditeur / Auditrice qualité en industrie" />
+<appellation intitule="Chef du service audit-qualité en industrie" />
+<appellation intitule="Chef du service contrôle qualité en industrie" />
+<appellation intitule="Chef du service méthodes de contrôle qualité en industrie" />
+<appellation intitule="Directeur / Directrice contrôle qualité en industrie" />
+<appellation intitule="Directeur / Directrice qualité en industrie" />
+<appellation intitule="Expert / Experte métrologue" />
+<appellation intitule="Ingénieur / Ingénieure assurance qualité en industrie" />
+<appellation intitule="Ingénieur / Ingénieure assurance qualité fournisseurs en industrie" />
+<appellation intitule="Ingénieur / Ingénieure contrôle qualité en industrie" />
+<appellation intitule="Ingénieur / Ingénieure contrôle qualité fabrication" />
+<appellation intitule="Ingénieur / Ingénieure fiabilité qualité en industrie" />
+<appellation intitule="Ingénieur / Ingénieure méthodes qualité industrie" />
+<appellation intitule="Ingénieur / Ingénieure qualité en industrie" />
+<appellation intitule="Ingénieur qualiticien / Ingénieure qualiticienne management de la qualité en industrie" />
+<appellation intitule="Pharmacien / Pharmacienne assurance qualité industrielle" />
+<appellation intitule="Pharmacien / Pharmacienne contrôle qualité industrielle" />
+<appellation intitule="Pilote qualité en système qualité en industrie" />
+<appellation intitule="Qualiticien / Qualiticienne management de la qualité en industrie" />
+<appellation intitule="Responsable assurance qualité achats en industrie" />
+<appellation intitule="Responsable assurance qualité clients industrie" />
+<appellation intitule="Responsable assurance qualité fournisseur en industrie" />
+<appellation intitule="Responsable assurance qualité groupe en industrie" />
+<appellation intitule="Responsable contrôle métrologie en industrie" />
+<appellation intitule="Responsable contrôle qualité en industrie" />
+<appellation intitule="Responsable d'analyse et de contrôle qualité en industrie" />
+<appellation intitule="Responsable de contrôle de production en électronique" />
+<appellation intitule="Responsable de contrôle non destructif en industrie" />
+<appellation intitule="Responsable de validation qualité en industrie" />
+<appellation intitule="Responsable du service qualité en industrie" />
+<appellation intitule="Responsable en qualité industrielle" />
+<appellation intitule="Responsable management de la qualité industrie" />
+<appellation intitule="Responsable qualification qualité en industrie" />
+<appellation intitule="Responsable qualité conformité réglementaire" />
+<appellation intitule="Responsable qualité en industrie" />
+<appellation intitule="Responsable Qualité Sécurité Environnement -QSE- en industrie" />
+<appellation intitule="Responsable service qualité industrielle" />
+<appellation intitule="Responsable système qualité industrie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1503" intitule="Intervention technique en laboration d'analyse industrielle">
+<liste_appellations>
+<appellation intitule="Agent / Agente de laboratoire d'analyse industrielle" />
+<appellation intitule="Aide de laboratoire d'analyse industrielle" />
+<appellation intitule="Aide-biochimiste d'analyse industrielle" />
+<appellation intitule="Aide-biologiste d'analyse industrielle" />
+<appellation intitule="Aide-chimiste d'analyse industrielle" />
+<appellation intitule="Aide-physicien / Aide-physicienne d'analyse industrielle" />
+<appellation intitule="Analyste biologie/microbiologie en industrie" />
+<appellation intitule="Analyste de laboratoire en industrie pharmaceutique" />
+<appellation intitule="Analyste physicochimiste en industrie" />
+<appellation intitule="Analyste radioactivité en industrie" />
+<appellation intitule="Biochimiste en laboratoire d'analyse industrielle" />
+<appellation intitule="Biochimiste en laboratoire de contrôle en industrie" />
+<appellation intitule="Biologiste de contrôle fabrication en industrie" />
+<appellation intitule="Chargé / Chargée d'analyses physico-chimiques de laboratoire" />
+<appellation intitule="Chimiste en laboratoire d'analyse industrielle" />
+<appellation intitule="Chimiste en laboratoire de contrôle en industrie" />
+<appellation intitule="Laborantin / Laborantine chimie environnement en industrie" />
+<appellation intitule="Opérateur / Opératrice d'analyse de laboratoire" />
+<appellation intitule="Opérateur / Opératrice de laboratoire d'analyse industrielle" />
+<appellation intitule="Préleveur / Préleveuse d'eau" />
+<appellation intitule="Préleveur / Préleveuse en laboratoire d'analyse industrielle" />
+<appellation intitule="Préparateur / Préparatrice de laboratoire d'analyse industrielle" />
+<appellation intitule="Surveillant / Surveillante de la pollution de l'air" />
+<appellation intitule="Technicien / Technicienne analyse-contrôle en industrie chimique" />
+<appellation intitule="Technicien / Technicienne bactériologiste en laboratoire de contrôle en industrie" />
+<appellation intitule="Technicien / Technicienne biochimiste d'analyse industrielle" />
+<appellation intitule="Technicien / Technicienne biochimiste en laboratoire de contrôle en industrie" />
+<appellation intitule="Technicien / Technicienne biologiste en laboratoire d'analyse industrielle" />
+<appellation intitule="Technicien / Technicienne biologiste en laboratoire de contrôle en industrie" />
+<appellation intitule="Technicien / Technicienne chimie environnement en industrie" />
+<appellation intitule="Technicien / Technicienne chimiste en laboratoire d'analyse industrielle" />
+<appellation intitule="Technicien / Technicienne chimiste en laboratoire de contrôle en industrie" />
+<appellation intitule="Technicien / Technicienne d'analyse industrielle" />
+<appellation intitule="Technicien / Technicienne d'analyses chimiques en industries" />
+<appellation intitule="Technicien / Technicienne de contrôle en biotechnologie en industrie" />
+<appellation intitule="Technicien / Technicienne de contrôle en micro-biologie en industrie" />
+<appellation intitule="Technicien / Technicienne de contrôle pyrotechnique" />
+<appellation intitule="Technicien / Technicienne de la qualité de l'eau" />
+<appellation intitule="Technicien / Technicienne de laboratoire d'analyse des eaux" />
+<appellation intitule="Technicien / Technicienne de laboratoire d'analyse industrielle" />
+<appellation intitule="Technicien / Technicienne de laboratoire de contrôle en énergie/pétrochimie" />
+<appellation intitule="Technicien / Technicienne de laboratoire de contrôle en industrie alimentaire" />
+<appellation intitule="Technicien / Technicienne de laboratoire de contrôle en industrie chimique" />
+<appellation intitule="Technicien / Technicienne de laboratoire de contrôle en industrie papetière" />
+<appellation intitule="Technicien / Technicienne de laboratoire de contrôle en industrie pharmaceutique" />
+<appellation intitule="Technicien / Technicienne de laboratoire de contrôle en métallurgie/sidérurgie" />
+<appellation intitule="Technicien / Technicienne de mesure de la qualité de l'eau" />
+<appellation intitule="Technicien / Technicienne en biotechnologie en laboratoire d'analyse industrielle" />
+<appellation intitule="Technicien / Technicienne en micro-biologie en laboratoire d'analyse industrielle" />
+<appellation intitule="Technicien / Technicienne laboratoire en matériaux de construction" />
+<appellation intitule="Technicien / Technicienne qualité en industrie alimentaire" />
+<appellation intitule="Technicien / Technicienne sanitaire des eaux" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1504" intitule="Intervention technique en contrôle essai qualité en électricité et électronique">
+<liste_appellations>
+<appellation intitule="Agent / Agente de contrôle en électronique" />
+<appellation intitule="Agent / Agente de plates-formes en électromécanique" />
+<appellation intitule="Agent / Agente technique de contrôle de fabrication électronique" />
+<appellation intitule="Agent / Agente technique de contrôle en électronique" />
+<appellation intitule="Agent / Agente technique de contrôle-qualité en électricité" />
+<appellation intitule="Agent / Agente technique de contrôle-qualité en électronique" />
+<appellation intitule="Agent / Agente technique entrée usine de production de matériel électrique" />
+<appellation intitule="Agent / Agente technique entrée usine de production de matériel électronique" />
+<appellation intitule="Chef de section contrôle-essais en électricité" />
+<appellation intitule="Chef de section contrôle-essais en électronique" />
+<appellation intitule="Conducteur / Conductrice d'essais de plates-formes en électricité" />
+<appellation intitule="Contrôleur / Contrôleuse de matériel en électricité" />
+<appellation intitule="Contrôleur / Contrôleuse de matériel en électronique" />
+<appellation intitule="Contrôleur / Contrôleuse en électronique" />
+<appellation intitule="Contrôleur / Contrôleuse qualité en électricité" />
+<appellation intitule="Contrôleur / Contrôleuse qualité en électronique" />
+<appellation intitule="Contrôleur / Contrôleuse technique en électricité" />
+<appellation intitule="Contrôleur / Contrôleuse technique en électronique" />
+<appellation intitule="Contrôleur électricien / Contrôleuse électricienne" />
+<appellation intitule="Contrôleur électronicien / Contrôleuse électronicienne" />
+<appellation intitule="Monteur électricien / Monteuse électricienne de plate-formes d'essais" />
+<appellation intitule="Opérateur / Opératrice de test en électronique" />
+<appellation intitule="Opérateur / Opératrice de tests en électricité" />
+<appellation intitule="Opérateur / Opératrice de tests en microélectronique" />
+<appellation intitule="Plate-formiste en électricité" />
+<appellation intitule="Plate-formiste en électronique" />
+<appellation intitule="Technicien / Technicienne assurance-qualité en électricité" />
+<appellation intitule="Technicien / Technicienne assurance-qualité en électronique" />
+<appellation intitule="Technicien / Technicienne de contrôle en électronique" />
+<appellation intitule="Technicien / Technicienne de contrôle en électrotechnique" />
+<appellation intitule="Technicien / Technicienne de contrôle en matériel électrique" />
+<appellation intitule="Technicien / Technicienne de contrôle en matériel électronique" />
+<appellation intitule="Technicien / Technicienne de contrôle et de tests électroniques" />
+<appellation intitule="Technicien / Technicienne de contrôle et de tests en électricité" />
+<appellation intitule="Technicien / Technicienne de contrôle fabrication électronique" />
+<appellation intitule="Technicien / Technicienne de contrôle-qualité en électricité" />
+<appellation intitule="Technicien / Technicienne de contrôle-qualité en électronique" />
+<appellation intitule="Technicien / Technicienne de diagnostic en électricité" />
+<appellation intitule="Technicien / Technicienne de diagnostic en électronique" />
+<appellation intitule="Technicien / Technicienne de laboratoire en électricité" />
+<appellation intitule="Technicien / Technicienne de laboratoire en électronique" />
+<appellation intitule="Technicien / Technicienne de maintenance et contrôle-tests de cartes électroniques" />
+<appellation intitule="Technicien / Technicienne de mise au point en électricité" />
+<appellation intitule="Technicien / Technicienne de mise au point en électronique" />
+<appellation intitule="Technicien / Technicienne de plates-formes en électromécanique" />
+<appellation intitule="Technicien / Technicienne de plates-formes en électrotechnique" />
+<appellation intitule="Technicien / Technicienne d'essais en électricité" />
+<appellation intitule="Technicien / Technicienne d'essais en électronique" />
+<appellation intitule="Technicien / Technicienne en contrôle de plates-formes en électricité" />
+<appellation intitule="Technicien / Technicienne en contrôle de plates-formes en électronique" />
+<appellation intitule="Technicien électrotechnicien / Technicienne électrotechnicienne d'essai" />
+<appellation intitule="Testeur / Testeuse en électricité" />
+<appellation intitule="Testeur / Testeuse en électronique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1504" intitule="Intervention technique en contrôle essai qualité en électricité et électronique">
+<liste_appellations>
+<appellation intitule="Analyste sensoriel / sensorielle" />
+<appellation intitule="Aromaticien / Aromaticienne" />
+<appellation intitule="Créateur / Créatrice de parfum" />
+<appellation intitule="Dégustateur / Dégustatrice" />
+<appellation intitule="Dégustateur / Dégustatrice en industrie alimentaire" />
+<appellation intitule="Evaluateur testeur sensoriel / Evaluatrice testeuse sensorielle" />
+<appellation intitule="Expert / Experte en olfactométrie" />
+<appellation intitule="Formulateur / Formulatrice en arômes" />
+<appellation intitule="Formulateur / Formulatrice en parfumerie" />
+<appellation intitule="Nez" />
+<appellation intitule="Parfumeur / Parfumeuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H1506" intitule="Intervention technique qualité en mécanique et travail des métaux">
+<liste_appellations>
+<appellation intitule="Agent / Agente de contrôle destructif en mécanique et travail des métaux" />
+<appellation intitule="Agent / Agente de contrôle non destructif en mécanique et travail des métaux" />
+<appellation intitule="Agent / Agente de contrôle qualité en mécanique" />
+<appellation intitule="Agent / Agente de laboratoire en métallurgie" />
+<appellation intitule="Agent / Agente technique de laboratoire de métrologie en mécanique et travail des métaux" />
+<appellation intitule="Assistant / Assistante qualité fabrication en mécanique et travail des métaux" />
+<appellation intitule="Chef d'équipe contrôle qualité en mécanique et travail des métaux" />
+<appellation intitule="Contrôleur / Contrôleuse assemblage aéronautique" />
+<appellation intitule="Contrôleur / Contrôleuse Contrôle Non Destructif -CND- en mécanique et travail des métaux" />
+<appellation intitule="Contrôleur / Contrôleuse de fabrication mécanique" />
+<appellation intitule="Contrôleur / Contrôleuse de produit fini en mécanique et travail des métaux" />
+<appellation intitule="Contrôleur / Contrôleuse de structure des matériaux en mécanique et travail des métaux" />
+<appellation intitule="Contrôleur / Contrôleuse en métrologie dimensionnelle en mécanique et travail des métaux" />
+<appellation intitule="Contrôleur / Contrôleuse en métrologie en mécanique et travail des métaux" />
+<appellation intitule="Contrôleur / Contrôleuse qualité en mécanique et travail des métaux" />
+<appellation intitule="Contrôleur / Contrôleuse technique du travail des métaux" />
+<appellation intitule="Contrôleur final / Contrôleuse finale en mécanique et travail des métaux" />
+<appellation intitule="Contrôleur non destructif / Contrôleuse non destructive en mécanique et travail des métaux" />
+<appellation intitule="Contrôleur volant / Contrôleuse volante en mécanique et travail des métaux" />
+<appellation intitule="Contrôleur-essayeur / Contrôleuse-essayeuse sur voiture" />
+<appellation intitule="Contrôleur-vérificateur / Contrôleuse-vérificatrice en mécanique" />
+<appellation intitule="Contrôleur-vérificateur / Contrôleuse-vérificatrice mécanique" />
+<appellation intitule="Inspecteur / Inspectrice de fabrication en mécanique et travail des métaux" />
+<appellation intitule="Inspecteur / Inspectrice qualité en mécanique et travail des métaux" />
+<appellation intitule="Inspecteur dimensionnel / Inspectrice dimensionnelle en mécanique et travail des métaux" />
+<appellation intitule="Opérateur / Opératrice de magnétoscopie en mécanique et travail des métaux" />
+<appellation intitule="Opérateur / Opératrice spectomètre en métallurgie" />
+<appellation intitule="Technicien / Technicienne assurance-qualité en mécanique et travail des métaux" />
+<appellation intitule="Technicien / Technicienne contrôle et mesure en mécanique" />
+<appellation intitule="Technicien / Technicienne contrôle visuel dimensionnel en mécanique et travail des métaux" />
+<appellation intitule="Technicien / Technicienne de contrôle métallurgique" />
+<appellation intitule="Technicien / Technicienne en analyse physique et qualité des matériaux" />
+<appellation intitule="Technicien / Technicienne en contrôle et qualité en mécanique et travail des métaux" />
+<appellation intitule="Technicien / Technicienne en Contrôle Non Destructif -CND- en mécanique et travail des métaux" />
+<appellation intitule="Technicien / Technicienne en métrologie en mécanique et travail des métaux" />
+<appellation intitule="Technicien / Technicienne laboratoire en métallurgie" />
+<appellation intitule="Technicien / Technicienne métrologue en mécanique et travail des métaux" />
+<appellation intitule="Technicien / Technicienne qualité en mécanique et travail des métaux" />
+<appellation intitule="Technicien / Technicienne qualité produit et métrologie en mécanique et travail des métaux" />
+<appellation intitule="Technicien radiologue industriel / Technicienne radiologue industrielle en mécanique et travail des métaux" />
+</liste_appellations>
+</fiche>
+</domaine></domaine-intermediaire><domaine-intermediaire code="H2" intitule="Production industrielle">
+<domaine code="H21" intitule="Alimentaire">
+<fiche
+ code="H2101" intitule="Abattage et découpe des viandes.">
+<liste_appellations>
+<appellation intitule="Accrocheur / Accrocheuse en abattoir" />
+<appellation intitule="Boucher industriel / Bouchère industrielle" />
+<appellation intitule="Bouvier / Bouvière en abattoir" />
+<appellation intitule="Boyaudier / Boyaudière" />
+<appellation intitule="Chargé / Chargée de pesée en abattoir" />
+<appellation intitule="Coupeur / Coupeuse de quartiers" />
+<appellation intitule="Déboyaudeur / Déboyaudeuse" />
+<appellation intitule="Dégraisseur / Dégraisseuse" />
+<appellation intitule="Dépouilleur / Dépouilleuse" />
+<appellation intitule="Désosseur / Désosseuse" />
+<appellation intitule="Désosseur-pareur / Désosseuse-pareuse" />
+<appellation intitule="Eviscérateur / Eviscératrice" />
+<appellation intitule="Opérateur / Opératrice d'abattage" />
+<appellation intitule="Ouvrier / Ouvrière d'abattoir" />
+<appellation intitule="Ouvrier / Ouvrière de découpe de viandes" />
+<appellation intitule="Ouvrier plumeur / Ouvrière plumeuse" />
+<appellation intitule="Ouvrier salaisonnier / Ouvrière salaisonnière" />
+<appellation intitule="Pareur / Pareuse en abattoir" />
+<appellation intitule="Préparateur / Préparatrice de viandes en industrie" />
+<appellation intitule="Préparateur / Préparatrice de volailles" />
+<appellation intitule="Sacrificateur / Sacrificatrice" />
+<appellation intitule="Saigneur / Saigneuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2102" intitule="Conduite d'équipement de production alimentaire">
+<liste_appellations>
+<appellation intitule="Agent / Agente de production/fabrication en industrie alimentaire" />
+<appellation intitule="Brasseur / Brasseuse en salle de commande" />
+<appellation intitule="Chef de ligne de production en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice d'appareils en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice de four en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice de ligne de production/fabrication en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice de ligne en boulangerie industrielle" />
+<appellation intitule="Conducteur / Conductrice de ligne en industrie laitière" />
+<appellation intitule="Conducteur / Conductrice de ligne en pâtisserie industrielle" />
+<appellation intitule="Conducteur / Conductrice de machines de fabrication en industrie de transformation de la viande" />
+<appellation intitule="Conducteur / Conductrice de machines en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice de machines en industrie fromagère" />
+<appellation intitule="Conducteur / Conductrice de machines en industrie laitière" />
+<appellation intitule="Conducteur / Conductrice de moulins" />
+<appellation intitule="Conducteur / Conductrice de pétrin en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice de presses en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice d'enrobeuses en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice d'installation automatisée en industrie alimentaire" />
+<appellation intitule="Conducteur mouleur / Conductrice mouleuse en chocolaterie" />
+<appellation intitule="Crémier industriel / Crémière industrielle" />
+<appellation intitule="Cuiseur / Cuiseuse en confiserie en industrie alimentaire" />
+<appellation intitule="Cuiseur / Cuiseuse en industrie alimentaire" />
+<appellation intitule="Dragéiste en confiserie" />
+<appellation intitule="Opérateur / Opératrice de conduite et de surveillance d'installation automatisée de fabrication alimentaire" />
+<appellation intitule="Opérateur / Opératrice de fabrication en alimentation animale" />
+<appellation intitule="Opérateur / Opératrice de fabrication en transformation de la viande" />
+<appellation intitule="Opérateur / Opératrice de mélange sur pupitre en industrie alimentaire" />
+<appellation intitule="Opérateur / Opératrice de production/fabrication en industrie alimentaire" />
+<appellation intitule="Opérateur / Opératrice en distillerie industrielle" />
+<appellation intitule="Opérateur / Opératrice en huilerie alimentaire industrielle" />
+<appellation intitule="Opérateur / Opératrice en salle de commande en industrie alimentaire" />
+<appellation intitule="Ouvrier / Ouvrière de fabrication de jus de fruits en industrie alimentaire" />
+<appellation intitule="Ouvrier / Ouvrière de fabrication des industries alimentaires" />
+<appellation intitule="Ouvrier / Ouvrière de fabrication en condiments/sauces en industrie alimentaire" />
+<appellation intitule="Ouvrier / Ouvrière de macération en industrie alimentaire" />
+<appellation intitule="Ouvrier / Ouvrière de presserie de corps gras en industrie alimentaire" />
+<appellation intitule="Ouvrier / Ouvrière d'extraction en industrie alimentaire" />
+<appellation intitule="Pasteurisateur / Pasteurisatrice en industrie alimentaire" />
+<appellation intitule="Pétrisseur / Pétrisseuse en industrie alimentaire" />
+<appellation intitule="Pilote de systèmes de production automatisée en industrie alimentaire" />
+<appellation intitule="Pilote d'installation automatisée en industrie alimentaire" />
+<appellation intitule="Saucier / Saucière en industrie alimentaire" />
+<appellation intitule="Stérilisateur / Stérilisatrice en industrie alimentaire" />
+<appellation intitule="Technicien / Technicienne de fabrication en industrie alimentaire" />
+<appellation intitule="Torréfacteur / Torréfactrice en industrie alimentaire" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H22" intitule="Bois">
+<fiche
+ code="H2201" intitule="Assemblage d'ouvrages en bois">
+<liste_appellations>
+<appellation intitule="Agent / Agente de montage en ameublement" />
+<appellation intitule="Agent / Agente de montage d'ouvrages en bois" />
+<appellation intitule="Agrafeur / Agrafeuse d'ouvrages en bois" />
+<appellation intitule="Assembleur / Assembleuse de placages" />
+<appellation intitule="Assembleur / Assembleuse de placages décoratifs" />
+<appellation intitule="Assembleur / Assembleuse d'ouvrages en bois et matériaux associés" />
+<appellation intitule="Chef d'équipe de montage d'ouvrages en bois" />
+<appellation intitule="Cloueur / Cloueuse" />
+<appellation intitule="Cloueur / Cloueuse de palettes" />
+<appellation intitule="Compositeur / Compositrice de panneaux de bois" />
+<appellation intitule="Emballeur / Emballeuse bois" />
+<appellation intitule="Emballeur / Emballeuse en caisserie" />
+<appellation intitule="Jointeur / Jointeuse de placage" />
+<appellation intitule="Monteur / Monteuse de charpentes en bois" />
+<appellation intitule="Monteur / Monteuse de fermettes" />
+<appellation intitule="Monteur / Monteuse de jouet en bois" />
+<appellation intitule="Monteur / Monteuse de meubles" />
+<appellation intitule="Monteur / Monteuse de palettes" />
+<appellation intitule="Monteur / Monteuse en siège" />
+<appellation intitule="Monteur-cadreur / Monteuse-cadreuse d'ouvrages en bois" />
+<appellation intitule="Opérateur / Opératrice de montage d'ouvrages en bois" />
+<appellation intitule="Placagiste" />
+<appellation intitule="Réparateur / Réparatrice de palettes" />
+<appellation intitule="Réparateur / Réparatrice de panneaux de bois" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2202" intitule="Conduite d'équipement de fabrication de l'ameublement et du bois">
+<liste_appellations>
+<appellation intitule="Agent / Agente de production industrielle de mobilier en menuiserie" />
+<appellation intitule="Agent / Agente d'usinage du bois" />
+<appellation intitule="Agent / Agente d'usinage sur machines à bois traditionnelles" />
+<appellation intitule="Aide-machiniste sur équipements de production en industrie du bois" />
+<appellation intitule="Chantourneur / Chantourneuse" />
+<appellation intitule="Chef d'équipe de conducteurs de machines à bois" />
+<appellation intitule="Chef d'équipe de fabrication en industrie du bois" />
+<appellation intitule="Chef d'équipe en atelier de façonnage bois" />
+<appellation intitule="Conducteur / Conductrice d'abouteuses en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de calibreuses en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de chaînes de clouage" />
+<appellation intitule="Conducteur / Conductrice de défonceuses en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de façonneuses en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de machines à bois" />
+<appellation intitule="Conducteur / Conductrice de machines à poser les quincailleries" />
+<appellation intitule="Conducteur / Conductrice de machines à sculpter en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de machines automatiques en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de machines d'usinage en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de massicot en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de mortaiseuses en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de moulurières" />
+<appellation intitule="Conducteur / Conductrice de perceuses en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de plaqueuses de chant" />
+<appellation intitule="Conducteur / Conductrice de ponceuses en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de presses à bois" />
+<appellation intitule="Conducteur / Conductrice de quatre faces" />
+<appellation intitule="Conducteur / Conductrice de séchoirs en seconde industrie du bois" />
+<appellation intitule="Conducteur / Conductrice de tenonneuses" />
+<appellation intitule="Conducteur / Conductrice de tours à reproduire en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice d'encolleuses en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice d'équipements de montage en industrie du bois" />
+<appellation intitule="Corroyeur / Corroyeuse en industrie du bois" />
+<appellation intitule="Débiteur / Débitrice en menuiserie industrielle" />
+<appellation intitule="Dégauchisseur / Dégauchisseuse sur machines à bois" />
+<appellation intitule="Machiniste de fabrication en industrie du bois" />
+<appellation intitule="Machiniste en menuiserie" />
+<appellation intitule="Menuisier industriel / Menuisière industrielle" />
+<appellation intitule="Opérateur / Opératrice de débit en industrie du bois" />
+<appellation intitule="Opérateur / Opératrice sur chaînes de finition en industrie du bois" />
+<appellation intitule="Opérateur / Opératrice sur chaînes de montage en industrie du bois" />
+<appellation intitule="Opérateur / Opératrice sur encolleuses en industrie du bois" />
+<appellation intitule="Opérateur / Opératrice sur machines à bois" />
+<appellation intitule="Opérateur / Opératrice sur machines de finition en industrie du bois" />
+<appellation intitule="Opérateur / Opératrice sur machines d'usinage de taille de charpentes industrielles" />
+<appellation intitule="Opérateur / Opératrice sur plaqueuses de chants" />
+<appellation intitule="Opérateur / Opératrice sur presses à bois" />
+<appellation intitule="Ponceur / Ponceuse en menuiserie industrielle" />
+<appellation intitule="Régleur / Régleuse de machines à bois" />
+<appellation intitule="Régleur-conducteur / Régleuse-conductrice de centres d'usinage en industrie du bois" />
+<appellation intitule="Régleur-conducteur / Régleuse-conductrice de machines à bois" />
+<appellation intitule="Toupilleur / Toupilleuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2203" intitule="Conduite d'installation de production de panneaux bois">
+<liste_appellations>
+<appellation intitule="Aide conducteur / conductrice de machines à commande numérique de fabrication de panneaux à base de bois" />
+<appellation intitule="Chef d'équipe d'atelier de presse de panneaux de bois" />
+<appellation intitule="Chef d'équipe en fabrication de panneaux de bois" />
+<appellation intitule="Conducteur / Conductrice de chaînes de conformation de panneaux de bois" />
+<appellation intitule="Conducteur / Conductrice de chaînes de conformation de panneaux de particules agglomérées et de fibres" />
+<appellation intitule="Conducteur / Conductrice de machines à commande numérique de fabrication de panneaux à base de bois" />
+<appellation intitule="Conducteur / Conductrice de machines de fabrication de panneaux de bois" />
+<appellation intitule="Conducteur / Conductrice de machines de placage" />
+<appellation intitule="Conducteur / Conductrice de ponceuses de panneaux de bois" />
+<appellation intitule="Conducteur / Conductrice de presses à contreplaqué" />
+<appellation intitule="Conducteur / Conductrice de presses en production de panneaux à base de bois" />
+<appellation intitule="Conducteur / Conductrice de râperies en production de panneaux à base de bois" />
+<appellation intitule="Conducteur / Conductrice de séchoirs de panneaux de fibres de bois" />
+<appellation intitule="Conducteur / Conductrice de séchoirs de panneaux de particules de bois" />
+<appellation intitule="Conducteur / Conductrice de tambour-écorseur" />
+<appellation intitule="Conducteur / Conductrice d'encolleuses de panneaux à base de bois" />
+<appellation intitule="Conducteur / Conductrice d'équarrisseuses en industrie du bois" />
+<appellation intitule="Conducteur / Conductrice d'installation de traitement mécanique du bois" />
+<appellation intitule="Conducteur / Conductrice d'installations de fabrication de panneaux de bois" />
+<appellation intitule="Conducteur dérouleur / Conductrice dérouleuses sur bois" />
+<appellation intitule="Débiteur / Débitrice de panneaux de bois" />
+<appellation intitule="Dérouleur / Dérouleuse en production de panneaux de bois" />
+<appellation intitule="Machiniste en fabrications de panneaux de bois" />
+<appellation intitule="Opérateur / Opératrice de fabrication de panneaux de bois" />
+<appellation intitule="Opérateur / Opératrice de production de panneaux à base bois" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2204" intitule="Encadrement des industries de l'ameublement et du bois">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe chef de fabrication en industrie du bois" />
+<appellation intitule="Adjoint / Adjointe chef de scierie" />
+<appellation intitule="Agent / Agente de maîtrise de scierie" />
+<appellation intitule="Agent / Agente de maîtrise en ameublement" />
+<appellation intitule="Agent / Agente de maîtrise en industrie du bois" />
+<appellation intitule="Agent / Agente de maîtrise en menuiserie" />
+<appellation intitule="Agent / Agente d'encadrement en industrie du bois" />
+<appellation intitule="Chef d'atelier de conformation en industrie du bois" />
+<appellation intitule="Chef d'atelier de presses en industrie du bois" />
+<appellation intitule="Chef d'atelier en industrie du bois" />
+<appellation intitule="Chef de fabrication en industrie du bois" />
+<appellation intitule="Chef de scierie" />
+<appellation intitule="Chef d'équipe en menuiserie, ameublement, agencement" />
+<appellation intitule="Contremaître / Contremaîtresse de fabrication en industrie du bois" />
+<appellation intitule="Contremaître / Contremaîtresse de montage sur bois" />
+<appellation intitule="Contremaître / Contremaîtresse de scierie" />
+<appellation intitule="Contremaître / Contremaîtresse d'usinage sur bois" />
+<appellation intitule="Contremaître / Contremaîtresse ébéniste" />
+<appellation intitule="Contremaître / Contremaîtresse en agencement" />
+<appellation intitule="Contremaître / Contremaîtresse en ameublement" />
+<appellation intitule="Contremaître / Contremaîtresse en industrie du bois" />
+<appellation intitule="Contremaître / Contremaîtresse en menuiserie" />
+<appellation intitule="Responsable d'atelier en industrie du bois" />
+<appellation intitule="Responsable de fabrication en industrie du bois" />
+<appellation intitule="Responsable de parc à bois" />
+<appellation intitule="Responsable de parc à grumes" />
+<appellation intitule="Responsable de production en industrie du bois" />
+<appellation intitule="Responsable de scierie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2204" intitule="Encadrement des industries de l'ameublement et du bois">
+<liste_appellations>
+<appellation intitule="Chef de bois" />
+<appellation intitule="Chef d'équipe de parc à bois" />
+<appellation intitule="Chef d'équipe de parc à grumes" />
+<appellation intitule="Chef d'équipe de scierie" />
+<appellation intitule="Classeur / Classeuse de bois" />
+<appellation intitule="Classeur / Classeuse qualité en première transformation du bois" />
+<appellation intitule="Conducteur / Conductrice de ligne de sciage bois" />
+<appellation intitule="Conducteur / Conductrice de massicot en première transformation du bois" />
+<appellation intitule="Conducteur / Conductrice de séchoirs en première transformation du bois" />
+<appellation intitule="Conducteur opérateur / Conductrice opératrice de scierie" />
+<appellation intitule="Déligneur / Déligneuse" />
+<appellation intitule="Dérouleur / Dérouleuse en première transformation du bois" />
+<appellation intitule="Ecorceur / Ecorceuse de scierie" />
+<appellation intitule="Fendeur / Fendeuse de merrains" />
+<appellation intitule="Gestionnaire de parc à grumes" />
+<appellation intitule="Marqueur / Marqueuse de scierie" />
+<appellation intitule="Opérateur / Opératrice de première transformation du bois d'oeuvre" />
+<appellation intitule="Opérateur / Opératrice de sciage bois" />
+<appellation intitule="Ouvrier / Ouvrière de scierie" />
+<appellation intitule="Rogneur / Rogneuse" />
+<appellation intitule="Scieur / Scieuse bois" />
+<appellation intitule="Scieur / Scieuse de reprise" />
+<appellation intitule="Scieur / Scieuse de tête" />
+<appellation intitule="Traceur-débiteur / Traceuse-débiteuse en première transformation du bois" />
+<appellation intitule="Trancheur / Trancheuse bois" />
+<appellation intitule="Trieur-classeur / Trieuse-classeuse de bois" />
+<appellation intitule="Tronçonneur / Tronçonneuse en première transformation du bois" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2206" intitule="Réalisation de menuiserie bois et tonnellerie">
+<liste_appellations>
+<appellation intitule="Foudrier / Foudrière" />
+<appellation intitule="Maquettiste naval / navale" />
+<appellation intitule="Menuisier / Menuisière" />
+<appellation intitule="Menuisier / Menuisière atelier et pose" />
+<appellation intitule="Menuisier / Menuisière d'agencement" />
+<appellation intitule="Menuisier / Menuisière d'atelier" />
+<appellation intitule="Menuisier / Menuisière de bord" />
+<appellation intitule="Menuisier / Menuisière de restauration" />
+<appellation intitule="Menuisier / Menuisière de ville" />
+<appellation intitule="Menuisier constructeur / Menuisière constructrice en décors de spectacle" />
+<appellation intitule="Menuisier escaliéteur / Menuisière escaliéteuse" />
+<appellation intitule="Menuisier naval embarqué / Menuisière navale embarquée" />
+<appellation intitule="Menuisier-agenceur / Menuisière-agenceuse de cuisines ou de salles de bains" />
+<appellation intitule="Menuisier-maquettiste / Menuisière-maquettiste" />
+<appellation intitule="Prototypiste bois" />
+<appellation intitule="Tonnelier / Tonnelière de fabrication" />
+<appellation intitule="Tonnelier réparateur / Tonnelière réparatrice" />
+<appellation intitule="Traceur / Traceuse en menuiserie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2207" intitule="Réalisation de meubles en bois">
+<liste_appellations>
+<appellation intitule="Bâtonnier / Bâtonnière d'art" />
+<appellation intitule="Ebéniste" />
+<appellation intitule="Ebéniste d'art" />
+<appellation intitule="Ebéniste-marqueteur / Ebéniste-marqueteuse" />
+<appellation intitule="Ebéniste-menuisier / Ebéniste-menuisière" />
+<appellation intitule="Façonnier / Façonnière de meubles en bois et matériaux associés" />
+<appellation intitule="Menuisier / Menuisière en meubles" />
+<appellation intitule="Menuisier / Menuisière en sièges" />
+<appellation intitule="Menuisier-ébéniste / Menuisière-ébéniste" />
+<appellation intitule="Ouvrier / Ouvrière ébéniste" />
+<appellation intitule="Restaurateur / Restauratrice de meubles" />
+<appellation intitule="Restaurateur / Restauratrice de meubles anciens" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2208" intitule="Réalisation d'ouvrages décoratifs en bois">
+<liste_appellations>
+<appellation intitule="Boisselier / Boisselière" />
+<appellation intitule="Encadreur / Encadreuse" />
+<appellation intitule="Fabricant / Fabricante de jouets en bois" />
+<appellation intitule="Façonnier / Façonnière d'ouvrages décoratifs en bois et matériaux associés" />
+<appellation intitule="Maquettiste de modèles réduits en bois" />
+<appellation intitule="Marqueteur / Marqueteuse" />
+<appellation intitule="Marqueteur / Marqueteuse de paille" />
+<appellation intitule="Nacreur / Nacreuse" />
+<appellation intitule="Nacrier / Nacrière" />
+<appellation intitule="Pipier / Pipière sur bois" />
+<appellation intitule="Restaurateur / Restauratrice d'ouvrages décoratifs en bois" />
+<appellation intitule="Sabotier / Sabotière" />
+<appellation intitule="Sculpteur / Sculptrice statuaire bois" />
+<appellation intitule="Sculpteur / Sculptrice sur bois" />
+<appellation intitule="Sculpteur modeleur / Sculptrice modeleuse sur bois" />
+<appellation intitule="Tabletier / Tabletière" />
+<appellation intitule="Tourneur / Tourneuse sur bois" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2209" intitule="Intervention technique en ameublement et bois">
+<liste_appellations>
+<appellation intitule="Agent / Agente de contrôle de montage sur bois" />
+<appellation intitule="Agent / Agente de planification en industrie du bois" />
+<appellation intitule="Agent / Agente des méthodes en industrie du bois" />
+<appellation intitule="Dessinateur / Dessinatrice de charpentes en bois" />
+<appellation intitule="Dessinateur / Dessinatrice de maisons à ossature bois" />
+<appellation intitule="Dessinateur / Dessinatrice de structures en bois" />
+<appellation intitule="Dessinateur / Dessinatrice en agencement" />
+<appellation intitule="Dessinateur / Dessinatrice en ameublement" />
+<appellation intitule="Dessinateur / Dessinatrice en industrie du bois" />
+<appellation intitule="Dessinateur / Dessinatrice en menuiserie" />
+<appellation intitule="Dessinateur / Dessinatrice gabarits bois" />
+<appellation intitule="Dessinateur-métreur / Dessinatrice-métreuse bois" />
+<appellation intitule="Dessinateur-métreur / Dessinatrice-métreuse charpente" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse de charpentes en bois" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse de maisons à ossature bois" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse de structures en bois" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en agencement" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en ameublement" />
+<appellation intitule="Dessinateur-projeteur / Dessinatrice-projeteuse en menuiserie" />
+<appellation intitule="Dessinateur-projeteur calculateur / Dessinatrice-projeteuse calculatrice de structure bois" />
+<appellation intitule="Technicien / Technicienne bois" />
+<appellation intitule="Technicien / Technicienne bois pour machine à commande numérique" />
+<appellation intitule="Technicien / Technicienne contrôle-qualité en industrie du bois" />
+<appellation intitule="Technicien / Technicienne de développement en industrie du bois" />
+<appellation intitule="Technicien / Technicienne de fabrication-production en industrie du bois" />
+<appellation intitule="Technicien / Technicienne de planification en industrie du bois" />
+<appellation intitule="Technicien / Technicienne des industries de l'ameublement et du bois" />
+<appellation intitule="Technicien / Technicienne d'études en industrie du bois" />
+<appellation intitule="Technicien / Technicienne d'études-recherche-développement en industrie du bois" />
+<appellation intitule="Technicien / Technicienne lancement-ordonnancement en industrie du bois" />
+<appellation intitule="Technicien / Technicienne méthodes en industrie du bois" />
+<appellation intitule="Technicien / Technicienne prototypiste bois" />
+<appellation intitule="Traceur / Traceuse de structures en bois" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H23" intitule="Chimie et parachimie">
+<fiche
+ code="H2301" intitule="Conduite d'équipement de production chimique ou pharmaceutique">
+<liste_appellations>
+<appellation intitule="Aide-opérateur / Aide-opératrice en industrie chimique" />
+<appellation intitule="Chef de ligne en industrie pharmaceutique" />
+<appellation intitule="Chef de poste en industrie chimique" />
+<appellation intitule="Conducteur / Conductrice d'appareils de fabrication en industrie pharmaceutique" />
+<appellation intitule="Conducteur / Conductrice d'appareils des industries chimiques" />
+<appellation intitule="Conducteur / Conductrice de ligne automatisée en industrie chimique" />
+<appellation intitule="Conducteur / Conductrice d'enrobage en industrie pharmaceutique" />
+<appellation intitule="Conducteur / Conductrice d'équipements de stérilisation en industrie pharmaceutique" />
+<appellation intitule="Conducteur / Conductrice d'installation polyvalente en industrie chimique" />
+<appellation intitule="Opérateur / Opératrice de fabrication des industries chimiques" />
+<appellation intitule="Opérateur / Opératrice de fabrication en industrie pharmaceutique" />
+<appellation intitule="Opérateur / Opératrice de polymérisation" />
+<appellation intitule="Opérateur / Opératrice technique de production en industrie pharmaceutique" />
+<appellation intitule="Opérateur extérieur / Opératrice extérieure en industrie chimique" />
+<appellation intitule="Opérateur polyvalent / Opératrice polyvalente en industrie chimique" />
+<appellation intitule="Pilote d'installation des industries chimiques" />
+<appellation intitule="Préparateur / Préparatrice de liquides en industrie pharmaceutique" />
+<appellation intitule="Préparateur / Préparatrice de solides en industrie pharmaceutique" />
+<appellation intitule="Préparateur / Préparatrice d'effervescents en industrie pharmaceutique" />
+<appellation intitule="Préparateur / Préparatrice d'injectables en industrie pharmaceutique" />
+<appellation intitule="Rondier polyvalent / Rondière polyvalente en industrie chimique" />
+<appellation intitule="Tableautiste en industrie chimique" />
+<appellation intitule="Technicien / Technicienne de fabrication en industrie chimique" />
+<appellation intitule="Technicien / Technicienne de fabrication en industrie pharmaceutique" />
+<appellation intitule="Technicien / Technicienne de procédés en industrie chimique" />
+<appellation intitule="Technicien / Technicienne de production en industrie chimique" />
+<appellation intitule="Technicien / Technicienne de production en industrie pharmaceutique" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H24" intitule="Cuir et textile">
+<fiche
+ code="H2401" intitule="Assemblag">
+<liste_appellations>
+<appellation intitule="Afficheur / Afficheuse semelle" />
+<appellation intitule="Bordeur / Bordeuse cuir" />
+<appellation intitule="Cardeur verreur / Cardeuse verreuse" />
+<appellation intitule="Claqueur / Claqueuse" />
+<appellation intitule="Cordonnier industriel / Cordonnière industrielle" />
+<appellation intitule="Couseur / Couseuse de part en part ou blacke en chaussures" />
+<appellation intitule="Couseur / Couseuse de trépointes" />
+<appellation intitule="Couseur / Couseuse petit point en chaussures" />
+<appellation intitule="Couturier industriel / Couturière industrielle bâches" />
+<appellation intitule="Couturier industriel / Couturière industrielle stores" />
+<appellation intitule="Couturier industriel / Couturière industrielle voiles" />
+<appellation intitule="Fraiseur / Fraiseuse cuir" />
+<appellation intitule="Gainier industriel / Gainière industrielle" />
+<appellation intitule="Garnisseur / Garnisseuse en industrie" />
+<appellation intitule="Maroquinier industriel / Maroquinière industrielle" />
+<appellation intitule="Mécanicien - assembleur / Mécanicienne - assembleuse en maroquinerie" />
+<appellation intitule="Monteur / Monteuse à la pointe en chaussures" />
+<appellation intitule="Monteur / Monteuse bout en chaussures" />
+<appellation intitule="Monteur / Monteuse combiné en chaussures" />
+<appellation intitule="Monteur / Monteuse en chaussures" />
+<appellation intitule="Monteur / Monteuse en maroquinerie - sellerie - bourrellerie" />
+<appellation intitule="Opérateur / Opératrice d'assemblage - montage des industries des cuirs, peaux et matériaux associés (hors vêtements)" />
+<appellation intitule="Opérateur / Opératrice de fabrication en maroquinerie industrielle" />
+<appellation intitule="Ourleur / Ourleuse cuir" />
+<appellation intitule="Ouvrier / Ouvrière d'assemblage-finissage en chaussures" />
+<appellation intitule="Ouvrier / Ouvrière en sellerie - garnissage" />
+<appellation intitule="Piqueur / Piqueuse en chaussures" />
+<appellation intitule="Piqueur / Piqueuse en ganterie" />
+<appellation intitule="Piqueur / Piqueuse en maroquinerie" />
+<appellation intitule="Piqueur / Piqueuse façon sellier" />
+<appellation intitule="Talonneur / Talonneuse" />
+<appellation intitule="Tapissier industriel / Tapissière industrielle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2402" intitule="Assemblag">
+<liste_appellations>
+<appellation intitule="Agent / Agente de fabrication des industries de l'habillement et autres fabrications à base d'étoffes" />
+<appellation intitule="Assembleur-monteur / Assembleuse-monteuse des industries de l'habillement en cuir, peaux et matériaux associés" />
+<appellation intitule="Boutonniériste" />
+<appellation intitule="Colleteur / Colleteuse en industrie de l'habillement" />
+<appellation intitule="Couseur / Couseuse sur surjeteuse" />
+<appellation intitule="Couturier industriel / Couturière industrielle de l'habillement" />
+<appellation intitule="Couturier industriel / Couturière industrielle sur tissu" />
+<appellation intitule="Elastiqueur / Elastiqueuse" />
+<appellation intitule="Mécanicien / Mécanicienne des industries de l'habillement" />
+<appellation intitule="Mécanicien / Mécanicienne en confection" />
+<appellation intitule="Mécanicien / Mécanicienne pièce entière en industrie de l'habillement" />
+<appellation intitule="Mécanicien / Mécanicienne série en industrie de l'habillement" />
+<appellation intitule="Opérateur / Opératrice en confection" />
+<appellation intitule="Opérateur / Opératrice piquage" />
+<appellation intitule="Opérateur / Opératrice sur machine à cycle semi-automatique de l'habillement et autres fabrications à base d'étoffes" />
+<appellation intitule="Opérateur / Opératrice sur machine plate en industrie de l'habillement et autres fabrications à base d'étoffes" />
+<appellation intitule="Opérateur / Opératrice sur machine spéciale en industrie de l'habillement et autres fabrications à base d'étoffes" />
+<appellation intitule="Opérateur / Opératrice textile" />
+<appellation intitule="Ouatineur / Ouatineuse" />
+<appellation intitule="Ourleur / Ourleuse ganterie" />
+<appellation intitule="Ourleur / Ourleuse points invisibles en industrie de l'habillement" />
+<appellation intitule="Ourleur / Ourleuse revers en industrie de l'habillement" />
+<appellation intitule="Ouvrier / Ouvrière sur machines à cycle semi-automatique en bonneterie" />
+<appellation intitule="Ouvrier / Ouvrière sur machines spéciales de bonneterie" />
+<appellation intitule="Piqueur / Piqueuse collection" />
+<appellation intitule="Piqueur / Piqueuse en bonneterie" />
+<appellation intitule="Piqueur / Piqueuse en broderie sur tissu chaîne et trame" />
+<appellation intitule="Piqueur / Piqueuse en confection" />
+<appellation intitule="Piqueur brodeur / Piqueuse brodeuse de dentelle sur machine" />
+<appellation intitule="Piqueur brodeur / Piqueuse brodeuse sur machine en articles maille" />
+<appellation intitule="Piqueur brodeur / Piqueuse brodeuse sur machine en ganterie" />
+<appellation intitule="Rabatteur / Rabatteuse canon des industries de l'habillement et autres fabrications à base d'étoffe" />
+<appellation intitule="Remmailleur / Remmailleuse en articles chaussants" />
+<appellation intitule="Remmailleur / Remmailleuse en articles maille" />
+<appellation intitule="Surfileur / Surfileuse" />
+<appellation intitule="Surjeteur / Surjeteuse en articles maille" />
+<appellation intitule="Surjeteur / Surjeteuse en ganterie" />
+<appellation intitule="Surjeteur-raseur / Surjeteuse-raseuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2403" intitule="Conduite de machine de fabrication de produits textiles">
+<liste_appellations>
+<appellation intitule="Bonnetier / Bonnetière sur métier circulaire grand diamètre" />
+<appellation intitule="Bonnetier / Bonnetière sur métier circulaire petit diamètre" />
+<appellation intitule="Bonnetier / Bonnetière sur métier rectiligne" />
+<appellation intitule="Brodeur / Brodeuse sur machine multitête" />
+<appellation intitule="Conducteur / Conductrice de machines à tisser" />
+<appellation intitule="Conducteur / Conductrice de machines à tricoter" />
+<appellation intitule="Conducteur / Conductrice de machines à tufter en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines de fabrication de produits textiles" />
+<appellation intitule="Conducteur / Conductrice de machines de tissage" />
+<appellation intitule="Conducteur / Conductrice de métiers à crochet" />
+<appellation intitule="Conducteur / Conductrice de métiers à tricoter" />
+<appellation intitule="Fileur / Fileuse en broderie" />
+<appellation intitule="Fileur / Fileuse sur métiers classiques" />
+<appellation intitule="Opérateur / Opératrice sur métier Jacquard électronique" />
+<appellation intitule="Racheliste" />
+<appellation intitule="Rubanier / Rubanière" />
+<appellation intitule="Surveillant / Surveillante d'installations de production de tissus et étoffes" />
+<appellation intitule="Tisserand / Tisserande en industrie textile" />
+<appellation intitule="Tisseur / Tisseuse sur machines à tisser" />
+<appellation intitule="Tricoteur / Tricoteuse" />
+<appellation intitule="Tulliste" />
+<appellation intitule="Tulliste en guipure" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2404" intitule="Conduite de machine de production et transformation des fils">
+<liste_appellations>
+<appellation intitule="Bobineur assembleur / Bobineuse assembleuse en filature textile" />
+<appellation intitule="Bobinier / Bobinière en filature textile" />
+<appellation intitule="Cardeur / Cardeuse en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de banc d'étirage" />
+<appellation intitule="Conducteur / Conductrice de cardes fileuses" />
+<appellation intitule="Conducteur / Conductrice de convertisseurs en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de craqueuses en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de ligne sur machine Open-End" />
+<appellation intitule="Conducteur / Conductrice de machines de filature textile" />
+<appellation intitule="Conducteur / Conductrice de machines de production et transformation des fils" />
+<appellation intitule="Conducteur régleur / Conductrice régleuse de machine Open-End" />
+<appellation intitule="Etirageur-puiseur / Etirageuse-puiseuse de fils" />
+<appellation intitule="Moulinier / Moulinière" />
+<appellation intitule="Opérateur / Opératrice de machine de production et transformation des fils" />
+<appellation intitule="Opérateur / Opératrice process automatisé sur machines de filature" />
+<appellation intitule="Opérateur / Opératrice sur machine Open-End" />
+<appellation intitule="Ouvrier / Ouvrière de filature artificielle et synthétique" />
+<appellation intitule="Ouvrier / Ouvrière de préparation avant filage" />
+<appellation intitule="Ouvrier / Ouvrière de texturation" />
+<appellation intitule="Ouvrier / Ouvrière des fausses torsions de fil continu" />
+<appellation intitule="Peigneur / Peigneuse en industrie textile" />
+<appellation intitule="Retordeur / Retordeuse" />
+<appellation intitule="Réunisseur / Réunisseuse" />
+<appellation intitule="Soigneur / Soigneuse de continu à filer" />
+<appellation intitule="Soigneur / Soigneuse de gills en industrie textile" />
+<appellation intitule="Soigneur / Soigneuse de métier Open-End" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2405" intitule="Conduite de machine de textiles nontissés">
+<liste_appellations>
+<appellation intitule="Aiguilleteur / Aiguilleteuse" />
+<appellation intitule="Chef de ligne aiguilletage" />
+<appellation intitule="Chef de machine aiguilletage" />
+<appellation intitule="Conducteur / Conductrice de ligne de nappes et thermoformage" />
+<appellation intitule="Conducteur / Conductrice de ligne de produits nontissés" />
+<appellation intitule="Conducteur / Conductrice de machines de produits nontissés" />
+<appellation intitule="Nappeur / Nappeuse en industrie textile" />
+<appellation intitule="Opérateur / Opératrice en fabrication de produits nontissés" />
+<appellation intitule="Responsable de ligne en fabrication de produits nontissés" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2406" intitule="Conduite de machine de traitement textile">
+<liste_appellations>
+<appellation intitule="Aide-conducteur / Aide-conductrice de machine à teindre en industrie textile" />
+<appellation intitule="Apprêteur / Apprêteuse en industrie textile" />
+<appellation intitule="Calandreur / Calandreuse en industrie textile" />
+<appellation intitule="Chef de rame textile" />
+<appellation intitule="Chloriteur / Chloriteuse en industrie textile" />
+<appellation intitule="Chloriteur-laveur / Chloriteuse-laveuse en industrie textile" />
+<appellation intitule="Conducteur / Conductrice d'appareils de teinture textile" />
+<appellation intitule="Conducteur / Conductrice d'autoclave de teinture en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de barque jet ou overflow" />
+<appellation intitule="Conducteur / Conductrice de gratteuse en ennoblissement textile" />
+<appellation intitule="Conducteur / Conductrice de jigger" />
+<appellation intitule="Conducteur / Conductrice de laineuses en ennoblissement textile" />
+<appellation intitule="Conducteur / Conductrice de ligne de relaxation en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines à calandrer en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines à exprimer en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines à flamber en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines d'apprêt textile" />
+<appellation intitule="Conducteur / Conductrice de machines de blanchiment en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines de complexage en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines de teinture en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines de traitement textile" />
+<appellation intitule="Conducteur / Conductrice de machines d'enduction en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de merceriseuses en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de merceriseuses sur tissus" />
+<appellation intitule="Conducteur / Conductrice de rame de séchage en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de séchoirs en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de tondeuses en industrie textile" />
+<appellation intitule="Contrecolleur / Contrecolleuse en industrie textile" />
+<appellation intitule="Enducteur / Enductrice en industrie textile" />
+<appellation intitule="Enducteur imprégnateur / Enductrice imprégnatrice en industrie textile" />
+<appellation intitule="Opérateur / Opératrice sur ligne d'enduction" />
+<appellation intitule="Sanforiseur / Sanforiseuse en industrie textile" />
+<appellation intitule="Teinturier / Teinturière en industrie textile" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2407" intitule="Conduite de machine de transformation et de finition des cuirs et peaux">
+<liste_appellations>
+<appellation intitule="Agent / Agente de finition cuirs et peaux" />
+<appellation intitule="Apprêteur / Apprêteuse en pelleterie" />
+<appellation intitule="Chagrineur / Chagrineuse" />
+<appellation intitule="Conducteur / Conductrice de foulons" />
+<appellation intitule="Conducteur / Conductrice de machines à pigmenter" />
+<appellation intitule="Conducteur / Conductrice de machines de tannerie-mégisserie" />
+<appellation intitule="Conducteur / Conductrice de machines de transformation cuirs et peaux" />
+<appellation intitule="Corroyeur / Corroyeuse en tannerie" />
+<appellation intitule="Délaineur / Délaineuse" />
+<appellation intitule="Dérayeur / Dérayeuse en tannerie-mégisserie" />
+<appellation intitule="Doleur meuleur / Doleuse meuleuse" />
+<appellation intitule="Echarneur / Echarneuse en tannerie-mégisserie" />
+<appellation intitule="Liégeur / Liégeuse" />
+<appellation intitule="Lisseur / Lisseuse en tannerie-mégisserie" />
+<appellation intitule="Metteur / Metteuse au vent" />
+<appellation intitule="Opérateur / Opératrice de finition sur lisseuse, presse ou palisson" />
+<appellation intitule="Opérateur / Opératrice en tannerie-mégisserie" />
+<appellation intitule="Opérateur / Opératrice sur presse en tannerie-mégisserie" />
+<appellation intitule="Ouvrier mégissier / Ouvrière mégissière" />
+<appellation intitule="Ouvrier tanneur / Ouvrière tanneuse" />
+<appellation intitule="Palissonneur / Palissonneuse" />
+<appellation intitule="Ponceur-velouteur / Ponceuse-velouteuse" />
+<appellation intitule="Refendeur / Refendeuse de peaux" />
+<appellation intitule="Refendeur-scieur / Refendeuse-scieuse de peaux" />
+<appellation intitule="Retailleur / Retailleuse de peaux" />
+<appellation intitule="Rogneur-débordeur / Rogneuse-débordeuse" />
+<appellation intitule="Satineur / Satineuse en tannerie-mégisserie" />
+<appellation intitule="Scieur / Scieuse de peaux" />
+<appellation intitule="Sécheur / Sécheuse sous vide en tannerie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2408" intitule="Conduite de machine d'impression textile">
+<liste_appellations>
+<appellation intitule="Aide-conducteur / Aide-conductrice de machine d'impression textile" />
+<appellation intitule="Chef de ligne chromo en industrie textile" />
+<appellation intitule="Conducteur / Conductrice chromo en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines à imprimer à cadre rotatif" />
+<appellation intitule="Conducteur / Conductrice de machines à imprimer par jet de couleur ou pulvérisation" />
+<appellation intitule="Conducteur / Conductrice de machines de flocage en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines de sérigraphie en industrie textile" />
+<appellation intitule="Conducteur / Conductrice de machines d'impression textile" />
+<appellation intitule="Imprimeur / Imprimeuse en industrie textile" />
+<appellation intitule="Imprimeur / Imprimeuse sur cadre plat" />
+<appellation intitule="Imprimeur / Imprimeuse sur cadre rotatif" />
+<appellation intitule="Imprimeur / Imprimeuse sur étoffes" />
+<appellation intitule="Imprimeur / Imprimeuse sur table en industrie textile" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2409" intitule="Coupe cuir, textile et matériaux souples">
+<liste_appellations>
+<appellation intitule="Brocheur / Brocheuse en chaussures" />
+<appellation intitule="Chef d'équipe en atelier de coupe" />
+<appellation intitule="Conducteur / Conductrice de chariot matelasseur en industrie des matériaux souples" />
+<appellation intitule="Conducteur / Conductrice de machines de coupe automatique en industrie des matériaux souples" />
+<appellation intitule="Coupeur / Coupeuse au bloc en ganterie" />
+<appellation intitule="Coupeur / Coupeuse CAO" />
+<appellation intitule="Coupeur / Coupeuse cuirs et peaux" />
+<appellation intitule="Coupeur / Coupeuse dessus" />
+<appellation intitule="Coupeur / Coupeuse doublure" />
+<appellation intitule="Coupeur / Coupeuse en bonneterie" />
+<appellation intitule="Coupeur / Coupeuse en chaussures" />
+<appellation intitule="Coupeur / Coupeuse en maroquinerie" />
+<appellation intitule="Coupeur / Coupeuse main chaussures" />
+<appellation intitule="Coupeur / Coupeuse main tissu" />
+<appellation intitule="Coupeur / Coupeuse peausserie" />
+<appellation intitule="Coupeur / Coupeuse prêt-à-porter" />
+<appellation intitule="Coupeur / Coupeuse sur emporte-pièces en industrie des matériaux souples" />
+<appellation intitule="Coupeur / Coupeuse sur scie à ruban en industrie des matériaux souples" />
+<appellation intitule="Coupeur industriel / Coupeuse industrielle de l'habillement et autres fabrications à base d'étoffes" />
+<appellation intitule="Découpeur / Découpeuse scies à ruban en industrie des matériaux souples" />
+<appellation intitule="Fendeur / Fendeuse en ganterie" />
+<appellation intitule="Matelasseur / Matelasseuse raccords" />
+<appellation intitule="Traceur-matelasseur / Traceuse-matelasseuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2410" intitule="Mise en forme, repassage et finitions en industrie textile">
+<liste_appellations>
+<appellation intitule="Détacheur / Détacheuse en industrie des matériaux souples" />
+<appellation intitule="Ecailleur / Ecailleuse en dentelle" />
+<appellation intitule="Finisseur / Finisseuse en industrie des matériaux souples" />
+<appellation intitule="Formeur / Formeuse en bonneterie" />
+<appellation intitule="Opérateur / Opératrice de finition en industrie des matériaux souples" />
+<appellation intitule="Presseur / Presseuse en bonneterie" />
+<appellation intitule="Presseur / Presseuse en industrie de l'habillement" />
+<appellation intitule="Raccoutreur / Raccoutreuse en articles chaussants" />
+<appellation intitule="Raccoutreur / Raccoutreuse en bonneterie" />
+<appellation intitule="Remonteur / Remonteuse de maille en bonneterie" />
+<appellation intitule="Repasseur / Repasseuse au fer en industrie de l'habillement" />
+<appellation intitule="Repasseur / Repasseuse en cours en industrie de l'habillement" />
+<appellation intitule="Repasseur / Repasseuse sur carrousel en industrie de l'habillement" />
+<appellation intitule="Repasseur / Repasseuse sur mannequin en industrie de l'habillement" />
+<appellation intitule="Repasseur final / Repasseuse finale en industrie de l'habillement" />
+<appellation intitule="Repasseur-presseur / Repasseuse-presseuse en industrie de l'habillement et de fabrications à base d'étoffes" />
+<appellation intitule="Thermocolleur / Thermocolleuse en industrie de l'habillement" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2411" intitule="Montage de prototype cuir et matériaux souples">
+<liste_appellations>
+<appellation intitule="Echantillonneur / Echantillonneuse en bonneterie" />
+<appellation intitule="Maroquinier metteur / Maroquinière metteuse au point" />
+<appellation intitule="Mécanicien / Mécanicienne collection des industries de l'habillement" />
+<appellation intitule="Mécanicien / Mécanicienne modèle" />
+<appellation intitule="Mécanicien / Mécanicienne premier modèle" />
+<appellation intitule="Mécanicien metteur / Mécanicienne metteuse au point en confection" />
+<appellation intitule="Monteur / Monteuse échantillon" />
+<appellation intitule="Monteur / Monteuse prototypiste" />
+<appellation intitule="Prototypiste en chaussure" />
+<appellation intitule="Prototypiste en confection" />
+<appellation intitule="Prototypiste en maroquinerie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2412" intitule="Patronnag">
+<liste_appellations>
+<appellation intitule="Gradeur / Gradeuse" />
+<appellation intitule="Opérateur / Opératrice sur système informatisé de patronage-gradation" />
+<appellation intitule="Patronnier / Patronnière" />
+<appellation intitule="Patronnier / Patronnière CAO/DAO" />
+<appellation intitule="Patronnier metteur / Patronnière metteuse au point en industrie des cuirs, peaux et matériaux associés" />
+<appellation intitule="Patronnier-gradeur / Patronnière-gradeuse" />
+<appellation intitule="Patronnier-gradeur / Patronnière-gradeuse en industrie de l'habillement et autres fabrications à base d'étoffes" />
+<appellation intitule="Patronnier-gradeur / Patronnière-gradeuse en industrie des matériaux souples" />
+<appellation intitule="Patronnier-gradeur / Patronnière-gradeuse maille" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2413" intitule="Préparation de fils, montage de métiers textiles">
+<liste_appellations>
+<appellation intitule="Bobineur / Bobineuse en textiles" />
+<appellation intitule="Canneteur / Canneteuse en industrie textile" />
+<appellation intitule="Encolleur / Encolleuse textile" />
+<appellation intitule="Extirpeur / Extirpeuse de fil" />
+<appellation intitule="Gareur / Gareuse de métiers textiles" />
+<appellation intitule="Monteur / Monteuse de chaîne en industrie textile" />
+<appellation intitule="Monteur / Monteuse de métiers textiles" />
+<appellation intitule="Monteur regarnisseur / Monteuse regarnisseuse de métiers textiles" />
+<appellation intitule="Noueur / Noueuse de chaîne de tissage" />
+<appellation intitule="Noueur / Noueuse textile" />
+<appellation intitule="Opérateur / Opératrice de préparation de métier en industrie textile" />
+<appellation intitule="Ourdisseur / Ourdisseuse en industrie textile" />
+<appellation intitule="Passeur / Passeuse de chaînes en industrie textile" />
+<appellation intitule="Presseur / Presseuse en industrie textile" />
+<appellation intitule="Rattacheur / Rattacheuse en industrie textile" />
+<appellation intitule="Remonteur / Remonteuse en industrie textile" />
+<appellation intitule="Rentreur / Rentreuse de harnais" />
+<appellation intitule="Rentreur / Rentreuse textile" />
+<appellation intitule="Wappeur / Wappeuse en industrie textile" />
+<appellation intitule="Wheeleur / Wheeleuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2414" intitule="Préparation et finition d'articles en cuir et matériaux souples">
+<liste_appellations>
+<appellation intitule="Applicateur / Applicatrice en tannerie-mégisserie" />
+<appellation intitule="Bichonneur / Bichonneuse cuir" />
+<appellation intitule="Denteleur / Denteleuse en industrie du cuir et autres matériaux souples" />
+<appellation intitule="Dresseur / Dresseuse en ganterie" />
+<appellation intitule="Gaufreur / Gaufreuse cuir" />
+<appellation intitule="Gutteur / Gutteuse en industrie du cuir et autres matériaux souples" />
+<appellation intitule="Habilleur / Habilleuse cuir" />
+<appellation intitule="Habilleur / Habilleuse en industrie des cuirs, peaux et matériaux associés" />
+<appellation intitule="Opérateur / Opératrice de finition sur articles en cuir et autres matériaux souples" />
+<appellation intitule="Opérateur / Opératrice de préparation en industrie du cuir et autres matériaux souples" />
+<appellation intitule="Pareur / Pareuse en industrie du cuir et autres matériaux souples" />
+<appellation intitule="Pistoleteur / Pistoleteuse en tannerie-mégisserie" />
+<appellation intitule="Rembordeur / Rembordeuse en industrie du cuir et autres matériaux souples" />
+<appellation intitule="Réparateur - habilleur / Réparatrice - habilleuse en chaussures" />
+<appellation intitule="Retoucheur / Retoucheuse chaussures" />
+<appellation intitule="Vernisseur / Vernisseuse chaussures" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2415" intitule="Contrôle en industrie du cuir et du textile">
+<liste_appellations>
+<appellation intitule="Classeur / Classeuse de cuirs et peaux" />
+<appellation intitule="Contrôleur / Contrôleuse de bobines en industrie textile" />
+<appellation intitule="Contrôleur / Contrôleuse des industries de l'habillement" />
+<appellation intitule="Contrôleur / Contrôleuse en bonneterie" />
+<appellation intitule="Contrôleur / Contrôleuse en cours de fabrication des industries de matériaux souples" />
+<appellation intitule="Contrôleur / Contrôleuse qualité des tissus au mètre" />
+<appellation intitule="Eplucheur visiteur / Eplucheuse visiteuse des industries des matériaux souples" />
+<appellation intitule="Mesureur visiteur / Mesureuse visiteuse des industries textiles" />
+<appellation intitule="Plieur / Plieuse en dentelle" />
+<appellation intitule="Réceptionnaire cuirs et peaux" />
+<appellation intitule="Trieur / Trieuse de cuirs et peaux" />
+<appellation intitule="Trieur / Trieuse de peaux en brut" />
+<appellation intitule="Trieur-classeur / Trieuse-classeuse de cuirs et peaux" />
+<appellation intitule="Trieur-classeur / Trieuse-classeuse de fourrures" />
+<appellation intitule="Trieur-classeur / Trieuse-classeuse de peaux en wet-blue" />
+<appellation intitule="Trieur-classeur / Trieuse-classeuse de peaux finies" />
+<appellation intitule="Trieur-classeur / Trieuse-classeuse de peaux lainées" />
+<appellation intitule="Trieur-classeur / Trieuse-classeuse de peaux sur stain" />
+<appellation intitule="Trieur-réceptionnaire / Trieuse-réceptionnaire en tannerie-mégisserie" />
+<appellation intitule="Vérificateur / Vérificatrice en textile" />
+<appellation intitule="Visiteur / Visiteuse de fil en industrie textile" />
+<appellation intitule="Visiteur / Visiteuse en bonneterie" />
+<appellation intitule="Visiteur / Visiteuse en dentelle" />
+<appellation intitule="Visiteur / Visiteuse en écru" />
+<appellation intitule="Visiteur / Visiteuse en produits finis de bonneterie" />
+<appellation intitule="Visiteur / Visiteuse en teinturerie" />
+<appellation intitule="Visiteur / Visiteuse en tissage" />
+<appellation intitule="Visiteur / Visiteuse en tissu" />
+<appellation intitule="Visiteur / Visiteuse réceptionnaire d'étoffes" />
+<appellation intitule="Visiteur détacheur / Visiteuse détacheuse en industrie des matériaux souples" />
+<appellation intitule="Visiteur-appéreur / Visiteuse-appéreuse en industrie des matériaux souples" />
+<appellation intitule="Visiteur-contrôleur / Visiteuse-contrôleuse des industries des matériaux souples" />
+<appellation intitule="Visiteur-contrôleur / Visiteuse-contrôleuse en produits finis des industries de matériaux souples" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H25" intitule="Direction, encadrement et pilotage de fabrication et production industrielles">
+<fiche
+ code="H2501" intitule="Encadrement de production de matériel électrique et électronique">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maîtrise de fabrication de matériels électriques" />
+<appellation intitule="Agent / Agente de maîtrise de fabrication de matériels électroniques" />
+<appellation intitule="Agent / Agente d'encadrement en microélectronique" />
+<appellation intitule="Agent / Agente d'encadrement en production de matériels électriques" />
+<appellation intitule="Agent / Agente d'encadrement en production de matériels électroniques" />
+<appellation intitule="Agent d'encadrement-technicien / Agente d'encadrement-technicienne en production de matériels électriques" />
+<appellation intitule="Agent d'encadrement-technicien / Agente d'encadrement-technicienne en production de matériels électroniques" />
+<appellation intitule="Animateur / Animatrice de ligne de fabrication électrique" />
+<appellation intitule="Animateur / Animatrice de ligne de fabrication électronique" />
+<appellation intitule="Assistant / Assistante responsable d'unité élémentaire de production en matériels électriques" />
+<appellation intitule="Assistant / Assistante responsable d'unité élémentaire de production en matériels électroniques" />
+<appellation intitule="Chef d'atelier de câblage" />
+<appellation intitule="Chef d'atelier en production de matériels électriques" />
+<appellation intitule="Chef d'atelier en production de matériels électroniques" />
+<appellation intitule="Chef de file en fabrication de matériels électriques" />
+<appellation intitule="Chef de file en fabrication de matériels électroniques" />
+<appellation intitule="Chef d'îlot de production en microélectronique" />
+<appellation intitule="Contremaître / Contremaîtresse bobinage" />
+<appellation intitule="Contremaître / Contremaîtresse de fabrication de matériels électriques" />
+<appellation intitule="Contremaître / Contremaîtresse de fabrication de matériels électroniques" />
+<appellation intitule="Responsable d'unité autonome de production en matériels électriques" />
+<appellation intitule="Responsable d'unité autonome de production en matériels électroniques" />
+<appellation intitule="Responsable d'unité élémentaire de production en matériels électriques" />
+<appellation intitule="Responsable d'unité élémentaire de production en matériels électroniques" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2502" intitule="Management et ingénierie de production">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante technique d'ingénieur de production" />
+<appellation intitule="Chef de département fabrication" />
+<appellation intitule="Chef de département production" />
+<appellation intitule="Chef de fabrication" />
+<appellation intitule="Chef de ligne de production" />
+<appellation intitule="Chef de production" />
+<appellation intitule="Chef de produit en production industrielle" />
+<appellation intitule="Chef de secteur de production" />
+<appellation intitule="Chef de service fabrication" />
+<appellation intitule="Chef de service production" />
+<appellation intitule="Chef d'unité de fabrication" />
+<appellation intitule="Chef d'unité de production" />
+<appellation intitule="Diététicien / Diététicienne chef de produit en fabrication industrielle" />
+<appellation intitule="Directeur / Directrice de fabrication" />
+<appellation intitule="Directeur / Directrice de production industrielle" />
+<appellation intitule="Directeur / Directrice d'unité de production" />
+<appellation intitule="Directeur / Directrice technique en fabrication industrielle" />
+<appellation intitule="Directeur / Directrice technique en production" />
+<appellation intitule="Directeur industriel / Directrice industrielle" />
+<appellation intitule="Ingénieur / Ingénieure aéronautique de production" />
+<appellation intitule="Ingénieur / Ingénieure agronome de production" />
+<appellation intitule="Ingénieur / Ingénieure armement de production" />
+<appellation intitule="Ingénieur / Ingénieure automobile de production" />
+<appellation intitule="Ingénieur / Ingénieure biochimiste de production" />
+<appellation intitule="Ingénieur / Ingénieure céramiste de production" />
+<appellation intitule="Ingénieur / Ingénieure chef d'atelier de fabrication" />
+<appellation intitule="Ingénieur / Ingénieure chef d'atelier de production" />
+<appellation intitule="Ingénieur / Ingénieure chef de chaîne de production" />
+<appellation intitule="Ingénieur / Ingénieure chef de ligne de production" />
+<appellation intitule="Ingénieur / Ingénieure chef de ligne process de production" />
+<appellation intitule="Ingénieur / Ingénieure chef d'îlot de production" />
+<appellation intitule="Ingénieur / Ingénieure chimiste de production" />
+<appellation intitule="Ingénieur / Ingénieure de fabrication" />
+<appellation intitule="Ingénieur / Ingénieure de fabrication industrielle" />
+<appellation intitule="Ingénieur / Ingénieure de fonderie" />
+<appellation intitule="Ingénieur / Ingénieure de forge" />
+<appellation intitule="Ingénieur / Ingénieure de production" />
+<appellation intitule="Ingénieur / Ingénieure de production d'énergie" />
+<appellation intitule="Ingénieur / Ingénieure électrométallurgiste de production" />
+<appellation intitule="Ingénieur / Ingénieure en chaudronnerie de production" />
+<appellation intitule="Ingénieur / Ingénieure en électromécanique de production" />
+<appellation intitule="Ingénieur / Ingénieure en électronique de production" />
+<appellation intitule="Ingénieur / Ingénieure en matériaux de production" />
+<appellation intitule="Ingénieur / Ingénieure en mécanique de production" />
+<appellation intitule="Ingénieur / Ingénieure en métallurgie de production" />
+<appellation intitule="Ingénieur / Ingénieure en procédés en production" />
+<appellation intitule="Ingénieur / Ingénieure en processus en production" />
+<appellation intitule="Ingénieur / Ingénieure en structures métalliques de production" />
+<appellation intitule="Ingénieur / Ingénieure en verrerie de production" />
+<appellation intitule="Ingénieur / Ingénieure énergie de production" />
+<appellation intitule="Ingénieur / Ingénieure plasturgiste de production" />
+<appellation intitule="Ingénieur / Ingénieure process de production" />
+<appellation intitule="Ingénieur / Ingénieure produit en production" />
+<appellation intitule="Ingénieur / Ingénieure responsable d'atelier de production" />
+<appellation intitule="Ingénieur / Ingénieure responsable d'îlot de production" />
+<appellation intitule="Ingénieur électricien / Ingénieure électricienne de production" />
+<appellation intitule="Ingénieur électromécanicien / Ingénieure électromécanicienne de production" />
+<appellation intitule="Ingénieur électronicien / Ingénieure électronicienne de production" />
+<appellation intitule="Ingénieur mécanicien / Ingénieure mécanicienne de production" />
+<appellation intitule="Pharmacien / Pharmacienne de fabrication" />
+<appellation intitule="Pharmacien / Pharmacienne de production industrielle" />
+<appellation intitule="Pharmacien / Pharmacienne production/conditionnement" />
+<appellation intitule="Responsable de chaîne de production" />
+<appellation intitule="Responsable de fabrication" />
+<appellation intitule="Responsable de fonderie" />
+<appellation intitule="Responsable de four de la métallurgie" />
+<appellation intitule="Responsable de ligne de fabrication" />
+<appellation intitule="Responsable de ligne de production industrielle" />
+<appellation intitule="Responsable de production" />
+<appellation intitule="Responsable de production d'énergie" />
+<appellation intitule="Responsable d'exploitation" />
+<appellation intitule="Responsable d'exploitation de fluides" />
+<appellation intitule="Responsable d'unité de production industrielle" />
+<appellation intitule="Responsable en production métallurgique" />
+<appellation intitule="Responsable exploitation hydroélectrique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2503" intitule="Pilotage d'unité élémentaire de production mécanique">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice de ligne de fabrication mécanique" />
+<appellation intitule="Assistant / Assistante responsable d'unité élémentaire de production mécanique" />
+<appellation intitule="Chef mécanicien / mécanicienne d'atelier de fabrication" />
+<appellation intitule="Pilote d'unité de production mécanique" />
+<appellation intitule="Responsable d'îlot de fabrication mécanique" />
+<appellation intitule="Responsable d'îlot de production" />
+<appellation intitule="Responsable d'unité autonome de production mécanique" />
+<appellation intitule="Responsable d'unité élémentaire de production mécanique" />
+<appellation intitule="Responsable d'unité élémentaire de travail" />
+<appellation intitule="Responsable groupe autonome de production" />
+<appellation intitule="Technicien / Technicienne d'atelier de fabrication de la construction mécanique" />
+<appellation intitule="Technicien / Technicienne d'atelier de fabrication du travail des métaux" />
+<appellation intitule="Technicien / Technicienne de production du travail des métaux" />
+<appellation intitule="Technicien / Technicienne de production en fabrication mécanique" />
+<appellation intitule="Technicien / Technicienne en pilotage et maintenance de système de production" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2504" intitule="Encadrement d'équipe en industrie de transformation">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice d'équipe de fabrication en industrie pharmaceutique" />
+<appellation intitule="Animateur / Animatrice d'îlot de production en industrie de transformation" />
+<appellation intitule="Chef d'atelier en chimie/pharmacie" />
+<appellation intitule="Chef d'atelier en énergie/pétrochimie" />
+<appellation intitule="Chef d'atelier en industrie alimentaire" />
+<appellation intitule="Chef d'atelier en industrie de transformation" />
+<appellation intitule="Chef d'atelier en industrie du plastique/caoutchouc" />
+<appellation intitule="Chef d'atelier en matériaux de construction/céramique" />
+<appellation intitule="Chef d'atelier en production de papier/carton" />
+<appellation intitule="Chef de fabrication en industrie de transformation" />
+<appellation intitule="Chef de ligne en industrie alimentaire" />
+<appellation intitule="Chef de ligne en industrie chimique" />
+<appellation intitule="Chef de quart en industrie chimique" />
+<appellation intitule="Chef de quart en raffinerie" />
+<appellation intitule="Chef de secteur en production/distribution d'énergie" />
+<appellation intitule="Chef d'équipe de conditionnement" />
+<appellation intitule="Chef d'équipe de fabrication en industrie alimentaire" />
+<appellation intitule="Chef d'équipe de production en industrie de transformation" />
+<appellation intitule="Chef d'équipe en chimie/pharmacie" />
+<appellation intitule="Chef d'équipe en matériaux de construction/céramique" />
+<appellation intitule="Chef d'équipe en production/transformation de verre" />
+<appellation intitule="Chef d'exploitation en production/distribution d'énergie" />
+<appellation intitule="Contremaître / Contremaîtresse de fabrication en industrie de transformation" />
+<appellation intitule="Coordinateur / Coordinatrice d'îlots de production en industrie de transformation" />
+<appellation intitule="Responsable d'atelier de production en industrie de transformation" />
+<appellation intitule="Responsable d'atelier en chimie/pharmacie" />
+<appellation intitule="Responsable d'atelier en énergie/pétrochimie" />
+<appellation intitule="Responsable d'atelier en industrie du plastique/caoutchouc" />
+<appellation intitule="Responsable d'atelier en matériaux de construction/céramique" />
+<appellation intitule="Responsable d'atelier en production de papier/carton" />
+<appellation intitule="Responsable d'atelier en production/transformation de verre" />
+<appellation intitule="Responsable de ligne en industrie pharmaceutique" />
+<appellation intitule="Responsable d'équipe en industrie de transformation" />
+<appellation intitule="Responsable fusion en production/transformation de verre" />
+<appellation intitule="Superviseur / Superviseuse en industrie de transformation" />
+<appellation intitule="Technicien / Technicienne responsable de fabrication en industrie alimentaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2505" intitule="Encadrement d'équipe ou d'atelier en matériaux souples">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'encadrement d'atelier de piquage" />
+<appellation intitule="Animateur / Animatrice d'atelier de production textile" />
+<appellation intitule="Chef d'atelier en chaussures" />
+<appellation intitule="Chef d'équipe d'atelier de tricotage" />
+<appellation intitule="Chef d'équipe des industries des matériaux souples" />
+<appellation intitule="Chef d'équipe en maroquinerie" />
+<appellation intitule="Chef d'équipe préparation en chaussures" />
+<appellation intitule="Contremaître / Contremaîtresse de teinture textile" />
+<appellation intitule="Contremaître / Contremaîtresse tulliste" />
+<appellation intitule="Responsable d'atelier d'assemblage-montage en habillement" />
+<appellation intitule="Responsable d'atelier d'assemblage-montage en industries des cuirs et peaux et matériaux associés" />
+<appellation intitule="Responsable d'atelier de blanchisserie industrielle" />
+<appellation intitule="Responsable d'atelier de coupe en industrie des matériaux souples" />
+<appellation intitule="Responsable d'atelier de fabrication de produits nontissés" />
+<appellation intitule="Responsable d'atelier de filature" />
+<appellation intitule="Responsable d'atelier de finition des industries des matériaux souples" />
+<appellation intitule="Responsable d'atelier de production cuirs et peaux" />
+<appellation intitule="Responsable d'atelier de production habillement" />
+<appellation intitule="Responsable d'atelier de production textile" />
+<appellation intitule="Responsable d'atelier de tissage" />
+<appellation intitule="Responsable d'atelier de tricotage" />
+<appellation intitule="Responsable d'atelier d'ennoblissement textile" />
+<appellation intitule="Responsable d'atelier finissage cuir" />
+<appellation intitule="Responsable de groupe de machines textiles" />
+<appellation intitule="Responsable de ligne de fabrication textile" />
+<appellation intitule="Responsable d'équipe de production traitement de linge" />
+<appellation intitule="Responsable d'unité de production cuirs et peaux" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H26" intitule="Électronique et électricité">
+<fiche
+ code="H2601" intitule="Bobinage électrique">
+<liste_appellations>
+<appellation intitule="Assistant bobineur / Assistante bobineuse en électricité" />
+<appellation intitule="Assistant bobinier / Assistante bobinière en électricité" />
+<appellation intitule="Bobineur / Bobineuse en électricité" />
+<appellation intitule="Bobinier / Bobinière de fabrication" />
+<appellation intitule="Bobinier / Bobinière de machines statiques électriques" />
+<appellation intitule="Bobinier / Bobinière de machines tournantes électriques" />
+<appellation intitule="Bobinier / Bobinière de maintenance" />
+<appellation intitule="Bobinier / Bobinière de transformateurs" />
+<appellation intitule="Bobinier / Bobinière en électricité" />
+<appellation intitule="Bobinier / Bobinière en matériels électriques" />
+<appellation intitule="Bobinier / Bobinière en matériels électroniques" />
+<appellation intitule="Bobinier électromécanicien / Bobinière électromécanicienne" />
+<appellation intitule="Chef d'équipe d'atelier de bobinage en électricité" />
+<appellation intitule="Electrobobinier / Electrobobinière" />
+<appellation intitule="Monteur / Monteuse de bobinage de gros matériel électrique" />
+<appellation intitule="Monteur-bobinier / Monteuse-bobinière en électricité" />
+<appellation intitule="Rebobineur / Rebobineuse en électricité" />
+<appellation intitule="Technicien / Technicienne d'atelier de bobinage en électricité" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2602" intitule="Câblage électrique et électromécanique">
+<liste_appellations>
+<appellation intitule="Câbleur / Câbleuse d'armoires" />
+<appellation intitule="Câbleur / Câbleuse de boîtiers d'équipements électriques" />
+<appellation intitule="Câbleur / Câbleuse de matériels électriques" />
+<appellation intitule="Câbleur / Câbleuse de matériels électromécaniques" />
+<appellation intitule="Câbleur / Câbleuse en appareillage haute tension" />
+<appellation intitule="Câbleur électricien / Câbleuse électricienne en aéronautique" />
+<appellation intitule="Câbleur électromécanicien / Câbleuse électromécanicienne" />
+<appellation intitule="Chef d'équipe câblage en fabrication de matériels électriques" />
+<appellation intitule="Chef d'équipe câblage en fabrication de matériels électromécaniques" />
+<appellation intitule="Electricien / Electricienne d'équipements industriels" />
+<appellation intitule="Electromécanicien / Electromécanicienne de câblage en aéronautique" />
+<appellation intitule="Monteur / Monteuse de transformateurs" />
+<appellation intitule="Monteur / Monteuse en machines tournantes électriques" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse d'armoires" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse de matériels électriques" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse en construction de matériels électriques" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse en construction de matériels électromécaniques" />
+<appellation intitule="Tableautiste en électricité" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2603" intitule="Conduite d'installation automatisée de production électrique, électronique et microéle">
+<liste_appellations>
+<appellation intitule="Agent / Agente de fabrication de composants électroniques" />
+<appellation intitule="Agent / Agente de production de composants électroniques" />
+<appellation intitule="Chef d'équipe de production automatisée en électronique" />
+<appellation intitule="Conducteur / Conductrice de ligne automatisée en production électrique" />
+<appellation intitule="Conducteur / Conductrice de ligne automatisée en production électronique" />
+<appellation intitule="Conducteur / Conductrice de ligne Composants Montés en Surface -CMS-" />
+<appellation intitule="Conducteur / Conductrice de machines à vagues" />
+<appellation intitule="Conducteur / Conductrice de machines automatiques en production électronique" />
+<appellation intitule="Conducteur / Conductrice de machines automatiques en production microélectronique" />
+<appellation intitule="Conducteur / Conductrice support en électronique" />
+<appellation intitule="Opérateur / Opératrice de fabrication de circuits imprimés" />
+<appellation intitule="Opérateur / Opératrice de fabrication en microélectronique" />
+<appellation intitule="Opérateur / Opératrice de ligne en électronique" />
+<appellation intitule="Opérateur / Opératrice de photogravure en électronique" />
+<appellation intitule="Opérateur / Opératrice de photomasquage en électronique" />
+<appellation intitule="Opérateur / Opératrice d'implantation ionique en électronique" />
+<appellation intitule="Opérateur / Opératrice en microélectronique" />
+<appellation intitule="Opérateur / Opératrice en nanoélectronique" />
+<appellation intitule="Opérateur / Opératrice en salle blanche en production électronique" />
+<appellation intitule="Opérateur / Opératrice en salle blanche en production microélectronique" />
+<appellation intitule="Opérateur / Opératrice sur machine à bobiner en électricité" />
+<appellation intitule="Opérateur / Opératrice sur machines automatisées en production électrique" />
+<appellation intitule="Opérateur / Opératrice sur machines automatisées en production électronique" />
+<appellation intitule="Opérateur / Opératrice sur machines d'insertion de composants électroniques" />
+<appellation intitule="Opérateur contrôleur / Opératrice contrôleuse en fabrication microélectronique" />
+<appellation intitule="Opérateur-soudeur / Opératrice-soudeuse à la vague" />
+<appellation intitule="Technicien / Technicienne de fabrication de composants électroniques" />
+<appellation intitule="Technicien / Technicienne de fabrication de composants microélectroniques" />
+<appellation intitule="Technicien / Technicienne d'opération en microélectronique" />
+<appellation intitule="Technicien / Technicienne en salle blanche en production électronique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2604" intitule="Montage de produits électriques et électroniques">
+<liste_appellations>
+<appellation intitule="Agent / Agente de fabrication de matériels électriques et électroniques" />
+<appellation intitule="Agent / Agente de production de matériels électriques" />
+<appellation intitule="Agent / Agente de production de matériels électroniques" />
+<appellation intitule="Assembleur / Assembleuse en produits électriques" />
+<appellation intitule="Assembleur / Assembleuse en produits électroniques" />
+<appellation intitule="Chef d'équipe de production de matériels électriques" />
+<appellation intitule="Monteur / Monteuse de fabrication de matériels électriques" />
+<appellation intitule="Monteur / Monteuse de fabrication de matériels électroniques" />
+<appellation intitule="Monteur / Monteuse en fabrication de produits électriques" />
+<appellation intitule="Monteur / Monteuse en fabrication de produits électroniques" />
+<appellation intitule="Monteur assembleur / Monteuse assembleuse en fabrication de matériels électriques" />
+<appellation intitule="Opérateur / Opératrice de fabrication de matériels électriques et électroniques" />
+<appellation intitule="Opérateur / Opératrice sur machine semi-automatique en production électrique" />
+<appellation intitule="Opérateur / Opératrice sur machine semi-automatique en production électronique" />
+<appellation intitule="Ouvrier / Ouvrière de montage en appareils électriques" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2605" intitule="Montage et câblage électronique">
+<liste_appellations>
+<appellation intitule="Câbleur / Câbleuse de cartes de circuits imprimés" />
+<appellation intitule="Câbleur / Câbleuse en électronique" />
+<appellation intitule="Câbleur / Câbleuse en microsoudure en électronique" />
+<appellation intitule="Chef d'équipe câblage en électronique" />
+<appellation intitule="Electronicien-câbleur / Electronicienne-câbleuse d'équipement" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse de circuits imprimés" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse de composants électroniques" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse en électronique" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse en électronique professionnelle" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse en microélectronique" />
+<appellation intitule="Monteur-câbleur / Monteuse-câbleuse maquettiste en électronique" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H27" intitule="Énergie">
+<fiche
+ code="H2701" intitule="Pilotage d'installation énergétique et pétrochimique">
+<liste_appellations>
+<appellation intitule="Agent / Agente de terrain en production d'énergie" />
+<appellation intitule="Chargé / Chargée de conduite en production d'énergie" />
+<appellation intitule="Chauffeur / Chauffeuse de four en incinération des ordures" />
+<appellation intitule="Chef opérateur / opératrice en raffinerie" />
+<appellation intitule="Conducteur / Conductrice de bloc nucléaire" />
+<appellation intitule="Conducteur / Conductrice de production d'énergie sur chaudière industrielle" />
+<appellation intitule="Conducteur / Conductrice d'installation d'incinération" />
+<appellation intitule="Consoliste en raffinerie" />
+<appellation intitule="Opérateur / Opératrice combustible" />
+<appellation intitule="Opérateur / Opératrice console en production d'énergie" />
+<appellation intitule="Opérateur / Opératrice de conduite centralisée en énergie" />
+<appellation intitule="Opérateur / Opératrice de conduite en centrale nucléaire" />
+<appellation intitule="Opérateur / Opératrice de conduite en raffinerie" />
+<appellation intitule="Opérateur / Opératrice de production en énergie/pétrochimie" />
+<appellation intitule="Opérateur / Opératrice d'exploitation en production d'énergie" />
+<appellation intitule="Opérateur / Opératrice salle de contrôle en production d'énergie" />
+<appellation intitule="Opérateur / Opératrice tableau en raffinerie" />
+<appellation intitule="Opérateur extérieur / Opératrice extérieure de raffinerie" />
+<appellation intitule="Opérateur extérieur / Opératrice extérieure des industries pétrochimiques et de production d'énergie" />
+<appellation intitule="Pilote d'installation de production d'énergie" />
+<appellation intitule="Pilote d'installation des industries pétrochimiques" />
+<appellation intitule="Pupitreur / Pupitreuse en production d'énergie" />
+<appellation intitule="Pupitreur / Pupitreuse en raffinerie" />
+<appellation intitule="Rondier / Rondière en pétrochimie" />
+<appellation intitule="Rondier / Rondière en production d'énergie" />
+<appellation intitule="Tableautiste en production d'énergie" />
+<appellation intitule="Tableautiste en raffinerie" />
+<appellation intitule="Technicien / Technicienne combustible levage" />
+<appellation intitule="Technicien / Technicienne de production en pétrochimie" />
+<appellation intitule="Technicien / Technicienne d'exploitation en production d'énergie" />
+<appellation intitule="Technicien / Technicienne énergie" />
+<appellation intitule="Technicien supérieur atomicien / Technicienne supérieure atomicienne de conduite de systèmes nucléaires de propulsion navale" />
+<appellation intitule="Turbinier / Turbinière" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H28" intitule="Matériaux de construction, céramique et verre">
+<fiche
+ code="H2801" intitule="Conduite d'équipement de transformation du verre">
+<liste_appellations>
+<appellation intitule="Agent / Agente de fabrication en production/transformation du verre" />
+<appellation intitule="Bobineur / Bobineuse de fils et fibres de verre" />
+<appellation intitule="Conducteur / Conductrice de laminage en production/transformation du verre" />
+<appellation intitule="Conducteur / Conductrice de machines de formage du verre" />
+<appellation intitule="Conducteur / Conductrice de machines sur ligne de transformation du verre" />
+<appellation intitule="Conducteur / Conductrice de presses en production/transformation du verre" />
+<appellation intitule="Conducteur / Conductrice de soufflage en production/transformation du verre" />
+<appellation intitule="Conducteur régleur / Conductrice régleuse en production/transformation du verre" />
+<appellation intitule="Conducteur régleur / Conductrice régleuse sur presse en production/transformation du verre" />
+<appellation intitule="Etireur / Etireuse en fils et fibres de verre" />
+<appellation intitule="Fileur / Fileuse en fils et fibres de verre" />
+<appellation intitule="Opérateur / Opératrice feeder en production/transformation du verre" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2802" intitule="Conduite d'installation de production de matériaux de construction">
+<liste_appellations>
+<appellation intitule="Conducteur / Conductrice de machines d'extrusion en matériaux de construction" />
+<appellation intitule="Conducteur / Conductrice d'installation en matériaux de construction" />
+<appellation intitule="Machiniste en matériaux de construction" />
+<appellation intitule="Opérateur / Opératrice de fabrication en matériaux de construction" />
+<appellation intitule="Opérateur / Opératrice sur machine automatisée en matériaux de construction" />
+<appellation intitule="Opérateur / Opératrice sur machine de fabrication de matériaux de construction" />
+<appellation intitule="Pilote de ligne automatisée en matériaux de construction" />
+<appellation intitule="Pilote d'installation automatisée de l'industrie du béton" />
+<appellation intitule="Pilote d'installation automatisée en matériaux de construction" />
+<appellation intitule="Pilote d'installation de l'industrie du béton" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2803" intitule="Façonnage et émaillage en industrie céramique">
+<liste_appellations>
+<appellation intitule="Calibreur / Calibreuse en céramique" />
+<appellation intitule="Calibreur / Calibreuse sur machine en industrie céramique" />
+<appellation intitule="Chef d'équipe de moulage en céramique" />
+<appellation intitule="Conducteur / Conductrice de ligne d'émaillage" />
+<appellation intitule="Conducteur / Conductrice de machines de façonnage en céramique" />
+<appellation intitule="Conducteur / Conductrice de mouleuses en céramique" />
+<appellation intitule="Couleur / Couleuse en céramique" />
+<appellation intitule="Couleur-finisseur / Couleuse-finisseuse en céramique" />
+<appellation intitule="Emailleur / Emailleuse en céramique" />
+<appellation intitule="Emailleur / Emailleuse sur installation en céramique" />
+<appellation intitule="Mouleur / Mouleuse en céramique" />
+<appellation intitule="Opérateur / Opératrice de façonnage en industrie céramique" />
+<appellation intitule="Opérateur / Opératrice de production en céramique" />
+<appellation intitule="Opérateur / Opératrice d'émaillage en industrie céramique" />
+<appellation intitule="Opérateur régleur / Opératrice régleuse sur chaîne de calibrage en céramique" />
+<appellation intitule="Presseur / Presseuse en céramique" />
+<appellation intitule="Technicien / Technicienne de fabrication en céramique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2804" intitule="Pilotage de centrale à béton prêt à l'emploi, ciment, enrobés et granulats">
+<liste_appellations>
+<appellation intitule="Agent / Agente technique de centrale à béton prêt à l'emploi" />
+<appellation intitule="Agent / Agente technique de centrale à enrobés" />
+<appellation intitule="Agent / Agente technique de centrale ciment" />
+<appellation intitule="Agent / Agente technique de centrale en industrie routière" />
+<appellation intitule="Agent / Agente technique d'installation de granulat" />
+<appellation intitule="Centraliste en fabrication de béton prêt à l'emploi" />
+<appellation intitule="Centraliste en fabrication de ciment" />
+<appellation intitule="Contremaître / Contremaîtresse de poste centralisé en cimenterie" />
+<appellation intitule="Opérateur / Opératrice de poste centralisé en cimenterie" />
+<appellation intitule="Opérateur / Opératrice en salle de contrôle en cimenterie" />
+<appellation intitule="Pilote de centrale de béton prêt à l'emploi" />
+<appellation intitule="Pilote d'installation de traitement de granulats" />
+<appellation intitule="Pilote d'installation en production de ciment" />
+<appellation intitule="Pilote primaire fonds de carrière" />
+<appellation intitule="Rondier / Rondière en centrale à béton prêt à l'emploi" />
+<appellation intitule="Rondier / Rondière en centrale ciment" />
+<appellation intitule="Rondier / Rondière en installation de traitement de granulats" />
+<appellation intitule="Rondier / Rondière en installation de traitement d'enrobés" />
+<appellation intitule="Technicien / Technicienne de production de béton prêt à l'emploi" />
+<appellation intitule="Technicien / Technicienne de production de granulats" />
+<appellation intitule="Technicien / Technicienne de production d'enrobés" />
+<appellation intitule="Technicien / Technicienne de production en ciment" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2805" intitule="Pilotage d'installation de production verrière">
+<liste_appellations>
+<appellation intitule="Chargeur / Chargeuse de four en production/transformation de verre" />
+<appellation intitule="Conducteur / Conductrice de four en production/transformation de verre" />
+<appellation intitule="Conducteur / Conductrice de ligne en production de verre" />
+<appellation intitule="Conducteur fondeur / Conductrice fondeuse en industrie verrière" />
+<appellation intitule="Fondeur / Fondeuse en production/transformation de verre" />
+<appellation intitule="Fondeur-composeur / Fondeuse-composeuse en industrie verrière" />
+<appellation intitule="Lanceur / Lanceuse de fabrication en industrie verrière" />
+<appellation intitule="Pilote d'installation de production de matière verrière" />
+<appellation intitule="Surveillant / Surveillante de four en production/transformation de verre" />
+<appellation intitule="Technicien / Technicienne en production/transformation de verre" />
+<appellation intitule="Technicien / Technicienne fusion en industrie verrière" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H29" intitule="Mécanique, travail des métaux et outillage">
+<fiche
+ code="H2901" intitule="Ajustement et montage de fabrication">
+<liste_appellations>
+<appellation intitule="Ajusteur / Ajusteuse au banc" />
+<appellation intitule="Ajusteur / Ajusteuse composites" />
+<appellation intitule="Ajusteur / Ajusteuse de fabrication" />
+<appellation intitule="Ajusteur balancier / Ajusteuse balancière" />
+<appellation intitule="Ajusteur-emboutisseur / Ajusteuse-emboutisseuse" />
+<appellation intitule="Ajusteur-matriçeur / Ajusteuse-matriçeuse" />
+<appellation intitule="Ajusteur-mécanicien / Ajusteuse-mécanicienne de fabrication" />
+<appellation intitule="Ajusteur-metteur / Ajusteuse-metteuse au point de prototypes" />
+<appellation intitule="Ajusteur-monteur / Ajusteuse-monteuse aéronautique" />
+<appellation intitule="Ajusteur-monteur / Ajusteuse-monteuse de cellules aéronefs" />
+<appellation intitule="Ajusteur-monteur / Ajusteuse-monteuse de fabrication" />
+<appellation intitule="Ajusteur-mouliste / Ajusteuse-mouliste" />
+<appellation intitule="Ajusteur-outilleur / Ajusteuse-outilleuse de fabrication" />
+<appellation intitule="Ajusteur-outilleur / Ajusteuse-outilleuse sur moule métallique" />
+<appellation intitule="Ajusteur-rectifieur / Ajusteuse-rectifieuse de fabrication" />
+<appellation intitule="Ajusteur-régleur / Ajusteuse-régleuse de fabrication en instruments d'optique" />
+<appellation intitule="Armurier / Armurière de fabrication" />
+<appellation intitule="Mécanicien / Mécanicienne de précision" />
+<appellation intitule="Mécanicien / Mécanicienne mouliste de fabrication" />
+<appellation intitule="Mécanicien / Mécanicienne outils à découper et à emboutir" />
+<appellation intitule="Mécanicien / Mécanicienne plaquiste" />
+<appellation intitule="Mécanicien / Mécanicienne structures et techniques de l'aviation légère de l'armée de terre" />
+<appellation intitule="Mécanicien monteur / Mécanicienne monteuse de fabrication" />
+<appellation intitule="Mécanicien-ajusteur / Mécanicienne-ajusteuse de fabrication" />
+<appellation intitule="Mécanicien-armurier / Mécanicienne-armurière" />
+<appellation intitule="Mécanicien-outilleur / Mécanicienne-outilleuse" />
+<appellation intitule="Mécanicien-outilleur / Mécanicienne-outilleuse en découpage et emboutissage" />
+<appellation intitule="Micro mécanicien / mécanicienne" />
+<appellation intitule="Monteur ajusteur / Monteuse ajusteuse de systèmes mécaniques" />
+<appellation intitule="Monteur régleur / Monteuse régleuse de fabrication en instruments d'optique" />
+<appellation intitule="Monteur régleur / Monteuse régleuse de systèmes mécaniques" />
+<appellation intitule="Outilleur-mouliste / Outilleuse-mouliste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2902" intitule="Chaudronneri">
+<liste_appellations>
+<appellation intitule="Aide chaudronnier / chaudronnière" />
+<appellation intitule="Assembleur / Assembleuse au plan en chaudronnerie" />
+<appellation intitule="Chaudronnier / Chaudronnière" />
+<appellation intitule="Chaudronnier / Chaudronnière aéronautique" />
+<appellation intitule="Chaudronnier / Chaudronnière sur métaux" />
+<appellation intitule="Chaudronnier / Chaudronnière tôle fine" />
+<appellation intitule="Chaudronnier soudeur / Chaudronnière soudeuse" />
+<appellation intitule="Chaudronnier traceur / Chaudronnière traceuse" />
+<appellation intitule="Chaudronnier-tolier / Chaudronnière-tôlière" />
+<appellation intitule="Chaudronnier-tuyauteur / Chaudronnière-tuyauteuse" />
+<appellation intitule="Chaudronnier-tuyauteur / Chaudronnière-tuyauteuse en thermoplastiques" />
+<appellation intitule="Chef d'équipe traceur / traceuse en chaudronnerie" />
+<appellation intitule="Ferreur / Ferreuse en chaudronnerie-tôlerie" />
+<appellation intitule="Opérateur / Opératrice en chaudronnerie" />
+<appellation intitule="Opérateur / Opératrice en tôlerie industrielle" />
+<appellation intitule="Serrurier métallier industriel / Serrurière métallière industrielle" />
+<appellation intitule="Technicien / Technicienne de production en tôlerie" />
+<appellation intitule="Tôlier / Tôlière" />
+<appellation intitule="Tôlier-chaudronnier / Tôlière-chaudronnière" />
+<appellation intitule="Tôlier-formeur / Tôlière-formeuse" />
+<appellation intitule="Tôlier-serrurier / Tôlière-serrurière" />
+<appellation intitule="Tôlier-traceur / Tôlière-traceuse" />
+<appellation intitule="Traceur / Traceuse en chaudronnerie" />
+<appellation intitule="Traceur / Traceuse en construction aéronautique" />
+<appellation intitule="Traceur / Traceuse en serrurerie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2903" intitule="Conduite d'équipement d'usinage">
+<liste_appellations>
+<appellation intitule="Affûteur / Affûteuse de fraises" />
+<appellation intitule="Affûteur / Affûteuse de menuiserie" />
+<appellation intitule="Affûteur / Affûteuse de scierie" />
+<appellation intitule="Affûteur / Affûteuse d'outillage industriel" />
+<appellation intitule="Affûteur / Affûteuse d'outils de coupe" />
+<appellation intitule="Affûteur-ajusteur / Affûteuse-ajusteuse" />
+<appellation intitule="Affûteur-outilleur / Affûteuse-outilleuse" />
+<appellation intitule="Affûteur-régleur / Affûteuse-régleuse" />
+<appellation intitule="Aléseur / Aléseuse" />
+<appellation intitule="Aléseur pointeur / Aléseuse pointeuse" />
+<appellation intitule="Conducteur / Conductrice de machines automatique du travail des métaux" />
+<appellation intitule="Conducteur / Conductrice de machines d'usinage en menuiserie PVC" />
+<appellation intitule="Conducteur / Conductrice de machines outil d'usinage des métaux" />
+<appellation intitule="Décolleteur / Décolleteuse" />
+<appellation intitule="Erodeur / Erodeuse" />
+<appellation intitule="Etinceleur / Etinceleuse en électroérosion" />
+<appellation intitule="Fraiseur / Fraiseuse" />
+<appellation intitule="Fraiseur / Fraiseuse mouliste" />
+<appellation intitule="Fraiseur / Fraiseuse sur Commande Numérique -CN-" />
+<appellation intitule="Fraiseur outilleur / Fraiseuse outilleuse" />
+<appellation intitule="Mécanicien régleur / Mécanicienne régleuse de machine automatique du travail des métaux" />
+<appellation intitule="Mécanicien-fraiseur / Mécanicienne-fraiseuse" />
+<appellation intitule="Mécanicien-tourneur / Mécanicienne-tourneuse" />
+<appellation intitule="Modeleur / Modeleuse sur machine outil" />
+<appellation intitule="Mortaiseur / Mortaiseuse" />
+<appellation intitule="Mouliste sur machine outil" />
+<appellation intitule="Opérateur / Opératrice de centre d'usinage" />
+<appellation intitule="Opérateur / Opératrice sur Commande Numérique -CN-" />
+<appellation intitule="Opérateur régleur / Opératrice régleuse usinage" />
+<appellation intitule="Opérateur régleur-programmeur / Opératrice régleuse-programmeuse sur machines à commande numérique -CN-" />
+<appellation intitule="Opérateur-régleur / Opératrice-régleuse sur machine-outil d'usinage des métaux" />
+<appellation intitule="Perceur / Perceuse sur marchine radiale" />
+<appellation intitule="Pilote de cellule d'usinage" />
+<appellation intitule="Pointeur / Pointeuse en usinage" />
+<appellation intitule="Pointeur aléseur / Pointeuse aléseuse" />
+<appellation intitule="Radialeur / Radialeuse" />
+<appellation intitule="Rectifieur / Rectifieuse d'engrenage" />
+<appellation intitule="Rectifieur / Rectifieuse en usinage" />
+<appellation intitule="Régleur décolleteur / Régleuse décolleteuse" />
+<appellation intitule="Tailleur / Tailleuse d'engrenage" />
+<appellation intitule="Tourneur / Tourneuse" />
+<appellation intitule="Tourneur / Tourneuse en cylindre de laminoir" />
+<appellation intitule="Tourneur / Tourneuse sur Commande Numérique -CN-" />
+<appellation intitule="Tourneur / Tourneuse sur tour vertical" />
+<appellation intitule="Tourneur-décolleteur / Tourneuse-décolleteuse" />
+<appellation intitule="Tourneur-fraiseur / Tourneuse-fraiseuse" />
+<appellation intitule="Tourneur-fraiseur / Tourneuse-fraiseuse sur Commande Numérique -CN-" />
+<appellation intitule="Tourneur-mécanicien / Tourneuse-mécanicienne" />
+<appellation intitule="Tourneur-mouliste / Tourneuse-mouliste" />
+<appellation intitule="Tourneur-rectifieur / Tourneuse-rectifieuse" />
+<appellation intitule="Usineur / Usineuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2904" intitule="Conduite d'équipement de déformation des métaux">
+<liste_appellations>
+<appellation intitule="Aide compagnon forgeron industriel / Aide compagnonne forgeronne industrielle" />
+<appellation intitule="Aide forgeron pilonnier / forgeronne pilonnière" />
+<appellation intitule="Aide lamineur / lamineuse" />
+<appellation intitule="Bobineur / Bobineuse de tréfilerie" />
+<appellation intitule="Bobineur / Bobineuse en métallurgie" />
+<appellation intitule="Chef d'équipe d'estampage" />
+<appellation intitule="Chef d'équipe en métallurgie" />
+<appellation intitule="Chef d'équipe en tréfilerie" />
+<appellation intitule="Chef lamineur / lamineuse en métallurgie" />
+<appellation intitule="Compagnon / Compagnonne forge industrielle" />
+<appellation intitule="Conducteur / Conductrice de laminoirs en métallurgie" />
+<appellation intitule="Conducteur / Conductrice de ligne de tréfilage" />
+<appellation intitule="Conducteur / Conductrice de presses en tréfilerie" />
+<appellation intitule="Conducteur / Conductrice d'équipements de formage" />
+<appellation intitule="Conducteur / Conductrice d'équipements de four en métallurgie" />
+<appellation intitule="Contrôleur visuel / Contrôleuse visuelle de laminage à froid" />
+<appellation intitule="Dresseur / Dresseuse en métallurgie" />
+<appellation intitule="Ebaucheur / Ebaucheuse de déformation des métaux" />
+<appellation intitule="Estampeur / Estampeuse" />
+<appellation intitule="Etireur / Etireuse en estampage" />
+<appellation intitule="Etireur / Etireuse en métallurgie" />
+<appellation intitule="Filiériste en tréfilerie" />
+<appellation intitule="Forgeron / Forgeronne en coutellerie industrielle" />
+<appellation intitule="Forgeron industriel / Forgeronne industrielle" />
+<appellation intitule="Frappeur / Frappeuse" />
+<appellation intitule="Lamineur / Lamineuse de couronnes" />
+<appellation intitule="Lamineur / Lamineuse en métallurgie" />
+<appellation intitule="Lamineur écrouteur / Lamineuse écrouteuse" />
+<appellation intitule="Lamineur opérateur / Lamineuse opératrice en cabine" />
+<appellation intitule="Lamineur-ébaucheur / Lamineuse-ébaucheuse" />
+<appellation intitule="Lamineur-finisseur / Lamineuse-finisseuse en métallurgie" />
+<appellation intitule="Machiniste sur marteau-pilon" />
+<appellation intitule="Martineur / Martineuse de formage des métaux" />
+<appellation intitule="Mateur / Mateuse de déformation des métaux" />
+<appellation intitule="Matriceur / Matriceuse de formage des métaux" />
+<appellation intitule="Opérateur / Opératrice de laminoir" />
+<appellation intitule="Opérateur / Opératrice de première transformation des métaux" />
+<appellation intitule="Opérateur / Opératrice de transformation en forgeage" />
+<appellation intitule="Opérateur / Opératrice de transformation métallurgique en laminage à chaud" />
+<appellation intitule="Opérateur / Opératrice de transformation métallurgique en laminage de fond" />
+<appellation intitule="Opérateur / Opératrice de tréfilerie" />
+<appellation intitule="Opérateur / Opératrice sur banc de traction en métallurgie" />
+<appellation intitule="Pilonnier / Pilonnière de formage des métaux" />
+<appellation intitule="Pilote d'exploitation de laminoir" />
+<appellation intitule="Profileur / Profileuse en tréfilerie" />
+<appellation intitule="Réenrouleur / Réenrouleuse en métallurgie" />
+<appellation intitule="Surveillant / Surveillante de température de forge industrielle" />
+<appellation intitule="Technicien / Technicienne sur laminoir" />
+<appellation intitule="Tréfileur / Tréfileuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2905" intitule="Conduite d'équipement de formage et découpage des matériaux">
+<liste_appellations>
+<appellation intitule="Agent / Agente de débit de matériaux" />
+<appellation intitule="Agent / Agente de découpage de matériaux" />
+<appellation intitule="Chalumiste de découpage des métaux" />
+<appellation intitule="Chef d'équipe de découpe" />
+<appellation intitule="Cisailleur / Cisailleuse de forge" />
+<appellation intitule="Cisailleur / Cisailleuse de laminoir" />
+<appellation intitule="Cisailleur / Cisailleuse de matériaux" />
+<appellation intitule="Cisailleur / Cisailleuse en métallurgie" />
+<appellation intitule="Conducteur / Conductrice de cisaille" />
+<appellation intitule="Conducteur / Conductrice de ligne de presse à emboutir et à découper des métaux" />
+<appellation intitule="Conducteur / Conductrice d'équipements de découpe" />
+<appellation intitule="Conducteur régleur / Conductrice régleuse sur presse à découper" />
+<appellation intitule="Coupeur / Coupeuse au chalumeau" />
+<appellation intitule="Coupeur / Coupeuse de forge" />
+<appellation intitule="Coupeur / Coupeuse de verre plat" />
+<appellation intitule="Coupeur-rompeur / Coupeuse-rompeuse en verre plat" />
+<appellation intitule="Débiteur / Débitrice de matériaux" />
+<appellation intitule="Découpeur / Découpeuse de métaux" />
+<appellation intitule="Emboutisseur / Emboutisseuse" />
+<appellation intitule="Grignoteur / Grignoteuse" />
+<appellation intitule="Guillotineur / Guillotineuse" />
+<appellation intitule="Machiniste sur presse de formage des métaux" />
+<appellation intitule="Opérateur / Opératrice de cintreuse" />
+<appellation intitule="Opérateur / Opératrice de découpe en métallurgie" />
+<appellation intitule="Opérateur / Opératrice de plieuse" />
+<appellation intitule="Opérateur / Opératrice de redresseur" />
+<appellation intitule="Opérateur / Opératrice de rouleuse" />
+<appellation intitule="Opérateur / Opératrice d'emboutissage/découpe" />
+<appellation intitule="Opérateur / Opératrice en repoussage des métaux" />
+<appellation intitule="Opérateur / Opératrice planeuse" />
+<appellation intitule="Opérateur / Opératrice sur cintreuse" />
+<appellation intitule="Opérateur / Opératrice sur machine à découper au laser avec Commande Numérique -CN-" />
+<appellation intitule="Opérateur / Opératrice sur machine à découper au plasma avec Commande Numérique -CN-" />
+<appellation intitule="Opérateur / Opératrice sur machine à découper par jet d'eau avec Commande Numérique -CN-" />
+<appellation intitule="Opérateur / Opératrice sur machine à emboutir et à découper des métaux" />
+<appellation intitule="Opérateur / Opératrice sur machine de découpage à Commande Numérique -CN-" />
+<appellation intitule="Opérateur / Opératrice sur machine de découpage de matériaux" />
+<appellation intitule="Opérateur / Opératrice sur machine transfert" />
+<appellation intitule="Opérateur / Opératrice sur presse à découper/à emboutir" />
+<appellation intitule="Oxycoupeur / Oxycoupeuse" />
+<appellation intitule="Oxycoupeur / Oxycoupeuse plasma" />
+<appellation intitule="Oxycoupeur / Oxycoupeuse sur machine à Commande Numérique -CN-" />
+<appellation intitule="Oxycoupeur / Oxycoupeuse sur machine à lecture optique de matériaux" />
+<appellation intitule="Pilote d'installation d'emboutissage/découpe" />
+<appellation intitule="Plieur / Plieuse de verre plat" />
+<appellation intitule="Poinçonneur / Poinçonneuse" />
+<appellation intitule="Poinçonneur plieur / Poinçonneuse plieuse" />
+<appellation intitule="Presseur / Presseuse du travail des métaux" />
+<appellation intitule="Ressortier / Ressortière" />
+<appellation intitule="Scieur / Scieuse" />
+<appellation intitule="Tourneur-repousseur / Tourneuse-repousseuse" />
+<appellation intitule="Tronçonneur / Tronçonneuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2906" intitule="Conduite d'installation automatisée ou robotisée de fabrication mécanique">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'équipement automatisé de fabrication mécanique" />
+<appellation intitule="Agent / Agente d'équipement automatisé de production du travail des métaux et composites" />
+<appellation intitule="Agent / Agente d'équipement automatisé de production mécanique" />
+<appellation intitule="Agent d'exécution polyvalent / Agente d'exécution polyvalente d'équipement automatisé du travail des métaux et composites" />
+<appellation intitule="Conducteur / Conductrice de machines automatique de soudage à l'arc" />
+<appellation intitule="Conducteur / Conductrice de machines automatiques en montage-assemblage mécanique" />
+<appellation intitule="Conducteur / Conductrice de machines de soudage" />
+<appellation intitule="Conducteur / Conductrice de système de production automatisée en fabrication mécanique" />
+<appellation intitule="Conducteur / Conductrice d'équipements de ferrage" />
+<appellation intitule="Conducteur / Conductrice d'installation automatisée en fabrication mécanique" />
+<appellation intitule="Conducteur / Conductrice d'installation robotisée" />
+<appellation intitule="Opérateur / Opératrice de production d'équipement automatisé en construction mécanique" />
+<appellation intitule="Opérateur / Opératrice d'équipement automatisé de production du travail des métaux et composites" />
+<appellation intitule="Opérateur / Opératrice d'équipement de ferrage" />
+<appellation intitule="Opérateur / Opératrice sur machine automatique de production du travail des métaux et composites" />
+<appellation intitule="Opérateur / Opératrice sur machine automatique de production mécanique" />
+<appellation intitule="Opérateur / Opératrice sur machine automatisée de montage-assemblage mécanique" />
+<appellation intitule="Opérateur / Opératrice sur machine de soudage" />
+<appellation intitule="Opérateur / Opératrice sur machine de soudage sous flux gazeux" />
+<appellation intitule="Opérateur / Opératrice sur machine de soudage sous flux solide" />
+<appellation intitule="Opérateur / Opératrice sur machine du travail des métaux et composites" />
+<appellation intitule="Opérateur / Opératrice sur machines automatiques de soudage" />
+<appellation intitule="Opérateur polyvalent / Opératrice polyvalente d'équipement automatisé du travail des métaux et composites" />
+<appellation intitule="Opérateur régleur / Opératrice régleuse sur robot de soudage" />
+<appellation intitule="Ouvrier / Ouvrière sur machine du travail des métaux et composites" />
+<appellation intitule="Servant / Servante de machine en construction mécanique" />
+<appellation intitule="Soudeur / Soudeuse sur machines automatiques de soudage à l'arc" />
+<appellation intitule="Soudeur / Soudeuse sur machines automatiques par bombardement d'électrons" />
+<appellation intitule="Soudeur / Soudeuse sur machines automatiques par friction" />
+<appellation intitule="Soudeur / Soudeuse sur machines automatiques par point" />
+<appellation intitule="Soudeur / Soudeuse sur machines automatiques par résistance" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2907" intitule="Conduite d'installation de production des métaux">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'exploitation en production des métaux" />
+<appellation intitule="Agent / Agente technique d'élaboration en fonderie" />
+<appellation intitule="Appareilleur-gazier / Appareilleuse-gazière" />
+<appellation intitule="Chargeur / Chargeuse de four en métallurgie" />
+<appellation intitule="Chauffeur-conducteur / Chauffeuse-conductrice de four de forge/estampage" />
+<appellation intitule="Chef de four en salle en métallurgie" />
+<appellation intitule="Chef de fusion en métallurgie" />
+<appellation intitule="Chef d'équipe à la fusion en fonderie" />
+<appellation intitule="Chef d'équipe de fabrication en métallurgie" />
+<appellation intitule="Conducteur / Conductrice de chaînes d'agglomération en métallurgie" />
+<appellation intitule="Conducteur / Conductrice de cubillots" />
+<appellation intitule="Conducteur / Conductrice de four à induction" />
+<appellation intitule="Conducteur / Conductrice de four de coulée" />
+<appellation intitule="Conducteur / Conductrice de four de fusion en fonderie" />
+<appellation intitule="Conducteur / Conductrice de four de fusion en métallurgie" />
+<appellation intitule="Conducteur / Conductrice de four de réchauffage en première transformation des métaux" />
+<appellation intitule="Conducteur / Conductrice de four en électrométallurgie" />
+<appellation intitule="Conducteur / Conductrice de four en métallurgie" />
+<appellation intitule="Conducteur / Conductrice de haut-fourneau" />
+<appellation intitule="Conducteur / Conductrice de machines à couler sous pression" />
+<appellation intitule="Conducteur / Conductrice de machines à mouler en fonderie" />
+<appellation intitule="Conducteur / Conductrice de poche de coulée" />
+<appellation intitule="Conducteur / Conductrice de presses aluminium a injecter" />
+<appellation intitule="Conducteur / Conductrice d'installation de production des métaux" />
+<appellation intitule="Conducteur couleur / Conductrice couleuse de four à arc en aluminium" />
+<appellation intitule="Conducteur-réchauffeur / Conductrice-réchauffeuse en métallurgie" />
+<appellation intitule="Coquilleur / Coquilleuse en fonderie" />
+<appellation intitule="Couleur / Couleuse de ligne en métallurgie" />
+<appellation intitule="Couleur / Couleuse en métallurgie" />
+<appellation intitule="Couleur-fondeur / Couleuse-fondeuse d'aluminium" />
+<appellation intitule="Couleur-fondeur / Couleuse-fondeuse en métallurgie" />
+<appellation intitule="Couleur-pocheur / Couleuse-pocheuse en métallurgie" />
+<appellation intitule="Cubilotier / Cubilotière en fonderie" />
+<appellation intitule="Fondeur / Fondeuse en métallurgie" />
+<appellation intitule="Fondeur / Fondeuse fusion en métallurgie" />
+<appellation intitule="Fondeur / Fondeuse sur site en métallurgie" />
+<appellation intitule="Fondeur Couleur / Fondeuse couleuse en métallurgie" />
+<appellation intitule="Gestionnaire flux métal" />
+<appellation intitule="Haut-fourniste" />
+<appellation intitule="Opérateur / Opératrice d'affinage en métallurgie" />
+<appellation intitule="Opérateur / Opératrice d'agglomération en métallurgie" />
+<appellation intitule="Opérateur / Opératrice de chaîne d'agglomération" />
+<appellation intitule="Opérateur / Opératrice de coulée en métallurgie" />
+<appellation intitule="Opérateur / Opératrice de haut-fourneau" />
+<appellation intitule="Opérateur / Opératrice de production des métaux" />
+<appellation intitule="Opérateur / Opératrice élaboration en fonderie" />
+<appellation intitule="Opérateur / Opératrice foyer en métallurgie" />
+<appellation intitule="Ouvrier / Ouvrière de bassin en métallurgie" />
+<appellation intitule="Ouvrier / Ouvrière de coulée en métallurgie" />
+<appellation intitule="Ouvrier / Ouvrière de fusion en métallurgie" />
+<appellation intitule="Ouvrier / Ouvrière de plancher en métallurgie" />
+<appellation intitule="Ouvrier / Ouvrière sidérurgiste" />
+<appellation intitule="Ouvrier fondeur / Ouvrière fondeuse" />
+<appellation intitule="Pilote de machine à coulée" />
+<appellation intitule="Pilote d'installation de coulée continue" />
+<appellation intitule="Pilote d'installation de production des métaux" />
+<appellation intitule="Responsable de fusion en métallurgie" />
+<appellation intitule="Technicien / Technicienne de fabrication en sidérurgie" />
+<appellation intitule="Technicien / Technicienne de production en fonderie" />
+<appellation intitule="Technicien / Technicienne de transformation métallurgique" />
+<appellation intitule="Technicien / Technicienne d'exploitation en production des métaux" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2908" intitule="Modelage de matériaux non métalliques">
+<liste_appellations>
+<appellation intitule="Chef d'atelier de modelage" />
+<appellation intitule="Maquettiste modeleur / modeleuse" />
+<appellation intitule="Matriceur / Matriceuse en céramique" />
+<appellation intitule="Modeleur / Modeleuse bois" />
+<appellation intitule="Modeleur / Modeleuse céramiste" />
+<appellation intitule="Modeleur / Modeleuse en céramique" />
+<appellation intitule="Modeleur / Modeleuse en fonderie" />
+<appellation intitule="Modeleur / Modeleuse matières plastiques" />
+<appellation intitule="Modeleur / Modeleuse mouliste" />
+<appellation intitule="Modeleur / Modeleuse plaquiste" />
+<appellation intitule="Modeleur / Modeleuse résine" />
+<appellation intitule="Modeleur / Modeleuse sur matériaux non métalliques" />
+<appellation intitule="Modeleur / Modeleuse sur plâtre" />
+<appellation intitule="Modeleur / Modeleuse technique" />
+<appellation intitule="Modeleur traditionnel / Modeleuse traditionnelle" />
+<appellation intitule="Modeleur traditionnel / Modeleuse traditionnelle en céramique" />
+<appellation intitule="Mouliste en céramique" />
+<appellation intitule="Mouliste en matériaux composites" />
+<appellation intitule="Mouliste en matériaux non métalliques" />
+<appellation intitule="Noyauteur / Noyauteuse en céramique" />
+<appellation intitule="Noyauteur / Noyauteuse main sur matériaux non métalliques" />
+<appellation intitule="Technicien modeleur / Technicienne modeleuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2909" intitule="Montag">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'assemblage mécanique" />
+<appellation intitule="Agent / Agente de fabrication en montage-assemblage mécanique" />
+<appellation intitule="Agent / Agente de montage mécanique" />
+<appellation intitule="Agent / Agente de montage-assemblage mécanique" />
+<appellation intitule="Agent / Agente de production de montage-assemblage mécanique" />
+<appellation intitule="Aide-mécanicien / Aide-mécanicienne en montage-assemblage mécanique" />
+<appellation intitule="Aide-monteur / Aide-monteuse en montage-assemblage mécanique" />
+<appellation intitule="Aide-soudeur / Aide-soudeuse en montage-assemblage mécanique" />
+<appellation intitule="Assembleur monteur / Assembleuse monteuse" />
+<appellation intitule="Etancheur / Etancheuse en montage-assemblage mécanique" />
+<appellation intitule="Monteur / Monteuse d'assemblage mécanique de précision" />
+<appellation intitule="Monteur / Monteuse de pièces" />
+<appellation intitule="Monteur / Monteuse en grappe en cire perdue" />
+<appellation intitule="Monteur / Monteuse en ligne de fabrication automobile" />
+<appellation intitule="Monteur / Monteuse en lunetterie" />
+<appellation intitule="Monteur / Monteuse sur chaîne d'assemblage" />
+<appellation intitule="Opérateur / Opératrice d'assemblage mécanique" />
+<appellation intitule="Opérateur / Opératrice de montage assemblage mécanique" />
+<appellation intitule="Opérateur / Opératrice de montage en montage-assemblage mécanique" />
+<appellation intitule="Opérateur / Opératrice de production en montage-assemblage mécanique" />
+<appellation intitule="Opérateur / Opératrice sur ligne de montage mécanique" />
+<appellation intitule="Opérateur polyvalent / Opératrice polyvalente montage-assemblage mécanique" />
+<appellation intitule="Opérateur qualifié / Opératrice qualifiée de montage de véhicules" />
+<appellation intitule="Ouvrier / Ouvrière de montage en assemblage mécanique" />
+<appellation intitule="Ouvrier / Ouvrière de montage en construction automobile" />
+<appellation intitule="Ouvrier / Ouvrière de montage mécanique en aéronautique" />
+<appellation intitule="Retoucheur / Retoucheuse électricité en construction automobile" />
+<appellation intitule="Retoucheur / Retoucheuse sur tôles nues en construction automobile" />
+<appellation intitule="Retoucheur sellier / Retoucheuse sellière en construction automobile" />
+<appellation intitule="Rhabilleur / Rhabilleuse en horlogerie" />
+<appellation intitule="Rhabilleur / Rhabilleuse en lunetterie" />
+<appellation intitule="Soudeur / Soudeuse en lunetterie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2910" intitule="Moulage sable">
+<liste_appellations>
+<appellation intitule="Agent / Agente de fabrication en fonderie de moulage en sable" />
+<appellation intitule="Chef d'équipe moulage/noyautage" />
+<appellation intitule="Machiniste aide mouleur / mouleuse" />
+<appellation intitule="Mouleur / Mouleuse de fonderie en fosse" />
+<appellation intitule="Mouleur / Mouleuse de grosses pièces de fonderie en fosse" />
+<appellation intitule="Mouleur / Mouleuse main" />
+<appellation intitule="Mouleur / Mouleuse plaquiste" />
+<appellation intitule="Mouleur / Mouleuse sable" />
+<appellation intitule="Mouleur noyauteur / Mouleuse noyauteuse machine" />
+<appellation intitule="Mouleur noyauteur / Mouleuse noyauteuse main" />
+<appellation intitule="Noyauteur / Noyauteuse" />
+<appellation intitule="Opérateur / Opératrice noyautage" />
+<appellation intitule="Opérateur / Opératrice remmoulage" />
+<appellation intitule="Plaquiste en fonderie" />
+<appellation intitule="Remmouleur / Remmouleuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2911" intitule="Réalisation de structures métalliques">
+<liste_appellations>
+<appellation intitule="Assembleur / Assembleuse en armatures métalliques" />
+<appellation intitule="Assembleur / Assembleuse en construction et réparation navale" />
+<appellation intitule="Charpentier / Charpentière fer" />
+<appellation intitule="Charpentier / Charpentière métallique en construction navale" />
+<appellation intitule="Charpentier industriel / Charpentière industrielle" />
+<appellation intitule="Charpentier industriel / Charpentière industrielle en charpentes métalliques" />
+<appellation intitule="Charpentier industriel / Charpentière industrielle en structures métalliques" />
+<appellation intitule="Charpentier métallier industriel / Charpentière métallière industrielle" />
+<appellation intitule="Charpentier traceur / Charpentière traceuse en charpentes métalliques" />
+<appellation intitule="Charpentier-monteur industriel / Charpentière-monteuse industrielle" />
+<appellation intitule="Ferreur serrurier / Ferreuse serrurière" />
+<appellation intitule="Métallier / Métallière en charpente industrielle" />
+<appellation intitule="Métallier industriel / Métallière industrielle" />
+<appellation intitule="Métallier préparateur / Métallière préparatrice en charpentes métalliques" />
+<appellation intitule="Métallier-serrurier industriel / Métallière-serrurière industrielle" />
+<appellation intitule="Monteur industriel / Monteuse industrielle en charpentes métalliques" />
+<appellation intitule="Ouvrier / Ouvrière de fabrication de charpentes métalliques" />
+<appellation intitule="Préparateur / Préparatrice en charpentes métalliques" />
+<appellation intitule="Serrurier / Serrurière en construction navale" />
+<appellation intitule="Traceur / Traceuse en charpentes métalliques" />
+<appellation intitule="Traceur / Traceuse en construction navale" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2912" intitule="Réglage d'équipement de production industrielle">
+<liste_appellations>
+<appellation intitule="Régleur / Régleuse de cokerie" />
+<appellation intitule="Régleur / Régleuse de four à coke" />
+<appellation intitule="Régleur / Régleuse de machine à couler" />
+<appellation intitule="Régleur / Régleuse de machine de frappe à froid" />
+<appellation intitule="Régleur / Régleuse de machine d'usinage des matériaux" />
+<appellation intitule="Régleur / Régleuse de machine et d'outillage de moulage des métaux" />
+<appellation intitule="Régleur / Régleuse de machine textile" />
+<appellation intitule="Régleur / Régleuse de machine-outil" />
+<appellation intitule="Régleur / Régleuse de métier à tisser" />
+<appellation intitule="Régleur / Régleuse de métiers leavers" />
+<appellation intitule="Régleur / Régleuse de moulinage" />
+<appellation intitule="Régleur / Régleuse d'encocheuse" />
+<appellation intitule="Régleur / Régleuse d'équipement industriel de production" />
+<appellation intitule="Régleur / Régleuse d'outillage industriel" />
+<appellation intitule="Régleur / Régleuse en production" />
+<appellation intitule="Régleur / Régleuse machine à comprimer" />
+<appellation intitule="Régleur / Régleuse mécanique" />
+<appellation intitule="Régleur / Régleuse sur commande numérique" />
+<appellation intitule="Régleur / Régleuse sur four" />
+<appellation intitule="Régleur / Régleuse sur installation de soudage robotisé" />
+<appellation intitule="Régleur / Régleuse sur ligne automatisée" />
+<appellation intitule="Régleur / Régleuse sur ligne d'assemblage" />
+<appellation intitule="Régleur / Régleuse sur ligne de cartonnerie" />
+<appellation intitule="Régleur / Régleuse sur ligne de conditionnement" />
+<appellation intitule="Régleur / Régleuse sur ligne de refendage-cisaillage" />
+<appellation intitule="Régleur / Régleuse sur machine de production" />
+<appellation intitule="Régleur / Régleuse sur machine industrielle" />
+<appellation intitule="Régleur / Régleuse sur machine transfert" />
+<appellation intitule="Régleur / Régleuse sur machine-outil" />
+<appellation intitule="Régleur / Régleuse sur machine-outil à commande numérique" />
+<appellation intitule="Régleur / Régleuse sur presse à découper/à emboutir" />
+<appellation intitule="Régleur / Régleuse sur robot de soudure" />
+<appellation intitule="Régleur / Régleuse sur tour" />
+<appellation intitule="Régleur mécanicien / Régleuse mécanicienne" />
+<appellation intitule="Régleur mécanicien / Régleuse mécanicienne de machine de confection" />
+<appellation intitule="Régleur mécanicien / Régleuse mécanicienne en bonneterie" />
+<appellation intitule="Régleur metteur / Régleuse metteuse au point d'équipements industriels" />
+<appellation intitule="Régleur monteur / Régleuse monteuse de machine textile de filature et de tissage" />
+<appellation intitule="Régleur monteur / Régleuse monteuse sur presse à découper/à emboutir" />
+<appellation intitule="Régleur programmateur industriel / Régleuse programmatrice industrielle" />
+<appellation intitule="Régleur ressortier / Régleuse ressortière" />
+<appellation intitule="Technicien régleur / Technicienne régleuse de machine de frappe à froid" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2913" intitule="Soudage manuel">
+<liste_appellations>
+<appellation intitule="Braseur / Braseuse" />
+<appellation intitule="Chef soudeur / soudeuse" />
+<appellation intitule="Soudeur / Soudeuse à la flamme" />
+<appellation intitule="Soudeur / Soudeuse à l'arc électrique" />
+<appellation intitule="Soudeur / Soudeuse à l'arc semi-automatique" />
+<appellation intitule="Soudeur / Soudeuse à l'électrode enrobé" />
+<appellation intitule="Soudeur / Soudeuse au chalumeau oxyacéthylénique" />
+<appellation intitule="Soudeur / Soudeuse au plasma" />
+<appellation intitule="Soudeur / Soudeuse fil fourré" />
+<appellation intitule="Soudeur / Soudeuse Métal Active Gaz -MAG-" />
+<appellation intitule="Soudeur / Soudeuse Métal Inerte Gaz -MIG-" />
+<appellation intitule="Soudeur / Soudeuse micro plasma" />
+<appellation intitule="Soudeur / Soudeuse Tungstène Inerte Gaz -TIG-" />
+<appellation intitule="Soudeur-braseur / Soudeuse-braseuse" />
+<appellation intitule="Soudobraseur / Soudobraseuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H2914" intitule="Réalisation et montage en tuyauterie">
+<liste_appellations>
+<appellation intitule="Aide tuyauteur / tuyauteuse" />
+<appellation intitule="Chef de chantier tuyauteur" />
+<appellation intitule="Chef d'équipe tuyauteur / tuyauteuse" />
+<appellation intitule="Tuyauteur / Tuyauteuse" />
+<appellation intitule="Tuyauteur / Tuyauteuse en aéronautique" />
+<appellation intitule="Tuyauteur / Tuyauteuse en basse pression" />
+<appellation intitule="Tuyauteur / Tuyauteuse en construction navale" />
+<appellation intitule="Tuyauteur / Tuyauteuse en haute pression" />
+<appellation intitule="Tuyauteur / Tuyauteuse en instrumentation" />
+<appellation intitule="Tuyauteur / Tuyauteuse en matières plastiques" />
+<appellation intitule="Tuyauteur / Tuyauteuse en milieu nucléaire" />
+<appellation intitule="Tuyauteur / Tuyauteuse sur acier inox" />
+<appellation intitule="Tuyauteur / Tuyauteuse sur non-ferreux" />
+<appellation intitule="Tuyauteur industriel / Tuyauteuse industrielle" />
+<appellation intitule="Tuyauteur-cintreur / Tuyauteuse-cintreuse" />
+<appellation intitule="Tuyauteur-monteur / Tuyauteuse-monteuse" />
+<appellation intitule="Tuyauteur-soudeur / Tuyauteuse-soudeuse" />
+<appellation intitule="Tuyauteur-soudeur / Tuyauteuse-soudeuse en tuyauterie thermoplastique" />
+<appellation intitule="Tuyauteur-traceur / Tuyauteuse-traceuse" />
+</liste_appellations>
+</fiche>
+</domaine></domaine-intermediaire><domaine code="H31" intitule="Papier et carton">
+<fiche
+ code="H3101" intitule="Conduite d'équipement de fabrication de papier ou de carton">
+<liste_appellations>
+<appellation intitule="Aide conducteur / conductrice de machines à papier ou carton" />
+<appellation intitule="Aide sécheur / sécheuse en industrie papetière" />
+<appellation intitule="Bobineur / Bobineuse en industrie papetière" />
+<appellation intitule="Calandreur / Calandreuse en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice de bobineuses en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice de calandres en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice de coupeuses en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice de ligne en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice de machines à coucher en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice de machines à onduler" />
+<appellation intitule="Conducteur / Conductrice de machines à papier ou carton" />
+<appellation intitule="Conducteur / Conductrice de machines de fabrication de papier carton" />
+<appellation intitule="Conducteur / Conductrice de machines de transformation du papier carton" />
+<appellation intitule="Conducteur / Conductrice rebobineuse en industrie papetière" />
+<appellation intitule="Débobineur découpeur / Débobineuse découpeuse au format en industrie papetière" />
+<appellation intitule="Enrouleur / Enrouleuse en industrie papetière" />
+<appellation intitule="Enrouleur dérouleur / Enrouleuse dérouleuse en industrie papetière" />
+<appellation intitule="Opérateur / Opératrice de production de papier carton" />
+<appellation intitule="Ouvrier / Ouvrière de fabrication du papier et du carton" />
+<appellation intitule="Rebobineur / Rebobineuse en industrie papetière" />
+<appellation intitule="Sécheur / Sécheuse en industrie papetière" />
+<appellation intitule="Surveillant / Surveillante de couchage en industrie papetière" />
+<appellation intitule="Technicien / Technicienne de fabrication en industrie papetière" />
+<appellation intitule="Technicien / Technicienne de production en industrie papetière" />
+<appellation intitule="Visiteur / Visiteuse en industrie papetière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H3102" intitule="Conduite d'installation de pâte à papier">
+<liste_appellations>
+<appellation intitule="Aide conducteur / conductrice en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice de lavage en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice de lessiveur en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice désencrage en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice d'installation de pâte à papier" />
+<appellation intitule="Conducteur / Conductrice trituration en industrie papetière" />
+<appellation intitule="Conducteur / Conductrice vieux papiers en industrie papetière" />
+<appellation intitule="Conducteur pulpeur / Conductrice pulpeuse en industrie papetière" />
+<appellation intitule="Coordonnateur / Coordonnatrice sur installation de pâte à papier" />
+<appellation intitule="Gouverneur / Gouverneure en industrie papetière" />
+<appellation intitule="Laveur / Laveuse en industrie papetière" />
+<appellation intitule="Opérateur / Opératrice de pâtes désencrées en industrie papetière" />
+<appellation intitule="Opérateur / Opératrice de production de pâte à papier" />
+<appellation intitule="Opérateur / Opératrice d'installation de pâte à papier" />
+<appellation intitule="Opérateur / Opératrice presse pâte en industrie papetière" />
+<appellation intitule="Préparateur / Préparatrice de pâte à papier en industrie papetière" />
+<appellation intitule="Préparateur / Préparatrice de pâte en industrie papetière" />
+<appellation intitule="Raffineur / Raffineuse en industrie papetière" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H32" intitule="Plastique, caoutchouc">
+<fiche
+ code="H3201" intitule="Conduite d'équipement de formage des plastiques et caoutchoucs">
+<liste_appellations>
+<appellation intitule="Calandreur / Calandreuse en caoutchouc industriel" />
+<appellation intitule="Conducteur / Conductrice de presses à injecter en caoutchouc et matières plastiques" />
+<appellation intitule="Conducteur / Conductrice de presses à mouler le caoutchouc et les matières plastiques" />
+<appellation intitule="Conducteur / Conductrice de presses à vulcaniser" />
+<appellation intitule="Conducteur / Conductrice extrudeuses en caoutchouc et matières plastiques" />
+<appellation intitule="Conducteur / Conductrice sur machines de formage des matières plastiques et caoutchouc" />
+<appellation intitule="Conducteur-assembleur / Conductrice-assembleuse en caoutchouc industriel" />
+<appellation intitule="Confectionneur / Confectionneuse de pneumatiques" />
+<appellation intitule="Enducteur / Enductrice en caoutchouc" />
+<appellation intitule="Enducteur / Enductrice plastique" />
+<appellation intitule="Extrudeur / Extrudeuse en caoutchouc et matières plastiques" />
+<appellation intitule="Formeur / Formeuse en thermoplastiques" />
+<appellation intitule="Formeur-usineur / Formeuse-usineuse en thermoplastiques" />
+<appellation intitule="Injecteur / Injecteuse chaussures" />
+<appellation intitule="Mouleur-stratifieur / Mouleuse-stratifieuse par centrifugation" />
+<appellation intitule="Mouleur-stratifieur / Mouleuse-stratifieuse par enroulement" />
+<appellation intitule="Mouleur-stratifieur / Mouleuse-stratifieuse par pultrusion" />
+<appellation intitule="Mouleur-stratifieur / Mouleuse-stratifieuse sur presse" />
+<appellation intitule="Opérateur / Opératrice en plasturgie" />
+<appellation intitule="Opérateur / Opératrice extrusion en caoutchouc et matières plastiques" />
+<appellation intitule="Opérateur / Opératrice injection en caoutchouc et matières plastiques" />
+<appellation intitule="Opérateur / Opératrice soufflage en matières plastiques" />
+<appellation intitule="Opérateur / Opératrice sur machine de formage des matières plastiques et des caoutchoucs" />
+<appellation intitule="Opérateur / Opératrice sur machine de mise en forme du caoutchouc" />
+<appellation intitule="Opérateur / Opératrice sur presse à caoutchouc et matières plastiques" />
+<appellation intitule="Plasturgiste" />
+<appellation intitule="Soudeur / Soudeuse chaussures" />
+<appellation intitule="Thermoformeur / Thermoformeuse" />
+<appellation intitule="Vulcaniseur / Vulcaniseuse chaussures" />
+<appellation intitule="Vulcaniseur / Vulcaniseuse en caoutchouc industriel" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H3202" intitule="Réglage d'équipement de formage des plastiques et caoutchoucs">
+<liste_appellations>
+<appellation intitule="Aide-régleur / Aide-régleuse en industrie plastique et caoutchouc" />
+<appellation intitule="Conducteur / Conductrice de ligne d'injection en industrie plastique et caoutchouc" />
+<appellation intitule="Conducteur / Conductrice de machines de rotomoulage" />
+<appellation intitule="Conducteur régleur / Conductrice régleuse de ligne d'injection" />
+<appellation intitule="Monteur / Monteuse en industrie plastique et caoutchouc" />
+<appellation intitule="Monteur / Monteuse process en industrie plastique et caoutchouc" />
+<appellation intitule="Monteur-régleur / Monteuse-régleuse en extrusion" />
+<appellation intitule="Monteur-régleur / Monteuse-régleuse en injection" />
+<appellation intitule="Opérateur monteur / Opératrice monteuse en industrie plastique et caoutchouc" />
+<appellation intitule="Régleur / Régleuse de machines à compression de matières plastiques/caoutchouc" />
+<appellation intitule="Régleur / Régleuse de machines à extrusion de matières plastiques/caoutchouc" />
+<appellation intitule="Régleur / Régleuse de machines à extrusion soufflage" />
+<appellation intitule="Régleur / Régleuse de machines à injection de matières plastiques/caoutchouc" />
+<appellation intitule="Régleur / Régleuse de machines de soufflage de matières plastiques/caoutchouc" />
+<appellation intitule="Régleur / Régleuse de machines de thermoformage" />
+<appellation intitule="Régleur / Régleuse de machines de transformation des matières plastiques" />
+<appellation intitule="Régleur / Régleuse de machines de transformation des matières thermoplastiques" />
+<appellation intitule="Régleur / Régleuse de presse à injecter" />
+<appellation intitule="Régleur / Régleuse de presse à thermoformer de matières plastiques" />
+<appellation intitule="Régleur / Régleuse en extrusion" />
+<appellation intitule="Régleur / Régleuse sur presse caoutchouc" />
+<appellation intitule="Régleur-monteur / Régleuse-monteuse moule en industrie plastique/caoutchouc" />
+<appellation intitule="Responsable injection en plasturgie" />
+<appellation intitule="Technicien / Technicienne d'atelier de plasturgie ou caoutchouc" />
+<appellation intitule="Technicien / Technicienne de production en caoutchouc" />
+<appellation intitule="Technicien / Technicienne de production en matériaux composites" />
+<appellation intitule="Technicien / Technicienne de production en matières plastiques" />
+<appellation intitule="Technicien / Technicienne des plastiques armés" />
+<appellation intitule="Technicien / Technicienne extrusion en industrie plastique et caoutchouc" />
+<appellation intitule="Technicien / Technicienne injection en industrie plastique et caoutchouc" />
+<appellation intitule="Technicien / Technicienne plasturgiste en production" />
+<appellation intitule="Technicien régleur / Technicienne régleuse en industrie plastique et caoutchouc" />
+<appellation intitule="Technicien régleur / Technicienne régleuse en injection" />
+<appellation intitule="Technicien régleur / Technicienne régleuse en plasturgie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H3203" intitule="Fabrication de pièces en matériaux composites">
+<liste_appellations>
+<appellation intitule="Aide-mouleur-stratifieur / Aide-mouleuse-stratifieuse" />
+<appellation intitule="Applicateur stratifieur / Applicatrice stratifieuse" />
+<appellation intitule="Drapeur / Drapeuse" />
+<appellation intitule="Mouleur / Mouleuse en stratifiés" />
+<appellation intitule="Mouleur-stratifieur / Mouleuse-stratifieuse" />
+<appellation intitule="Mouleur-stratifieur / Mouleuse-stratifieuse en thermodurcissables" />
+<appellation intitule="Mouliste drapeur / drapeuse" />
+<appellation intitule="Opérateur / Opératrice en matériaux composites" />
+<appellation intitule="Opérateur / Opératrice en stratification" />
+<appellation intitule="Prototypiste en stratifiés" />
+<appellation intitule="Stratifieur / Stratifieuse" />
+<appellation intitule="Stratifieur / Stratifieuse en matériaux composites" />
+<appellation intitule="Stratifieur / Stratifieuse mouliste" />
+<appellation intitule="Stratifieur drapeur / Stratifieuse drapeuse" />
+<appellation intitule="Stratifieur-usineur-finisseur / Stratifieuse-usineuse-finisseuse" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H33" intitule="Préparation et conditionnement">
+<fiche
+ code="H3301" intitule="Conduite d'équipement de conditionnement">
+<liste_appellations>
+<appellation intitule="Agent / Agente de conditionnement sur machine automatisée" />
+<appellation intitule="Chef de ligne conditionnement" />
+<appellation intitule="Conditionneur / Conditionneuse sur machine" />
+<appellation intitule="Conducteur / Conductrice de dépileuses empileuses" />
+<appellation intitule="Conducteur / Conductrice de ligne de conditionnement" />
+<appellation intitule="Conducteur / Conductrice de ligne d'emballage" />
+<appellation intitule="Conducteur / Conductrice de machines de conditionnement" />
+<appellation intitule="Conducteur / Conductrice de machines de préemballage/suremballage" />
+<appellation intitule="Conducteur / Conductrice de machines d'emballage" />
+<appellation intitule="Conducteur / Conductrice de machines ou de ligne d'embouteillage" />
+<appellation intitule="Conducteur / Conductrice d'étiqueteuses" />
+<appellation intitule="Conducteur / Conductrice emballage bobines" />
+<appellation intitule="Embouteilleur / Embouteilleuse" />
+<appellation intitule="Opérateur / Opératrice de ligne de conditionnement" />
+<appellation intitule="Opérateur / Opératrice de ligne d'embouteillage" />
+<appellation intitule="Opérateur / Opératrice ensachage/palettisation sur machine" />
+<appellation intitule="Palettiseur / Palettiseuse sur machine" />
+<appellation intitule="Pilote de soutireuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H3302" intitule="Opérations manuelles d'assemblage, tri ou emballage">
+<liste_appellations>
+<appellation intitule="Agent / Agente de conditionnement et de manutention" />
+<appellation intitule="Agent / Agente de conditionnement manuel" />
+<appellation intitule="Agent / Agente de contrôle et conditionnement manuel" />
+<appellation intitule="Agent / Agente de finition main et de conditionnement" />
+<appellation intitule="Agent / Agente d'opérations manuelles" />
+<appellation intitule="Agent / Agente d'opérations manuelles en industrie de transformation" />
+<appellation intitule="Agent de fabrication polyvalent / Agente de fabrication polyvalente en industrie" />
+<appellation intitule="Conditionneur / Conditionneuse main" />
+<appellation intitule="Echantillonneur / Echantillonneuse en tissu" />
+<appellation intitule="Opérateur / Opératrice de calibrage" />
+<appellation intitule="Opérateur / Opératrice de conditionnement manuel" />
+<appellation intitule="Opérateur / Opératrice de finition manuelle" />
+<appellation intitule="Opérateur / Opératrice d'emballage manuel" />
+<appellation intitule="Trieur / Trieuse de placage" />
+<appellation intitule="Trieur / Trieuse en industrie de transformation" />
+<appellation intitule="Trieur contrôleur / Trieuse contrôleuse en industrie de transformation" />
+<appellation intitule="Trieur-choisisseur / Trieuse-choisisseuse en industrie de transformation" />
+<appellation intitule="Trieur-emballeur / Trieuse-emballeuse en industrie de transformation" />
+<appellation intitule="Trieur-vérificateur / Trieuse-vérificatrice en industrie de transformation" />
+<appellation intitule="Visiteur / Visiteuse en verrerie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H3303" intitule="Préparation de matières et produits industriels (broyage, mélange,...)">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice composition en industrie verrière" />
+<appellation intitule="Composeur / Composeuse verre" />
+<appellation intitule="Conducteur / Conductrice de broyeur en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice de broyeur en industrie chimique" />
+<appellation intitule="Conducteur / Conductrice de mélangeurs en caoutchouc" />
+<appellation intitule="Conducteur / Conductrice de mélangeurs en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice de silo de céréales" />
+<appellation intitule="Conducteur / Conductrice de silo en industrie alimentaire" />
+<appellation intitule="Conducteur / Conductrice de silo en industrie laitière" />
+<appellation intitule="Coupeur / Coupeuse de couleurs" />
+<appellation intitule="Cuisinier / Cuisinière couleurs en industrie des matériaux souples" />
+<appellation intitule="Cuisinier / Cuisinière en industrie chimique" />
+<appellation intitule="Cuisinier / Cuisinière en industrie papetière" />
+<appellation intitule="Cuisinier / Cuisinière en tannerie-mégisserie" />
+<appellation intitule="Malaxeur/mélangeur / Malaxeuse/mélangeuse" />
+<appellation intitule="Opérateur / Opératrice arrivée de terre/préparation de terre en céramique" />
+<appellation intitule="Opérateur / Opératrice d'approvisionnement et de préparation en industrie" />
+<appellation intitule="Opérateur / Opératrice de broyeur" />
+<appellation intitule="Opérateur / Opératrice de concasseur" />
+<appellation intitule="Opérateur / Opératrice de pesée de matières" />
+<appellation intitule="Opérateur / Opératrice en préparation de matières et produits en industrie" />
+<appellation intitule="Préparateur / Préparatrice d'arômes alimentaires" />
+<appellation intitule="Préparateur / Préparatrice de bain de teinture" />
+<appellation intitule="Préparateur / Préparatrice de colles" />
+<appellation intitule="Préparateur / Préparatrice de colorants" />
+<appellation intitule="Préparateur / Préparatrice de formule d'impression" />
+<appellation intitule="Préparateur / Préparatrice de matières" />
+<appellation intitule="Préparateur / Préparatrice de matières en plasturgie" />
+<appellation intitule="Préparateur / Préparatrice de matières premières" />
+<appellation intitule="Préparateur / Préparatrice de mélange en industrie" />
+<appellation intitule="Préparateur / Préparatrice de mélange en industrie alimentaire" />
+<appellation intitule="Préparateur / Préparatrice de produit d'enduction" />
+<appellation intitule="Préparateur / Préparatrice de produits pour teinture, apprêts et impression" />
+<appellation intitule="Préparateur / Préparatrice de recettes" />
+<appellation intitule="Préparateur / Préparatrice de sable en fonderie" />
+<appellation intitule="Préparateur / Préparatrice de sauce en industrie papetière" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="H34" intitule="Traitements thermiques et traitements de surfaces">
+<fiche
+ code="H3401" intitule="Conduite de traitement d'abrasion de surface">
+<liste_appellations>
+<appellation intitule="Agent / Agente de parachèvement industriel" />
+<appellation intitule="Aviveur / Aviveuse de métaux industriels" />
+<appellation intitule="Casseur / Casseuse de jet de fonderie" />
+<appellation intitule="Dépolisseur / Dépolisseuse sur verre" />
+<appellation intitule="Ebarbeur-ébavureur industriel / Ebarbeuse-ébavureuse industrielle" />
+<appellation intitule="Ebavureur / Ebavureuse en construction mécanique" />
+<appellation intitule="Ebavureur industriel / Ebavureuse industrielle" />
+<appellation intitule="Ebavureur-meuleur industriel / Ebavureuse-meuleuse industrielle" />
+<appellation intitule="Finisseur industriel / Finisseuse industrielle de surface" />
+<appellation intitule="Grenailleur industriel / Grenailleuse industrielle" />
+<appellation intitule="Opérateur / Opératrice de traitement d'abrasion de surface" />
+<appellation intitule="Paracheveur-meuleur industriel / Paracheveuse-meuleuse industrielle" />
+<appellation intitule="Polisseur / Polisseuse en bijouterie ou joaillerie" />
+<appellation intitule="Polisseur / Polisseuse en coutellerie industrielle" />
+<appellation intitule="Polisseur / Polisseuse en lunetterie" />
+<appellation intitule="Polisseur / Polisseuse en micromécanique" />
+<appellation intitule="Polisseur / Polisseuse par microlaser" />
+<appellation intitule="Polisseur / Polisseuse par ultra sons" />
+<appellation intitule="Polisseur / Polisseuse sur métaux" />
+<appellation intitule="Polisseur / Polisseuse sur verre" />
+<appellation intitule="Polisseur industriel / Polisseuse industrielle" />
+<appellation intitule="Sableur / Sableuse sur verre" />
+<appellation intitule="Sableur industriel / Sableuse industrielle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H3402" intitule="Conduite de traitement par dépôt de surface">
+<liste_appellations>
+<appellation intitule="Agent / Agente de traitement de surface" />
+<appellation intitule="Anodiseur industriel / Anodiseuse industrielle" />
+<appellation intitule="Argenteur industriel / Argenteuse industrielle" />
+<appellation intitule="Cadmieur industriel / Cadmieuse industrielle" />
+<appellation intitule="Caoutchouteur industriel / Caoutchoutrice industrielle" />
+<appellation intitule="Chef d'équipe galvanisation" />
+<appellation intitule="Chromeur industriel / Chromeuse industrielle" />
+<appellation intitule="Conducteur / Conductrice de bain de traitement de surface" />
+<appellation intitule="Conducteur / Conductrice d'installation de traitement de surface" />
+<appellation intitule="Cuivreur industriel / Cuivreuse industrielle" />
+<appellation intitule="Décapeur industriel / Décapeuse industrielle" />
+<appellation intitule="Dégraisseur industriel / Dégraisseuse industrielle" />
+<appellation intitule="Doreur / Doreuse au rhodium" />
+<appellation intitule="Doreur / Doreuse sur métaux" />
+<appellation intitule="Electroplaste" />
+<appellation intitule="Emailleur industriel / Emailleuse industrielle" />
+<appellation intitule="Etameur industriel / Etameuse industrielle" />
+<appellation intitule="Etameur-galvaniseur / Etameuse-galvaniseuse" />
+<appellation intitule="Galvaniseur industriel / Galvaniseuse industrielle" />
+<appellation intitule="Galvanoplaste industriel / industrielle" />
+<appellation intitule="Galvanoplaste sur métaux et substrat" />
+<appellation intitule="Mastiqueur industriel / Mastiqueuse industrielle" />
+<appellation intitule="Métalliseur / Métalliseuse au pistolet industriel" />
+<appellation intitule="Métalliseur / Métalliseuse au plasma" />
+<appellation intitule="Metteur / Metteuse au bain industriel" />
+<appellation intitule="Nickeleur industriel / Nickeleuse industrielle" />
+<appellation intitule="Opérateur / Opératrice de ligne de galvanisation" />
+<appellation intitule="Opérateur / Opératrice de ligne de traitement de surface" />
+<appellation intitule="Opérateur / Opératrice galvanoplaste" />
+<appellation intitule="Opérateur décapeur industriel / Opératrice décapeuse industrielle" />
+<appellation intitule="Ouvrier / Ouvrière en métallisation" />
+<appellation intitule="Phosphateur industriel / Phosphateuse industrielle" />
+<appellation intitule="Plastifieur industriel / Plastifieuse industrielle" />
+<appellation intitule="Plombeur industriel / Plombeuse industrielle" />
+<appellation intitule="Rhodieur industriel / Rhodieuse industrielle" />
+<appellation intitule="Zingueur industriel / Zingueuse industrielle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H3403" intitule="Conduite de traitement thermique">
+<liste_appellations>
+<appellation intitule="Agent / Agente de production de traitement thermique" />
+<appellation intitule="Agent / Agente de traitement thermique" />
+<appellation intitule="Cémenteur / Cémenteuse" />
+<appellation intitule="Cémenteur-trempeur / Cémenteuse-trempeuse de métaux" />
+<appellation intitule="Chargeur / Chargeuse de four de traitement thermique" />
+<appellation intitule="Chef d'équipe de trempe" />
+<appellation intitule="Conducteur / Conductrice de four de traitement thermique" />
+<appellation intitule="Conducteur / Conductrice de four tunnel à conduite automatisée" />
+<appellation intitule="Conducteur / Conductrice de ligne de traitement thermique" />
+<appellation intitule="Conducteur / Conductrice de traitement thermique" />
+<appellation intitule="Conducteur / Conductrice de trempe" />
+<appellation intitule="Nitrureur / Nitrureuse" />
+<appellation intitule="Opérateur / Opératrice de traitement thermique" />
+<appellation intitule="Opérateur / Opératrice de trempe" />
+<appellation intitule="Opérateur / Opératrice four de traitement thermique" />
+<appellation intitule="Recuiseur / Recuiseuse" />
+<appellation intitule="Trempeur / Trempeuse" />
+<appellation intitule="Trempeur / Trempeuse de métaux" />
+<appellation intitule="Trempeur / Trempeuse verre" />
+<appellation intitule="Trempeur-cémenteur / Trempeuse-cémenteuse" />
+<appellation intitule="Trempeur-outilleur / Trempeuse-outilleuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="H3404" intitule="Peinture industrielle">
+<liste_appellations>
+<appellation intitule="Applicateur / Applicatrice en peinture industrielle" />
+<appellation intitule="Chef d'équipe peinture industrielle" />
+<appellation intitule="Conducteur / Conductrice de ligne de laquage" />
+<appellation intitule="Conducteur / Conductrice de robots de peinture" />
+<appellation intitule="Conducteur / Conductrice de robots de vernissage" />
+<appellation intitule="Gelcoater" />
+<appellation intitule="Laqueur industriel / Laqueuse industrielle" />
+<appellation intitule="Opérateur / Opératrice de peinture en ligne de fabrication" />
+<appellation intitule="Opérateur / Opératrice de peinture industrielle" />
+<appellation intitule="Opérateur / Opératrice en poudrage électrostatique" />
+<appellation intitule="Peintre aéronautique" />
+<appellation intitule="Peintre avion" />
+<appellation intitule="Peintre caréneur / caréneuse" />
+<appellation intitule="Peintre en construction navale" />
+<appellation intitule="Peintre en meubles métalliques" />
+<appellation intitule="Peintre en structures métalliques" />
+<appellation intitule="Peintre industriel / industrielle" />
+<appellation intitule="Peintre industriel / industrielle anti-corrosion" />
+<appellation intitule="Peintre industriel / industrielle au pistolet" />
+<appellation intitule="Peintre sableur industriel / sableuse industrielle" />
+<appellation intitule="Peintre sur métaux" />
+<appellation intitule="Peintre thermo-laqueur / thermo-laqueuse" />
+<appellation intitule="Pistoleteur industriel / Pistoleteuse industrielle" />
+<appellation intitule="Pistoleur industriel / Pistoleuse industrielle" />
+<appellation intitule="Poudreur industriel / Poudreuse industrielle" />
+<appellation intitule="Préparateur / Préparatrice de robot de peinture" />
+<appellation intitule="Projeteur / Projeteuse thermique" />
+<appellation intitule="Retoucheur / Retoucheuse sur tôles laquées en construction automobile" />
+<appellation intitule="Vernisseur industriel / Vernisseuse industrielle" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="I" intitule="INSTALLATION ET MAINTENANCE">
+<domaine code="I11" intitule="Encadrement">
+<fiche
+ code="I1101" intitule="Direction et ingénierie en entretien infrastructure et bâti">
+<liste_appellations>
+<appellation intitule="Chef de projet infrastructure" />
+<appellation intitule="Chef de service infrastructure/environnement" />
+<appellation intitule="Chef de service sécurité trafic routier" />
+<appellation intitule="Chef de service technique de collectivité" />
+<appellation intitule="Chef du service entretien et travaux neufs" />
+<appellation intitule="Chef du service entretien technique voirie" />
+<appellation intitule="Chef viabilité sécurité" />
+<appellation intitule="Contrôleur / Contrôleuse des travaux publics de l'Etat en voirie" />
+<appellation intitule="Directeur / Directrice de la gestion technique des bâtiments" />
+<appellation intitule="Directeur / Directrice de travaux d'infrastructure" />
+<appellation intitule="Directeur / Directrice des bâtiments" />
+<appellation intitule="Directeur / Directrice des services techniques de collectivité" />
+<appellation intitule="Directeur / Directrice des travaux bâtiment" />
+<appellation intitule="Ingénieur / Ingénieure de maintenance en infrastructure" />
+<appellation intitule="Ingénieur / Ingénieure de maintenance réseau signalisation télécoms" />
+<appellation intitule="Ingénieur / Ingénieure de maintenance travaux génie civil" />
+<appellation intitule="Ingénieur / Ingénieure des travaux d'infrastructure et réseaux" />
+<appellation intitule="Ingénieur / Ingénieure d'exploitation de la route" />
+<appellation intitule="Ingénieur / Ingénieure génie civil maintenance réseaux" />
+<appellation intitule="Ingénieur-chef / Ingénieure-chef de subdivision routière" />
+<appellation intitule="Resonsable entretien infrastructure ferrovière" />
+<appellation intitule="Responsable de district routier" />
+<appellation intitule="Responsable de l'entretien et de la maintenance d'ouvrages hydrauliques" />
+<appellation intitule="Responsable des services techniques de collectivité" />
+<appellation intitule="Responsable d'exploitation de remontées mécaniques et pistes" />
+<appellation intitule="Responsable entretien bâtiment" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1102" intitule="Management et ingénierie de maintenance industrielle">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée de la sous-traitance en maintenance industrielle" />
+<appellation intitule="Chef de service d'entretien et de maintenance industrielle" />
+<appellation intitule="Chef de service maintenance industrielle" />
+<appellation intitule="Chef de service technique en maintenance industrielle" />
+<appellation intitule="Chef du service entretien et travaux neufs en maintenance industrielle" />
+<appellation intitule="Chef du service maintenance instrumentation" />
+<appellation intitule="Ingénieur / Ingénieure chef d'atelier de maintenance industrielle" />
+<appellation intitule="Ingénieur / Ingénieure chef d'atelier d'entretien et de maintenance électrique et électromécanique" />
+<appellation intitule="Ingénieur / Ingénieure de maintenance en appareillage" />
+<appellation intitule="Ingénieur / Ingénieure de maintenance en énergie" />
+<appellation intitule="Ingénieur / Ingénieure de maintenance en infrastructure industrielle" />
+<appellation intitule="Ingénieur / Ingénieure de maintenance en instrumentation" />
+<appellation intitule="Ingénieur / Ingénieure de maintenance en matériel de production" />
+<appellation intitule="Ingénieur / Ingénieure de maintenance en matériels roulants" />
+<appellation intitule="Ingénieur / Ingénieure de maintenance industrielle" />
+<appellation intitule="Ingénieur / Ingénieure de support technique maintenance industrielle" />
+<appellation intitule="Ingénieur / Ingénieure d'entretien en maintenance industrielle" />
+<appellation intitule="Ingénieur / Ingénieure d'entretien maintenance et travaux neufs en industrie" />
+<appellation intitule="Ingénieur / Ingénieure maintenance-fiabilisation industrielle" />
+<appellation intitule="Ingénieur / Ingénieure travaux neufs en maintenance industrielle" />
+<appellation intitule="Ingénieur électronicien / Ingénieure électronicienne des systèmes de la sécurité aérienne" />
+<appellation intitule="Responsable d'atelier de maintenance à spécialités hétérogènes" />
+<appellation intitule="Responsable de maintenance aéronautique" />
+<appellation intitule="Responsable de maintenance en énergie" />
+<appellation intitule="Responsable de maintenance et travaux neufs" />
+<appellation intitule="Responsable de maintenance industrielle" />
+<appellation intitule="Responsable d'entretien et de dépannage en maintenance industrielle" />
+<appellation intitule="Responsable des moyens généraux en industrie" />
+<appellation intitule="Responsable maintenance assainissement radioactif" />
+<appellation intitule="Responsable maintenance d'équipements hydrauliques" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1103" intitule="Supervision d'entretien et gestion de véhicules">
+<liste_appellations>
+<appellation intitule="Chef d'atelier automobile" />
+<appellation intitule="Chef d'atelier cycles et motocycles" />
+<appellation intitule="Chef d'atelier de concession automobile" />
+<appellation intitule="Chef d'atelier de maintenance automobile" />
+<appellation intitule="Chef d'atelier engins de chantier" />
+<appellation intitule="Chef d'atelier engins de levage et de manutention" />
+<appellation intitule="Chef d'atelier machines agricoles" />
+<appellation intitule="Chef d'atelier motocycles" />
+<appellation intitule="Chef de centre réparation automobile" />
+<appellation intitule="Chef de garage" />
+<appellation intitule="Chef de parc de véhicules" />
+<appellation intitule="Directeur / Directrice de parc de véhicules" />
+<appellation intitule="Gestionnaire de flotte automobile" />
+<appellation intitule="Gestionnaire de parc automobile" />
+<appellation intitule="Gestionnaire de parc poids lourds" />
+<appellation intitule="Responsable d'atelier de maintenance de véhicules" />
+<appellation intitule="Responsable de parc automobile" />
+<appellation intitule="Responsable de parc de véhicules" />
+<appellation intitule="Responsable d'exploitation de parc de véhicules" />
+<appellation intitule="Responsable maintenance de parc logistique" />
+<appellation intitule="Superviseur / Superviseuse de parc engins logistiques" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="I12" intitule="Entretien technique">
+<fiche
+ code="I1201" intitule="Entretien d'affichage et mobilier urbain">
+<liste_appellations>
+<appellation intitule="Afficheur / Afficheuse" />
+<appellation intitule="Afficheur / Afficheuse colle" />
+<appellation intitule="Afficheur / Afficheuse mobilier urbain" />
+<appellation intitule="Afficheur / Afficheuse sur dispositif publicitaire" />
+<appellation intitule="Afficheur déroulant / Afficheuse déroulante" />
+<appellation intitule="Afficheur monteur / Afficheuse monteuse" />
+<appellation intitule="Agent / Agente de maintenance de mobilier publicitaire" />
+<appellation intitule="Agent / Agente d'entretien de mobilier publicitaire" />
+<appellation intitule="Agent / Agente d'exploitation en mobilier urbain et publicitaire" />
+<appellation intitule="Chef d'équipe en mobilier urbain et publicitaire" />
+<appellation intitule="Colleur / Colleuse d'affiche" />
+<appellation intitule="Nettoyeur / Nettoyeuse de mobilier urbain et publicitaire" />
+<appellation intitule="Poseur / Poseuse d'affiche" />
+<appellation intitule="Poseur / Poseuse d'enseigne et d'adhésifs" />
+<appellation intitule="Technicien / Technicienne de pose d'affiches" />
+<appellation intitule="Technicien / Technicienne en mobilier publicitaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1202" intitule="Entretien et surveillance du tracé routier">
+<liste_appellations>
+<appellation intitule="Agent / Agente de voirie manuel" />
+<appellation intitule="Agent / Agente de voirie mécanisée" />
+<appellation intitule="Agent / Agente d'entretien de la voirie" />
+<appellation intitule="Agent / Agente d'exploitation de la voirie" />
+<appellation intitule="Cantonnier / Cantonnière de la voirie" />
+<appellation intitule="Chef d'équipe sécurité tracé routier" />
+<appellation intitule="Opérateur / Opératrice d'entretien et de surveillance du réseau routier" />
+<appellation intitule="Opérateur / Opératrice PC de télésurveillance autoroutière" />
+<appellation intitule="Ouvrier autoroutier / Ouvrière autoroutière" />
+<appellation intitule="Patrouilleur autoroutier / Patrouilleuse autoroutière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1203" intitule="Maintenance des bâtiments et des locaux">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maintenance des bâtiments" />
+<appellation intitule="Agent / Agente d'entretien de casernement" />
+<appellation intitule="Agent / Agente d'entretien des bâtiments et espaces collectifs" />
+<appellation intitule="Agent / Agente d'entretien des collectivités" />
+<appellation intitule="Agent / Agente d'entretien des installations d'infrastructures" />
+<appellation intitule="Agent / Agente d'entretien du bâtiment" />
+<appellation intitule="Agent d'entretien maintenance polyvalent / Agente d'entretien maintenance polyvalente en collectivité" />
+<appellation intitule="Factotum" />
+<appellation intitule="Ouvrier / Ouvrière d'entretien polyvalent des bâtiments" />
+<appellation intitule="Personnel de l'entretien des installations du bâtiment" />
+<appellation intitule="Technicien / Technicienne d'entretien et de maintenance du bâtiment" />
+<appellation intitule="Technicien polyvalent / Technicienne polyvalente du bâtiment" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="I13" intitule="Équipements de production, équipements collectifs">
+<fiche
+ code="I1301" intitule="Installation et maintenance d'ascenseurs">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maintenance d'ascenseurs" />
+<appellation intitule="Agent / Agente de maintenance de remontées mécaniques" />
+<appellation intitule="Agent / Agente de montage en ascenseurs" />
+<appellation intitule="Agent / Agente d'entretien d'ascenseurs" />
+<appellation intitule="Agent / Agente d'entretien et de dépannage d'ascenseurs" />
+<appellation intitule="Ascensoriste" />
+<appellation intitule="Chef d'équipe de maintenance d'ascenseurs" />
+<appellation intitule="Chef d'équipe de montage d'ascenseurs" />
+<appellation intitule="Dépanneur / Dépanneuse d'ascenseurs" />
+<appellation intitule="Electromécanicien / Electromécanicienne d'ascenseurs" />
+<appellation intitule="Mécanicien-électricien dépanneur / Mécanicienne-électricienne dépanneuse d'ascenseurs" />
+<appellation intitule="Mécanicien-électricien monteur-régleur / Mécanicienne-électricienne monteuse-régleuse d'ascenseurs" />
+<appellation intitule="Monteur / Monteuse d'ascenseurs" />
+<appellation intitule="Monteur-dépanneur / Monteuse-dépanneuse d'ascenseurs" />
+<appellation intitule="Monteur-réparateur / Monteuse-réparatrice d'ascenseurs" />
+<appellation intitule="Régleur / Régleuse d'ascenseurs" />
+<appellation intitule="Technicien / Technicienne de maintenance de funiculaires" />
+<appellation intitule="Technicien / Technicienne de maintenance de portes automatiques" />
+<appellation intitule="Technicien / Technicienne de maintenance de remontées mécaniques" />
+<appellation intitule="Technicien / Technicienne de maintenance d'escaliers mécaniques" />
+<appellation intitule="Technicien / Technicienne de modernisation d'ascenseurs" />
+<appellation intitule="Technicien / Technicienne de montage d'ascenseurs" />
+<appellation intitule="Technicien / Technicienne de monte-charges" />
+<appellation intitule="Technicien / Technicienne des Circulations Verticales Mécanisées -CVM-" />
+<appellation intitule="Technicien / Technicienne Service Après-Vente -SAV- d'ascenseurs" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1302" intitule="Installation et maintenance d'automatismes">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maintenance automaticien" />
+<appellation intitule="Agent / Agente de maintenance en électricité et automatisme industriel" />
+<appellation intitule="Agent / Agente de maintenance en équipements automatisés" />
+<appellation intitule="Agent / Agente de régulation instrumentation" />
+<appellation intitule="Agent / Agente technique en électronique et automatisme industriel" />
+<appellation intitule="Agent technique automaticien / Agente technique automaticienne" />
+<appellation intitule="Aide mécanicien / mécanicienne cellule et motorisation d'armement" />
+<appellation intitule="Automaticien / Automaticienne de maintenance" />
+<appellation intitule="Automaticien / Automaticienne d'installation" />
+<appellation intitule="Hydraulicien industriel / Hydraulicienne industrielle" />
+<appellation intitule="Hydraulicien industriel / Hydraulicienne industrielle de maintenance" />
+<appellation intitule="Hydraulicien industriel / Hydraulicienne industrielle d'installation" />
+<appellation intitule="Instrumentiste industriel / industrielle" />
+<appellation intitule="Instrumentiste sur analyseurs automatiques" />
+<appellation intitule="Mécanicien / Mécanicienne cellule hydraulique" />
+<appellation intitule="Mécanotricien / Mécanotricienne" />
+<appellation intitule="Monteur automaticien / Monteuse automaticienne" />
+<appellation intitule="Monteur électricien / Monteuse électricienne en installations de contrôle et régulation" />
+<appellation intitule="Monteur hydraulicien industriel / Monteuse hydraulicienne industrielle" />
+<appellation intitule="Pneumaticien / Pneumaticienne" />
+<appellation intitule="Régleur / Régleuse instrumentiste" />
+<appellation intitule="Technicien / Technicienne de maintenance d'installations automatisées" />
+<appellation intitule="Technicien / Technicienne de maintenance en informatique industrielle" />
+<appellation intitule="Technicien / Technicienne de maintenance en robotique" />
+<appellation intitule="Technicien / Technicienne de mesures industrielles et régulation" />
+<appellation intitule="Technicien / Technicienne d'installation en automatisme" />
+<appellation intitule="Technicien automaticien / Technicienne automaticienne de maintenance" />
+<appellation intitule="Technicien automaticien / Technicienne automaticienne en analyse industrielle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1303" intitule="Installation et maintenance de distributeurs automatiques">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'approvisionnement de distributeurs automatiques" />
+<appellation intitule="Agent / Agente de maintenance d'appareils de distribution" />
+<appellation intitule="Agent / Agente de maintenance de distributeurs automatiques" />
+<appellation intitule="Agent / Agente de maintenance en monétique" />
+<appellation intitule="Agent / Agente de maintenance -SAV- de distributeurs automatiques" />
+<appellation intitule="Agent / Agente d'intervention en distribution automatique" />
+<appellation intitule="Chef d'équipe de maintenance de distributeurs automatiques" />
+<appellation intitule="Technicien / Technicienne de maintenance de distributeurs automatiques" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1304" intitule="Installation et maintenance d'équipements industriels et d'exploitation">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maintenance industrielle" />
+<appellation intitule="Agent / Agente de maîtrise d'atelier de maintenance industrielle" />
+<appellation intitule="Agent / Agente de maîtrise de maintenance industrielle" />
+<appellation intitule="Agent / Agente de maîtrise d'entretien en électromécanique" />
+<appellation intitule="Chef d'atelier de maintenance d'équipements de production" />
+<appellation intitule="Chef d'atelier de maintenance d'équipements d'exploitation" />
+<appellation intitule="Chef d'atelier de maintenance en électromécanique" />
+<appellation intitule="Chef d'atelier d'entretien et de maintenance industrielle" />
+<appellation intitule="Chef d'équipe de maintenance industrielle" />
+<appellation intitule="Contremaître / Contremaîtresse de maintenance industrielle" />
+<appellation intitule="Dispatcheur / Dispatcheuse de techniciens de maintenance" />
+<appellation intitule="Electromécanicien / Electromécanicienne de maintenance industrielle" />
+<appellation intitule="Electromécanicien / Electromécanicienne d'équipements industriels" />
+<appellation intitule="Electromécanicien / Electromécanicienne en machines tournantes" />
+<appellation intitule="Electrotechnicien / Electrotechnicienne branche industrie" />
+<appellation intitule="Mécanicien / Mécanicienne de maintenance de matériel ferroviaire" />
+<appellation intitule="Technicien / Technicienne de maintenance d'équipements de parcs d'attractions" />
+<appellation intitule="Technicien / Technicienne de maintenance d'équipements de production" />
+<appellation intitule="Technicien / Technicienne de maintenance d'équipements d'exploitation" />
+<appellation intitule="Technicien / Technicienne de maintenance en équipements industriels" />
+<appellation intitule="Technicien / Technicienne de maintenance industrielle" />
+<appellation intitule="Technicien / Technicienne de maintenance process" />
+<appellation intitule="Technicien / Technicienne de matériel ferroviaire" />
+<appellation intitule="Technicien / Technicienne de matériels roulants" />
+<appellation intitule="Technicien / Technicienne de mise en service d'équipements industriels" />
+<appellation intitule="Technicien / Technicienne d'installation d'équipements industriels" />
+<appellation intitule="Technicien / Technicienne d'installation industrielle" />
+<appellation intitule="Technicien électrotechnicien / Technicienne électrotechnicienne en installation industrielle" />
+<appellation intitule="Technicien itinérant / Technicienne itinérante de maintenance Service Après-Vente -SAV-" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1305" intitule="Installation et maintenance électronique">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maintenance en électronique" />
+<appellation intitule="Agent technique électronicien / Agente technique électronicienne de maintenance" />
+<appellation intitule="Agent technique électronicien / Agente technique électronicienne en moyens de contrôle et de maintenance" />
+<appellation intitule="Chef d'atelier de maintenance électronique" />
+<appellation intitule="Contremaître / Contremaîtresse d'entretien en électronique" />
+<appellation intitule="Dépanneur / Dépanneuse d'instruments électromagnétiques" />
+<appellation intitule="Electronicien / Electronicienne de maintenance" />
+<appellation intitule="Electronicien / Electronicienne de maintenance aéronautique" />
+<appellation intitule="Electronicien / Electronicienne de maintenance de systèmes de télécommunication" />
+<appellation intitule="Electronicien / Electronicienne de maintenance en distribution automatique" />
+<appellation intitule="Electronicien / Electronicienne de maintenance en matériel biomédical" />
+<appellation intitule="Electronicien / Electronicienne de maintenance marine" />
+<appellation intitule="Electronicien / Electronicienne d'équipements embarqués" />
+<appellation intitule="Electronicien / Electronicienne d'installation" />
+<appellation intitule="Instrumentiste en appareils électroniques" />
+<appellation intitule="Régleur-étalonneur / Régleuse-étalonneuse en électronique" />
+<appellation intitule="Support technique en électronique" />
+<appellation intitule="Technicien / Technicienne de maintenance de cartes électroniques" />
+<appellation intitule="Technicien / Technicienne de maintenance de service après vente de commande numérique" />
+<appellation intitule="Technicien / Technicienne de maintenance de systèmes de détection" />
+<appellation intitule="Technicien / Technicienne de maintenance de systèmes de tourelle et de conduite de tir" />
+<appellation intitule="Technicien / Technicienne de maintenance de systèmes d'information" />
+<appellation intitule="Technicien / Technicienne de maintenance de systèmes optroniques" />
+<appellation intitule="Technicien / Technicienne de maintenance en audio-vidéo professionnelle" />
+<appellation intitule="Technicien / Technicienne de maintenance en électronique" />
+<appellation intitule="Technicien / Technicienne de maintenance en matériel biomédical" />
+<appellation intitule="Technicien / Technicienne de maintenance en matériel médical" />
+<appellation intitule="Technicien / Technicienne de maintenance en matériel optoélectronique" />
+<appellation intitule="Technicien / Technicienne de maintenance en microtechnique électronique" />
+<appellation intitule="Technicien / Technicienne de maintenance en régulation électronique" />
+<appellation intitule="Technicien / Technicienne de maintenance en sonorisation" />
+<appellation intitule="Technicien / Technicienne de maintenance radar" />
+<appellation intitule="Technicien / Technicienne d'entretien d'appareillages de mesure et de régulation" />
+<appellation intitule="Technicien / Technicienne d'équipements électriques et électroniques de contrôle et de régulation" />
+<appellation intitule="Technicien / Technicienne d'installation de matériels électroniques" />
+<appellation intitule="Technicien / Technicienne d'intégration en électronique" />
+<appellation intitule="Technicien / Technicienne en mécatronique" />
+<appellation intitule="Technicien / Technicienne en optronique" />
+<appellation intitule="Technicien / Technicienne service après-vente de laboratoire d'analyses médicales" />
+<appellation intitule="Technicien / Technicienne son-vidéo" />
+<appellation intitule="Technicien / Technicienne support client en électronique" />
+<appellation intitule="Technicien électronicien / Technicienne électronicienne d'installation et de mise en service" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1306" intitule="Installation et maintenance en froid, conditionnement d'air">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maintenance en climatisation" />
+<appellation intitule="Agent / Agente de maintenance en conditionnement d'air" />
+<appellation intitule="Agent / Agente de maintenance en génie climatique" />
+<appellation intitule="Agent / Agente d'encadrement en froid et conditionnement d'air" />
+<appellation intitule="Agent technicien / Agente technicienne en froid et climatisation" />
+<appellation intitule="Chef d'équipe de maintenance en froid et climatisation" />
+<appellation intitule="Conducteur / Conductrice d'installations frigorifiques" />
+<appellation intitule="Dépanneur / Dépanneuse en installations de froid et climatisation" />
+<appellation intitule="Frigoriste" />
+<appellation intitule="Frigoriste maritime" />
+<appellation intitule="Mécanicien / Mécanicienne de maintenance des systèmes climatiques et frigorifiques" />
+<appellation intitule="Monteur / Monteuse en conditionnement d'air" />
+<appellation intitule="Monteur / Monteuse en gaines de ventilation" />
+<appellation intitule="Monteur-dépanneur / Monteuse-dépanneuse en installations climatiques" />
+<appellation intitule="Monteur-dépanneur / Monteuse-dépanneuse en installations de froid et climatisation" />
+<appellation intitule="Monteur-dépanneur / Monteuse-dépanneuse frigoriste" />
+<appellation intitule="Monteur-frigoriste / Monteuse-frigoriste" />
+<appellation intitule="Technicien / Technicienne d'intervention en équipements de cuisines professionnelles" />
+<appellation intitule="Technicien / Technicienne d'intervention en froid commercial et climatisation" />
+<appellation intitule="Technicien / Technicienne d'intervention en froid et climatisation" />
+<appellation intitule="Technicien / Technicienne d'intervention en froid industriel" />
+<appellation intitule="Technicien / Technicienne d'intervention et de maintenance en conditionnement d'air" />
+<appellation intitule="Technicien / Technicienne en froid et climatisation" />
+<appellation intitule="Technicien / Technicienne frigoriste" />
+<appellation intitule="Technicien / Technicienne Service Après-Vente -SAV- en climatisation" />
+<appellation intitule="Technicien supérieur / Technicienne supérieure de maintenance en exploitation climatique" />
+<appellation intitule="Technicien-cuisiniste / Technicienne-cuisiniste en cuisines professionnelles" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1307" intitule="Installation et maintenance télécoms et courants faibles">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maintenance en systèmes d'alarme et de sécurité" />
+<appellation intitule="Agent / Agente technique en télécommunications" />
+<appellation intitule="Agent / Agente technique en télécommunications courants faibles" />
+<appellation intitule="Aide monteur / monteuse d'installations en télécommunications et courants faibles" />
+<appellation intitule="Antenniste" />
+<appellation intitule="Electronicien / Electronicienne radioélectricité" />
+<appellation intitule="Installateur / Installatrice de systèmes de sécurité, alarme et détection incendie" />
+<appellation intitule="Installateur / Installatrice en télécommunications" />
+<appellation intitule="Monteur / Monteuse d'installation en télécommunications et courants faibles" />
+<appellation intitule="Monteur / Monteuse en paraboles et antennes" />
+<appellation intitule="Monteur-installateur / Monteuse-installatrice d'alarmes" />
+<appellation intitule="Technicien / Technicienne de déploiement télécom" />
+<appellation intitule="Technicien / Technicienne de maintenance des systèmes d'alarme" />
+<appellation intitule="Technicien / Technicienne de maintenance des systèmes d'alarme et de télésurveillance" />
+<appellation intitule="Technicien / Technicienne de maintenance en installations de vidéo-surveillance" />
+<appellation intitule="Technicien / Technicienne de maintenance en systèmes d'alarme et de sécurité" />
+<appellation intitule="Technicien / Technicienne de maintenance en télécommunications" />
+<appellation intitule="Technicien / Technicienne de maintenance en téléphonie" />
+<appellation intitule="Technicien / Technicienne de maintenance sécurité alarme incendie" />
+<appellation intitule="Technicien / Technicienne d'essais et de contrôle en télécommunications" />
+<appellation intitule="Technicien / Technicienne d'installation de centrales téléphoniques" />
+<appellation intitule="Technicien / Technicienne d'installation en courants faibles" />
+<appellation intitule="Technicien / Technicienne d'installation en domotique" />
+<appellation intitule="Technicien / Technicienne d'installation en télécommunications" />
+<appellation intitule="Technicien / Technicienne d'installation en télécommunications courants faibles" />
+<appellation intitule="Technicien / Technicienne d'installation en télécommunications et radio" />
+<appellation intitule="Technicien / Technicienne en installations de surveillance intrusion" />
+<appellation intitule="Technicien / Technicienne en radiocommunication" />
+<appellation intitule="Technicien / Technicienne en radiocommunication courants faibles" />
+<appellation intitule="Technicien / Technicienne en télécommunications" />
+<appellation intitule="Technicien / Technicienne en télécommunications et réseaux d'entreprise" />
+<appellation intitule="Technicien / Technicienne installation intégration en télécommunications et réseaux d'entreprise" />
+<appellation intitule="Technicien / Technicienne réseaux et télécommunications d'entreprise" />
+<appellation intitule="Technicien / Technicienne sécurité-alarme" />
+<appellation intitule="Technicien expert / Technicienne experte en installation intégration en télécommunications et réseaux d'entreprise" />
+<appellation intitule="Technicien spécialisé / Technicienne spécialisée en installation et intégration en télécommunications et réseaux d'entreprise" />
+<appellation intitule="Technicien spécialisé / Technicienne spécialisée en télécommunications et réseaux d'entreprise" />
+<appellation intitule="Testeur / Testeuse en télécommunications" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1308" intitule="Maintenance d'installation de chauffage">
+<liste_appellations>
+<appellation intitule="Agent / Agente technique de maintenance en chauffage" />
+<appellation intitule="Agent / Agente technique d'entretien et d'exploitation de chauffage" />
+<appellation intitule="Dépanneur / Dépanneuse de chaudières industrielles" />
+<appellation intitule="Dépanneur / Dépanneuse d'exploitation de chauffage et de conditionnement d'air" />
+<appellation intitule="Dépanneur / Dépanneuse en régulation d'installations de chauffage et de conditionnement d'air" />
+<appellation intitule="Dépanneur metteur / Dépanneuse metteuse au point de brûleurs" />
+<appellation intitule="Electromécanicien / Electromécanicienne de chauffage" />
+<appellation intitule="Mécanicien / Mécanicienne de maintenance des systèmes thermiques" />
+<appellation intitule="Monteur / Monteuse de chaudières industrielles" />
+<appellation intitule="Monteur-réparateur / Monteuse-réparatrice de chaudières industrielles" />
+<appellation intitule="Surveillant-dépanneur / Surveillante-dépanneuse d'exploitation de chauffage et de conditionnement d'air" />
+<appellation intitule="Technicien / Technicienne de maintenance en chauffage" />
+<appellation intitule="Technicien / Technicienne de maintenance énergie" />
+<appellation intitule="Technicien / Technicienne d'entretien et d'exploitation de chauffage" />
+<appellation intitule="Technicien / Technicienne d'exploitation de réseaux de chauffage" />
+<appellation intitule="Technicien thermicien / Technicienne thermicienne de maintenance" />
+<appellation intitule="Technicien-dépanneur / Technicienne-dépanneuse de chaudières à gaz industrielles" />
+<appellation intitule="Thermicien / Thermicienne de maintenance" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1309" intitule="Maintenance électrique">
+<liste_appellations>
+<appellation intitule="Agent / Agente de rénovation et maintenance en électricité de machines industrielles" />
+<appellation intitule="Agent / Agente d'entretien d'équipements électriques" />
+<appellation intitule="Aide électricien / électricienne de maintenance" />
+<appellation intitule="Chef d'atelier de maintenance électrique" />
+<appellation intitule="Chef d'équipe d'électriciens de maintenance" />
+<appellation intitule="Contremaître / Contremaîtresse d'entretien en électricité" />
+<appellation intitule="Dépanneur électricien / Dépanneuse électricienne d'équipements industriels" />
+<appellation intitule="Electricien / Electricienne d'atelier de maintenance" />
+<appellation intitule="Electricien / Electricienne de bord embarqué" />
+<appellation intitule="Electricien / Electricienne de maintenance" />
+<appellation intitule="Electricien / Electricienne de maintenance de centrales hydrauliques" />
+<appellation intitule="Electricien / Electricienne de maintenance de centrales nucléaires" />
+<appellation intitule="Electricien / Electricienne de maintenance en équipements industriels" />
+<appellation intitule="Electricien / Electricienne d'entretien en industrie" />
+<appellation intitule="Electromécanicien / Electromécanicienne de maintenance d'installations électriques" />
+<appellation intitule="Electromécanicien / Electromécanicienne de phare" />
+<appellation intitule="Electromécanicien / Electromécanicienne de signalisation basse et moyenne tension" />
+<appellation intitule="Electromécanicien / Electromécanicienne d'entretien d'installations électriques" />
+<appellation intitule="Electrotechnicien / Electrotechnicienne de maintenance" />
+<appellation intitule="Ouvrier électricien / Ouvrière électricienne de maintenance" />
+<appellation intitule="Responsable maintenance dépannage en électricité industrielle" />
+<appellation intitule="Technicien / Technicienne de dépannage d'équipements électriques" />
+<appellation intitule="Technicien / Technicienne d'entretien électromécanique" />
+<appellation intitule="Technicien électricien / Technicienne électricienne de maintenance process" />
+<appellation intitule="Technicien électricien / Technicienne électricienne Service Après Vente -SAV-" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1310" intitule="Maintenance mécanique industrielle">
+<liste_appellations>
+<appellation intitule="Agent / Agente de rénovation et maintenance mécanique de machines industrielles" />
+<appellation intitule="Chef mécanicien / mécanicienne de maintenance industrielle" />
+<appellation intitule="Dépanneur mécanicien / Dépanneuse mécanicienne en équipements industriels" />
+<appellation intitule="Mécanicien / Mécanicienne de maintenance armement" />
+<appellation intitule="Mécanicien / Mécanicienne de maintenance en robinetterie" />
+<appellation intitule="Mécanicien / Mécanicienne de maintenance industrielle" />
+<appellation intitule="Mécanicien / Mécanicienne d'entretien" />
+<appellation intitule="Mécanicien / Mécanicienne d'entretien industriel" />
+<appellation intitule="Mécanicien / Mécanicienne d'entretien sur machines" />
+<appellation intitule="Mécanicien / Mécanicienne sur machines industrielles" />
+<appellation intitule="Mécanicien / Mécanicienne sur métiers leavers" />
+<appellation intitule="Micromécanicien / Micromécanicienne de maintenance industrielle" />
+<appellation intitule="Technicien / Technicienne d'entretien de machines tournantes" />
+<appellation intitule="Technicien / Technicienne d'entretien industriel" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="I14" intitule="Équipements domestiques et informatique">
+<fiche
+ code="I1401" intitule="Maintenance informatique et bureautique">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maintenance de machines de bureau" />
+<appellation intitule="Agent / Agente de maintenance de matériels de reprographie" />
+<appellation intitule="Agent / Agente de maintenance en bureautique" />
+<appellation intitule="Agent / Agente de maintenance en informatique" />
+<appellation intitule="Agent / Agente de maintenance sur systèmes d'impression et de reprographie" />
+<appellation intitule="Agent / Agente de maintenance sur télécopieurs" />
+<appellation intitule="Assistant / Assistante aux utilisateurs en informatique" />
+<appellation intitule="Assistant / Assistante micro-informatique" />
+<appellation intitule="Assistant / Assistante sur site informatique" />
+<appellation intitule="Correspondant / Correspondante micro-informatique" />
+<appellation intitule="Dépanneur / Dépanneuse en micro-informatique grand public" />
+<appellation intitule="Installateur / Installatrice de matériels de reprographie" />
+<appellation intitule="Responsable centre d'appels en maintenance informatique" />
+<appellation intitule="Responsable micro-informatique" />
+<appellation intitule="Superviseur help desk en informatique" />
+<appellation intitule="Superviseur hot line en informatique" />
+<appellation intitule="Support aux utilisateurs en informatique" />
+<appellation intitule="Support technique hot line en informatique" />
+<appellation intitule="Technicien / Technicienne assistance à la clientèle en informatique" />
+<appellation intitule="Technicien / Technicienne de help desk en informatique" />
+<appellation intitule="Technicien / Technicienne de hot line en informatique" />
+<appellation intitule="Technicien / Technicienne de maintenance de réseaux informatiques" />
+<appellation intitule="Technicien / Technicienne de maintenance de réseaux télématiques" />
+<appellation intitule="Technicien / Technicienne de maintenance de systèmes informatiques" />
+<appellation intitule="Technicien / Technicienne de maintenance en bureautique" />
+<appellation intitule="Technicien / Technicienne de maintenance en informatique" />
+<appellation intitule="Technicien / Technicienne de maintenance en matériel de bureau" />
+<appellation intitule="Technicien / Technicienne de maintenance en matériels informatiques" />
+<appellation intitule="Technicien / Technicienne de maintenance en micro-informatique" />
+<appellation intitule="Technicien / Technicienne de maintenance en microsystèmes informatiques" />
+<appellation intitule="Technicien / Technicienne de maintenance en monétique" />
+<appellation intitule="Technicien / Technicienne de Service Après Vente -SAV- en informatique" />
+<appellation intitule="Technicien / Technicienne de Service Après-Vente -SAV- en bureautique" />
+<appellation intitule="Technicien / Technicienne en micro-informatique et bureautique" />
+<appellation intitule="Technicien / Technicienne en réseau local informatique" />
+<appellation intitule="Technicien / Technicienne en téléassistance en informatique" />
+<appellation intitule="Technicien / Technicienne support en bureautique" />
+<appellation intitule="Technicien / Technicienne support en systèmes téléinformatiques" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1402" intitule="Réparation de biens électrodomestiques">
+<liste_appellations>
+<appellation intitule="Dépanneur / Dépanneuse «Blanc»" />
+<appellation intitule="Dépanneur / Dépanneuse «Brun»" />
+<appellation intitule="Dépanneur / Dépanneuse d'appareils électroménagers" />
+<appellation intitule="Dépanneur / Dépanneuse en électroménager" />
+<appellation intitule="Dépanneur / Dépanneuse en télévision, hi-fi" />
+<appellation intitule="Réparateur / Réparatrice d'appareils photographiques" />
+<appellation intitule="Réparateur / Réparatrice de machines à coudre" />
+<appellation intitule="Réparateur / Réparatrice de matériels de bricolage" />
+<appellation intitule="Réparateur / Réparatrice de matériels photographiques" />
+<appellation intitule="Réparateur / Réparatrice en électroménager" />
+<appellation intitule="Réparateur / Réparatrice en télévision, hi-fi" />
+<appellation intitule="Responsable «Blanc»" />
+<appellation intitule="Responsable «Brun»" />
+<appellation intitule="Responsable Service Après-Vente -SAV- en électroménager" />
+<appellation intitule="Technicien / Technicienne de maintenance en appareils électroménagers" />
+<appellation intitule="Technicien / Technicienne de maintenance en électronique grand public" />
+<appellation intitule="Technicien / Technicienne de maintenance en matériels domestiques électroniques" />
+<appellation intitule="Technicien / Technicienne de maintenance en matériels photographiques" />
+<appellation intitule="Technicien / Technicienne en électroménager" />
+<appellation intitule="Technicien / Technicienne en télévision, hi-fi" />
+<appellation intitule="Technicien / Technicienne produits «Blanc»" />
+<appellation intitule="Technicien / Technicienne produits «Brun»" />
+<appellation intitule="Technicien dépanneur / Technicienne dépanneuse gros électroménagers" />
+<appellation intitule="Technicien dépanneur / Technicienne dépanneuse petits électroménagers" />
+<appellation intitule="Technicien-réparateur / Technicienne-réparatrice d'appareils photographiques" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="I15" intitule="Travaux d'accès difficile">
+<fiche
+ code="I1501" intitule="Intervention en grande hauteur">
+<liste_appellations>
+<appellation intitule="Alpiniste du bâtiment" />
+<appellation intitule="Chef d'équipe cordiste" />
+<appellation intitule="Cordiste" />
+<appellation intitule="Cordiste nacelliste" />
+<appellation intitule="Ouvrier / Ouvrière cordiste" />
+<appellation intitule="Spécialiste des travaux acrobatiques du bâtiment" />
+<appellation intitule="Spécialiste des travaux en hauteur du bâtiment" />
+<appellation intitule="Spécialiste des travaux sur cordes du bâtiment" />
+<appellation intitule="Technicien / Technicienne cordiste" />
+<appellation intitule="Technicien / Technicienne de travaux d'accès difficile" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1502" intitule="Intervention en milieu subaquatique">
+<liste_appellations>
+<appellation intitule="Chef d'équipe plongeur / plongeuse" />
+<appellation intitule="Chef d'opérations d'engin sous-marin" />
+<appellation intitule="Chef d'opérations d'engin sous-marin télé opéré" />
+<appellation intitule="Chef d'opérations hyperbares" />
+<appellation intitule="Corailleur / Corailleuse" />
+<appellation intitule="Directeur / Directrice de plongée" />
+<appellation intitule="Intervenant / Intervenante en milieu immergé" />
+<appellation intitule="Nageur / Nageuse combat" />
+<appellation intitule="Oursinier / Oursinière" />
+<appellation intitule="Plongeur / Plongeuse" />
+<appellation intitule="Plongeur / Plongeuse autonome" />
+<appellation intitule="Plongeur / Plongeuse d'aide au franchissement" />
+<appellation intitule="Plongeur / Plongeuse de bord" />
+<appellation intitule="Plongeur / Plongeuse hyperbare" />
+<appellation intitule="Plongeur démineur / Plongeuse démineuse" />
+<appellation intitule="Plongeur scaphandrier / Plongeuse scaphandrière" />
+<appellation intitule="Scaphandrier / Scaphandrière" />
+<appellation intitule="Scaphandrier inspecteur / Scaphandrière inspectrice" />
+<appellation intitule="Scaphandrier soudeur / Scaphandrière soudeuse" />
+<appellation intitule="Soudeur / Soudeuse marine" />
+<appellation intitule="Soudeur-plongeur / Soudeuse-plongeuse sous-marin" />
+<appellation intitule="Soudeur-scaphandrier / Soudeuse-scaphandrière" />
+<appellation intitule="Sous-officier / Sous-officière chef de plongée" />
+<appellation intitule="Technicien / Technicienne en intervention sous-marine" />
+<appellation intitule="Tubiste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1503" intitule="Intervention en milieux et produits nocifs">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'assainissement radioactif" />
+<appellation intitule="Agent / Agente de décontamination en Nucléaire, Radiologique, Bactériologique, Chimique -NRBC-" />
+<appellation intitule="Agent / Agente de logistique nucléaire" />
+<appellation intitule="Agent / Agente de servitude nucléaire" />
+<appellation intitule="Agent / Agente de traitement dépolluant en Nucléaire Radiologique, Bactériologique, Chimique -NRBC-" />
+<appellation intitule="Agent / Agente d'intervention et d'assainissement en milieu radioactif bactériologique et chimique" />
+<appellation intitule="Chef de groupe de décontamination nucléaire" />
+<appellation intitule="Décontamineur / Décontamineuse d'atelier en Nucléaire, Radiologique, Bactériologique, Chimique -NRBC-" />
+<appellation intitule="Décontamineur / Décontamineuse sur chantier en Nucléaire, Radiologique, Bactériologique, Chimique -NRBC-" />
+<appellation intitule="Défloqueur / Défloqueuse d'amiante" />
+<appellation intitule="Désamianteur / Désamianteuse" />
+<appellation intitule="Opérateur / Opératrice en défense Nucléaire, Biologique et Chimique -NBC-" />
+<appellation intitule="Responsable d'équipe de logistique nucléaire" />
+<appellation intitule="Sapeur-pompier / Sapeuse-pompière de cellule d'intervention chimique et radiologique" />
+<appellation intitule="Spécialiste en défense Nucléaire, Biologique et Chimique -NBC-" />
+<appellation intitule="Technicien / Technicienne d'assainissement Nucléaire, Radiologique, Bactériologique, Chimique -NRBC-" />
+<appellation intitule="Technicien / Technicienne en décontamination Nucléaire, Radiologique, Bactériologique, Chimique -NRBC-" />
+<appellation intitule="Technicien / Technicienne en dépollution Nucléaire, Radiologique, Bactériologique, Chimique -NRBC-" />
+<appellation intitule="Technicien / Technicienne en risques technologiques" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="I16" intitule="Véhicules, engins, aéronefs">
+<fiche
+ code="I1601" intitule="Installation et maintenance en nautisme">
+<liste_appellations>
+<appellation intitule="Accastilleur-gréeur / Accastilleuse-gréeuse" />
+<appellation intitule="Accastilleur-monteur / Accastilleuse-monteuse électronique de marine" />
+<appellation intitule="Gréeur / Gréeuse manutentionnaire de voiliers et vedettes" />
+<appellation intitule="Gréeur / Gréeuse voilier" />
+<appellation intitule="Gréeur mateloteur / Gréeuse mateloteuse" />
+<appellation intitule="Maintenicien plaisance polyvalent / Maintenicienne plaisance polyvalente" />
+<appellation intitule="Monteur accastilleur / Monteuse accastilleuse" />
+<appellation intitule="Préparateur / Préparatrice de bateau" />
+<appellation intitule="Technicien / Technicienne de gréement" />
+<appellation intitule="Technicien / Technicienne de maintenance du nautisme" />
+<appellation intitule="Technicien gréeur / Technicienne gréeuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1602" intitule="Maintenance d'aéronefs">
+<liste_appellations>
+<appellation intitule="Electromécanicien / Electromécanicienne d'aéronautique" />
+<appellation intitule="Mécanicien / Mécanicienne aéronautique" />
+<appellation intitule="Mécanicien / Mécanicienne aéronautique aéronavale" />
+<appellation intitule="Mécanicien / Mécanicienne aéro-structure" />
+<appellation intitule="Mécanicien / Mécanicienne avion" />
+<appellation intitule="Mécanicien / Mécanicienne avion de piste" />
+<appellation intitule="Mécanicien / Mécanicienne avion d'escale" />
+<appellation intitule="Mécanicien / Mécanicienne avion système cellule" />
+<appellation intitule="Mécanicien / Mécanicienne avionique" />
+<appellation intitule="Mécanicien / Mécanicienne cabine" />
+<appellation intitule="Mécanicien / Mécanicienne Cellule, Moteur, Electricité -CME-" />
+<appellation intitule="Mécanicien / Mécanicienne d'armement aéronautique" />
+<appellation intitule="Mécanicien / Mécanicienne de bord aéronautique" />
+<appellation intitule="Mécanicien / Mécanicienne de maintenance d'aéronautique" />
+<appellation intitule="Mécanicien / Mécanicienne de moteurs d'avion" />
+<appellation intitule="Mécanicien / Mécanicienne d'entretien aviation" />
+<appellation intitule="Mécanicien / Mécanicienne d'entretien d'avions" />
+<appellation intitule="Mécanicien / Mécanicienne d'entretien d'avions légers" />
+<appellation intitule="Mécanicien / Mécanicienne d'hélicoptères" />
+<appellation intitule="Mécanicien / Mécanicienne Electricité, Instrument de bord, Radio -EIR-" />
+<appellation intitule="Mécanicien / Mécanicienne instruments de bord aéronautique" />
+<appellation intitule="Mécanicien / Mécanicienne systèmes avioniques" />
+<appellation intitule="Metteur / Metteuse au point d'équipements aéronautiques" />
+<appellation intitule="Technicien / Technicienne aéro-structure" />
+<appellation intitule="Technicien / Technicienne de maintenance aéronautique" />
+<appellation intitule="Technicien / Technicienne de maintenance en instruments de bord d'aéronefs" />
+<appellation intitule="Technicien / Technicienne d'entretien d'avion en ligne" />
+<appellation intitule="Technicien aéronautique / Technicienne aéronautique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1603" intitule="Maintenance d'engins de chantier, de levage, manutention et agricoles">
+<liste_appellations>
+<appellation intitule="Agent / Agente de diagnostic et d'intervention en machinisme agricole" />
+<appellation intitule="Agent / Agente de maintenance de matériels de manutention" />
+<appellation intitule="Mécanicien / Mécanicienne de chantier" />
+<appellation intitule="Mécanicien / Mécanicienne de machines agricoles" />
+<appellation intitule="Mécanicien / Mécanicienne d'engins blindés" />
+<appellation intitule="Mécanicien / Mécanicienne d'engins de chantier et de travaux publics" />
+<appellation intitule="Mécanicien / Mécanicienne d'entretien et de maintenance d'engins de chantier et de travaux publics" />
+<appellation intitule="Mécanicien / Mécanicienne d'équipements et d'engins motorisés de manutention" />
+<appellation intitule="Mécanicien / Mécanicienne d'équipements et d'engins motorisés en machinisme agricole" />
+<appellation intitule="Mécanicien-réparateur / Mécanicienne-réparatrice de matériels forestiers" />
+<appellation intitule="Mécanicien-réparateur / Mécanicienne-réparatrice d'engins de chantier" />
+<appellation intitule="Mécanicien-réparateur / Mécanicienne-réparatrice d'engins de levage et de manutention" />
+<appellation intitule="Mécanicien-réparateur / Mécanicienne-réparatrice d'engins forestiers" />
+<appellation intitule="Mécanicien-réparateur / Mécanicienne-réparatrice en matériels agricoles" />
+<appellation intitule="Réparateur / Réparatrice de machines agricoles" />
+<appellation intitule="Technicien / Technicienne de maintenance en matériel BTP" />
+<appellation intitule="Technicien / Technicienne de maintenance en matériels agricoles" />
+<appellation intitule="Technicien / Technicienne de maintenance en matériels de chantier de travaux publics" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1604" intitule="Mécanique automobile">
+<liste_appellations>
+<appellation intitule="Chef mécanicien / mécanicienne automobile" />
+<appellation intitule="Contremaître / Contremaîtresse en réparation automobile" />
+<appellation intitule="Contrôleur / Contrôleuse technique automobile" />
+<appellation intitule="Démonteur / Démonteuse automobile" />
+<appellation intitule="Dépanneur-remorqueur / Dépanneuse-remorqueuse de véhicules automobiles" />
+<appellation intitule="Electricien / Electricienne de maintenance automobile" />
+<appellation intitule="Essayeur-metteur / Essayeuse-metteuse au point automobile" />
+<appellation intitule="Expert / Experte technique en automobile" />
+<appellation intitule="Garagiste" />
+<appellation intitule="Mécanicien / Mécanicienne automobile" />
+<appellation intitule="Mécanicien / Mécanicienne de maintenance automobile" />
+<appellation intitule="Mécanicien / Mécanicienne de véhicules de transport en commun" />
+<appellation intitule="Mécanicien / Mécanicienne de véhicules industriels" />
+<appellation intitule="Mécanicien / Mécanicienne de véhicules militaires" />
+<appellation intitule="Mécanicien / Mécanicienne diéséliste" />
+<appellation intitule="Mécanicien / Mécanicienne motoriste automobile" />
+<appellation intitule="Mécanicien / Mécanicienne poids lourds" />
+<appellation intitule="Mécanicien / Mécanicienne service rapide en automobile" />
+<appellation intitule="Mécanicien-réparateur / Mécanicienne-réparatrice automobile" />
+<appellation intitule="Monteur / Monteuse en pneumatique" />
+<appellation intitule="Motoriste metteur / metteuse au point" />
+<appellation intitule="Préparateur / Préparatrice de véhicules automobiles" />
+<appellation intitule="Réceptionnaire en atelier mécanique automobile" />
+<appellation intitule="Technicien / Technicienne en diagnostic et réparation automobile" />
+<appellation intitule="Technicien / Technicienne en maintenance automobile" />
+<appellation intitule="Technicien électricien-électronicien / Technicienne électricienne-électronicienne automobile" />
+<appellation intitule="Technicien poseur / Technicienne poseuse de pare-brise" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1605" intitule="Mécanique de marine">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maintenance en mécanique navale" />
+<appellation intitule="Graisseur / Graisseuse en mécanique navale" />
+<appellation intitule="Machiniste à la pêche" />
+<appellation intitule="Mécanicien / Mécanicienne à la pêche" />
+<appellation intitule="Mécanicien / Mécanicienne de bateaux" />
+<appellation intitule="Mécanicien / Mécanicienne de bateaux de plaisance" />
+<appellation intitule="Mécanicien / Mécanicienne de bord" />
+<appellation intitule="Mécanicien / Mécanicienne de la marine marchande" />
+<appellation intitule="Mécanicien / Mécanicienne de la marine nationale" />
+<appellation intitule="Mécanicien / Mécanicienne de marine" />
+<appellation intitule="Mécanicien / Mécanicienne de moteurs marins" />
+<appellation intitule="Mécanicien / Mécanicienne de quart" />
+<appellation intitule="Mécanicien / Mécanicienne diéséliste marine" />
+<appellation intitule="Mécanicien / Mécanicienne diéséliste moteurs inbord" />
+<appellation intitule="Mécanicien / Mécanicienne en mécanique marine/navale" />
+<appellation intitule="Mécanicien-réparateur / Mécanicienne-réparatrice de moteurs marins" />
+<appellation intitule="Motoriste à la pêche" />
+<appellation intitule="Motoriste de marine" />
+<appellation intitule="Ouvrier mécanicien / Ouvrière mécanicienne de la marine marchande" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1606" intitule="Réparation de carrosserie">
+<liste_appellations>
+<appellation intitule="Agent / Agente de maîtrise en tôlerie-carrosserie" />
+<appellation intitule="Aide carrossier / carrossière" />
+<appellation intitule="Carrossier / Carrossière" />
+<appellation intitule="Carrossier / Carrossière en véhicules industriels" />
+<appellation intitule="Carrossier / Carrossière poids lourds" />
+<appellation intitule="Carrossier-peintre / Carrossière-peintre" />
+<appellation intitule="Carrossier-réparateur / Carrossière-réparatrice" />
+<appellation intitule="Carrossier-tôlier / Carrossière-tôlière" />
+<appellation intitule="Chef d'atelier de carrosserie" />
+<appellation intitule="Débosseleur / Débosseleuse" />
+<appellation intitule="Ouvrier / Ouvrière finition carrosserie" />
+<appellation intitule="Peintre automobile" />
+<appellation intitule="Peintre en carrosserie" />
+<appellation intitule="Peintre en véhicules industriels" />
+<appellation intitule="Peintre raccordeur / raccordeuse en carrosserie" />
+<appellation intitule="Peintre retoucheur / retoucheuse en carrosserie" />
+<appellation intitule="Rayonneur / Rayonneuse de roue" />
+<appellation intitule="Réparateur / Réparatrice de carrosserie automobile" />
+<appellation intitule="Réparateur / Réparatrice en carrosserie" />
+<appellation intitule="Responsable atelier carrosserie" />
+<appellation intitule="Tôlier / Tôlière automobile" />
+<appellation intitule="Tôlier-carrossier / Tôlière-carrossière" />
+<appellation intitule="Tôlier-débosseleur / Tôlière-débosseleuse en carrosserie" />
+<appellation intitule="Tôlier-ferreur / Tôlière-ferreuse en automobile" />
+<appellation intitule="Tôlier-formeur / Tôlière-formeuse en carrosserie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="I1607" intitule="Réparation de cycles, motocycles et motoculteurs de loisirs">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'entretien du matériel motorisé de parcs et jardins" />
+<appellation intitule="Mécanicien / Mécanicienne en cycles et motocycles" />
+<appellation intitule="Mécanicien / Mécanicienne en matériels de motoculture et de loisir" />
+<appellation intitule="Mécanicien / Mécanicienne en matériels motorisés de loisir" />
+<appellation intitule="Mécanicien / Mécanicienne en matériels motorisés de parcs et jardins" />
+<appellation intitule="Mécanicien / Mécanicienne en motoculture" />
+<appellation intitule="Mécanicien / Mécanicienne en motoculture de plaisance" />
+<appellation intitule="Mécanicien / Mécanicienne en moto-scooter" />
+<appellation intitule="Mécanicien / Mécanicienne motocycles" />
+<appellation intitule="Mécanicien-réparateur / Mécanicienne-réparatrice de cycles" />
+<appellation intitule="Mécanicien-réparateur / Mécanicienne-réparatrice de cycles et motocycles" />
+<appellation intitule="Mécanicien-réparateur / Mécanicienne-réparatrice de motoculteurs et de tronçonneuses" />
+<appellation intitule="Mécanicien-vendeur / Mécanicienne-vendeuse moto" />
+<appellation intitule="Motociste" />
+<appellation intitule="Rayonneur de roues de cyles, motocycles, motoculteurs" />
+<appellation intitule="Réparateur / Réparatrice de matériels motorisés de parcs et jardins" />
+<appellation intitule="Responsable d'atelier de mécanique parcs et jardins" />
+<appellation intitule="Technicien / Technicienne Service Après-Vente -SAV- de cycles et motocycles" />
+<appellation intitule="Technicien-réparateur / Technicienne-réparatrice de cycles" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="J" intitule="SANTÉ">
+<domaine code="J11" intitule="Praticiens médicaux">
+<fiche
+ code="J1101" intitule="Médecine de prévention">
+<liste_appellations>
+<appellation intitule="Médecin coordinateur Protection Maternelle et Infantile -PMI-" />
+<appellation intitule="Médecin de la Protection Maternelle et Infantile -PMI-" />
+<appellation intitule="Médecin de liaison de santé scolaire" />
+<appellation intitule="Médecin de prévention" />
+<appellation intitule="Médecin de santé préventive" />
+<appellation intitule="Médecin de santé scolaire" />
+<appellation intitule="Médecin des services de la santé et de la petite enfance" />
+<appellation intitule="Médecin du travail" />
+<appellation intitule="Médecin du travail et de prévention" />
+<appellation intitule="Médecin Inspecteur Régional du Travail et de la Main d'OEuvre -MIRTMO-" />
+<appellation intitule="Médecin scolaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1102" intitule="Médecine généraliste et spécialisée">
+<liste_appellations>
+<appellation intitule="Allergologue" />
+<appellation intitule="Cardiologue" />
+<appellation intitule="Chirurgien / Chirurgienne" />
+<appellation intitule="Dermatologue" />
+<appellation intitule="Endocrinologue" />
+<appellation intitule="Gastro-entérologue" />
+<appellation intitule="Gériatre" />
+<appellation intitule="Gérontologue" />
+<appellation intitule="Gynécologue" />
+<appellation intitule="Gynécologue-obstétricien / Gynécologue-obstétricienne" />
+<appellation intitule="Hématologue" />
+<appellation intitule="Médecin acupuncteur" />
+<appellation intitule="Médecin Anesthésiste Réanimateur -MAR-" />
+<appellation intitule="Médecin coordonnateur de soins" />
+<appellation intitule="Médecin directeur de l'information médicale" />
+<appellation intitule="Médecin du sport" />
+<appellation intitule="Médecin en pharmacovigilance" />
+<appellation intitule="Médecin généraliste" />
+<appellation intitule="Médecin homéopathe" />
+<appellation intitule="Médecin immunologue" />
+<appellation intitule="Médecin légiste" />
+<appellation intitule="Médecin néphrologue" />
+<appellation intitule="Médecin ostéopathe" />
+<appellation intitule="Médecin praticien" />
+<appellation intitule="Médecin praticien hospitalier" />
+<appellation intitule="Médecin régulateur" />
+<appellation intitule="Médecin responsable de la Documentation et de l'Information Médicale (Médecin responsable -DIM-)" />
+<appellation intitule="Médecin spécialiste" />
+<appellation intitule="Médecin thermal" />
+<appellation intitule="Médecin urgentiste" />
+<appellation intitule="Neurochirurgien / Neurochirurgienne" />
+<appellation intitule="Neurologue" />
+<appellation intitule="Omnipraticien / Omnipraticienne" />
+<appellation intitule="Oncologue" />
+<appellation intitule="Ophtalmologue" />
+<appellation intitule="Oto-rhino-laryngologiste" />
+<appellation intitule="Pédiatre" />
+<appellation intitule="Pédopsychiatre" />
+<appellation intitule="Pneumologue" />
+<appellation intitule="Psychiatre" />
+<appellation intitule="Radiologue" />
+<appellation intitule="Rhumatologue" />
+<appellation intitule="Urgentiste" />
+<appellation intitule="Urologue" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1103" intitule="Médecine dentaire">
+<liste_appellations>
+<appellation intitule="Chirurgien-dentiste / Chirurgienne-dentiste" />
+<appellation intitule="Chirurgien-dentiste / Chirurgienne-dentiste des armées" />
+<appellation intitule="Dentiste" />
+<appellation intitule="Odontologiste" />
+<appellation intitule="Orthodontiste" />
+<appellation intitule="Praticien / Praticienne dentaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1104" intitule="Suivi de la grossesse et de l'accouchement">
+<liste_appellations>
+<appellation intitule="Homme sage-femme / Sage-femme" />
+<appellation intitule="Maïeuticien / Maïeuticienne" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="J12" intitule="Praticiens médico-techniques">
+<fiche
+ code="J1201" intitule="Biologie médicale">
+<liste_appellations>
+<appellation intitule="Biologiste médical / médicale" />
+<appellation intitule="Directeur / Directrice de laboratoire d'analyses de biologie médicale" />
+<appellation intitule="Directeur / Directrice de laboratoire d'analyses vétérinaires" />
+<appellation intitule="Directeur adjoint / Directrice adjointe de laboratoire d'analyses de biologie médicale" />
+<appellation intitule="Directeur assistant / Directrice assistante de laboratoire d'analyses de biologie médicale" />
+<appellation intitule="Médecin biologiste" />
+<appellation intitule="Pharmacien / Pharmacienne biologiste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1202" intitule="Pharmacie">
+<liste_appellations>
+<appellation intitule="Pharmacien / Pharmacienne" />
+<appellation intitule="Pharmacien / Pharmacienne chimiste des armées" />
+<appellation intitule="Pharmacien / Pharmacienne en officine" />
+<appellation intitule="Pharmacien assistant / Pharmacienne assistante" />
+<appellation intitule="Pharmacien hospitalier / Pharmacienne hospitalière" />
+<appellation intitule="Pharmacien répartiteur / Pharmacienne répartitrice" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="J13" intitule="Professionnels médico-techniques">
+<fiche
+ code="J1301" intitule="Personnel polyvalent des services hospitaliers">
+<liste_appellations>
+<appellation intitule="Agent / Agente de bio nettoyage hospitalier" />
+<appellation intitule="Agent / Agente de propreté hospitalière" />
+<appellation intitule="Agent / Agente de stérilisation de service hospitalier" />
+<appellation intitule="Agent / Agente des services hospitaliers" />
+<appellation intitule="Agent hospitalier / Agente hospitalière" />
+<appellation intitule="Agent hôtelier hospitalier / Agente hôtelière hospitalière" />
+<appellation intitule="Brancardier / Brancardière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1302" intitule="Analyses médicales">
+<liste_appellations>
+<appellation intitule="Laborantin / Laborantine d'analyses médicales" />
+<appellation intitule="Technicien / Technicienne de biologie médicale" />
+<appellation intitule="Technicien / Technicienne de laboratoires d'analyses médicales" />
+<appellation intitule="Technicien biologiste médical / Technicienne biologiste médicale" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1303" intitule="Assistance médico-technique">
+<liste_appellations>
+<appellation intitule="Agent / Agente des Cabinets en Imagerie Médicale - ACIM -" />
+<appellation intitule="Aide de radiologie" />
+<appellation intitule="Aide dentaire" />
+<appellation intitule="Aide manipulateur / manipulatrice en radiologie" />
+<appellation intitule="Assistant / Assistante audioprothésiste" />
+<appellation intitule="Assistant / Assistante dentaire" />
+<appellation intitule="Assistant / Assistante en cabinet médical" />
+<appellation intitule="Assistant / Assistante médico-technique" />
+<appellation intitule="Assitant / Assitante médico-technique en audioprothèse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1304" intitule="Aide en puériculture">
+<liste_appellations>
+<appellation intitule="Auxiliaire de puériculture" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1305" intitule="Conduite de véhicules sanitaires">
+<liste_appellations>
+<appellation intitule="Ambulancier / Ambulancière" />
+<appellation intitule="Ambulancier / Ambulancière urgentiste" />
+<appellation intitule="Ambulancier hospitalier / Ambulancière hospitalière" />
+<appellation intitule="Conducteur / Conductrice de Véhicule Sanitaire" />
+<appellation intitule="Conducteur / Conductrice de Véhicule Sanitaire Léger -VSL-" />
+<appellation intitule="Conducteur ambulancier / Conductrice ambulancière" />
+<appellation intitule="Conducteur ambulancier / Conductrice ambulancière de services d'urgence" />
+<appellation intitule="Conducteur ambulancier hospitalier / Conductrice ambulancière hospitalière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1306" intitule="Imagerie médicale">
+<liste_appellations>
+<appellation intitule="Dosimétriste" />
+<appellation intitule="Manipulateur / Manipulatrice d'électroradiologie médicale" />
+<appellation intitule="Manipulateur / Manipulatrice en imagerie médicale" />
+<appellation intitule="Manipulateur / Manipulatrice en radiologie" />
+<appellation intitule="Technicien / Technicienne en imagerie médicale" />
+<appellation intitule="Technicien / Technicienne en imagerie médicale et radiologie thérapeutique" />
+<appellation intitule="Technicien / Technicienne en physique médicale" />
+<appellation intitule="Technicien / Technicienne en radiologie" />
+<appellation intitule="Technicien / Technicienne en radiothérapie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1307" intitule="Préparation en pharmacie">
+<liste_appellations>
+<appellation intitule="Aide-préparateur / Aide-préparatrice en pharmacie" />
+<appellation intitule="Préparateur / Préparatrice en pharmacie" />
+<appellation intitule="Préparateur / Préparatrice en pharmacie d'officine" />
+<appellation intitule="Préparateur / Préparatrice en pharmacie hospitalière" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="J14" intitule="Rééducation et appareillage">
+<fiche
+ code="J1401" intitule="Audioprothèses">
+<liste_appellations>
+<appellation intitule="Audioprothésiste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1402" intitule="Diététique">
+<liste_appellations>
+<appellation intitule="Diététicien / Diététicienne" />
+<appellation intitule="Diététicien / Diététicienne conseil" />
+<appellation intitule="Diététicien / Diététicienne nutritionniste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1403" intitule="Ergothérapie">
+<liste_appellations>
+<appellation intitule="Ergothérapeute" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1404" intitule="Kinésithérapie">
+<liste_appellations>
+<appellation intitule="Kinésithérapeute" />
+<appellation intitule="Kinésithérapeute chiropracteur / chiropractrice" />
+<appellation intitule="Kinésithérapeute chiropraticien / chiropraticienne" />
+<appellation intitule="Kinésithérapeute ostéopathe" />
+<appellation intitule="Masseur / Masseuse kinésithérapeute" />
+<appellation intitule="Masseur kinésithérapeute rééducateur / Masseuse kinésithérapeute rééducatrice" />
+<appellation intitule="Physiothérapeute" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1405" intitule="Optiqu">
+<liste_appellations>
+<appellation intitule="Monteur-vendeur lunetier / Monteuse-vendeuse lunetière" />
+<appellation intitule="Monteur-vendeur opticien / Monteuse-vendeuse opticienne" />
+<appellation intitule="Opticien / Opticienne" />
+<appellation intitule="Opticien / Opticienne responsable de magasin" />
+<appellation intitule="Opticien-lunetier / Opticienne-lunetière" />
+<appellation intitule="Opticien-optométriste / Opticienne-optométriste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1406" intitule="Orthophonie">
+<liste_appellations>
+<appellation intitule="Logopède" />
+<appellation intitule="Logopédiste" />
+<appellation intitule="Orthophoniste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1407" intitule="Orthoptique">
+<liste_appellations>
+<appellation intitule="Orthoptiste" />
+<appellation intitule="Orthoptiste rééducateur / rééducatrice en basse vision" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1408" intitule="Ostéopathie et chiropraxie">
+<liste_appellations>
+<appellation intitule="Chiropracteur / Chiropractrice" />
+<appellation intitule="Chiropraticien / Chiropraticienne" />
+<appellation intitule="Ostéopathe" />
+<appellation intitule="Praticien / Praticienne en ostéopathie" />
+<appellation intitule="Praticien / Praticienne en ostéopathie ou chiropratique" />
+<appellation intitule="Thérapeute en chiropratique" />
+<appellation intitule="Thérapeute ostéopathe" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1409" intitule="Pédicurie et podologie">
+<liste_appellations>
+<appellation intitule="Pédicure podologue posturopodiste" />
+<appellation intitule="Pédicure-podologue" />
+<appellation intitule="Podologue" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1410" intitule="Prothèses dentaires">
+<liste_appellations>
+<appellation intitule="Chef de laboratoire en prothèse dentaire" />
+<appellation intitule="Modeleur / Modeleuse en prothèse dentaire" />
+<appellation intitule="Opérateur / Opératrice en prothèse dentaire" />
+<appellation intitule="Plâtrier-bourreur / Plâtrière-bourreuse en prothèse dentaire" />
+<appellation intitule="Plâtrier-polisseur / Plâtrière-polisseuse en prothèse dentaire" />
+<appellation intitule="Prothésiste dentaire" />
+<appellation intitule="Prothésiste en orthodontie" />
+<appellation intitule="Technicien / Technicienne de laboratoire dentaire" />
+<appellation intitule="Technicien / Technicienne de laboratoire dentaire orthopédie dento-faciale" />
+<appellation intitule="Technicien / Technicienne en prothèse dentaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1411" intitule="Prothèses et orthèses">
+<liste_appellations>
+<appellation intitule="Applicateur / Applicatrice en ortho-prothèse" />
+<appellation intitule="Applicateur / Applicatrice orthopédiste" />
+<appellation intitule="Assistant / Assistante technique podo-orthésiste" />
+<appellation intitule="Bandagiste-orthopédiste" />
+<appellation intitule="Bottier / Bottière orthopédiste" />
+<appellation intitule="Epithésiste" />
+<appellation intitule="Oculariste" />
+<appellation intitule="Orthoprothésiste" />
+<appellation intitule="Orthoprothésiste appareilleur / appareilleuse" />
+<appellation intitule="Ouvrier / Ouvrière de montage en podo orthèse" />
+<appellation intitule="Ouvrier / Ouvrière podo-orthésiste prothésiste" />
+<appellation intitule="Personnel de fabrication et de pose de prothèses et orthèses" />
+<appellation intitule="Podo-orthésiste" />
+<appellation intitule="Prothésiste-orthésiste" />
+<appellation intitule="Prothésiste-orthopédiste" />
+<appellation intitule="Technicien / Technicienne podo-orthésiste" />
+<appellation intitule="Technicien / Technicienne podo-orthésiste prothésiste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1412" intitule="Rééducation en psychomotricité">
+<liste_appellations>
+<appellation intitule="Psychomotricien / Psychomotricienne" />
+<appellation intitule="Psychorééducateur / Psychorééducatrice" />
+<appellation intitule="Rééducateur / Rééducatrice en psychomotricité" />
+<appellation intitule="Thérapeute en psychomotricité" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="J15" intitule="Soins paramédicaux">
+<fiche
+ code="J1501" intitule="Soins d'hygiène, de confort du patient">
+<liste_appellations>
+<appellation intitule="Aide-soignant / Aide-soignante" />
+<appellation intitule="Aide-soignant / Aide-soignante à domicile" />
+<appellation intitule="Aide-soignant / Aide-soignante en gériatrie" />
+<appellation intitule="Aide-soignant / Aide-soignante en puériculture" />
+<appellation intitule="Aide-soignant hospitalier / Aide-soignante hospitalière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1502" intitule="Coordination de services médicaux ou paramédicaux">
+<liste_appellations>
+<appellation intitule="Cadre de santé de service paramédical" />
+<appellation intitule="Cadre de santé d'unité de soins" />
+<appellation intitule="Cadre de santé d'unité de soins ou de service paramédical" />
+<appellation intitule="Cadre de santé Sage-femme" />
+<appellation intitule="Cadre infirmier / infirmière hygiéniste" />
+<appellation intitule="Cadre supérieur / supérieure de santé" />
+<appellation intitule="Coordonnateur général / Coordonnatrice générale des soins" />
+<appellation intitule="Directeur / Directrice des soins" />
+<appellation intitule="Infirmier général / Infirmière générale" />
+<appellation intitule="Surveillant / Surveillante chef de service paramédical" />
+<appellation intitule="Surveillant / Surveillante chef de services de soins" />
+<appellation intitule="Surveillant / Surveillante de service paramédical" />
+<appellation intitule="Surveillant / Surveillante d'unités de soins" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1503" intitule="Soins infirmiers spécialisés en anesthésie">
+<liste_appellations>
+<appellation intitule="Infirmier / Infirmière anesthésiste" />
+<appellation intitule="Infirmier Anesthésiste Diplômé / Infirmière Anesthésiste Diplômée d'Etat -IADE-" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1504" intitule="Soins infirmiers spécialisés en bloc opératoire">
+<liste_appellations>
+<appellation intitule="Infirmier / Infirmière aide opératoire" />
+<appellation intitule="Infirmier / Infirmière de bloc opératoire circulant" />
+<appellation intitule="Infirmier / Infirmière de bloc opératoire Diplômé d'Etat -IBODE-" />
+<appellation intitule="Infirmier / Infirmière de bloc opératoire instrumentiste" />
+<appellation intitule="Infirmier spécialisé / Infirmière spécialisée de bloc opératoire" />
+<appellation intitule="Instrumentiste en bloc opératoire" />
+<appellation intitule="Panseur / Panseuse en bloc opératoire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1505" intitule="Soins infirmiers spécialisés en prévention">
+<liste_appellations>
+<appellation intitule="Infirmier / Infirmière de médecine du travail" />
+<appellation intitule="Infirmier / Infirmière de prévention" />
+<appellation intitule="Infirmier / Infirmière de santé au travail" />
+<appellation intitule="Infirmier / Infirmière de santé préventive" />
+<appellation intitule="Infirmier / Infirmière d'entreprise" />
+<appellation intitule="Infirmier / Infirmière scolaire" />
+<appellation intitule="Infirmier spécialisé / Infirmière spécialisée en santé scolaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1506" intitule="Soins infirmiers généralistes">
+<liste_appellations>
+<appellation intitule="Infirmier / Infirmière de secteur psychiatrique" />
+<appellation intitule="Infirmier / Infirmière de service hospitalier" />
+<appellation intitule="Infirmier / Infirmière de soins généraux" />
+<appellation intitule="Infirmier / Infirmière d'hospitalisation à domicile" />
+<appellation intitule="Infirmier / Infirmière en santé mentale" />
+<appellation intitule="Infirmier / Infirmière en stomatothérapie" />
+<appellation intitule="Infirmier / Infirmière hygiéniste" />
+<appellation intitule="Infirmier / Infirmière militaire" />
+<appellation intitule="Infirmier / Infirmière psychiatrique" />
+<appellation intitule="Infirmier coordinateur / Infirmière coordinatrice de services de maintien à domicile" />
+<appellation intitule="Infirmier coordinateur / Infirmière coordinatrice de soins infirmiers à domicile" />
+<appellation intitule="Infirmier libéral / Infirmière libérale" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="J1507" intitule="Soins infirmiers spécialisés en puériculture">
+<liste_appellations>
+<appellation intitule="Infirmier / Infirmière en puéricutlure" />
+<appellation intitule="Puériculteur / Puéricultrice" />
+<appellation intitule="Puériculteur / Puéricultrice en structure d'accueil petite enfance" />
+<appellation intitule="Puériculteur / Puéricultrice responsable de crèche" />
+<appellation intitule="Puériculteur / Puéricultrice responsable de halte garderie" />
+<appellation intitule="Puériculteur / Puéricultrice responsable de pouponnière" />
+<appellation intitule="Puériculteur / Puéricultrice responsable de structure d'accueil petite enfance" />
+<appellation intitule="Puériculteur coordinateur / Puéricultrice coordinatrice petite enfance" />
+<appellation intitule="Puériculteur hospitalier / Puéricultrice hospitalière" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="K" intitule="SERVICES À LA PERSONNE ET À LA COLLECTIVITÉ">
+<domaine code="K11" intitule="Accompagnement de la personne">
+<fiche
+ code="K1101" intitule="Accompagnement et médiation familiale">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée de l'accompagnement et de la médiation familiale" />
+<appellation intitule="Conseiller conjugal / Conseillère conjugale" />
+<appellation intitule="Conseiller conjugal et familial / Conseillère conjugale et familiale" />
+<appellation intitule="Médiateur conjugal / Médiatrice conjugale" />
+<appellation intitule="Médiateur familial / Médiatrice familiale" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1102" intitule="Aide aux bénéficiaires d'une mesure de protection juridique">
+<liste_appellations>
+<appellation intitule="Délégué / Déléguée à la protection des personnes et de leurs biens" />
+<appellation intitule="Délégué / Déléguée à la tutelle" />
+<appellation intitule="Délégué / Déléguée à la tutelle aux majeurs protégés" />
+<appellation intitule="Délégué / Déléguée à la tutelle aux prestations familiales et sociales" />
+<appellation intitule="Délégué / Déléguée à la tutelle aux prestations sociales" />
+<appellation intitule="Gérant / Gérante de tutelle" />
+<appellation intitule="Tuteur / Tutrice aux majeurs protégés" />
+<appellation intitule="Tuteur / Tutrice aux prestations sociales" />
+<appellation intitule="Tuteur curateur / Tutrice curatrice" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1103" intitule="Développement personnel et bien-être de la personne">
+<liste_appellations>
+<appellation intitule="Coach en développement personnel" />
+<appellation intitule="Conseiller / Conseillère en aromathérapie" />
+<appellation intitule="Conseiller / Conseillère en développement personnel" />
+<appellation intitule="Conseiller / Conseillère en herboristerie" />
+<appellation intitule="Conseiller / Conseillère en naturopathie" />
+<appellation intitule="Conseiller / Conseillère en phytothérapie" />
+<appellation intitule="Conseiller / Conseillère en reiki" />
+<appellation intitule="Conseiller matrimonial / Conseillère matrimoniale" />
+<appellation intitule="Energéticien / Energéticienne" />
+<appellation intitule="Intervenant / Intervenante en auriculothérapie" />
+<appellation intitule="Intervenant / Intervenante en bioénergie" />
+<appellation intitule="Intervenant / Intervenante en étiopathie" />
+<appellation intitule="Intervenant / Intervenante en iridologie" />
+<appellation intitule="Intervenant / Intervenante en kinésiologie" />
+<appellation intitule="Intervenant / Intervenante en médecine chinoise" />
+<appellation intitule="Intervenant / Intervenante en réflexologie plantaire" />
+<appellation intitule="Praticien / Praticienne en shiatsu" />
+<appellation intitule="Relaxologue" />
+<appellation intitule="Sophrologue" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1104" intitule="Psychologie">
+<liste_appellations>
+<appellation intitule="Arthérapeute" />
+<appellation intitule="Dansethérapeute" />
+<appellation intitule="Musicothérapeute" />
+<appellation intitule="Neuropsychologue" />
+<appellation intitule="Praticien / Praticienne en psychologie" />
+<appellation intitule="Psychanalyste" />
+<appellation intitule="Psychodramatiste" />
+<appellation intitule="Psychologue clinicien / clinicienne" />
+<appellation intitule="Psychologue scolaire" />
+<appellation intitule="Psychologue-psychanalyste" />
+<appellation intitule="Psychologue-psychothérapeute" />
+<appellation intitule="Psychothérapeute" />
+<appellation intitule="Théâtrothérapeute" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K12" intitule="Action sociale, socioéducative et socio-culturelle">
+<fiche
+ code="K1201" intitule="Action sociale">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante de service social" />
+<appellation intitule="Assistant social / Assistante sociale" />
+<appellation intitule="Assistant social / Assistante sociale de secteur" />
+<appellation intitule="Assistant social / Assistante sociale du personnel" />
+<appellation intitule="Assistant social / Assistante sociale du travail" />
+<appellation intitule="Chargé / Chargée d'intervention sociale" />
+<appellation intitule="Conseiller / Conseillère du travail" />
+<appellation intitule="Conseiller / Conseillère en économie sociale et familiale" />
+<appellation intitule="Conseiller / Conseillère technique de service social" />
+<appellation intitule="Conseiller / Conseillère technique en action sociale" />
+<appellation intitule="Conseiller social / Conseillère sociale" />
+<appellation intitule="Coordonnateur / Coordonnatrice de service d'action sociale" />
+<appellation intitule="Coordonnateur / Coordonnatrice de service social" />
+<appellation intitule="Délégué social / Déléguée sociale" />
+<appellation intitule="Intervenant / Intervenante d'action sociale" />
+<appellation intitule="Responsable de circonscription d'action sociale" />
+<appellation intitule="Responsable de circonscription d'intervention sanitaire et sociale" />
+<appellation intitule="Surintendant / Surintendante d'usine et de services sociaux" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1202" intitule="Éducation de jeunes enfants">
+<liste_appellations>
+<appellation intitule="Educateur / Educatrice de jeunes enfants" />
+<appellation intitule="Educateur / Educatrice de jeunes enfants animateur de relais d'assistantes maternelles" />
+<appellation intitule="Educateur / Educatrice de jeunes enfants coordonnateur petite enfance" />
+<appellation intitule="Educateur / Educatrice de jeunes enfants responsable adjoint de structure d'accueil petite enfance" />
+<appellation intitule="Educateur / Educatrice de jeunes enfants responsable de structure d'accueil petite enfance" />
+<appellation intitule="Responsable de structure multi accueil petite enfance" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1203" intitule="Encadrement technique en insertion professionnelle">
+<liste_appellations>
+<appellation intitule="Accompagnateur / Accompagnatrice technique d'insertion professionnelle" />
+<appellation intitule="Accompagnateur formateur / Accompagnatrice formatrice technique en insertion professionnelle" />
+<appellation intitule="Accompagnateur socioprofessionnel / Accompagnatrice socioprofessionnelle" />
+<appellation intitule="Chef des travaux pénitentiaires" />
+<appellation intitule="Educateur / Educatrice technique" />
+<appellation intitule="Educateur technique spécialisé / Educatrice technique spécialisée" />
+<appellation intitule="Encadrant / Encadrante de chantier d'insertion" />
+<appellation intitule="Encadrant / Encadrante en entreprise d'insertion" />
+<appellation intitule="Encadrant / Encadrante technique d'activités d'insertion professionnelle" />
+<appellation intitule="Encadrant / Encadrante technique d'insertion socioprofessionnelle" />
+<appellation intitule="Instructeur / Instructrice technique pénitentiaire" />
+<appellation intitule="Moniteur / Monitrice d'atelier en établissement spécialisé" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1204" intitule="Facilitation de la vie sociale">
+<liste_appellations>
+<appellation intitule="Adulte relais" />
+<appellation intitule="Agent / Agente d'ambiance des transports en commun" />
+<appellation intitule="Agent / Agente d'ambiance et de prévention" />
+<appellation intitule="Agent / Agente de facilitation de la vie sociale" />
+<appellation intitule="Agent / Agente de médiation dans les services publics" />
+<appellation intitule="Agent / Agente de médiation dans l'espace public" />
+<appellation intitule="Agent / Agente de médiation et de la vie sociale" />
+<appellation intitule="Agent / Agente de médiation et de sécurité" />
+<appellation intitule="Agent / Agente de prévention et de médiation sociale" />
+<appellation intitule="Agent / Agente de prévention et de proximité" />
+<appellation intitule="Agent / Agente d'environnement de proximité" />
+<appellation intitule="Agent local / Agente locale de médiation sociale" />
+<appellation intitule="Coordinateur / Coordinatrice d'équipes de médiation" />
+<appellation intitule="Correspondant / Correspondante de nuit" />
+<appellation intitule="Correspondant / Correspondante de quartier" />
+<appellation intitule="Intervenant / Intervenante de proximité" />
+<appellation intitule="Médiateur / Médiatrice de ville" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1205" intitule="Information et médiation sociale">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'accueil et d'information sociale" />
+<appellation intitule="Agent / Agente d'accueil social" />
+<appellation intitule="Chargé / Chargée de médiation de santé publique" />
+<appellation intitule="Chargé / Chargée de médiation interculturelle" />
+<appellation intitule="Chargé / Chargée de projet en éducation pour la santé" />
+<appellation intitule="Chargé / Chargée d'éducation pour la santé" />
+<appellation intitule="Chargé / Chargée d'information de planning familial" />
+<appellation intitule="Chargé / Chargée d'information des droits des femmes" />
+<appellation intitule="Chargé / Chargée d'information jeunesse" />
+<appellation intitule="Chargé / Chargée d'information juridique et sociale" />
+<appellation intitule="Chargé / Chargée d'information, de médiation sociale/médicosociale" />
+<appellation intitule="Conseiller / Conseillère en génétique" />
+<appellation intitule="Ecoutant social / Ecoutante sociale" />
+<appellation intitule="Ecoutant social coordinateur / Ecoutante sociale coordinatrice" />
+<appellation intitule="Ecoutant social référent / Ecoutante sociale référente" />
+<appellation intitule="Médiateur administratif / Médiatrice administrative" />
+<appellation intitule="Médiateur interculturel / Médiatrice interculturelle" />
+<appellation intitule="Médiateur social et culturel / Médiatrice sociale et culturelle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1206" intitule="Intervention socioculturelle">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice d'activités sociales et de vie locale" />
+<appellation intitule="Animateur / Animatrice de chantier de jeunes bénévoles" />
+<appellation intitule="Animateur / Animatrice de chantier international de jeunes bénévoles" />
+<appellation intitule="Animateur / Animatrice de convivialité en structure d'accueil" />
+<appellation intitule="Animateur / Animatrice de foyer rural" />
+<appellation intitule="Animateur / Animatrice de quartier" />
+<appellation intitule="Animateur / Animatrice de régie de quartier" />
+<appellation intitule="Animateur coordonnateur / Animatrice coordonnatrice d'activités du troisième âge" />
+<appellation intitule="Animateur coordonnateur / Animatrice coordonnatrice d'activités jeunesse" />
+<appellation intitule="Animateur social / Animatrice sociale en foyer d'hébergement" />
+<appellation intitule="Animateur socioculturel / Animatrice socioculturelle" />
+<appellation intitule="Animateur socioéducatif / Animatrice socioéducative" />
+<appellation intitule="Chargé / Chargée d'animation de projets éducatifs de quartier" />
+<appellation intitule="Coordinateur social / Coordinatrice sociale de quartier" />
+<appellation intitule="Directeur / Directrice de centre culturel" />
+<appellation intitule="Directeur / Directrice de centre socioculturel" />
+<appellation intitule="Directeur / Directrice de maison des jeunes et de la culture" />
+<appellation intitule="Directeur / Directrice de régie de quartier" />
+<appellation intitule="Responsable de foyer rural" />
+<appellation intitule="Responsable de maison de quartier" />
+<appellation intitule="Technicien / Technicienne de l'animation socioculturelle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1207" intitule="Intervention socioéducative">
+<liste_appellations>
+<appellation intitule="Conseiller / Conseillère d'Insertion et de Probation -CIP-" />
+<appellation intitule="Coordonnateur / Coordonnatrice de projet socioéducatif" />
+<appellation intitule="Educateur / Educatrice chef de service socioéducatif" />
+<appellation intitule="Educateur / Educatrice de la protection judiciaire de la jeunesse" />
+<appellation intitule="Educateur / Educatrice en milieu ouvert" />
+<appellation intitule="Educateur socioéducatif / Educatrice socioéducative" />
+<appellation intitule="Educateur spécialisé / Educatrice spécialisée" />
+<appellation intitule="Educateur spécialisé / Educatrice spécialisée de prévention" />
+<appellation intitule="Educateur spécialisé / Educatrice spécialisée de rue" />
+<appellation intitule="Educateur spécialisé / Educatrice spécialisée en milieu ouvert" />
+<appellation intitule="Elève éducateur socioéducatif / éducatrice socioéducative" />
+<appellation intitule="Moniteur éducateur / Monitrice éducatrice" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K13" intitule="Aide à la vie quotidienne">
+<fiche
+ code="K1301" intitule="Accompagnement médico-social">
+<liste_appellations>
+<appellation intitule="Accompagnateur médicosocial / Accompagnatrice médicosociale" />
+<appellation intitule="Accompagnateur médicosocial / Accompagnatrice médicosociale d'activités de la vie journalière" />
+<appellation intitule="Accompagnateur médicosocial / Accompagnatrice médicosociale de personnes dépendantes" />
+<appellation intitule="Accompagnateur médicosocial / Accompagnatrice médicosociale de personnes en post-cure" />
+<appellation intitule="Aide médico-psychologique" />
+<appellation intitule="Auxiliaire d'Intégration Scolaire -AIS-" />
+<appellation intitule="Avéjiste" />
+<appellation intitule="Educateur / Educatrice en locomotion" />
+<appellation intitule="Instructeur / Instructrice en locomotion" />
+<appellation intitule="Intervenant / Intervenante en accompagnement médicosocial" />
+<appellation intitule="Rééducateur / Rééducatrice en autonomie de la vie journalière" />
+<appellation intitule="Rééducateur / Rééducatrice en locomotion" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1302" intitule="Assistance auprès d'adultes">
+<liste_appellations>
+<appellation intitule="Accueillant familial / Accueillante familiale auprès d'adultes" />
+<appellation intitule="Accueillant familial / Accueillante familiale thérapeutique auprès d'adultes" />
+<appellation intitule="Aide aux personnes âgées" />
+<appellation intitule="Assistant / Assistante de convivialité à domicile" />
+<appellation intitule="Assistant / Assistante de vie" />
+<appellation intitule="Assistant / Assistante de vie auprès de personnes âgées" />
+<appellation intitule="Assistant / Assistante de vie auprès de personnes handicapées" />
+<appellation intitule="Auxiliaire de gériatrie" />
+<appellation intitule="Auxiliaire de gérontologie" />
+<appellation intitule="Auxiliaire de vie" />
+<appellation intitule="Auxiliaire de Vie Sociale -AVS-" />
+<appellation intitule="Auxiliaire familiale" />
+<appellation intitule="Auxiliaire familiale et sanitaire" />
+<appellation intitule="Employé / Employée à domicile auprès d'adultes" />
+<appellation intitule="Employé famililal / Employée famililale auprès d'adultes" />
+<appellation intitule="Garde-malade" />
+<appellation intitule="Monsieur / Dame de compagnie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1303" intitule="Assistance auprès d'enfants">
+<liste_appellations>
+<appellation intitule="Accueillant familial / Accueillante familiale auprès d'enfants" />
+<appellation intitule="Accueillant familial / Accueillante familiale thérapeutique auprès d'enfants" />
+<appellation intitule="Agent spécialisé / Agente spécialisée des écoles maternelles -ASEM-" />
+<appellation intitule="Agent spécialisé / Agente spécialisée des écoles primaires" />
+<appellation intitule="Aide maternel / maternelle d'école" />
+<appellation intitule="Assistant / Assistante accueil petite enfance" />
+<appellation intitule="Assistant familial / Assistante familiale" />
+<appellation intitule="Assistant maternel / Assistante maternelle" />
+<appellation intitule="Assistant maternel / Assistante maternelle à domicile" />
+<appellation intitule="Assistant maternel / Assistante maternelle du particulier employeur" />
+<appellation intitule="Assistant maternel / Assistante maternelle en famille d'accueil" />
+<appellation intitule="Auxiliaire de vie sociale auprès d'enfants" />
+<appellation intitule="Auxiliaire parental / parentale" />
+<appellation intitule="Baby-sitter" />
+<appellation intitule="Educateur familial / Educatrice familiale" />
+<appellation intitule="Employé / Employée au pair" />
+<appellation intitule="Employé familial / Employée familiale auprès d'enfants" />
+<appellation intitule="Garde d'enfant à domicile" />
+<appellation intitule="Gouvernante d'enfant à domicile" />
+<appellation intitule="Maîtresse de maison d'enfants" />
+<appellation intitule="Nourrice" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1304" intitule="Services domestiques">
+<liste_appellations>
+<appellation intitule="Agent / Agente à domicile" />
+<appellation intitule="Aide à Domicile" />
+<appellation intitule="Aide familial / familiale" />
+<appellation intitule="Aide ménager / ménagère à domicile" />
+<appellation intitule="Employé / Employée de maison" />
+<appellation intitule="Employé / Employée de ménage" />
+<appellation intitule="Employé familial / Employée familiale de maison" />
+<appellation intitule="Employé familial polyvalent / Employée familiale polyvalente" />
+<appellation intitule="Gouvernante à domicile" />
+<appellation intitule="Gouvernante d'intérieur" />
+<appellation intitule="Intervenant familial / Intervenante familiale de maison" />
+<appellation intitule="Majordome" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1305" intitule="Intervention sociale et familiale">
+<liste_appellations>
+<appellation intitule="Gouvernante en maison de retraite" />
+<appellation intitule="Maître / Maîtresse de maison d'établissement à caractère social" />
+<appellation intitule="Maître / Maîtresse de maison familiale" />
+<appellation intitule="Maître/Maîtresse de maison dans une unité de vie pour personnes âgées" />
+<appellation intitule="Maîtresse de maison de retraite" />
+<appellation intitule="Technicien / Technicienne Intervention Sociale et Familiale -TISF-" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K14" intitule="Conception et mise en oeuvre des politiques publiques">
+<fiche
+ code="K1401" intitule="Conception et pilotage de la politique des pouvoirs publics">
+<liste_appellations>
+<appellation intitule="Cadre de direction des services centraux de l'Administration" />
+<appellation intitule="Cadre dirigeant / dirigeante d'administration centrale" />
+<appellation intitule="Cadre dirigeant / dirigeante d'un service territorial" />
+<appellation intitule="Directeur / Directrice des services déconcentrés de l'Administration" />
+<appellation intitule="Directeur départemental / Directrice départementale des services déconcentrés de l'Etat" />
+<appellation intitule="Directeur régional / Directrice régionale des services déconcentrés de l'Etat" />
+<appellation intitule="Inspecteur général / Inspectrice générale de l'Administration" />
+<appellation intitule="Responsable d'un service déconcentré de l'Etat" />
+<appellation intitule="Responsable sectoriel / sectorielle de la fonction publique" />
+<appellation intitule="Secrétaire général / générale de ministère" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1402" intitule="Conseil en Santé Publique">
+<liste_appellations>
+<appellation intitule="Chirurgien-dentiste / Chirurgienne-dentiste conseil" />
+<appellation intitule="Contrôleur général / Contrôleuse générale des services vétérinaires" />
+<appellation intitule="Dentiste conseil" />
+<appellation intitule="Inspecteur / Inspectrice de Santé Publique Vétérinaire -ISPV-" />
+<appellation intitule="Médecin conseil" />
+<appellation intitule="Médecin des services communaux d'hygiène" />
+<appellation intitule="Médecin des services communaux d'hygiène et de la santé" />
+<appellation intitule="Médecin inspecteur de la santé" />
+<appellation intitule="Médecin Inspecteur de Santé Publique -MISP-" />
+<appellation intitule="Pharmacien / Pharmacienne conseil" />
+<appellation intitule="Pharmacien inspecteur / Pharmacienne inspectrice de la santé" />
+<appellation intitule="Pharmacien Inspecteur / Pharmacienne Inspectrice de Santé Publique -PhISP-" />
+<appellation intitule="Pharmacien spécialisé / Pharmacienne spécialisée en législation pharmaceutique" />
+<appellation intitule="Praticien / Praticienne de santé publique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1403" intitule="Management de structure de santé, sociale ou pénitentiaire">
+<liste_appellations>
+<appellation intitule="Chef de centre de détention pénitentiaire" />
+<appellation intitule="Chef d'établissement pénitentiaire" />
+<appellation intitule="Directeur / Directrice de centre hospitalier" />
+<appellation intitule="Directeur / Directrice de centre hospitalier régional" />
+<appellation intitule="Directeur / Directrice de centre hospitalier spécialisé" />
+<appellation intitule="Directeur / Directrice de Centre Hospitalier Universitaire -CHU-" />
+<appellation intitule="Directeur / Directrice de centre médico thermal" />
+<appellation intitule="Directeur / Directrice de centre rééducation et réadaptation fonctionnelle" />
+<appellation intitule="Directeur / Directrice de clinique" />
+<appellation intitule="Directeur / Directrice de foyer d'hébergement social" />
+<appellation intitule="Directeur / Directrice de maison d'accueil spécialisée" />
+<appellation intitule="Directeur / Directrice de maison de retraite" />
+<appellation intitule="Directeur / Directrice de maison maternelle" />
+<appellation intitule="Directeur / Directrice de polyclinique" />
+<appellation intitule="Directeur / Directrice de structure d'hébergement et de réadaptation sociale" />
+<appellation intitule="Directeur / Directrice d'entreprise ou de Service d'Aide par le Travail -ESAT-" />
+<appellation intitule="Directeur / Directrice des services pénitentiaires d'insertion et de probation -DSPIP-" />
+<appellation intitule="Directeur / Directrice d'établissement à caractère social" />
+<appellation intitule="Directeur / Directrice d'établissement de protection de la jeunesse" />
+<appellation intitule="Directeur / Directrice d'établissement médico-social" />
+<appellation intitule="Directeur / Directrice d'établissement privé de santé" />
+<appellation intitule="Directeur / Directrice d'établissement thermal" />
+<appellation intitule="Directeur / Directrice d'hôpital public" />
+<appellation intitule="Directeur / Directrice d'hôpital thermal" />
+<appellation intitule="Directeur adjoint / Directrice adjointe de centre hospitalier" />
+<appellation intitule="Directeur adjoint / Directrice adjointe de centre hospitalier régional" />
+<appellation intitule="Directeur adjoint / Directrice adjointe de centre hospitalier spécialisé" />
+<appellation intitule="Directeur régional / Directrice régionale des services pénitentiaires" />
+<appellation intitule="Responsable d'antenne de service pénitentiaire d'insertion et de probation -SPIP-" />
+<appellation intitule="Responsable d'association à caractère social" />
+<appellation intitule="Responsable d'association caritative" />
+<appellation intitule="Responsable de pôle ou d'unité d'action sociale" />
+<appellation intitule="Responsable de résidence pour personnes âgées" />
+<appellation intitule="Responsable de service d'aide à domicile" />
+<appellation intitule="Responsable de structure d'accueil social" />
+<appellation intitule="Responsable d'établissement de santé" />
+<appellation intitule="Responsable d'établissement médico-éducatif" />
+<appellation intitule="Responsable d'établissement médico-professionnel" />
+<appellation intitule="Responsable d'établissement médico-psychologique" />
+<appellation intitule="Responsable d'un service communal d'action sociale" />
+<appellation intitule="Responsable d'un service d'information et de coordination gérontologique" />
+<appellation intitule="Responsable d'une unité de vie" />
+<appellation intitule="Responsable d'unité de services à la personne" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1404" intitule="Mise en oeuvre et pilotage de la politique des pouvoirs publics">
+<liste_appellations>
+<appellation intitule="Attaché territorial / Attachée territoriale" />
+<appellation intitule="Chargé / Chargée de mission affaires et projets européens" />
+<appellation intitule="Chargé / Chargée de mission aux relations internationales" />
+<appellation intitule="Chargé / Chargée de mission développement territorial" />
+<appellation intitule="Chargé / Chargée de mission programmes européens" />
+<appellation intitule="Chargé / Chargée de projet et de développement territorial" />
+<appellation intitule="Responsable des affaires générales" />
+<appellation intitule="Responsable du secrétariat général" />
+<appellation intitule="Responsable du service des assemblées" />
+<appellation intitule="Secrétaire général / générale de mairie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1405" intitule="Représentation de l'Etat sur le territoire national ou international">
+<liste_appellations>
+<appellation intitule="Ambassadeur / Ambassadrice" />
+<appellation intitule="Consul général / Consule générale" />
+<appellation intitule="Haut commissaire" />
+<appellation intitule="Préfet / Préfète" />
+<appellation intitule="Préfet / Préfète maritime" />
+<appellation intitule="Sous-préfet / Sous-préfète" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K15" intitule="Contrôle public">
+<fiche
+ code="K1501" intitule="Application des règles financières publiques">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe de contrôle de la concurrence, de la consommation et de la répression des fraudes" />
+<appellation intitule="Agent / Agente d'administration principal des douanes" />
+<appellation intitule="Agent / Agente d'administration principal des impôts" />
+<appellation intitule="Agent / Agente d'administration principal du Trésor" />
+<appellation intitule="Agent / Agente d'assiette des impôts" />
+<appellation intitule="Agent / Agente de conservation des hypothèques" />
+<appellation intitule="Agent / Agente de constatation des douanes" />
+<appellation intitule="Agent / Agente de constatation des douanes et droits indirects" />
+<appellation intitule="Agent / Agente de constatation des impôts" />
+<appellation intitule="Agent / Agente de constatation ou d'assiette des impôts" />
+<appellation intitule="Agent / Agente de recouvrement du Trésor" />
+<appellation intitule="Chargé / Chargée de recouvrement des recettes de l'Etat" />
+<appellation intitule="Préposé / Préposée des douanes" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1502" intitule="Contrôle et inspection des Affaires Sociales">
+<liste_appellations>
+<appellation intitule="Contrôleur / Contrôleuse du travail en agriculture" />
+<appellation intitule="Contrôleur / Contrôleuse du travail et de l'emploi" />
+<appellation intitule="Directeur adjoint / Directrice adjointe du travail et de l'emploi" />
+<appellation intitule="Inspecteur / Inspectrice de la formation professionnelle" />
+<appellation intitule="Inspecteur / Inspectrice de l'action sanitaire et sociale" />
+<appellation intitule="Inspecteur / Inspectrice du travail des transports" />
+<appellation intitule="Inspecteur / Inspectrice du travail en agriculture" />
+<appellation intitule="Inspecteur / Inspectrice du travail et de l'emploi" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1503" intitule="Contrôle et inspection des impôts">
+<liste_appellations>
+<appellation intitule="Chef de centre des impôts" />
+<appellation intitule="Conservateur / Conservatrice des hypothèques" />
+<appellation intitule="Contrôleur / Contrôleuse des impôts" />
+<appellation intitule="Inspecteur / Inspectrice des impôts" />
+<appellation intitule="Inspecteur principal / Inspectrice principale des impôts" />
+<appellation intitule="Inspecteur vérificateur / Inspectrice vérificatrice des impôts" />
+<appellation intitule="Receveur / Receveuse des impôts" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1504" intitule="Contrôle et inspection du Trésor Public">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée de l'exécution de la dépense publique" />
+<appellation intitule="Chef de poste du Trésor public" />
+<appellation intitule="Chef de service en trésorerie générale" />
+<appellation intitule="Contrôleur / Contrôleuse du Trésor public" />
+<appellation intitule="Inspecteur / Inspectrice du Trésor public" />
+<appellation intitule="Percepteur / Perceptrice" />
+<appellation intitule="Receveur / Receveuse du Trésor public" />
+<appellation intitule="Receveur-percepteur / Receveuse-perceptrice du Trésor public" />
+<appellation intitule="Régisseur / Régisseuse d'avances" />
+<appellation intitule="Régisseur / Régisseuse de recettes" />
+<appellation intitule="Trésorier / Trésorière du Trésor public" />
+<appellation intitule="Trésorier payeur général / Trésorière payeuse générale" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1505" intitule="Protection des consommateurs et contrôle des échanges commerciaux">
+<liste_appellations>
+<appellation intitule="Contrôleur / Contrôleuse de la concurrence, de la consommation et de la répression des fraudes" />
+<appellation intitule="Contrôleur / Contrôleuse des douanes et droits indirects" />
+<appellation intitule="Contrôleur / Contrôleuse des douanes et droits indirects branche contrôle des opérations commerciales et administration générale" />
+<appellation intitule="Inspecteur / Inspectrice de la concurrence, de la consommation et de la répression des fraudes" />
+<appellation intitule="Inspecteur / Inspectrice des douanes" />
+<appellation intitule="Inspecteur / Inspectrice des douanes et droits indirects" />
+<appellation intitule="Inspecteur / Inspectrice des douanes et droits indirects branche contrôle des opérations commerciales et administration générale" />
+<appellation intitule="Receveur / Receveuse des douanes" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K16" intitule="Culture et gestion documentaire">
+<fiche
+ code="K1601" intitule="Gestion de l'information et de la documentation">
+<liste_appellations>
+<appellation intitule="Agent / Agente de bibliothèque" />
+<appellation intitule="Aide documentaliste" />
+<appellation intitule="Archiviste" />
+<appellation intitule="Archiviste paléographe" />
+<appellation intitule="Archiviste-documentaliste" />
+<appellation intitule="Assistant / Assistante archiviste" />
+<appellation intitule="Assistant / Assistante de conservation de bibliothèque" />
+<appellation intitule="Assistant / Assistante documentaliste" />
+<appellation intitule="Assistant / Assistante ludothécaire" />
+<appellation intitule="Attaché / Attachée de conservation des archives" />
+<appellation intitule="Bibliothécaire" />
+<appellation intitule="Bibliothécaire documentaliste" />
+<appellation intitule="Bibliothéconomiste" />
+<appellation intitule="Chargé / Chargée de recherche d'information" />
+<appellation intitule="Chargé / Chargée de veille documentaire" />
+<appellation intitule="Chargé / Chargée des ressources documentaires" />
+<appellation intitule="Chargé / Chargée d'études documentaires" />
+<appellation intitule="Conservateur / Conservatrice d'archives" />
+<appellation intitule="Cyber documentaliste" />
+<appellation intitule="Directeur / Directrice de bibliothèque" />
+<appellation intitule="Directeur / Directrice de centre documentaire" />
+<appellation intitule="Directeur / Directrice de médiathèque" />
+<appellation intitule="Directeur / Directrice des ressources documentaires" />
+<appellation intitule="Discothécaire" />
+<appellation intitule="Documentaliste" />
+<appellation intitule="Documentaliste juridique" />
+<appellation intitule="Documentaliste scientifique" />
+<appellation intitule="Gestionnaire de documents d'entreprise" />
+<appellation intitule="Gestionnaire en documentation" />
+<appellation intitule="Iconographe" />
+<appellation intitule="Ingénieur / Ingénieure documentaire" />
+<appellation intitule="Ingénieur / Ingénieure en biblithéconomie" />
+<appellation intitule="Ludothécaire" />
+<appellation intitule="Médiathécaire" />
+<appellation intitule="Net surfeur / Net surfeuse" />
+<appellation intitule="Professeur / Professeure documentaliste" />
+<appellation intitule="Record manager" />
+<appellation intitule="Responsable de photothèque" />
+<appellation intitule="Responsable des archives" />
+<appellation intitule="Responsable des ressources documentaires" />
+<appellation intitule="Responsable du service documentation" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1602" intitule="Gestion de patrimoine culturel">
+<liste_appellations>
+<appellation intitule="Attaché / Attachée de conservation du patrimoine" />
+<appellation intitule="Chargé / Chargée d'études et d'inventaire patrimoine" />
+<appellation intitule="Conservateur / Conservatrice de musée" />
+<appellation intitule="Conservateur / Conservatrice des antiquités et objets d'art" />
+<appellation intitule="Conservateur / Conservatrice des collections" />
+<appellation intitule="Conservateur / Conservatrice d'établissement patrimonial" />
+<appellation intitule="Conservateur / Conservatrice du patrimoine" />
+<appellation intitule="Conservateur / Conservatrice du patrimoine historique" />
+<appellation intitule="Conservateur départemental / Conservatrice départementale du patrimoine" />
+<appellation intitule="Conservateur directeur / Conservatrice directrice de musée" />
+<appellation intitule="Conservateur territorial / Conservatrice territoriale du patrimoine" />
+<appellation intitule="Directeur / Directrice de la conservation départementale" />
+<appellation intitule="Directeur / Directrice de musée" />
+<appellation intitule="Directeur / Directrice d'établissement patrimonial" />
+<appellation intitule="Gestionnaire de collections" />
+<appellation intitule="Historien / Historienne de l'oeuvre" />
+<appellation intitule="Régisseur / Régisseuse des collections" />
+<appellation intitule="Régisseur / Régisseuse des expositions" />
+<appellation intitule="Régisseur / Régisseuse d'oeuvres" />
+<appellation intitule="Responsable de collections" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K17" intitule="Défense, sécurité publique et secours">
+<fiche
+ code="K1701" intitule="Personnel de la Défense">
+<liste_appellations>
+<appellation intitule="Aide-tireur / Aide-tireuse canon" />
+<appellation intitule="Cavalier porté / Cavalière portée" />
+<appellation intitule="Chef de char" />
+<appellation intitule="Chef de groupe combattant / combattante" />
+<appellation intitule="Chef de patrouille combattant / combattante" />
+<appellation intitule="Chef de pièce d'artillerie" />
+<appellation intitule="Chef d'engin blindé" />
+<appellation intitule="Chef d'équipe combat" />
+<appellation intitule="Combattant / Combattante toutes armes -TTA-" />
+<appellation intitule="Conducteur / Conductrice de véhicule de combat" />
+<appellation intitule="Electromécanicien / Electromécanicienne de systèmes d'armes missiles" />
+<appellation intitule="Electromécanicien / Electromécanicienne de systèmes d'armes sous-marines" />
+<appellation intitule="Electronicien / Electronicienne d'armes" />
+<appellation intitule="Electronicien / Electronicienne systèmes d'armes" />
+<appellation intitule="Engagé / Engagée Volontaire de l'Armée de Terre -EVAT-" />
+<appellation intitule="Engagé Volontaire -EV- combattant / Engagée Volontaire -EV- combattante" />
+<appellation intitule="Equipier / Equipière commando" />
+<appellation intitule="Fusilier / Fusilière commando" />
+<appellation intitule="Fusilier-marin / Fusilière-marin" />
+<appellation intitule="Grenadier voltigeur / Grenadière voltigeuse" />
+<appellation intitule="Homme / Femme d'équipage d'engin blindé" />
+<appellation intitule="Légionnaire" />
+<appellation intitule="Mécanicien / Mécanicienne d'armes" />
+<appellation intitule="Militaire du rang combattante" />
+<appellation intitule="Missilier / Missilière armes sous-marines" />
+<appellation intitule="Missilier / Missilière artillerie" />
+<appellation intitule="Officier marinier combattant / Officière marinière combattante" />
+<appellation intitule="Opérateur / Opératrice conduite de tir/tourelle" />
+<appellation intitule="Opérateur / Opératrice de défense sol-air" />
+<appellation intitule="Parachutiste militaire" />
+<appellation intitule="Pilote d'engin blindé" />
+<appellation intitule="Pourvoyeur / Pourvoyeuse d'arme" />
+<appellation intitule="Pupitreur tireur / Pupitreuse tireuse" />
+<appellation intitule="Radio chargeur / chargeuse" />
+<appellation intitule="Sapeur / Sapeuse de combat" />
+<appellation intitule="Servant / Servante d'arme" />
+<appellation intitule="Soldat / Soldate" />
+<appellation intitule="Sous-officier combattant / Sous-officière combattante" />
+<appellation intitule="Tireur / Tireuse canon" />
+<appellation intitule="Tireur / Tireuse d'engin blindé" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1702" intitule="Direction de la sécurité civile et des secours">
+<liste_appellations>
+<appellation intitule="Chef de cellule d'intervention -NBC- Nucléaire, Bactériologique et Chimique" />
+<appellation intitule="Chef de cellule d'intervention risques technologiques - naturels" />
+<appellation intitule="Chef de centre de secours" />
+<appellation intitule="Chef de centre d'incendie et de secours" />
+<appellation intitule="Chef de colonne de secours" />
+<appellation intitule="Chef de groupement de secours" />
+<appellation intitule="Chef de section d'intervention sécurité civile" />
+<appellation intitule="Chef de site en incendie et secours" />
+<appellation intitule="Chef du service de sécurité des pistes" />
+<appellation intitule="Lieutenant sapeur-pompier / Lieutenante sapeuse-pompière" />
+<appellation intitule="Officier / Officière spécialiste de sécurité civile" />
+<appellation intitule="Officier marin-pompier / Officière marin-pompière" />
+<appellation intitule="Officier pompier / Officière pompière" />
+<appellation intitule="Officier sapeur-pompier / Officière sapeuse-pompière" />
+<appellation intitule="Responsable de sécurité civile et de secours" />
+<appellation intitule="Responsable sécurité des pistes" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1703" intitule="Direction opérationnelle de la défense">
+<liste_appellations>
+<appellation intitule="Chef de Bureau Opération - instruction" />
+<appellation intitule="Chef de corps" />
+<appellation intitule="Chef de peloton de combat" />
+<appellation intitule="Chef de section de combat" />
+<appellation intitule="Commandant / Commandante de bataillon" />
+<appellation intitule="Commandant / Commandante de compagnie de combat" />
+<appellation intitule="Commandant / Commandante d'unité de combat" />
+<appellation intitule="Officier / Officière commandement opérationnel de l'armée de l'air" />
+<appellation intitule="Officier / Officière commandement opérationnel de l'armée de terre" />
+<appellation intitule="Officier / Officière des armes" />
+<appellation intitule="Officier / Officière des bases de l'air" />
+<appellation intitule="Officier / Officière d'Etat Major" />
+<appellation intitule="Officier / Officière marine nationale" />
+<appellation intitule="Officier / Officière reconnaissance" />
+<appellation intitule="Officier observateur / Officière observatrice" />
+<appellation intitule="Responsable opérationnel / opérationnelle de la défense" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1704" intitule="Management de la sécurité publique">
+<liste_appellations>
+<appellation intitule="Capitaine de police" />
+<appellation intitule="Chargé / Chargée de la défense civile et économique" />
+<appellation intitule="Chargé / Chargée de sécurité intérieure et d'ordre public" />
+<appellation intitule="Chargé / Chargée de sécurité routière" />
+<appellation intitule="Chef de service pénitentiaire" />
+<appellation intitule="Commandant / Commandante de police" />
+<appellation intitule="Commissaire de police" />
+<appellation intitule="Commissaire divisionnaire de police" />
+<appellation intitule="Commissaire principal / principale de police" />
+<appellation intitule="Contrôleur général / Contrôleuse générale de la police nationale" />
+<appellation intitule="Inspecteur / Inspectrice des douanes branche surveillance" />
+<appellation intitule="Lieutenant / Lieutenante de police" />
+<appellation intitule="Officier / Officière de gendarmerie" />
+<appellation intitule="Officier / Officière de police" />
+<appellation intitule="Officier / Officière de police judiciaire" />
+<appellation intitule="Responsable de sécurité publique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1705" intitule="Sécurité civile et secours">
+<liste_appellations>
+<appellation intitule="Artificier démineur / Artificière démineuse" />
+<appellation intitule="Chef d'agrées" />
+<appellation intitule="Chef de garde" />
+<appellation intitule="Chef d'équipe de secours" />
+<appellation intitule="Conducteur / Conductrice d'engins d'extinction d'incendie" />
+<appellation intitule="Conducteur / Conductrice d'engins spécial d'incendie" />
+<appellation intitule="Démineur / Démineuse sécurité civile" />
+<appellation intitule="Electromécanicien / Electromécanicienne de sécurité" />
+<appellation intitule="Equipier / Equipière sécurité civile" />
+<appellation intitule="Equipier sapeur-pompier / Equipière sapeuse-pompière" />
+<appellation intitule="Intervenant / Intervenante de sécurité civile et de secours" />
+<appellation intitule="Maître-chien / Maîtresse-chien d'avalanche" />
+<appellation intitule="Maître-chien / Maîtresse-chien sécurité civile" />
+<appellation intitule="Marin-pompier" />
+<appellation intitule="Pisteur / Pisteuse secouriste" />
+<appellation intitule="Pompier / Pompière" />
+<appellation intitule="Pompier industriel / Pompière industrielle" />
+<appellation intitule="Pompier technicien / Pompière technicienne de l'air" />
+<appellation intitule="Sapeur-pompier / Sapeuse-pompière" />
+<appellation intitule="Secouriste" />
+<appellation intitule="Secouriste brancardier / brancardière" />
+<appellation intitule="Spécialiste sécurité civile" />
+<appellation intitule="Spéléologue secouriste" />
+<appellation intitule="Stationnaire" />
+<appellation intitule="Technicien / Technicienne de la prévention et de lutte contre les sinistres" />
+<appellation intitule="Technicien / Technicienne en sécurité incendie et secourisme" />
+<appellation intitule="Tireur avalancheur / Tireuse avalancheuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1706" intitule="Sécurité publique">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe de sécurité de la police nationale" />
+<appellation intitule="Agent / Agente de constatation des douanes branche surveillance" />
+<appellation intitule="Agent / Agente motocycliste de la douane" />
+<appellation intitule="Brigadier / Brigadière" />
+<appellation intitule="Cadet de la police nationale" />
+<appellation intitule="Contrôleur / Contrôleuse des douanes branche surveillance" />
+<appellation intitule="Enquêteur / Enquêtrice de police" />
+<appellation intitule="Garde républicain / républicaine" />
+<appellation intitule="Gardien / Gardienne de compagnie républicaine de sécurité" />
+<appellation intitule="Gardien / Gardienne de la paix" />
+<appellation intitule="Gendarme" />
+<appellation intitule="Gendarme adjoint / adjointe" />
+<appellation intitule="Gendarme mobile" />
+<appellation intitule="Maître-chien / Maîtresse-chien de la gendarmerie" />
+<appellation intitule="Motard / Motarde de la police nationale" />
+<appellation intitule="Motocycliste de la gendarmerie" />
+<appellation intitule="Premier surveillant / Première surveillante pénitentiaire" />
+<appellation intitule="Sous-officier / Sous-officière de gendarmerie" />
+<appellation intitule="Surveillant / Surveillante pénitentiaire" />
+<appellation intitule="Technicien / Technicienne de recherche et d'identification criminelle" />
+<appellation intitule="Technicien / Technicienne en investigation criminelle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1707" intitule="Surveillance municipale">
+<liste_appellations>
+<appellation intitule="Agent / Agente de la surveillance spécialisée de la commune" />
+<appellation intitule="Agent / Agente de police municipale" />
+<appellation intitule="Agent / Agente de stationnement de la voirie" />
+<appellation intitule="Agent / Agente de surveillance de stationnement payant" />
+<appellation intitule="Agent / Agente de surveillance des parcs et jardins" />
+<appellation intitule="Agent / Agente de surveillance des voies publiques" />
+<appellation intitule="Brigadier / Brigadière de police municipale" />
+<appellation intitule="Brigadier-chef / Brigadière-chef de police municipale" />
+<appellation intitule="Chef de police municipale" />
+<appellation intitule="Chef de service de police municipale" />
+<appellation intitule="Garde champêtre" />
+<appellation intitule="Gardien / Gardienne de cimetière municipal" />
+<appellation intitule="Gardien / Gardienne des parcs et jardins" />
+<appellation intitule="Gardien principal / Gardienne principale de police municipale" />
+<appellation intitule="Inspecteur / Inspectrice de sécurité de la commune" />
+<appellation intitule="Opérateur / Opératrice de vidéosurveillance de police municipale" />
+<appellation intitule="Policier municipal / Policière municipale" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K18" intitule="Développement territorial et emploi">
+<fiche
+ code="K1801" intitule="Conseil en emploi et insertion socioprofessionnelle">
+<liste_appellations>
+<appellation intitule="Accompagnateur / Accompagnatrice reconversion professionnelle" />
+<appellation intitule="Chargé / Chargée de mission emploi formation" />
+<appellation intitule="Chargé / Chargée de projet d'insertion professionnelle" />
+<appellation intitule="Chargé / Chargée de projet emploi" />
+<appellation intitule="Chargé / Chargée de relations entreprises" />
+<appellation intitule="Chargé / Chargée d'emploi en entreprise de travail temporaire" />
+<appellation intitule="Conseiller / Conseillère à l'emploi" />
+<appellation intitule="Conseiller / Conseillère de l'emploi" />
+<appellation intitule="Conseiller / Conseillère des métiers" />
+<appellation intitule="Conseiller / Conseillère emploi formation" />
+<appellation intitule="Conseiller / Conseillère en insertion professionnelle" />
+<appellation intitule="Conseiller / Conseillère en outplacement" />
+<appellation intitule="Conseiller / Conseillère en recherche d'emploi" />
+<appellation intitule="Conseiller / Conseillère en reclassement professionnel" />
+<appellation intitule="Conseiller / Conseillère responsable point emploi" />
+<appellation intitule="Conseiller chargé / Conseillère chargée de projet emploi" />
+<appellation intitule="Conseiller professionnel / Conseillère professionnelle" />
+<appellation intitule="Conseiller référent / Conseillère référente emploi" />
+<appellation intitule="Conseiller/consultant / Conseillère/consultante en création d'entreprise" />
+<appellation intitule="Consultant / Consultante emploi formation" />
+<appellation intitule="Coordonnateur / Coordonnatrice emploi formation" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1802" intitule="Développement local">
+<liste_appellations>
+<appellation intitule="Agent / Agente de développement d'habitat social" />
+<appellation intitule="Agent / Agente de développement économique" />
+<appellation intitule="Agent / Agente de développement local" />
+<appellation intitule="Agent / Agente de développement rural" />
+<appellation intitule="Agent / Agente de développement social urbain" />
+<appellation intitule="Agent / Agente de pays" />
+<appellation intitule="Animateur / Animatrice de charte de pays" />
+<appellation intitule="Animateur / Animatrice de développement local" />
+<appellation intitule="Animateur / Animatrice de développement régional" />
+<appellation intitule="Animateur / Animatrice de développement territorial" />
+<appellation intitule="Animateur / Animatrice de pays" />
+<appellation intitule="Assistant / Assistante de charte intercommunale ou de contrat de pays" />
+<appellation intitule="Assistant / Assistante de développement local" />
+<appellation intitule="Assistant / Assistante technique de pays" />
+<appellation intitule="Chargé / Chargée de développement culturel" />
+<appellation intitule="Chargé / Chargée de développement économique" />
+<appellation intitule="Chargé / Chargée de développement local" />
+<appellation intitule="Chargé / Chargée de développement social" />
+<appellation intitule="Chargé / Chargée de mission développement de zones d'activités" />
+<appellation intitule="Chargé / Chargée de mission développement économique" />
+<appellation intitule="Chargé / Chargée de mission développement local" />
+<appellation intitule="Chargé / Chargée de mission développement urbain" />
+<appellation intitule="Chargé / Chargée de projet de développement social urbain" />
+<appellation intitule="Chargé / Chargée de projet en aménagement du territoire" />
+<appellation intitule="Chargé / Chargée de projet en gestion urbaine de proximité" />
+<appellation intitule="Chef de projet contrat de ville" />
+<appellation intitule="Chef de projet de développement local" />
+<appellation intitule="Conseiller / Conseillère en développement local" />
+<appellation intitule="Coordonnateur / Coordonnatrice de dispositif de développement local" />
+<appellation intitule="Coordonnateur / Coordonnatrice de projet de développement local" />
+<appellation intitule="Développeur / Développeuse économique" />
+<appellation intitule="Développeur culturel / Développeuse culturelle" />
+<appellation intitule="Responsable de développement territorial" />
+<appellation intitule="Responsable de projet de développement local" />
+<appellation intitule="Urbaniste" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K19" intitule="Droit">
+<fiche
+ code="K1901" intitule="Aide et médiation judiciaire">
+<liste_appellations>
+<appellation intitule="Administrateur / Administratrice judiciaire" />
+<appellation intitule="Commissaire-priseur / Commissaire-priseure" />
+<appellation intitule="Commissaire-priseur / Commissaire-priseuse judiciaire" />
+<appellation intitule="Conciliateur / Conciliatrice de justice" />
+<appellation intitule="Huissier / Huissière de justice" />
+<appellation intitule="Huissier / Huissière du trésor public" />
+<appellation intitule="Mandataire de justice" />
+<appellation intitule="Mandataire liquidateur / liquidatrice" />
+<appellation intitule="Médiateur / Médiatrice judiciaire" />
+<appellation intitule="Médiateur / Médiatrice pénal" />
+<appellation intitule="Notaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1902" intitule="Collaboration juridique">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante de cabinet juridique" />
+<appellation intitule="Assistant / Assistante de justice" />
+<appellation intitule="Assistant / Assistante de service juridique" />
+<appellation intitule="Assistant notarial / Assistante notariale" />
+<appellation intitule="Auxiliaire juridique" />
+<appellation intitule="Clerc" />
+<appellation intitule="Clerc assermenté" />
+<appellation intitule="Clerc aux formalités" />
+<appellation intitule="Clerc aux formalités de notaire" />
+<appellation intitule="Clerc d'avocat" />
+<appellation intitule="Clerc de commissaire-priseur" />
+<appellation intitule="Clerc de notaire" />
+<appellation intitule="Clerc d'huissier" />
+<appellation intitule="Clerc formaliste" />
+<appellation intitule="Clerc hors rang" />
+<appellation intitule="Clerc hors rang de notaire" />
+<appellation intitule="Clerc rédacteur" />
+<appellation intitule="Clerc significateur" />
+<appellation intitule="Clerc significateur assermenté d'huissier" />
+<appellation intitule="Collaborateur d'huissier chargé / Collaboratrice d'huissier chargée de recouvrement" />
+<appellation intitule="Greffier / Greffière" />
+<appellation intitule="Greffier / Greffière en chef" />
+<appellation intitule="Premier clerc" />
+<appellation intitule="Premier clerc d'avocat" />
+<appellation intitule="Principal clerc" />
+<appellation intitule="Principal clerc adjoint" />
+<appellation intitule="Principal clerc adjoint de notaire" />
+<appellation intitule="Principal clerc d'avocat" />
+<appellation intitule="Principal clerc de commissaire-priseur" />
+<appellation intitule="Principal clerc de notaire" />
+<appellation intitule="Principal clerc d'huissier" />
+<appellation intitule="Sous-principal clerc d'avocat" />
+<appellation intitule="Sous-principal clerc de notaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1903" intitule="Défense et conseil juridique">
+<liste_appellations>
+<appellation intitule="Avocat / Avocate" />
+<appellation intitule="Avocat / Avocate au conseil" />
+<appellation intitule="Avocat / Avocate d'affaires" />
+<appellation intitule="Avocat / Avocate du droit des personnes" />
+<appellation intitule="Avocat / Avocate en droit de la propriété industrielle" />
+<appellation intitule="Avocat / Avocate en droit de l'informatique" />
+<appellation intitule="Avocat / Avocate en droit des nouvelles technologies" />
+<appellation intitule="Avocat / Avocate fiscaliste" />
+<appellation intitule="Avocat / Avocate pénaliste" />
+<appellation intitule="Avoué / Avouée de cour d'appel" />
+<appellation intitule="Chef de service contentieux" />
+<appellation intitule="Chef de service juridique" />
+<appellation intitule="Conseiller / Conseillère en droit social" />
+<appellation intitule="Conseiller fiscal / Conseillère fiscale" />
+<appellation intitule="Directeur / Directrice juridique" />
+<appellation intitule="Expert / Experte juridique" />
+<appellation intitule="Expert fiscal / Experte fiscale" />
+<appellation intitule="Fiscaliste" />
+<appellation intitule="Juriste" />
+<appellation intitule="Juriste civil" />
+<appellation intitule="Juriste commercial / commerciale" />
+<appellation intitule="Juriste consultant / consultante" />
+<appellation intitule="Juriste d'affaires" />
+<appellation intitule="Juriste d'assurances" />
+<appellation intitule="Juriste de banque" />
+<appellation intitule="Juriste de contentieux" />
+<appellation intitule="Juriste de l'environnement" />
+<appellation intitule="Juriste d'entreprise" />
+<appellation intitule="Juriste en droit de la construction" />
+<appellation intitule="Juriste en droit de l'environnement" />
+<appellation intitule="Juriste financier / financière" />
+<appellation intitule="Juriste fiscaliste" />
+<appellation intitule="Juriste immobilier" />
+<appellation intitule="Juriste international" />
+<appellation intitule="Juriste international d'entreprise" />
+<appellation intitule="Juriste linguiste" />
+<appellation intitule="Juriste multimédia" />
+<appellation intitule="Juriste notarial / notariale" />
+<appellation intitule="Juriste social / sociale" />
+<appellation intitule="Responsable de service contentieux et recouvrement" />
+<appellation intitule="Responsable de service juridique" />
+<appellation intitule="Responsable fiscal / fiscale" />
+<appellation intitule="Responsable juridique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K1904" intitule="Magistrature">
+<liste_appellations>
+<appellation intitule="Avocat général / Avocate générale" />
+<appellation intitule="Commissaire à la Cour des comptes" />
+<appellation intitule="Conseiller / Conseillère à la Cour de cassation" />
+<appellation intitule="Conseiller / Conseillère à la Cour des comptes" />
+<appellation intitule="Conseiller / Conseillère au tribunal administratif" />
+<appellation intitule="Juge" />
+<appellation intitule="Juge d'application des peines" />
+<appellation intitule="Juge de grande instance" />
+<appellation intitule="Juge de police" />
+<appellation intitule="Juge de proximité" />
+<appellation intitule="Juge des affaires familiales" />
+<appellation intitule="Juge des enfants" />
+<appellation intitule="Juge des libertés et de la détention" />
+<appellation intitule="Juge des référés" />
+<appellation intitule="Juge d'instance" />
+<appellation intitule="Juge d'instruction" />
+<appellation intitule="Magistrat / Magistrate" />
+<appellation intitule="Magistrat / Magistrate de liaison" />
+<appellation intitule="Président / Présidente du tribunal administratif" />
+<appellation intitule="Président / Présidente du tribunal de commerce" />
+<appellation intitule="Président / Présidente du tribunal de grande instance" />
+<appellation intitule="Procureur / Procureure de la République" />
+<appellation intitule="Procureur général / Procureure générale" />
+<appellation intitule="Substitut / Substitute du Procureur de la République" />
+<appellation intitule="Substitut général / Substitute générale" />
+<appellation intitule="Vice procureur / Vice procureure de la République" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K21" intitule="Formation initiale et continue">
+<fiche
+ code="K2101" intitule="Conseil en formation">
+<liste_appellations>
+<appellation intitule="Conseiller / Conseillère en formation" />
+<appellation intitule="Conseiller / Conseillère en formation auprès des entreprises" />
+<appellation intitule="Conseiller / Conseillère en formation continue" />
+<appellation intitule="Conseiller / Conseillère en validation des acquis de l'expérience" />
+<appellation intitule="Conseiller / Conseillère formation en entreprise" />
+<appellation intitule="Conseiller consultant / Conseillère consultante en formation" />
+<appellation intitule="Consultant / Consultante en formation" />
+<appellation intitule="Consultant / Consultante en formation d'adultes" />
+<appellation intitule="Consultant / Consultante en ingénierie de formation" />
+<appellation intitule="Consultant / Consultante en ingénierie pédagogique" />
+<appellation intitule="Consultant / Consultante interne en formation" />
+<appellation intitule="Directeur / Directrice de cabinet de conseil en formation" />
+<appellation intitule="Ingénieur-conseil / Ingénieure-conseil en formation" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2102" intitule="Coordination pédagogique">
+<liste_appellations>
+<appellation intitule="Chef de service pédagogique" />
+<appellation intitule="Coordinateur / Coordinatrice de formateurs" />
+<appellation intitule="Coordinateur / Coordinatrice de stages de formation professionnelle" />
+<appellation intitule="Coordinateur / Coordinatrice pédagogique" />
+<appellation intitule="Coordonnateur / Coordonnatrice de dispositif de formation" />
+<appellation intitule="Directeur / Directrice pédagogique" />
+<appellation intitule="Directeur / Directrice technique pédagogique" />
+<appellation intitule="Responsable administratif / administrative et pédagogique" />
+<appellation intitule="Responsable de centre de formation" />
+<appellation intitule="Responsable pédagogique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2103" intitule="Direction d'établissement et d'enseignement">
+<liste_appellations>
+<appellation intitule="Chef d'établissement" />
+<appellation intitule="Chef d'établissement adjoint / adjointe" />
+<appellation intitule="Directeur / Directrice de centre de formation d'apprentis" />
+<appellation intitule="Directeur / Directrice de collège" />
+<appellation intitule="Directeur / Directrice de conservatoire musique et danse" />
+<appellation intitule="Directeur / Directrice de lycée" />
+<appellation intitule="Directeur / Directrice de lycée agricole" />
+<appellation intitule="Directeur / Directrice de lycée d'enseignement professionnel agricole" />
+<appellation intitule="Directeur / Directrice d'école d'art dramatique" />
+<appellation intitule="Directeur / Directrice d'école de danse" />
+<appellation intitule="Directeur / Directrice d'école de musique" />
+<appellation intitule="Directeur / Directrice d'école de musique et de danse" />
+<appellation intitule="Directeur / Directrice d'école paramédicale" />
+<appellation intitule="Directeur / Directrice d'établissement d'enseignement privé" />
+<appellation intitule="Directeur / Directrice d'établissement d'enseignement spécialisé" />
+<appellation intitule="Directeur / Directrice d'établissement d'enseignement supérieur" />
+<appellation intitule="Directeur / Directrice d'Institut de formation des cadres de la santé" />
+<appellation intitule="Directeur / Directrice d'institut de formation en soins infirmiers -IFSI-" />
+<appellation intitule="Directeur adjoint / Directrice adjointe de lycée agricole" />
+<appellation intitule="Directeur adjoint chargé / Directrice adjointe chargée de section d'éducation spécialisée de collège" />
+<appellation intitule="Directeur territorial / Directrice territoriale d'école de musique" />
+<appellation intitule="Inspecteur / Inspectrice d'académie, directeur des services départementaux de l'Education nationale -IA-DSDEN-" />
+<appellation intitule="Inspecteur / Inspectrice de la danse" />
+<appellation intitule="Inspecteur / Inspectrice de la musique" />
+<appellation intitule="Inspecteur / Inspectrice de l'administration de l'Education Nationale" />
+<appellation intitule="Inspecteur / Inspectrice de l'administration de l'enseignement agricole" />
+<appellation intitule="Inspecteur / Inspectrice de l'Education Nationale -IEN-" />
+<appellation intitule="Inspecteur / Inspectrice de l'enseignement technique -IET-" />
+<appellation intitule="Inspecteur / Inspectrice d'information et d'orientation -IIO-" />
+<appellation intitule="Inspecteur / Inspectrice technique et pédagogique en lycée agricole" />
+<appellation intitule="Inspecteur d'académie adjoint / Inspectrice d'académie adjointe -IAA-" />
+<appellation intitule="Inspecteur départemental / Inspectrice départementale de l'Education nationale -IDEN-" />
+<appellation intitule="Inspecteur général / Inspectrice générale de l'Education nationale -IGEN-" />
+<appellation intitule="Inspecteur pédagogique régional, inspecteur d'académie / Inspectrice pédagogique régionale, inspectrice d'académie -IPR-IA-" />
+<appellation intitule="Inspecteur principal / Inspectrice principale de l'enseignement technique -IPET-" />
+<appellation intitule="Principal / Principale de collège" />
+<appellation intitule="Principal adjoint / Principale adjointe de collège" />
+<appellation intitule="Proviseur / Proviseure de lycée" />
+<appellation intitule="Proviseur / Proviseure de lycée professionnel" />
+<appellation intitule="Proviseur adjoint / Proviseure adjointe de lycée" />
+<appellation intitule="Proviseur adjoint / Proviseure adjointe de lycée professionnel" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2104" intitule="Éducation et surveillance au sein d'établissements d'enseignement">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe d'enseignement chargé d'éducation" />
+<appellation intitule="Aide de vie scolaire" />
+<appellation intitule="Assistant / Assistante de vie scolaire" />
+<appellation intitule="Assistant / Assistante d'éducation" />
+<appellation intitule="Assistant / Assistante pédagogique en milieu scolaire" />
+<appellation intitule="Auxiliaire de vie scolaire" />
+<appellation intitule="Cadre éducatif / éducative de l'enseignement privé" />
+<appellation intitule="Conseiller / Conseillère d'éducation" />
+<appellation intitule="Conseiller principal / Conseillère principale d'éducation" />
+<appellation intitule="Employé / Employée vie scolaire - EVS-" />
+<appellation intitule="Maître / Maîtresse d'internat" />
+<appellation intitule="Responsable d'internat" />
+<appellation intitule="Surveillant / Surveillante d'examens" />
+<appellation intitule="Surveillant / Surveillante d'externat" />
+<appellation intitule="Surveillant / Surveillante d'internat" />
+<appellation intitule="Surveillant / Surveillante en milieu scolaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2105" intitule="Enseignement artistique">
+<liste_appellations>
+<appellation intitule="Assistant territorial spécialisé / Assistante territoriale spécialisée d'enseignement artistique" />
+<appellation intitule="Enseignant / Enseignante des arts du cirque" />
+<appellation intitule="Musicien intervenant / Musicienne intervenante" />
+<appellation intitule="Professeur / Professeure d'art dramatique" />
+<appellation intitule="Professeur / Professeure de batterie" />
+<appellation intitule="Professeur / Professeure de chant" />
+<appellation intitule="Professeur / Professeure de clarinette" />
+<appellation intitule="Professeur / Professeure de danse" />
+<appellation intitule="Professeur / Professeure de dessin" />
+<appellation intitule="Professeur / Professeure de flûte" />
+<appellation intitule="Professeur / Professeure de formation musicale" />
+<appellation intitule="Professeur / Professeure de gravure" />
+<appellation intitule="Professeur / Professeure de guitare" />
+<appellation intitule="Professeur / Professeure de jazz" />
+<appellation intitule="Professeur / Professeure de peinture" />
+<appellation intitule="Professeur / Professeure de percussions" />
+<appellation intitule="Professeur / Professeure de photographie" />
+<appellation intitule="Professeur / Professeure de piano" />
+<appellation intitule="Professeur / Professeure de saxophone" />
+<appellation intitule="Professeur / Professeure de sculpture" />
+<appellation intitule="Professeur / Professeure de théâtre" />
+<appellation intitule="Professeur / Professeure de trompette" />
+<appellation intitule="Professeur / Professeure de vidéo" />
+<appellation intitule="Professeur / Professeure de violon" />
+<appellation intitule="Professeur / Professeure de violoncelle" />
+<appellation intitule="Professeur / Professeure d'école nationale d'art" />
+<appellation intitule="Professeur / Professeure d'école nationale de musique" />
+<appellation intitule="Professeur / Professeure d'instrument de musique" />
+<appellation intitule="Professeur / Professeure en arts graphiques" />
+<appellation intitule="Professeur / Professeure en design" />
+<appellation intitule="Professeur / Professeure en direction d'orchestre d'harmonie" />
+<appellation intitule="Professeur territorial / Professeure territoriale d'enseignement artistique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2106" intitule="Enseignement des écoles">
+<liste_appellations>
+<appellation intitule="Chef d'établissement du premier degré" />
+<appellation intitule="Directeur / Directrice d'école chargé d'enseignement" />
+<appellation intitule="Directeur / Directrice d'école du premier degré" />
+<appellation intitule="Directeur / Directrice d'école maternelle" />
+<appellation intitule="Directeur / Directrice d'école primaire" />
+<appellation intitule="Enseignant / Enseignante des écoles" />
+<appellation intitule="Instituteur / Institutrice" />
+<appellation intitule="Instituteur / Institutrice d'adaptation et d'intégration scolaire" />
+<appellation intitule="Instituteur / Institutrice de section d'éducation spécialisée" />
+<appellation intitule="Instituteur / Institutrice d'école maternelle" />
+<appellation intitule="Instituteur / Institutrice d'école primaire" />
+<appellation intitule="Instituteur itinérant / Institutrice itinérante" />
+<appellation intitule="Instituteur remplaçant / Institutrice remplaçante" />
+<appellation intitule="Instituteur spécialisé / Institutrice spécialisée" />
+<appellation intitule="Maître / Maîtresse d'école" />
+<appellation intitule="Maître / Maîtresse d'école maternelle" />
+<appellation intitule="Maître / Maîtresse d'école primaire" />
+<appellation intitule="Maître délégué / Maîtresse déléguée en éducation nationale" />
+<appellation intitule="Maître délégué / Maîtresse déléguée pour l'enseignement de la musique" />
+<appellation intitule="Maître délégué / Maîtresse déléguée pour l'enseignement de l'éducation physique" />
+<appellation intitule="Maître délégué / Maîtresse déléguée pour l'enseignement du dessin-arts plastiques" />
+<appellation intitule="Précepteur / Préceptrice" />
+<appellation intitule="Professeur / Professeure des écoles" />
+<appellation intitule="Répétiteur / Répétitrice" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2107" intitule="Enseignement général du second degré">
+<liste_appellations>
+<appellation intitule="Assistant territorial / Assistante territoriale d'enseignement" />
+<appellation intitule="Chargé / Chargée d'enseignement général du second degré" />
+<appellation intitule="Enseignant correcteur / Enseignante correctrice de matières générales" />
+<appellation intitule="Lecteur / Lectrice de langue étrangère dans l'enseignement secondaire" />
+<appellation intitule="Maître / Maîtresse des établissements d'enseignement privé sous contrat du second degré" />
+<appellation intitule="Maître contractuel / Maîtresse contractuelle des établissements privés sous contrat en enseignement général" />
+<appellation intitule="Moniteur / Monitrice en maison familiale rurale en enseignement général" />
+<appellation intitule="Professeur / Professeure à domicile" />
+<appellation intitule="Professeur / Professeure d'arts plastiques" />
+<appellation intitule="Professeur / Professeure de Français Langues Etrangères -FLE-" />
+<appellation intitule="Professeur / Professeure de langues des collèges" />
+<appellation intitule="Professeur / Professeure de langues vivantes" />
+<appellation intitule="Professeur / Professeure de matières générales" />
+<appellation intitule="Professeur / Professeure de matières littéraires" />
+<appellation intitule="Professeur / Professeure de matières scientifiques" />
+<appellation intitule="Professeur / Professeure d'éducation culturelle" />
+<appellation intitule="Professeur / Professeure d'éducation musicale" />
+<appellation intitule="Professeur / Professeure d'éducation physique et sportive -EPS-" />
+<appellation intitule="Professeur / Professeure d'enseignement général de lycée -PEGL-" />
+<appellation intitule="Professeur / Professeure d'enseignement général des collèges -PEGC-" />
+<appellation intitule="Professeur / Professeure d'enseignement général en centre de formation d'apprentis" />
+<appellation intitule="Professeur / Professeure d'enseignement général pour déficients sensoriels" />
+<appellation intitule="Professeur / Professeure des instituts nationaux de jeunes sourds et de jeunes aveugles en enseignement général -INJS- et -INJA-" />
+<appellation intitule="Professeur / Professeure du second degré à domicile" />
+<appellation intitule="Professeur / Professeure en langage des signes" />
+<appellation intitule="Professeur / Professeure en soutien scolaire" />
+<appellation intitule="Professeur / Professeure titulaire en zone de remplacement -TZR-" />
+<appellation intitule="Professeur spécialisé / Professeure spécialisée de l'enseignement général" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2108" intitule="Enseignement supérieur">
+<liste_appellations>
+<appellation intitule="Attaché / Attachée temporaire d'enseignement et de recherche -ATER-" />
+<appellation intitule="Chargé / Chargée de cours" />
+<appellation intitule="Chargé / Chargée d'enseignement" />
+<appellation intitule="Chargé / Chargée d'enseignement du supérieur" />
+<appellation intitule="Chef de département de l'enseignement supérieur" />
+<appellation intitule="Enseignant-chercheur / Enseignante-chercheuse" />
+<appellation intitule="Lecteur / Lectrice de langues dans l'enseignement supérieur" />
+<appellation intitule="Maître / Maîtresse de conférences" />
+<appellation intitule="Maître / Maîtresse de langues dans l'enseignement supérieur" />
+<appellation intitule="Moniteur / Monitrice d'initiation à l'enseignement supérieur" />
+<appellation intitule="Professeur / Professeure de l'enseignement supérieur" />
+<appellation intitule="Professeur / Professeure des universités" />
+<appellation intitule="Responsable filière enseignement supérieur" />
+<appellation intitule="Responsable matière enseignement supérieur" />
+<appellation intitule="Responsable programme enseignement supérieur" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2109" intitule="Enseignement technique et professionnel">
+<liste_appellations>
+<appellation intitule="Moniteur / Monitrice d'enseignement agricole" />
+<appellation intitule="Moniteur / Monitrice en centre de formation d'apprentis" />
+<appellation intitule="Moniteur / Monitrice technique agricole" />
+<appellation intitule="Professeur / Professeure de centre de formation d'apprentis en enseignement professionnel" />
+<appellation intitule="Professeur / Professeure de centre de formation d'apprentis en enseignement technique" />
+<appellation intitule="Professeur / Professeure de lycée professionnel en enseignement technique" />
+<appellation intitule="Professeur / Professeure de lycée professionnel -PLP-" />
+<appellation intitule="Professeur / Professeure d'enseignement agricole" />
+<appellation intitule="Professeur / Professeure d'enseignement professionnel" />
+<appellation intitule="Professeur / Professeure d'enseignement technique" />
+<appellation intitule="Professeur / Professeure d'enseignement technique aux aveugles et déficients visuels" />
+<appellation intitule="Professeur / Professeure d'enseignement technique et pratique" />
+<appellation intitule="Professeur / Professeure d'enseignement technologique" />
+<appellation intitule="Professeur / Professeure des instituts nationaux de jeunes sourds et de jeunes aveugles en enseignement technique -INJS- et -INJA-" />
+<appellation intitule="Professeur / Professeure technique de la protection judiciaire de la jeunesse" />
+<appellation intitule="Professeur / Professeure technique de l'enseignement maritime" />
+<appellation intitule="Professeur / Professeure technique d'enseignement professionnel" />
+<appellation intitule="Professeur / Professeure technique/chef de travaux" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2110" intitule="Formation en conduite de véhicules">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe au responsable d'auto-école" />
+<appellation intitule="Enseignant / Enseignante de la conduite et de la sécurité routière" />
+<appellation intitule="Formateur / Formatrice conduite d'engins de travaux publics" />
+<appellation intitule="Formateur / Formatrice conduite d'engins motorisés et de levage" />
+<appellation intitule="Formateur / Formatrice de conducteurs routiers" />
+<appellation intitule="Formateur / Formatrice de moniteurs d'auto-école" />
+<appellation intitule="Gérant / Gérante d'auto-école" />
+<appellation intitule="Inspecteur / Inspectrice de la conduite et de la sécurité routière" />
+<appellation intitule="Inspecteur / Inspectrice du permis de conduire" />
+<appellation intitule="Inspecteur / Inspectrice du permis de conduire et de la sécurité routière" />
+<appellation intitule="Moniteur / Monitrice d'auto-école" />
+<appellation intitule="Moniteur / Monitrice d'auto-école groupe lourds" />
+<appellation intitule="Moniteur / Monitrice de bateau-école" />
+<appellation intitule="Moniteur / Monitrice moto" />
+<appellation intitule="Moniteur / Monitrice motocycle" />
+<appellation intitule="Moniteur / Monitrice poids lourds" />
+<appellation intitule="Responsable d'auto-école" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2111" intitule="Formation professionnelle">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice de formation" />
+<appellation intitule="Concepteur organisateur / Conceptrice organisatrice en formation" />
+<appellation intitule="Concepteur-formateur / Conceptrice-formatrice" />
+<appellation intitule="Didacticien / Didacticienne" />
+<appellation intitule="Formateur / Formatrcie technique" />
+<appellation intitule="Formateur / Formatrice" />
+<appellation intitule="Formateur / Formatrice d'adultes" />
+<appellation intitule="Formateur / Formatrice de formateurs" />
+<appellation intitule="Formateur / Formatrice de formation paramédicale" />
+<appellation intitule="Formateur / Formatrice de formation professionnelle" />
+<appellation intitule="Formateur / Formatrice e-learning" />
+<appellation intitule="Formateur / Formatrice enseignement à distance" />
+<appellation intitule="Formateur / Formatrice secourisme" />
+<appellation intitule="Formateur consultant / Formatrice consultante" />
+<appellation intitule="Formateur coordinateur / Formatrice coordinatrice de formation" />
+<appellation intitule="Formateur-conseil / Formatrice-conseil" />
+<appellation intitule="Moniteur / Monitrice de formation professionnelle" />
+<appellation intitule="Professeur / Professeure en centre de formation pour adultes" />
+<appellation intitule="Responsable ingénierie de la formation professionnelle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2112" intitule="Orientation scolaire et professionnelle">
+<liste_appellations>
+<appellation intitule="Chargé / Chargée de bilan professionnel" />
+<appellation intitule="Conseiller / Conseillère d'orientation" />
+<appellation intitule="Conseiller / Conseillère d'orientation en formation" />
+<appellation intitule="Conseiller / Conseillère d'orientation professionnelle" />
+<appellation intitule="Conseiller / Conseillère d'orientation psychologue" />
+<appellation intitule="Conseiller / Conseillère d'orientation scolaire et professionnelle" />
+<appellation intitule="Directeur / Directrice de centre d'information et d'orientation" />
+<appellation intitule="Intervenant / Intervenante en bilan professionnel" />
+<appellation intitule="Praticien / Praticienne de bilan professionnel" />
+<appellation intitule="Psychologue du travail" />
+<appellation intitule="Psychotechnicien / Psychotechnicienne" />
+<appellation intitule="Responsable de bilan professionnel" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K22" intitule="Nettoyage et propreté industriels">
+<fiche
+ code="K2201" intitule="Blanchisserie industrielle">
+<liste_appellations>
+<appellation intitule="Agent / Agente de production en blanchisserie industrielle" />
+<appellation intitule="Blanchisseur industriel / Blanchisseuse industrielle" />
+<appellation intitule="Conducteur / Conductrice de machines à nettoyer à sec" />
+<appellation intitule="Employé / Employée de blanchisserie industrielle" />
+<appellation intitule="Laveur / Laveuse en blanchisserie industrielle" />
+<appellation intitule="Machiniste de nettoyage à sec" />
+<appellation intitule="Manutentionnaire en blanchisserie" />
+<appellation intitule="Opérateur / Opératrice d'entretien en blanchisserie industrielle" />
+<appellation intitule="Ouvrier spécialisé / Ouvrière spécialisée en blanchisserie" />
+<appellation intitule="Presseur / Presseuse en blanchisserie" />
+<appellation intitule="Repasseur / Repasseuse en blanchisserie industrielle" />
+<appellation intitule="Repasseur-presseur / Repasseuse-presseuse en blanchisserie industrielle" />
+<appellation intitule="Sécheur / Sécheuse en blanchisserie" />
+<appellation intitule="Trieur-réceptionnaire / Trieuse-réceptionnaire en blanchisserie industrielle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2202" intitule="Lavage de vitres">
+<liste_appellations>
+<appellation intitule="Chef d'équipe de laveurs de vitres" />
+<appellation intitule="Laveur / Laveuse de carreaux" />
+<appellation intitule="Laveur / Laveuse de vitres" />
+<appellation intitule="Laveur / Laveuse de vitres de plain-pied" />
+<appellation intitule="Laveur / Laveuse de vitres polyvalent" />
+<appellation intitule="Laveur / Laveuse de vitres-nacelliste" />
+<appellation intitule="Nettoyeur / Nettoyeuse de vitres" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2203" intitule="Management et inspection en propreté de locaux">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante d'exploitation nettoyage de locaux" />
+<appellation intitule="Chargé / Chargée de clientèle nettoyage de locaux" />
+<appellation intitule="Chargé / Chargée de secteur nettoyage des locaux" />
+<appellation intitule="Chargé / Chargée d'exploitation nettoyage de locaux" />
+<appellation intitule="Chef de chantier nettoyage de locaux" />
+<appellation intitule="Chef de section nettoyage de locaux" />
+<appellation intitule="Chef de site nettoyage de locaux" />
+<appellation intitule="Chef d'exploitation nettoyage de locaux" />
+<appellation intitule="Coordinateur / Coordinatrice d'entretien propreté des locaux" />
+<appellation intitule="Coordinateur / Coordinatrice équipes de nettoyage de locaux" />
+<appellation intitule="Inspecteur / Inspectrice d'entretien d'immeubles" />
+<appellation intitule="Inspecteur / Inspectrice nettoyage de locaux" />
+<appellation intitule="Inspecteur / Inspectrice qualité nettoyage de locaux" />
+<appellation intitule="Responsable de secteur en propreté de locaux" />
+<appellation intitule="Responsable de service hygiène et propreté de locaux" />
+<appellation intitule="Responsable de site nettoyage de locaux" />
+<appellation intitule="Responsable technique nettoyage de locaux" />
+<appellation intitule="Technicien / Technicienne qualité en propreté de locaux" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2204" intitule="Nettoyage de locaux">
+<liste_appellations>
+<appellation intitule="Agent / Agente de nettoyage industriel" />
+<appellation intitule="Agent / Agente de propreté de locaux" />
+<appellation intitule="Agent / Agente de propreté en milieu sensible" />
+<appellation intitule="Agent / Agente de propreté tertiaire" />
+<appellation intitule="Agent / Agente d'entretien de nettoyage industriel" />
+<appellation intitule="Agent / Agente d'entretien/propreté de locaux" />
+<appellation intitule="Agent / Agente technique de nettoyage industriel" />
+<appellation intitule="Chef d'équipe nettoyage industriel" />
+<appellation intitule="Chef d'équipe propreté" />
+<appellation intitule="Conducteur / Conductrice de machines de nettoyage industriel" />
+<appellation intitule="Nettoyeur / Nettoyeuse de locaux" />
+<appellation intitule="Nettoyeur / Nettoyeuse de moquettes" />
+<appellation intitule="Nettoyeur / Nettoyeuse de surfaces" />
+<appellation intitule="Nettoyeur-machiniste / Nettoyeuse-machiniste en propreté" />
+<appellation intitule="Ouvrier / Ouvrière de nettoyage industriel" />
+<appellation intitule="Ouvrier / Ouvrière d'entretien/propreté d'immeubles" />
+<appellation intitule="Ouvrier nettoyeur / Ouvrière nettoyeuse de locaux" />
+<appellation intitule="Technicien / Technicienne de surface" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K23" intitule="Propreté en environnement urbain">
+<fiche
+ code="K2301" intitule="Distribution et assainissement d'eau">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'assainissement" />
+<appellation intitule="Agent / Agente de curage" />
+<appellation intitule="Agent / Agente de réseau d'assainissement" />
+<appellation intitule="Agent / Agente de réseau d'eau potable" />
+<appellation intitule="Agent / Agente de salubrité en assainissement" />
+<appellation intitule="Agent / Agente d'exploitation des réseaux d'assainissement" />
+<appellation intitule="Chef égoutier / égoutière" />
+<appellation intitule="Egoutier / Egoutière" />
+<appellation intitule="Egoutier principal / Egoutière principale" />
+<appellation intitule="Fontainier / Fontainière" />
+<appellation intitule="Inspecteur / Inspectrice de réseau d'assainissement" />
+<appellation intitule="Nettoyeur / Nettoyeuse de réseau d'assainissement" />
+<appellation intitule="Opérateur / Opératrice gestion réseaux" />
+<appellation intitule="Ouvrier / Ouvrière d'assainissement" />
+<appellation intitule="Ouvrier / Ouvrière d'entretien des réseaux d'assainissement" />
+<appellation intitule="Technicien / Technicienne de contrôle de réseau d'assainissement" />
+<appellation intitule="Technicien / Technicienne de contrôle de réseau d'eau" />
+<appellation intitule="Technicien / Technicienne d'inspection de réseau d'assainissement" />
+<appellation intitule="Technicien / Technicienne distribution en eau potable" />
+<appellation intitule="Technicien chargé / Technicienne chargée de la police des eaux" />
+<appellation intitule="Vidangeur / Vidangeuse en assainissement" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2302" intitule="Management et inspection en environnement urbain">
+<liste_appellations>
+<appellation intitule="Chef de service département voirie balayage" />
+<appellation intitule="Chef d'exploitation propreté/collecte" />
+<appellation intitule="Coordinateur / Coordinatrice de collecte de déchets" />
+<appellation intitule="Directeur / Directrice collecte des déchets" />
+<appellation intitule="Directeur / Directrice du cadre de vie" />
+<appellation intitule="Directeur / Directrice filière déchets urbains" />
+<appellation intitule="Directeur / Directrice service déchets ou propreté" />
+<appellation intitule="Ingénieur / Ingénieure responsable propreté nettoiement" />
+<appellation intitule="Inspecteur / Inspectrice de la propreté" />
+<appellation intitule="Inspecteur / Inspectrice de salubrité publique" />
+<appellation intitule="Responsable atelier nettoiement urbain" />
+<appellation intitule="Responsable collecte ordures" />
+<appellation intitule="Responsable de collecte de déchets" />
+<appellation intitule="Responsable de réseaux d'assainissement" />
+<appellation intitule="Responsable de service d'assainissement" />
+<appellation intitule="Responsable d'exploitation collecte de déchets" />
+<appellation intitule="Responsable du cadre de vie" />
+<appellation intitule="Responsable du nettoiement urbain" />
+<appellation intitule="Responsable du service collecte ménagère et encombrants" />
+<appellation intitule="Responsable du service propreté déchets" />
+<appellation intitule="Responsable hygiène et propreté municipal" />
+<appellation intitule="Responsable nettoiement urbain" />
+<appellation intitule="Responsable propreté urbaine" />
+<appellation intitule="Responsable service collecte déchets" />
+<appellation intitule="Responsable service gestion des déchets" />
+<appellation intitule="Responsable technique de collecte de déchets" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2303" intitule="Nettoyage des espaces urbains">
+<liste_appellations>
+<appellation intitule="Agent / Agente anti-grafitti" />
+<appellation intitule="Agent / Agente de collecte de déchets" />
+<appellation intitule="Agent / Agente de déchets urbains et industriels" />
+<appellation intitule="Agent / Agente de déchetterie" />
+<appellation intitule="Agent / Agente de lutte contre les pollutions visuelles" />
+<appellation intitule="Agent / Agente de nettoiement d'espace urbain" />
+<appellation intitule="Agent / Agente de propreté urbaine" />
+<appellation intitule="Agent / Agente de propreté, de nettoiement et de collecte" />
+<appellation intitule="Agent / Agente de salubrité" />
+<appellation intitule="Agent / Agente d'entretien d'espaces publics" />
+<appellation intitule="Agent / Agente d'entretien du domaine public" />
+<appellation intitule="Agent / Agente d'entretien et de nettoyage urbain" />
+<appellation intitule="Agent / Agente d'hydrogomage" />
+<appellation intitule="Ambassadeur / Ambassadrice du tri" />
+<appellation intitule="Balayeur / Balayeuse" />
+<appellation intitule="Balayeur urbain / Balayeuse urbaine" />
+<appellation intitule="Chef d'équipe du nettoiement d'espace urbain" />
+<appellation intitule="Conducteur / Conductrice de balayeuse" />
+<appellation intitule="Conducteur / Conductrice de moto crotte" />
+<appellation intitule="Conducteur / Conductrice d'engins léger de nettoiement" />
+<appellation intitule="Eboueur / Eboueuse" />
+<appellation intitule="Eboueur principal / Eboueuse principale" />
+<appellation intitule="Equipier / Equipière de collecte de déchets" />
+<appellation intitule="Gardien / Gardienne de déchetterie" />
+<appellation intitule="Ouvrier / Ouvrière d'entretien propreté" />
+<appellation intitule="Ramasseur / Ramasseuse d'ordures ménagères" />
+<appellation intitule="Ripeur / Ripeuse" />
+<appellation intitule="Technicien / Technicienne du nettoiement et de l'assainissement" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2304" intitule="Revalorisation de produits industriels">
+<liste_appellations>
+<appellation intitule="Agent / Agente de récupération et de recyclage" />
+<appellation intitule="Agent / Agente de traitement des déchets" />
+<appellation intitule="Agent / Agente de tri des déchets" />
+<appellation intitule="Agent / Agente de tri des matériaux" />
+<appellation intitule="Opérateur / Opératrice de tri en récupération et revalorisation" />
+<appellation intitule="Ouvrier / Ouvrière de recyclage électroménager" />
+<appellation intitule="Récupérateur / Récupératrice" />
+<appellation intitule="Récupérateur / Récupératrice de métaux" />
+<appellation intitule="Recycleur / Recycleuse" />
+<appellation intitule="Ressourcier / Ressourcière" />
+<appellation intitule="Trieur / Trieuse de linges" />
+<appellation intitule="Trieur / Trieuse de métaux" />
+<appellation intitule="Trieur / Trieuse de palettes" />
+<appellation intitule="Trieur / Trieuse de textiles usagés" />
+<appellation intitule="Valoriste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2305" intitule="Salubrité et traitement de nuisibles">
+<liste_appellations>
+<appellation intitule="Agent / Agente de désinsectisation" />
+<appellation intitule="Agent / Agente de destruction d'insectes" />
+<appellation intitule="Agent / Agente de mise en fourrière animale" />
+<appellation intitule="Applicateur / Applicatrice hygiéniste" />
+<appellation intitule="Applicateur désinfecteur / Applicatrice désinfecteuse" />
+<appellation intitule="Capteur / Capteuse d'animaux errants" />
+<appellation intitule="Chef d'équipe hygiéniste" />
+<appellation intitule="Dératiseur / Dératiseuse" />
+<appellation intitule="Désinfecteur / Désinfecteuse de bâtiments" />
+<appellation intitule="Désinsectisateur / Désinsectisatrice" />
+<appellation intitule="Inspecteur / Inspectrice technique hygiéniste" />
+<appellation intitule="Nettoyeur / Nettoyeuse de vide-ordures" />
+<appellation intitule="Taupier / Taupière" />
+<appellation intitule="Technicien / Technicienne de dératisation" />
+<appellation intitule="Technicien / Technicienne de désinfection" />
+<appellation intitule="Technicien / Technicienne hygiéniste" />
+<appellation intitule="Technicien applicateur / Technicienne applicatrice en traitement des charpentes" />
+<appellation intitule="Technicien applicateur / Technicienne applicatrice hygiéniste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2306" intitule="Supervision d'exploitation éco-industrielle">
+<liste_appellations>
+<appellation intitule="Chef d'exploitation de centre d'enfouissement" />
+<appellation intitule="Chef d'exploitation de station de détoxication" />
+<appellation intitule="Chef d'exploitation de station d'épuration" />
+<appellation intitule="Chef d'exploitation d'eau potable" />
+<appellation intitule="Chef d'exploitation d'usine d'incinération" />
+<appellation intitule="Gestionnaire de réseaux d'assainissement" />
+<appellation intitule="Gestionnaire de réseaux d'eau" />
+<appellation intitule="Ingénieur / Ingénieure en traitement sanitaire des eaux" />
+<appellation intitule="Responsable de site de traitement des déchets" />
+<appellation intitule="Responsable de site éco-industriel" />
+<appellation intitule="Responsable de station d'eau potable" />
+<appellation intitule="Responsable de station d'épuration" />
+<appellation intitule="Responsable de système d'exploitation de l'eau" />
+<appellation intitule="Responsable des déchets" />
+<appellation intitule="Responsable des déchets en entreprise industrielle" />
+<appellation intitule="Responsable d'usine de production d'eau potable" />
+<appellation intitule="Responsable d'usine d'épuration des eaux" />
+<appellation intitule="Spécialiste en traitement des eaux des armées" />
+<appellation intitule="Technicien / Technicienne de station d'épuration" />
+<appellation intitule="Technicien / Technicienne d'exploitation d'eau potable" />
+<appellation intitule="Technicien / Technicienne en traitement des déchets" />
+<appellation intitule="Technicien / Technicienne en traitement des eaux" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K24" intitule="Recherche">
+<fiche
+ code="K2401" intitule="Recherche en sciences de l'homme et de la société">
+<liste_appellations>
+<appellation intitule="Anthropologue" />
+<appellation intitule="Archéologue" />
+<appellation intitule="Archéomètre" />
+<appellation intitule="Chargé / Chargée de recherche en sciences humaines" />
+<appellation intitule="Chargé / Chargée de recherche en sciences sociales" />
+<appellation intitule="Chargé / Chargée d'études en sciences humaines" />
+<appellation intitule="Chercheur / Chercheuse en archéologie" />
+<appellation intitule="Chercheur / Chercheuse en démographie" />
+<appellation intitule="Chercheur / Chercheuse en économie" />
+<appellation intitule="Chercheur / Chercheuse en ethnologie" />
+<appellation intitule="Chercheur / Chercheuse en géographie" />
+<appellation intitule="Chercheur / Chercheuse en histoire" />
+<appellation intitule="Chercheur / Chercheuse en linguistique" />
+<appellation intitule="Chercheur / Chercheuse en psychologie" />
+<appellation intitule="Chercheur / Chercheuse en sciences humaines" />
+<appellation intitule="Chercheur / Chercheuse en sciences sociales" />
+<appellation intitule="Chercheur / Chercheuse en sociologie" />
+<appellation intitule="Chercheur / Chercheuse en thanatologie" />
+<appellation intitule="Chercheur en géomatique" />
+<appellation intitule="Chercheur en urbanisme" />
+<appellation intitule="Choréologue" />
+<appellation intitule="Démographe" />
+<appellation intitule="Directeur / Directrice de recherche en sciences humaines" />
+<appellation intitule="Directeur / Directrice de recherche en sciences sociales" />
+<appellation intitule="Économiste chercheur / chercheuse" />
+<appellation intitule="Épigraphiste" />
+<appellation intitule="Ergonome-chercheur / Ergonome-chercheuse" />
+<appellation intitule="Ethnographe" />
+<appellation intitule="Ethnolinguiste" />
+<appellation intitule="Ethnologue" />
+<appellation intitule="Ethnomusicologue" />
+<appellation intitule="Ethnosociologue" />
+<appellation intitule="Généalogiste" />
+<appellation intitule="Historien / Historienne" />
+<appellation intitule="Lexicographe" />
+<appellation intitule="Lexicologue" />
+<appellation intitule="Linguiste" />
+<appellation intitule="Musicologue" />
+<appellation intitule="Paléographe" />
+<appellation intitule="Paléontologue" />
+<appellation intitule="Philologue" />
+<appellation intitule="Psychologue chercheur / chercheuse" />
+<appellation intitule="Sociologue" />
+<appellation intitule="Sociologue chercheur / chercheuse" />
+<appellation intitule="Terminologue" />
+<appellation intitule="Urbanologue" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2402" intitule="Recherche en sciences de l'univers, de la matière et du vivant">
+<liste_appellations>
+<appellation intitule="Astrométrologue" />
+<appellation intitule="Astronome" />
+<appellation intitule="Astrophysicien / Astrophysicienne" />
+<appellation intitule="Biochimiste de la recherche scientifique" />
+<appellation intitule="Biologiste de la recherche scientifique" />
+<appellation intitule="Biophysicien / Biophysicienne" />
+<appellation intitule="Biostatisticien / Biostatisticienne" />
+<appellation intitule="Biotechnologue" />
+<appellation intitule="Botaniste de la recherche scientifique" />
+<appellation intitule="Chargé / Chargée de recherche" />
+<appellation intitule="Chimiste de la recherche scientifique" />
+<appellation intitule="Climatologue" />
+<appellation intitule="Cosmétologue" />
+<appellation intitule="Cosmologue" />
+<appellation intitule="Directeur / Directrice de recherche" />
+<appellation intitule="Directeur / Directrice de recherche appliquée" />
+<appellation intitule="Directeur / Directrice d'unité de recherche" />
+<appellation intitule="Ecotoxicologue" />
+<appellation intitule="Electricien / Electricienne de la recherche scientifique" />
+<appellation intitule="Electronicien / Electronicienne de la recherche scientifique" />
+<appellation intitule="Epidémiologiste" />
+<appellation intitule="Ergonome de la recherche scientifique" />
+<appellation intitule="Généticien / Généticienne" />
+<appellation intitule="Géomorphologiste de la recherche scientifique" />
+<appellation intitule="Hydrobiologiste" />
+<appellation intitule="Immunologiste" />
+<appellation intitule="Informaticien / Informaticienne de la recherche scientifique" />
+<appellation intitule="Ingénieur / Ingénieure de police technique et scientifique" />
+<appellation intitule="Ingénieur / Ingénieure de recherche biomédicale" />
+<appellation intitule="Ingénieur / Ingénieure de recherche scientifique" />
+<appellation intitule="Ingénieur / Ingénieure d'études en recherche fondamentale" />
+<appellation intitule="Ingénieur / Ingénieure numérique de la recherche scientifique" />
+<appellation intitule="Mathématicien / Mathématicienne" />
+<appellation intitule="Mécanicien / Mécanicienne de la recherche scientifique" />
+<appellation intitule="Mécanicien / Mécanicienne des fluides de la recherche scientifique" />
+<appellation intitule="Mécanicien / Mécanicienne structures de la recherche scientifique" />
+<appellation intitule="Médecin de la recherche scientifique" />
+<appellation intitule="Métallurgiste de la recherche scientifique" />
+<appellation intitule="Microbiologiste de la recherche scientifique" />
+<appellation intitule="Minéralogiste de la recherche scientifique" />
+<appellation intitule="Mycologue de la recherche scientifique" />
+<appellation intitule="Nanotechnologue" />
+<appellation intitule="Naturaliste de la recherche scientifique" />
+<appellation intitule="Océanologue" />
+<appellation intitule="Opticien / Opticienne de la recherche scientifique" />
+<appellation intitule="Pharmacien / Pharmacienne de recherche scientifique" />
+<appellation intitule="Pharmacocinéticien / Pharmacocinéticienne" />
+<appellation intitule="Photochimiste de la recherche scientifique" />
+<appellation intitule="Physicien / Physicienne de la recherche scientifique" />
+<appellation intitule="Physicien quanticien / Physicienne quanticienne" />
+<appellation intitule="Physiologiste de la recherche scientifique" />
+<appellation intitule="Planétologue" />
+<appellation intitule="Radiochimiste de la recherche scientifique" />
+<appellation intitule="Responsable de laboratoire de recherche" />
+<appellation intitule="Responsable de projet de recherche" />
+<appellation intitule="Rhéologue" />
+<appellation intitule="Roboticien / Roboticienne de la recherche scientifique" />
+<appellation intitule="Thermicien / Thermicienne de la recherche scientifique" />
+<appellation intitule="Toxicologue de la recherche scientifique" />
+<appellation intitule="Vétérinaire de recherche scientifique" />
+<appellation intitule="Virologue" />
+<appellation intitule="Zoologiste de la recherche scientifique" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K25" intitule="Sécurité privée">
+<fiche
+ code="K2501" intitule="Gardiennage de locaux">
+<liste_appellations>
+<appellation intitule="Agent / Agente de résidence" />
+<appellation intitule="Agent / Agente de secteur de gardiennage" />
+<appellation intitule="Chargé / Chargée des usagers de l'habitat social" />
+<appellation intitule="Chef de secteur en gardiennage" />
+<appellation intitule="Concierge d'immeuble" />
+<appellation intitule="Coordonnateur / Coordonnatrice en gardiennage" />
+<appellation intitule="Correspondant / Correspondante de gardiennage" />
+<appellation intitule="Correspondant / Correspondante d'immeuble" />
+<appellation intitule="Employé / Employée d'immeuble" />
+<appellation intitule="Gardien / Gardienne" />
+<appellation intitule="Gardien / Gardienne chef" />
+<appellation intitule="Gardien / Gardienne de locaux" />
+<appellation intitule="Gardien / Gardienne de propriété" />
+<appellation intitule="Gardien / Gardienne de résidence" />
+<appellation intitule="Gardien / Gardienne de toilettes" />
+<appellation intitule="Gardien / Gardienne de vestiaires" />
+<appellation intitule="Gardien / Gardienne d'établissement scolaire" />
+<appellation intitule="Gardien / Gardienne d'immeuble" />
+<appellation intitule="Gardien polyvalent / Gardienne polyvalente d'immeuble" />
+<appellation intitule="Gardien principal / Gardienne principale" />
+<appellation intitule="Gardien régisseur / Gardienne régisseuse" />
+<appellation intitule="Gardien-concierge / Gardienne-concierge" />
+<appellation intitule="Inspecteur / Inspectrice d'immeuble" />
+<appellation intitule="Portier / Portière concierge d'immeuble" />
+<appellation intitule="Superviseur / Superviseuse en gardiennage" />
+<appellation intitule="Surveillant / Surveillante d'immeuble" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2502" intitule="Management de sécurité privée">
+<liste_appellations>
+<appellation intitule="Chef de poste sécurité" />
+<appellation intitule="Chef de sécurité" />
+<appellation intitule="Chef de sécurité incendie" />
+<appellation intitule="Chef de service de sécurité incendie et assistance à personne" />
+<appellation intitule="Chef de service sécurité" />
+<appellation intitule="Chef d'équipe de sécurité incendie" />
+<appellation intitule="Conseiller / Conseillère sécurité" />
+<appellation intitule="Détective" />
+<appellation intitule="Détective privé / Détective privée" />
+<appellation intitule="Enquêteur privé / Enquêtrice privée" />
+<appellation intitule="Responsable chargé / chargée de la sécurité" />
+<appellation intitule="Responsable de sécurité et surveillance" />
+<appellation intitule="Responsable d'exploitation en sécurité" />
+<appellation intitule="Responsable sécurité" />
+<appellation intitule="Responsable sécurité de site" />
+<appellation intitule="Responsable service sécurité" />
+<appellation intitule="Surveillant-chef / Surveillante-chef de musée" />
+<appellation intitule="Surveillant-chef gardien / Surveillante-chef gardienne de musée" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2503" intitule="Sécurité et surveillance privées">
+<liste_appellations>
+<appellation intitule="Agent / Agente cynophile de sécurité" />
+<appellation intitule="Agent / Agente de démarque" />
+<appellation intitule="Agent / Agente de prévention et de sécurité" />
+<appellation intitule="Agent / Agente de protection rapprochée" />
+<appellation intitule="Agent / Agente de sécurité" />
+<appellation intitule="Agent / Agente de sécurité boîte de nuit, discothèque" />
+<appellation intitule="Agent / Agente de sécurité incendie" />
+<appellation intitule="Agent / Agente de sécurité SSIAP 1" />
+<appellation intitule="Agent / Agente de service de sécurité incendie" />
+<appellation intitule="Agent / Agente de sûreté" />
+<appellation intitule="Agent / Agente de sûreté aéroportuaire" />
+<appellation intitule="Agent / Agente de sûreté de passage" />
+<appellation intitule="Agent / Agente de sûreté frêt" />
+<appellation intitule="Agent / Agente de surveillance" />
+<appellation intitule="Agent / Agente de surveillance et de protection" />
+<appellation intitule="Agent / Agente de surveillance et de sécurité" />
+<appellation intitule="Agent / Agente de surveillance et d'intervention" />
+<appellation intitule="Agent / Agente de télésurveillance" />
+<appellation intitule="Agent / Agente d'exploitation et de sûreté aéroportuaire" />
+<appellation intitule="Conducteur / Conductrice de chien" />
+<appellation intitule="Convoyeur / Convoyeuse de fonds" />
+<appellation intitule="Convoyeur / Convoyeuse de fonds et valeurs" />
+<appellation intitule="Convoyeur / Convoyeuse garde" />
+<appellation intitule="Convoyeur conducteur / Convoyeuse conductrice de fonds" />
+<appellation intitule="Convoyeur messager / Convoyeuse messagère" />
+<appellation intitule="Garde du corps privé" />
+<appellation intitule="Gardien / Gardienne de musée" />
+<appellation intitule="Gardien veilleur / Gardienne veilleuse" />
+<appellation intitule="Inspecteur / Inspectrice de magasin" />
+<appellation intitule="Intervenant / Intervenante sur alarme" />
+<appellation intitule="Maître-chien / Maîtresse-chien de sécurité" />
+<appellation intitule="Opérateur / Opératrice en télésurveillance" />
+<appellation intitule="Physionomiste" />
+<appellation intitule="Pilote d'équipe sécurité" />
+<appellation intitule="Portier / Portière physionomiste" />
+<appellation intitule="Rondier / Rondière en sécurité" />
+<appellation intitule="Stadier / Stadière" />
+<appellation intitule="Surveillant / Surveillante de magasin" />
+<appellation intitule="Surveillant / Surveillante de musée" />
+<appellation intitule="Surveillant / Surveillante de parking" />
+<appellation intitule="Technicien / Technicienne de station centrale de surveillance" />
+<appellation intitule="Technicien / Technicienne vidéosurveillance des jeux" />
+<appellation intitule="Vigile" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="K26" intitule="Services funéraires">
+<fiche
+ code="K2601" intitule="Conduite d'opérations funéraires">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'amphithéâtre" />
+<appellation intitule="Agent / Agente de chambre funéraire" />
+<appellation intitule="Agent / Agente de chambre mortuaire" />
+<appellation intitule="Agent / Agente de crémation" />
+<appellation intitule="Agent / Agente de crématorium" />
+<appellation intitule="Agent / Agente de funérarium" />
+<appellation intitule="Agent / Agente technique funéraire" />
+<appellation intitule="Agent chargé / Agente chargée des crémations" />
+<appellation intitule="Chauffeur porteur / Chauffeuse porteuse funéraire" />
+<appellation intitule="Chef d'équipe de porteurs funéraires" />
+<appellation intitule="Conducteur / Conductrice de four de crémation" />
+<appellation intitule="Fossoyeur / Fossoyeuse" />
+<appellation intitule="Fossoyeur porteur / Fossoyeuse porteuse" />
+<appellation intitule="Opérateur / Opératrice de crémation" />
+<appellation intitule="Opérateur / Opératrice de crématorium" />
+<appellation intitule="Opérateur / Opératrice de four de crémation" />
+<appellation intitule="Porteur / Porteuse funéraire" />
+<appellation intitule="Technicien / Technicienne de convoi funéraire" />
+<appellation intitule="Technicien / Technicienne de crémation" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2602" intitule="Conseil en services funéraires">
+<liste_appellations>
+<appellation intitule="Agent / Agente de formalités funéraires" />
+<appellation intitule="Assistant / Assistante funéraire" />
+<appellation intitule="Assistant / Assistante funéraire de plateau d'assistance" />
+<appellation intitule="Assistant commercial / Assistante commerciale funéraire" />
+<appellation intitule="Chargé / Chargée des formalités funéraires" />
+<appellation intitule="Chef de protocole funéraire" />
+<appellation intitule="Conseiller / Conseillère funéraire" />
+<appellation intitule="Conseiller / Conseillère rapatriement funéraire" />
+<appellation intitule="Conseiller commercial / Conseillère commerciale funéraire" />
+<appellation intitule="Démarcheur / Démarcheuse funéraire" />
+<appellation intitule="Directeur / Directrice d'agence funéraire" />
+<appellation intitule="Directeur / Directrice de régie de pompes funèbres" />
+<appellation intitule="Directeur / Directrice de régie funéraire" />
+<appellation intitule="Directeur / Directrice d'entreprise funéraire" />
+<appellation intitule="Maître / Maîtresse de cérémonie funéraire" />
+<appellation intitule="Monteur / Monteuse de convois funéraires" />
+<appellation intitule="Ordonnateur / Ordonnatrice des pompes funèbres" />
+<appellation intitule="Régleur / Régleuse funéraire" />
+<appellation intitule="Responsable d'agence funéraire" />
+<appellation intitule="Responsable de centre de profit funéraire" />
+<appellation intitule="Responsable d'entreprise de pompes funèbres" />
+<appellation intitule="Responsable des opérations funéraires" />
+<appellation intitule="Responsable des ventes de services funéraires" />
+<appellation intitule="Responsable opérations funéraires" />
+<appellation intitule="Responsable planning funéraire" />
+<appellation intitule="Vendeur / Vendeuse de point de vente funéraire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="K2603" intitule="Thanatopraxie">
+<liste_appellations>
+<appellation intitule="Embaumeur / Embaumeuse" />
+<appellation intitule="Responsable des soins mortuaires" />
+<appellation intitule="Thanatopracteur / Thanatopractrice" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="L" intitule="SPECTACLE">
+<domaine code="L11" intitule="Animation de spectacles">
+<fiche
+ code="L1101" intitule="Animation musicale et scénique">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice de soirées" />
+<appellation intitule="Animateur / Animatrice de soirées privées" />
+<appellation intitule="Animateur / Animatrice disc-jockey" />
+<appellation intitule="Animateur / Animatrice disco mobile" />
+<appellation intitule="Dee-jay" />
+<appellation intitule="Disc-jockey" />
+<appellation intitule="DJ" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1102" intitule="Mannequinat et pose artistique">
+<liste_appellations>
+<appellation intitule="Mannequin" />
+<appellation intitule="Mannequin cabine" />
+<appellation intitule="Mannequin d'essayage" />
+<appellation intitule="Mannequin détail" />
+<appellation intitule="Mannequin haute couture" />
+<appellation intitule="Modèle" />
+<appellation intitule="Modèle Vivant" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1103" intitule="Présentation de spectacles ou d'émissions">
+<liste_appellations>
+<appellation intitule="Animateur / Animatrice de spectacles" />
+<appellation intitule="Animateur / Animatrice radio" />
+<appellation intitule="Animateur / Animatrice TV" />
+<appellation intitule="Chauffeur / Chauffeuse de salle" />
+<appellation intitule="Présentateur / Présentatrice de spectacles" />
+<appellation intitule="Présentateur / Présentatrice radio" />
+<appellation intitule="Présentateur / Présentatrice TV" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="L12" intitule="Artistes - interprètes du spectacle">
+<fiche
+ code="L1201" intitule="Danse">
+<liste_appellations>
+<appellation intitule="Artiste chorégraphique" />
+<appellation intitule="Assistant / Assistante du chorégraphe" />
+<appellation intitule="Chorégraphe" />
+<appellation intitule="Danseur / Danseuse" />
+<appellation intitule="Directeur / Directrice artistique en danse" />
+<appellation intitule="Gogo dancer / danceuse" />
+<appellation intitule="Maître / Maîtresse de ballet" />
+<appellation intitule="Notateur / Notatrice en danse" />
+<appellation intitule="Répétiteur / Répétitrice de ballet" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1202" intitule="Musique et chant">
+<liste_appellations>
+<appellation intitule="Arrangeur musical / Arrangeuse musicale" />
+<appellation intitule="Auteur-compositeur / Auteure-compositrice" />
+<appellation intitule="Auteur-compositeur-interprète / Auteure-compositrice-interprète" />
+<appellation intitule="Auteur-interprète / Auteure-interprète" />
+<appellation intitule="Chanteur / Chanteuse" />
+<appellation intitule="Chanteur / Chanteuse de variétés" />
+<appellation intitule="Chanteur / Chanteuse lyrique" />
+<appellation intitule="Chanteur / Chanteuse soliste" />
+<appellation intitule="Chef de chant" />
+<appellation intitule="Chef de choeur" />
+<appellation intitule="Chef d'orchestre" />
+<appellation intitule="Choriste" />
+<appellation intitule="Compositeur / Compositrice" />
+<appellation intitule="Directeur / Directrice artistique musique" />
+<appellation intitule="Directeur / Directrice des choeurs" />
+<appellation intitule="Instrumentiste" />
+<appellation intitule="Musicien / Musicienne" />
+<appellation intitule="Musicien / Musicienne de variétés" />
+<appellation intitule="Musicien / Musicienne d'orchestre" />
+<appellation intitule="Musicien / Musicienne soliste" />
+<appellation intitule="Musicien-accompagnateur / Musicienne-accompagnatrice" />
+<appellation intitule="Orchestrateur / Orchestratrice" />
+<appellation intitule="Régisseur / Régisseuse des choeurs" />
+<appellation intitule="Régisseur / Régisseuse d'orchestre" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1203" intitule="Art dramatique">
+<liste_appellations>
+<appellation intitule="Acteur / Actrice" />
+<appellation intitule="Acteur / Actrice de complément" />
+<appellation intitule="Acteur principal / Actrice principale" />
+<appellation intitule="Artiste dramatique" />
+<appellation intitule="Comédien / Comédienne" />
+<appellation intitule="Conteur / Conteuse" />
+<appellation intitule="Doublure" />
+<appellation intitule="Figurant / Figurante" />
+<appellation intitule="Personnage" />
+<appellation intitule="Personnage de Noël" />
+<appellation intitule="Répétiteur / Répétitrice de dialogues" />
+<appellation intitule="Silhouette" />
+<appellation intitule="Voix off" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1204" intitule="Arts du cirque et arts visuels">
+<liste_appellations>
+<appellation intitule="Acrobate" />
+<appellation intitule="Antipodiste" />
+<appellation intitule="Artiste de cirque" />
+<appellation intitule="Artiste de rue" />
+<appellation intitule="Cascadeur / Cascadeuse" />
+<appellation intitule="Chansonnier / Chansonnière" />
+<appellation intitule="Clown" />
+<appellation intitule="Comique" />
+<appellation intitule="Contorsionniste" />
+<appellation intitule="Cracheur / Cracheuse de feu" />
+<appellation intitule="Dompteur / Dompteuse" />
+<appellation intitule="Dresseur / Dresseuse d'animaux de cirque" />
+<appellation intitule="Echassier / Echassière" />
+<appellation intitule="Ecuyer / Ecuyère" />
+<appellation intitule="Equilibriste" />
+<appellation intitule="Fakir" />
+<appellation intitule="Fantaisiste" />
+<appellation intitule="Fildefériste" />
+<appellation intitule="Funambule" />
+<appellation intitule="Humoriste" />
+<appellation intitule="Illusionniste" />
+<appellation intitule="Imitateur / Imitatrice" />
+<appellation intitule="Jongleur / Jongleuse" />
+<appellation intitule="Magicien / Magicienne" />
+<appellation intitule="Marionnettiste" />
+<appellation intitule="Mime" />
+<appellation intitule="Patineur / Patineuse sur glace" />
+<appellation intitule="Prestidigitateur / Prestidigitatrice" />
+<appellation intitule="Transformiste" />
+<appellation intitule="Trapéziste" />
+<appellation intitule="Ventriloque" />
+<appellation intitule="Voltigeur / Voltigeuse" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="L13" intitule="Conception et production de spectacles">
+<fiche
+ code="L1301" intitule="Mise en scène de spectacles vivants">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante mise en scène" />
+<appellation intitule="Assistant metteur / Assistante metteuse en scène" />
+<appellation intitule="Collaborateur / Collaboratrice mise en scène" />
+<appellation intitule="Co-metteur / Co-metteuse en scène" />
+<appellation intitule="Metteur / Metteuse en piste" />
+<appellation intitule="Metteur / Metteuse en scène" />
+<appellation intitule="Metteur / Metteuse en scène théâtre" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1302" intitule="Production et administration spectacle, cinéma et audiovisuel">
+<liste_appellations>
+<appellation intitule="Administrateur / Administratrice de compagnie de danse" />
+<appellation intitule="Administrateur / Administratrice de compagnie de théâtre" />
+<appellation intitule="Administrateur / Administratrice de production cinéma" />
+<appellation intitule="Administrateur / Administratrice de théâtre" />
+<appellation intitule="Administrateur / Administratrice d'orchestre" />
+<appellation intitule="Assistant / Assistante de production spectacle" />
+<appellation intitule="Chargé / Chargée de postproduction" />
+<appellation intitule="Chargé / Chargée de production audiovisuelle" />
+<appellation intitule="Chargé / Chargée de production cinématographique" />
+<appellation intitule="Chargé / Chargée de production de spectacles" />
+<appellation intitule="Directeur / Directrice d'antenne radio" />
+<appellation intitule="Directeur / Directrice d'antenne télévision" />
+<appellation intitule="Directeur / Directrice de ballet" />
+<appellation intitule="Directeur / Directrice de cirque" />
+<appellation intitule="Directeur / Directrice de compagnie de danse" />
+<appellation intitule="Directeur / Directrice de compagnie de théâtre" />
+<appellation intitule="Directeur / Directrice de festival" />
+<appellation intitule="Directeur / Directrice de la danse" />
+<appellation intitule="Directeur / Directrice de la musique" />
+<appellation intitule="Directeur / Directrice de production audiovisuelle" />
+<appellation intitule="Directeur / Directrice de production cinématographique" />
+<appellation intitule="Directeur / Directrice de production de spectacles" />
+<appellation intitule="Directeur / Directrice de théâtre" />
+<appellation intitule="Directeur musical / Directrice musicale" />
+<appellation intitule="Entrepreneur / Entrepreneure de spectacles" />
+<appellation intitule="Producteur / Productrice cinéma" />
+<appellation intitule="Producteur / Productrice de musique" />
+<appellation intitule="Producteur / Productrice de spectacles" />
+<appellation intitule="Producteur / Productrice phonographique" />
+<appellation intitule="Producteur / Productrice radio" />
+<appellation intitule="Producteur / Productrice télévision" />
+<appellation intitule="Producteur délégué / Productrice déléguée" />
+<appellation intitule="Producteur exécutif / Productrice exécutive" />
+<appellation intitule="Programmateur / Programmatrice de spectacles" />
+<appellation intitule="Programmateur / Programmatrice radio" />
+<appellation intitule="Responsable de la programmation audiovisuelle" />
+<appellation intitule="Responsable de la programmation de spectacles" />
+<appellation intitule="Secrétaire de production cinéma" />
+<appellation intitule="Secrétaire de production de spectacles" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1303" intitule="Promotion d'artistes et de spectacles">
+<liste_appellations>
+<appellation intitule="Agent / Agente artistique" />
+<appellation intitule="Agent / Agente d'artiste" />
+<appellation intitule="Agent / Agente de mannequin" />
+<appellation intitule="Agent / Agente de promotion des artistes" />
+<appellation intitule="Agent / Agente de sportif" />
+<appellation intitule="Agent / Agente littéraire" />
+<appellation intitule="Booker / Bookeuse" />
+<appellation intitule="Chargé / Chargée de diffusion de spectacles" />
+<appellation intitule="Directeur / Directrice de casting" />
+<appellation intitule="Imprésario" />
+<appellation intitule="Manager / Manageuse d'artiste" />
+<appellation intitule="Music manager" />
+<appellation intitule="Représentant / Représentante littéraire" />
+<appellation intitule="Tourneur / Tourneuse spectacle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1304" intitule="Réalisation cinématographique et audiovisuelle">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante scripte" />
+<appellation intitule="Assistant réalisateur / Assistante réalisatrice" />
+<appellation intitule="Deuxième assistant réalisateur / Deuxième assistante réalisatrice" />
+<appellation intitule="Documentariste" />
+<appellation intitule="Premier assistant réalisateur / Première assistante réalisatrice" />
+<appellation intitule="Réalisateur / Réalisatrice" />
+<appellation intitule="Réalisateur / Réalisatrice audiovisuel" />
+<appellation intitule="Réalisateur / Réalisatrice cinéma" />
+<appellation intitule="Réalisateur / Réalisatrice de court métrage" />
+<appellation intitule="Réalisateur / Réalisatrice de documentaire" />
+<appellation intitule="Réalisateur / Réalisatrice de film d'animation" />
+<appellation intitule="Réalisateur / Réalisatrice de film d'entreprise" />
+<appellation intitule="Réalisateur / Réalisatrice de film publicitaire" />
+<appellation intitule="Réalisateur / Réalisatrice de long métrage" />
+<appellation intitule="Réalisateur / Réalisatrice de plateau" />
+<appellation intitule="Réalisateur / Réalisatrice de téléfilm" />
+<appellation intitule="Réalisateur / Réalisatrice de vidéo-clip" />
+<appellation intitule="Réalisateur / Réalisatrice d'émission de radio" />
+<appellation intitule="Réalisateur / Réalisatrice radio" />
+<appellation intitule="Réalisateur / Réalisatrice télévision" />
+<appellation intitule="Scripte" />
+<appellation intitule="Scripte cinéma" />
+<appellation intitule="Scripte télévision" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="L14" intitule="Sport professionnel">
+<fiche
+ code="L1401" intitule="Sportif professionnel">
+<liste_appellations>
+<appellation intitule="Arbitre professionnel / professionnelle de discipline sportive" />
+<appellation intitule="Boxeur / Boxeuse" />
+<appellation intitule="Catcheur / Catcheuse" />
+<appellation intitule="Cavalier / Cavalière d'entraînement" />
+<appellation intitule="Cavalier dresseur / Cavalière dresseuse de chevaux" />
+<appellation intitule="Cavalier professionnel / Cavalière professionnelle" />
+<appellation intitule="Cycliste" />
+<appellation intitule="Hockeyeur / Hockeyeuse" />
+<appellation intitule="Jockey" />
+<appellation intitule="Joueur professionnel / Joueuse professionnelle de basket-ball" />
+<appellation intitule="Joueur professionnel / Joueuse professionnelle de football" />
+<appellation intitule="Joueur professionnel / Joueuse professionnelle de golf" />
+<appellation intitule="Joueur professionnel / Joueuse professionnelle de handball" />
+<appellation intitule="Joueur professionnel / Joueuse professionnelle de pelote basque" />
+<appellation intitule="Joueur professionnel / Joueuse professionnelle de rugby" />
+<appellation intitule="Joueur professionnel / Joueuse professionnelle de tennis" />
+<appellation intitule="Joueur professionnel / Joueuse professionnelle de volley-ball" />
+<appellation intitule="Patineur / Patineuse à roulettes" />
+<appellation intitule="Picador" />
+<appellation intitule="Pilote automobile" />
+<appellation intitule="Pilote professionnel / professionnelle automobile" />
+<appellation intitule="Pilote professionnel / professionnelle d'aviation sportive" />
+<appellation intitule="Pilote professionnel / professionnelle de motocycle" />
+<appellation intitule="Professionnel / Professionnelle de sport de glisse" />
+<appellation intitule="Skieur professionnel / Skieuse professionnelle" />
+<appellation intitule="Skipper professionnel / professionnelle" />
+<appellation intitule="Sportif professionnel / Sportive professionnelle" />
+<appellation intitule="Toréro / Toréra" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="L15" intitule="Techniciens du spectacle">
+<fiche
+ code="L1501" intitule="Coiffure et maquillage spectacle">
+<liste_appellations>
+<appellation intitule="Assistant coiffeur / Assistante coiffeuse spectacle" />
+<appellation intitule="Assistant maquilleur / Assistante maquilleuse spectacle" />
+<appellation intitule="Assistant maquilleur coiffeur perruquier / Assistante maquilleuse coiffeuse perruquière spectacle" />
+<appellation intitule="Assistant perruquier / Assistante perruquière spectacle" />
+<appellation intitule="Chef coiffeur / coiffeuse spectacle" />
+<appellation intitule="Chef coiffeur maquilleur / coiffeuse maquilleuse spectacle" />
+<appellation intitule="Chef coiffeur perruquier / coiffeuse perruquière spectacle" />
+<appellation intitule="Chef maquilleur / maquilleuse spectacle" />
+<appellation intitule="Chef maquilleur posticheur / maquilleuse posticheuse spectacle" />
+<appellation intitule="Chef perruquier / perruquière spectacle" />
+<appellation intitule="Chef perruquier maquilleur / perruquière maquilleuse spectacle" />
+<appellation intitule="Chef posticheur / posticheuse spectacle" />
+<appellation intitule="Coiffeur / Coiffeuse spectacle" />
+<appellation intitule="Coiffeur maquilleur / Coiffeuse maquilleuse spectacle" />
+<appellation intitule="Coiffeur-perruquier / Coiffeuse-perruquière spectacle" />
+<appellation intitule="Coiffeur-posticheur / Coiffeuse-posticheuse spectacle" />
+<appellation intitule="Concepteur / Conceptrice coiffures spectacle" />
+<appellation intitule="Concepteur / Conceptrice maquillages spectacle" />
+<appellation intitule="Implanteur-perruquier / Implanteuse-perruquière spectacle" />
+<appellation intitule="Maquilleur / Maquilleuse effets spéciaux" />
+<appellation intitule="Maquilleur / Maquilleuse spectacle" />
+<appellation intitule="Maquilleur coiffeur / Maquilleuse coiffeuse spectacle" />
+<appellation intitule="Maquilleur-coiffeur perruquier / Maquilleuse-coiffeuse perruquière spectacle" />
+<appellation intitule="Maquilleur-posticheur / Maquilleuse-posticheuse spectacle" />
+<appellation intitule="Perruquier / Perruquière spectacle" />
+<appellation intitule="Perruquier-coiffeur / Perruquière-coiffeuse spectacle" />
+<appellation intitule="Perruquier-maquilleur / Perruquière-maquilleuse spectacle" />
+<appellation intitule="Posticheur / Posticheuse spectacle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1502" intitule="Costume et Habillage spectacle">
+<liste_appellations>
+<appellation intitule="Assistant costumier / Assistante costumière" />
+<appellation intitule="Chef costumier / costumière" />
+<appellation intitule="Chef habilleur / habilleuse" />
+<appellation intitule="Concepteur / Conceptrice de costumes" />
+<appellation intitule="Costumier / Costumière" />
+<appellation intitule="Costumier-habilleur / Costumière-habilleuse" />
+<appellation intitule="Costumier-réalisateur / Costumière-réalisatrice" />
+<appellation intitule="Couturier / Couturière spectacle" />
+<appellation intitule="Créateur / Créatrice de costumes" />
+<appellation intitule="Décorateur-costumier / Décoratrice-costumière" />
+<appellation intitule="Habilleur / Habilleuse" />
+<appellation intitule="Régisseur / Régisseuse costumes" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1503" intitule="Décor et accessoires spectacle">
+<liste_appellations>
+<appellation intitule="Accessoiriste" />
+<appellation intitule="Accessoiriste de plateau" />
+<appellation intitule="Accessoiriste en effets spéciaux" />
+<appellation intitule="Armurier / Armurière spectacle" />
+<appellation intitule="Artificier / Artificière spectacle" />
+<appellation intitule="Artificier / Artificière spectacles pyrotechniques" />
+<appellation intitule="Assistant décorateur / Assistante décoratrice spectacle" />
+<appellation intitule="Chef accessoiriste" />
+<appellation intitule="Chef constructeur / constructrice en décors" />
+<appellation intitule="Chef décorateur / décoratrice spectacle" />
+<appellation intitule="Conseiller / Conseillère technique en armes" />
+<appellation intitule="Décorateur / Décoratice spectacle" />
+<appellation intitule="Décorateur / Décoratrice scénographe spectacle" />
+<appellation intitule="Ensemblier spectacle / Chef accessoiriste" />
+<appellation intitule="Pyrotechnicien / Pyrotechnicienne" />
+<appellation intitule="Régisseur / Régisseuse accessoiriste" />
+<appellation intitule="Régisseur / Régisseuse de scène" />
+<appellation intitule="Régisseur / Régisseuse d'extérieurs" />
+<appellation intitule="Scénographe spectacle" />
+<appellation intitule="Technicien / Technicienne en effets spéciaux" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1504" intitule="Éclairage spectacle">
+<liste_appellations>
+<appellation intitule="Chef éclairagiste" />
+<appellation intitule="Chef électricien / électricienne spectacle" />
+<appellation intitule="Concepteur / Conceptrice lumière" />
+<appellation intitule="Créateur / Créatrice lumière" />
+<appellation intitule="Eclairagiste" />
+<appellation intitule="Electricien / Electricienne de plateau" />
+<appellation intitule="Electricien / Electricienne jeu d'orgues" />
+<appellation intitule="Electricien / Electricienne spectacle" />
+<appellation intitule="Electricien-éclairagiste / Electricienne-éclairagiste spectacle" />
+<appellation intitule="Groupiste/groupman / Groupiste/groupwoman" />
+<appellation intitule="Opérateur / Opératrice poursuite" />
+<appellation intitule="Poursuiteur / Poursuiteuse" />
+<appellation intitule="Pupitreur / Pupitreuse spectacle" />
+<appellation intitule="Régisseur / Régisseuse lumière" />
+<appellation intitule="Technicien / Technicienne lumière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1505" intitule="Image cinématographique et télévisuelle">
+<liste_appellations>
+<appellation intitule="Assistant cadreur / Assistante cadreuse" />
+<appellation intitule="Assistant opérateur / Assistante opératrice de prise de vues" />
+<appellation intitule="Cadreur / Cadreuse" />
+<appellation intitule="Cameraman / Camerawoman" />
+<appellation intitule="Chef opérateur / opératrice de prise de vues" />
+<appellation intitule="Chef opérateur / opératrice image" />
+<appellation intitule="Chef opérateur / opératrice lumière" />
+<appellation intitule="Chef opérateur / opératrice vidéo" />
+<appellation intitule="Deuxième assistant opérateur / Deuxième assistante opératrice" />
+<appellation intitule="Directeur / Directrice de la photographie" />
+<appellation intitule="Ingénieur / Ingénieure de la vision" />
+<appellation intitule="Opérateur / Opératrice de plateau" />
+<appellation intitule="Opérateur / Opératrice de prise de vues" />
+<appellation intitule="Premier assistant opérateur / Première assistante opératrice" />
+<appellation intitule="Technicien / Technicienne d'exploitation et de maintenance des équipements audiovisuels" />
+<appellation intitule="Technicien / Technicienne d'exploitation vidéo" />
+<appellation intitule="Technicien / Technicienne vidéo" />
+<appellation intitule="Technicien banc-titre / Technicienne banc-titre" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1506" intitule="Machinerie spectacle">
+<liste_appellations>
+<appellation intitule="Chef machiniste spectacle" />
+<appellation intitule="Cintrier / Cintrière" />
+<appellation intitule="Cintrier-machiniste / Cintrière-machiniste" />
+<appellation intitule="Machiniste cinéma" />
+<appellation intitule="Machiniste spectacle" />
+<appellation intitule="Machiniste télévision" />
+<appellation intitule="Machiniste théâtre" />
+<appellation intitule="Machiniste vidéo" />
+<appellation intitule="Machiniste-constructeur / Machiniste-constructrice de décors" />
+<appellation intitule="Rigger" />
+<appellation intitule="Rippeur / Rippeuse spectacle" />
+<appellation intitule="Road" />
+<appellation intitule="Technicien / Technicienne plateau" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1507" intitule="Montage et post-production">
+<liste_appellations>
+<appellation intitule="Assistant monteur / Assistante monteuse" />
+<appellation intitule="Assistant monteur / Assistante monteuse son" />
+<appellation intitule="Bruiteur / Bruiteuse" />
+<appellation intitule="Chef monteur / monteuse" />
+<appellation intitule="Chef monteur / monteuse son" />
+<appellation intitule="Détecteur / Détectrice son" />
+<appellation intitule="Illustrateur / Illustratrice sonore" />
+<appellation intitule="Mixeur / Mixeuse" />
+<appellation intitule="Monteur / Monteuse" />
+<appellation intitule="Monteur / Monteuse son" />
+<appellation intitule="Monteur / Monteuse vidéo" />
+<appellation intitule="Monteur adjoint / Monteuse adjointe" />
+<appellation intitule="Monteur-truquiste / Monteuse-truquiste" />
+<appellation intitule="Opérateur synthétiseur / Opératrice synthétiseuse" />
+<appellation intitule="Restaurateur / Restauratrice de bandes sonores" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1508" intitule="Prise de son et sonorisation">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante son" />
+<appellation intitule="Assistant chef opérateur Assistante chef opératrice son" />
+<appellation intitule="Backliner" />
+<appellation intitule="Chef opérateur / opératrice du son" />
+<appellation intitule="Concepteur / Conceptrice son" />
+<appellation intitule="Ingénieur / Ingénieure du son" />
+<appellation intitule="Opérateur / Opératrice du son" />
+<appellation intitule="Perchiste" />
+<appellation intitule="Perchman / Perchwoman" />
+<appellation intitule="Preneur / Preneuse de son" />
+<appellation intitule="Régisseur / Régisseuse du son" />
+<appellation intitule="Sonorisateur / Sonorisatrice" />
+<appellation intitule="Technicien / Technicienne du son" />
+<appellation intitule="Technicien réalisateur / Technicienne réalisatrice radio" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="L1509" intitule="Régie générale">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante de régie" />
+<appellation intitule="Directeur / Directrice technique cinéma" />
+<appellation intitule="Directeur / Directrice technique spectacle vivant" />
+<appellation intitule="Régisseur / Régisseuse de plateau" />
+<appellation intitule="Régisseur / Régisseuse de salle" />
+<appellation intitule="Régisseur / Régisseuse de tournée" />
+<appellation intitule="Régisseur général / Régisseuse générale" />
+<appellation intitule="Responsable de la logistique cinéma" />
+<appellation intitule="Responsable de la logistique de spectacles" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="M" intitule="SUPPORT À L'ENTREPRISE">
+<domaine code="M11" intitule="Achat">
+<fiche
+ code="M1101" intitule="Achats">
+<liste_appellations>
+<appellation intitule="Acheteur / Acheteuse" />
+<appellation intitule="Acheteur / Acheteuse de commerce" />
+<appellation intitule="Acheteur / Acheteuse de produits de distribution" />
+<appellation intitule="Acheteur / Acheteuse import" />
+<appellation intitule="Acheteur / Acheteuse junior" />
+<appellation intitule="Acheteur / Acheteuse public" />
+<appellation intitule="Acheteur approvisionneur / Acheteuse approvisionneuse" />
+<appellation intitule="Acheteur industriel / Acheteuse industrielle" />
+<appellation intitule="Acheteur international / Acheteuse internationale" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1102" intitule="Direction des achats">
+<liste_appellations>
+<appellation intitule="Chef de département achats" />
+<appellation intitule="Chef de service achats" />
+<appellation intitule="Coordonnateur / Coordonnatrice des achats" />
+<appellation intitule="Directeur / Directrice des achats" />
+<appellation intitule="Directeur / Directrice des achats groupe" />
+<appellation intitule="Directeur / Directrice des achats internationaux" />
+<appellation intitule="Ingénieur / Ingénieure achats" />
+<appellation intitule="Responsable achats et approvisionnement" />
+<appellation intitule="Responsable achats et logistique" />
+<appellation intitule="Responsable achats industriels" />
+<appellation intitule="Responsable des achats" />
+<appellation intitule="Responsable des achats groupe" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="M12" intitule="Comptabilité et gestion">
+<fiche
+ code="M1201" intitule="Analyse et ingénierie financière">
+<liste_appellations>
+<appellation intitule="Analyste de produits dérivés" />
+<appellation intitule="Analyste financier / financière" />
+<appellation intitule="Chargé / Chargée d'analyse et d'ingénierie financière" />
+<appellation intitule="Conseiller / Conseillère en fusion/acquisition" />
+<appellation intitule="Economiste de marché" />
+<appellation intitule="Economiste financier / financière" />
+<appellation intitule="Gestionnaire de risques" />
+<appellation intitule="Ingénieur financier / Ingénieure financière" />
+<appellation intitule="Responsable financement de projet" />
+<appellation intitule="Responsable merger and acquisition" />
+<appellation intitule="Risk manager" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1202" intitule="Audit et contrôle comptables et financiers">
+<liste_appellations>
+<appellation intitule="Analyste budgétaire" />
+<appellation intitule="Auditeur / Auditrice comptable" />
+<appellation intitule="Auditeur / Auditrice interne" />
+<appellation intitule="Auditeur comptable et financier / Auditrice comptable et financière" />
+<appellation intitule="Collaborateur / Collaboratrice d'expertise comptable" />
+<appellation intitule="Commissaire aux comptes" />
+<appellation intitule="Contrôleur / Contrôleuse budgétaire" />
+<appellation intitule="Contrôleur comptable et financier / Contrôleuse comptable et financière" />
+<appellation intitule="Expert-comptable / Experte-comptable" />
+<appellation intitule="Inspecteur comptable et financier / Inspectrice comptable et financière" />
+<appellation intitule="Réviseur / Réviseuse des comptes" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1203" intitule="Comptabilité">
+<liste_appellations>
+<appellation intitule="Agent / Agente comptable d'établissement public à caractère scientifique, culturel et professionnel -EPSCP-" />
+<appellation intitule="Agent / Agente de gestion comptable" />
+<appellation intitule="Aide-comptable" />
+<appellation intitule="Aide-comptable facturier / facturière" />
+<appellation intitule="Assistant / Assistante comptable" />
+<appellation intitule="Assistant / Assistante comptable et budgétaire" />
+<appellation intitule="Assistant / Assistante de cabinet comptable" />
+<appellation intitule="Assistant / Assistante de gestion en comptabilité" />
+<appellation intitule="Assistant / Assistante paie" />
+<appellation intitule="Assistant administratif / Assistante administrative et comptable" />
+<appellation intitule="Caissier / Caissière de casino" />
+<appellation intitule="Comptable" />
+<appellation intitule="Comptable analytique" />
+<appellation intitule="Comptable clientèle" />
+<appellation intitule="Comptable de gestion locative" />
+<appellation intitule="Comptable des jeux" />
+<appellation intitule="Comptable fournisseurs" />
+<appellation intitule="Comptable général / générale" />
+<appellation intitule="Comptable gérance immobilière" />
+<appellation intitule="Comptable industriel / industrielle" />
+<appellation intitule="Comptable principal / principale" />
+<appellation intitule="Comptable service paie" />
+<appellation intitule="Comptable spécialisé / spécialisée en comptabilité analytique" />
+<appellation intitule="Comptable spécialisé / spécialisée en comptabilité générale" />
+<appellation intitule="Comptable spécialisé / spécialisée export" />
+<appellation intitule="Comptable spécialisé / spécialisée facturation" />
+<appellation intitule="Comptable spécialisé / spécialisée recouvrement" />
+<appellation intitule="Comptable syndic immobilier" />
+<appellation intitule="Comptable territorial / territoriale" />
+<appellation intitule="Comptable trésorerie" />
+<appellation intitule="Comptable unique" />
+<appellation intitule="Comptable-gestionnaire de stock" />
+<appellation intitule="Gestionnaire comptable" />
+<appellation intitule="Gestionnaire paie" />
+<appellation intitule="Intendant / Intendante d'établissement scolaire (lycée, collège...)" />
+<appellation intitule="Intendant / Intendante d'université" />
+<appellation intitule="Responsable de gestion comptable" />
+<appellation intitule="Technicien / Technicienne comptable" />
+<appellation intitule="Technicien / Technicienne paie" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1204" intitule="Contrôle de gestion">
+<liste_appellations>
+<appellation intitule="Analyste de gestion d'entreprise" />
+<appellation intitule="Assistant / Assistante au contrôle de gestion" />
+<appellation intitule="Assistant / Assistante de contrôle budgétaire" />
+<appellation intitule="Auditeur / Auditrice de gestion d'entreprise" />
+<appellation intitule="Chargé / Chargée du contrôle de gestion" />
+<appellation intitule="Conseiller / Conseillère en gestion" />
+<appellation intitule="Consultant / Consultante interne en gestion" />
+<appellation intitule="Contrôleur / Contrôleuse de gestion" />
+<appellation intitule="Contrôleur / Contrôleuse de gestion budgétaire" />
+<appellation intitule="Contrôleur / Contrôleuse de gestion centrale" />
+<appellation intitule="Contrôleur / Contrôleuse de gestion chargé du budget" />
+<appellation intitule="Contrôleur / Contrôleuse de gestion commerciale" />
+<appellation intitule="Contrôleur / Contrôleuse de gestion de groupe" />
+<appellation intitule="Contrôleur / Contrôleuse de gestion d'une unité de production" />
+<appellation intitule="Contrôleur / Contrôleuse de gestion d'usine" />
+<appellation intitule="Contrôleur / Contrôleuse de gestion financière" />
+<appellation intitule="Contrôleur / Contrôleuse de gestion industrielle" />
+<appellation intitule="Contrôleur financier / Contrôleuse financière" />
+<appellation intitule="Directeur / Directrice du contrôle budgétaire" />
+<appellation intitule="Directeur / Directrice du contrôle de gestion" />
+<appellation intitule="Responsable contrôle de gestion" />
+<appellation intitule="Responsable contrôle de gestion et budgets" />
+<appellation intitule="Responsable contrôle de gestion et comptabilité" />
+<appellation intitule="Responsable contrôle de gestion internationale" />
+<appellation intitule="Responsable du service contrôle de gestion" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1205" intitule="Direction administrative et financière">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe au directeur administratif et financier" />
+<appellation intitule="Chargé / Chargée du service administratif et financier" />
+<appellation intitule="Chef de service de gestion des ressources financières" />
+<appellation intitule="Chef des services administratifs et financiers" />
+<appellation intitule="Conseiller / Conseillère technique en finances" />
+<appellation intitule="Directeur / Directrice de l'administration comptable et de la gestion financière" />
+<appellation intitule="Directeur / Directrice des affaires financières" />
+<appellation intitule="Directeur / Directrice des services administratifs et financiers" />
+<appellation intitule="Directeur administratif / Directrice administrative" />
+<appellation intitule="Directeur administratif et financier / Directrice administrative et financière -DAF-" />
+<appellation intitule="Directeur administratif, financier / Directrice administrative, financière et du contrôle de gestion" />
+<appellation intitule="Directeur financier / Directrice financière" />
+<appellation intitule="Directeur financier / Directrice financière et comptable" />
+<appellation intitule="Responsable administratif / administrative" />
+<appellation intitule="Responsable administratif / administrative de gestion" />
+<appellation intitule="Responsable administratif et financier / administrative et financière" />
+<appellation intitule="Responsable administratif, comptable et financier / Responsable administrative, comptable et financière" />
+<appellation intitule="Responsable de la gestion et des services généraux" />
+<appellation intitule="Responsable des services généraux et administratifs" />
+<appellation intitule="Responsable des services gestion et administration" />
+<appellation intitule="Responsable financier / financière" />
+<appellation intitule="Secrétaire général / générale d'association" />
+<appellation intitule="Secrétaire général / générale d'entreprise" />
+<appellation intitule="Secrétaire général adjoint / générale adjointe d'association" />
+<appellation intitule="Secrétaire général adjoint / générale adjointe d'entreprise" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1206" intitule="Management de groupe ou de service comptable">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe au chef comptable" />
+<appellation intitule="Agent / Agente comptable responsable de service" />
+<appellation intitule="Chef comptable" />
+<appellation intitule="Chef de groupe comptable" />
+<appellation intitule="Chef de service comptabilité" />
+<appellation intitule="Directeur / Directrice comptable" />
+<appellation intitule="Directeur / Directrice des services comptables" />
+<appellation intitule="Responsable comptabilité" />
+<appellation intitule="Responsable comptabilité publique" />
+<appellation intitule="Responsable consolidation comptable" />
+<appellation intitule="Responsable reporting et consolidation comptable" />
+<appellation intitule="Sous-directeur / Sous-directrice comptable" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1207" intitule="Trésorerie et financement">
+<liste_appellations>
+<appellation intitule="Cash manager" />
+<appellation intitule="Chargé / Chargée de trésorerie et de financement" />
+<appellation intitule="Consultant financier spécialisé / Consultante financière spécialisée" />
+<appellation intitule="Credit controller" />
+<appellation intitule="Credit manager" />
+<appellation intitule="Directeur / Directrice de trésorerie" />
+<appellation intitule="Expert financier / Experte financière" />
+<appellation intitule="Négociateur / Négociatrice en devises" />
+<appellation intitule="Responsable de la trésorerie" />
+<appellation intitule="Responsable financement exportations" />
+<appellation intitule="Responsable financement investissements" />
+<appellation intitule="Responsable gestion trésorerie" />
+<appellation intitule="Responsable investissements" />
+<appellation intitule="Responsable relations bancaires" />
+<appellation intitule="Trésorier / Trésorière crédit manager" />
+<appellation intitule="Trésorier / Trésorière d'entreprise" />
+<appellation intitule="Trésorier / Trésorière devises" />
+<appellation intitule="Trésorier / Trésorière euros" />
+<appellation intitule="Trésorier / Trésorière euros-devises" />
+<appellation intitule="Trésorier / Trésorière marché monétaire" />
+<appellation intitule="Trésorier adjoint / Trésorière adjointe" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="M13" intitule="Direction d'entreprise">
+<fiche
+ code="M1301" intitule="Direction de grande entreprise ou d'établissement public">
+<liste_appellations>
+<appellation intitule="Directeur / Directrice de filiale" />
+<appellation intitule="Directeur / Directrice d'établissement de coopération intercommunale" />
+<appellation intitule="Directeur / Directrice d'Etablissement Public à caractère Administratif -EPA-" />
+<appellation intitule="Directeur / Directrice d'Etablissement Public à caractère Scientifique et Technologique -EPST-" />
+<appellation intitule="Directeur / Directrice d'Etablissement Public à caractère Scientifique, Culturel et Professionnel -EPSCP-" />
+<appellation intitule="Directeur / Directrice d'Etablissement Public de Coopération Culturelle -EPCC-" />
+<appellation intitule="Directeur / Directrice d'Etablissement Public et Commercial -EPIC-" />
+<appellation intitule="Directeur / Directrice d'un groupe de filiales" />
+<appellation intitule="Directeur général / Directrice générale de grande entreprise" />
+<appellation intitule="Directeur général / Directrice générale d'établissement public" />
+<appellation intitule="Directeur général / Directrice générale fonction publique et assimilé" />
+<appellation intitule="Directeur général adjoint / Directrice générale adjointe de grande entreprise" />
+<appellation intitule="Directeur général adjoint / Directrice générale adjointe d'établissement public" />
+<appellation intitule="Directeur Général délégué / Directrice générale déléguée de grande entreprise" />
+<appellation intitule="Dirigeant / Dirigeante de grande entreprise du secteur marchand ou d'établissement public" />
+<appellation intitule="Dirigeant / Dirigeante d'entreprise privée" />
+<appellation intitule="Dirigeant / Dirigeante d'entreprise publique" />
+<appellation intitule="Président Directeur Général / Présidente Directrice Générale -PDG-" />
+<appellation intitule="Secrétaire général / générale d'établissement public" />
+<appellation intitule="Secrétaire général / générale d'établissement public d'enseignement supérieur" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1302" intitule="Direction de petite ou moyenne entreprise">
+<liste_appellations>
+<appellation intitule="Chef d'agence commerciale" />
+<appellation intitule="Chef d'agence de location de véhicules" />
+<appellation intitule="Chef d'agence de voyages" />
+<appellation intitule="Directeur / Directrice d'agence locale de l'emploi" />
+<appellation intitule="Directeur / Directrice d'unité de services au public" />
+<appellation intitule="Directeur adjoint / Directrice adjointe de PME/PMI" />
+<appellation intitule="Directeur adjoint / Directrice adjointe d'unité de service au public" />
+<appellation intitule="Dirigeant / Dirigeante de Société Coopérative Ouvrière de Production -SCOP-" />
+<appellation intitule="Responsable d'agence commerciale" />
+<appellation intitule="Responsable d'agence de location de matériel de transport" />
+<appellation intitule="Responsable d'agence de placement" />
+<appellation intitule="Responsable d'agence de travail temporaire" />
+<appellation intitule="Responsable d'agence de voyages" />
+<appellation intitule="Responsable de maison de l'emploi" />
+<appellation intitule="Responsable de Petite ou Moyenne Entreprise ou d'unité de services au public" />
+<appellation intitule="Responsable de Petite ou Moyenne Entreprise -PME-" />
+<appellation intitule="Responsable d'entreprise de nettoyage" />
+<appellation intitule="Responsable d'entreprise d'insertion par l'économie" />
+<appellation intitule="Responsable d'unité de gestion de l'emploi" />
+<appellation intitule="Responsable d'unité de gestion d'organisme de protection sociale" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="M14" intitule="Organisation et études">
+<fiche
+ code="M1401" intitule="Conduite d'enquêtes">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'enquêtes" />
+<appellation intitule="Agent recenseur / Agente recenseuse" />
+<appellation intitule="Chargé / Chargée d'enquêtes" />
+<appellation intitule="Chef de groupe d'enquêteurs" />
+<appellation intitule="Chef d'équipe d'enquêteurs" />
+<appellation intitule="Enquêteur / Enquêtrice au téléphone" />
+<appellation intitule="Enquêteur / Enquêtrice des ménages" />
+<appellation intitule="Enquêteur / Enquêtrice d'opinion" />
+<appellation intitule="Enquêteur / Enquêtrice sondage" />
+<appellation intitule="Enquêteur / Enquêtrice terrain" />
+<appellation intitule="Enquêteur client / Enquêtrice cliente mystère" />
+<appellation intitule="Panéliste" />
+<appellation intitule="Superviseur / Superviseuse d'enquêteurs" />
+<appellation intitule="Testeur / Testeuse de produits de consommation" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1402" intitule="Conseil en organisation et management d'entreprise">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante en organisation" />
+<appellation intitule="Auditeur / Auditrice en organisation" />
+<appellation intitule="Auditeur social / Auditrice sociale" />
+<appellation intitule="Chef de projet en organisation" />
+<appellation intitule="Conseiller / Conseillère en conduite du changement" />
+<appellation intitule="Conseiller / Conseillère en organisation d'entreprise" />
+<appellation intitule="Consultant / Consultante en intelligence économique" />
+<appellation intitule="Consultant / Consultante en management" />
+<appellation intitule="Consultant / Consultante en management qualité" />
+<appellation intitule="Consultant / Consultante en organisation" />
+<appellation intitule="Consultant / Consultante en organisation et management" />
+<appellation intitule="Consultant / Consultante en stratégie/organisation" />
+<appellation intitule="Consultant / Consultante ergonome" />
+<appellation intitule="Consultant / Consultante pilotage de la performance" />
+<appellation intitule="Ingénieur / Ingénieure - conseil en management" />
+<appellation intitule="Ingénieur / Ingénieure - conseil en organisation" />
+<appellation intitule="Ingénieur / Ingénieure en organisation" />
+<appellation intitule="Responsable de la gestion et l'organisation administrative" />
+<appellation intitule="Responsable des projets organisation" />
+<appellation intitule="Responsable en intelligence économique" />
+<appellation intitule="Responsable en knowledge management" />
+<appellation intitule="Responsable en organisation" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1403" intitule="Études et prospectives socio-économiques">
+<liste_appellations>
+<appellation intitule="Analyste en intelligence économique" />
+<appellation intitule="Assistant chargé / Assistante chargée d'études socio-économiques" />
+<appellation intitule="Attaché / Attachée d'études statistiques" />
+<appellation intitule="Chargé / Chargée d'études commerciales" />
+<appellation intitule="Chargé / Chargée d'études de marché" />
+<appellation intitule="Chargé / Chargée d'études économiques" />
+<appellation intitule="Chargé / Chargée d'études économiques et sociales" />
+<appellation intitule="Chargé / Chargée d'études économiques et statistiques" />
+<appellation intitule="Chargé / Chargée d'études en marketing" />
+<appellation intitule="Chargé / Chargée d'études financières" />
+<appellation intitule="Chargé / Chargée d'études prospectives" />
+<appellation intitule="Chargé / Chargée d'études satisfaction" />
+<appellation intitule="Chargé / Chargée d'études socio-économiques" />
+<appellation intitule="Chargé / Chargée d'études statistiques" />
+<appellation intitule="Chef de groupe études socio-économiques" />
+<appellation intitule="Chef de projet études socio-économiques" />
+<appellation intitule="Chef de service études socio-économiques" />
+<appellation intitule="Directeur / Directrice d'études économiques" />
+<appellation intitule="Directeur / Directrice d'études socio-économiques" />
+<appellation intitule="Economiste d'entreprise" />
+<appellation intitule="Ingénieur / Ingénieure économiste en entreprise" />
+<appellation intitule="Ingénieur statisticien / Ingénieure statisticienne" />
+<appellation intitule="Responsable de veille stratégique" />
+<appellation intitule="Responsable d'études économiques" />
+<appellation intitule="Responsable d'études socio-économiques" />
+<appellation intitule="Statisticien / Statisticienne" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1404" intitule="Management et gestion d'enquêtes">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante d'enquêtes terrain" />
+<appellation intitule="Directeur / Directrice d'enquêtes terrain" />
+<appellation intitule="Responsable d'enquêtes terrain" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="M15" intitule="Ressources humaines">
+<fiche
+ code="M1501" intitule="Assistanat en ressources humaines">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante carrières et paie" />
+<appellation intitule="Assistant / Assistante de gestion administrative du personnel" />
+<appellation intitule="Assistant / Assistante de gestion du personnel" />
+<appellation intitule="Assistant / Assistante de gestion en ressources humaines" />
+<appellation intitule="Assistant / Assistante de service formation" />
+<appellation intitule="Assistant / Assistante du service personnel" />
+<appellation intitule="Assistant / Assistante emploi formation" />
+<appellation intitule="Assistant / Assistante ressources humaines" />
+<appellation intitule="Chargé / Chargée de la gestion administrative du personnel" />
+<appellation intitule="Gestionnaire administratif / administrative ressources humaines" />
+<appellation intitule="Gestionnaire de l'administration du personnel" />
+<appellation intitule="Gestionnaire paie et administration du personnel" />
+<appellation intitule="Secrétaire du service personnel" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1502" intitule="Développement des ressources humaines">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe au responsable du service formation en entreprise" />
+<appellation intitule="Chargé / Chargée de formation en entreprise" />
+<appellation intitule="Chargé / Chargée de l'emploi et des compétences" />
+<appellation intitule="Chargé / Chargée de recrutement" />
+<appellation intitule="Chargé / Chargée de recrutement et mobilité professionnelle" />
+<appellation intitule="Chargé / Chargée des compétences et de la mobilité professionnelle" />
+<appellation intitule="Chargé / Chargée des relations écoles" />
+<appellation intitule="Chargé / Chargée du développement des ressources humaines" />
+<appellation intitule="Chasseur / Chasseuse de tête en recrutement" />
+<appellation intitule="Chef de service formation" />
+<appellation intitule="Coach en développement des compétences" />
+<appellation intitule="Conseiller / Conseillère en développement des carrières" />
+<appellation intitule="Conseiller / Conseillère en formation en entreprise" />
+<appellation intitule="Conseiller / Conseillère en gestion des carrières" />
+<appellation intitule="Conseiller / Conseillère en recrutement" />
+<appellation intitule="Consultant / Consultante en gestion des carrières" />
+<appellation intitule="Consultant / Consultante en gestion des ressources humaines" />
+<appellation intitule="Consultant / Consultante en recrutement" />
+<appellation intitule="Directeur / Directrice de la formation en entreprise" />
+<appellation intitule="Directeur / Directrice de service formation en entreprise" />
+<appellation intitule="Gestionnaire des carrières" />
+<appellation intitule="Responsable de la gestion de l'emploi et des carrières" />
+<appellation intitule="Responsable de la gestion des cadres" />
+<appellation intitule="Responsable de la gestion des carrières et des affaires sociales" />
+<appellation intitule="Responsable de la gestion des effectifs, des emplois et des compétences" />
+<appellation intitule="Responsable de la gestion prévisionnelle des emplois et des compétences" />
+<appellation intitule="Responsable du développement des ressources humaines" />
+<appellation intitule="Responsable du recrutement et mobilité professionnelle" />
+<appellation intitule="Responsable emploi et communication interne" />
+<appellation intitule="Responsable emploi et formation" />
+<appellation intitule="Responsable formation communication en entreprise" />
+<appellation intitule="Responsable formation en entreprise" />
+<appellation intitule="Responsable formation professionnelle en entreprise" />
+<appellation intitule="Responsable formation recrutement de l'entreprise" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1503" intitule="Management des ressources humaines">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe au directeur des ressources humaines" />
+<appellation intitule="Adjoint / Adjointe au responsable du personnel" />
+<appellation intitule="Chargé / Chargée de gestion des expatriés" />
+<appellation intitule="Chef du personnel" />
+<appellation intitule="Chef du service du personnel" />
+<appellation intitule="Coordinateur / Coordinatrice ressources humaines" />
+<appellation intitule="Directeur / Directrice des relations sociales" />
+<appellation intitule="Directeur / Directrice des Ressources Humaines -DRH-" />
+<appellation intitule="Directeur / Directrice du personnel" />
+<appellation intitule="Responsable administratif / administrative du personnel" />
+<appellation intitule="Responsable administratif / administrative et de gestion du personnel" />
+<appellation intitule="Responsable de la gestion administrative du personnel" />
+<appellation intitule="Responsable de la gestion des Ressources Humaines" />
+<appellation intitule="Responsable de la gestion du personnel" />
+<appellation intitule="Responsable de l'administration du personnel" />
+<appellation intitule="Responsable des relations du travail" />
+<appellation intitule="Responsable des relations sociales" />
+<appellation intitule="Responsable des Ressources Humaines -RRH-" />
+<appellation intitule="Responsable du personnel" />
+<appellation intitule="Responsable paie" />
+<appellation intitule="Responsable paie et administration du personnel" />
+<appellation intitule="Responsable rémunérations" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="M16" intitule="Secrétariat et assistance">
+<fiche
+ code="M1601" intitule="Accueil et renseignements">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'accueil" />
+<appellation intitule="Agent / Agente d'information" />
+<appellation intitule="Chargé / Chargée d'accueil" />
+<appellation intitule="Employé / Employée d'accueil" />
+<appellation intitule="Hôte / Hôtesse" />
+<appellation intitule="Hôte / Hôtesse d'accueil" />
+<appellation intitule="Hôte / Hôtesse d'accueil bilingue" />
+<appellation intitule="Hôte / Hôtesse d'accueil standardiste" />
+<appellation intitule="Hôte / Hôtesse d'accueil standardiste bilingue" />
+<appellation intitule="Standardiste" />
+<appellation intitule="Standardiste bilingue" />
+<appellation intitule="Steward / Hôtesse au sol" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1602" intitule="Opérations administratives">
+<liste_appellations>
+<appellation intitule="Agent administratif / Agente administrative" />
+<appellation intitule="Auxiliaire de bureau" />
+<appellation intitule="Employé / Employée aux archives" />
+<appellation intitule="Employé / Employée de bureau" />
+<appellation intitule="Employé administratif / Employée administrative" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1603" intitule="Distribution de documents">
+<liste_appellations>
+<appellation intitule="Agent / Agente de liaison courrier" />
+<appellation intitule="Agent / Agente de liaison externe" />
+<appellation intitule="Agent / Agente de liaison interne" />
+<appellation intitule="Agent / Agente du service de courrier interne" />
+<appellation intitule="Agent distributeur / Agente distributrice" />
+<appellation intitule="Agent distributeur / Agente distributrice d'imprimés" />
+<appellation intitule="Approvisionneur / Approvisionneuse points de distribution" />
+<appellation intitule="Chef d'équipe distributeur d'imprimés" />
+<appellation intitule="Colporteur distributeur / Colporteuse distributrice de presse" />
+<appellation intitule="Distributeur / Distributrice d'annuaires" />
+<appellation intitule="Distributeur / Distributrice de journaux" />
+<appellation intitule="Distributeur / Distributrice de magazines" />
+<appellation intitule="Distributeur / Distributrice de messagerie" />
+<appellation intitule="Distributeur / Distributrice de plis non adressés" />
+<appellation intitule="Distributeur / Distributrice de prospectus" />
+<appellation intitule="Distributeur / Distributrice de prospectus et imprimés" />
+<appellation intitule="Distributeur / Distributrice de publicité et journaux" />
+<appellation intitule="Distributeur / Distributrice d'imprimés publicitaires" />
+<appellation intitule="Employé / Employée au courrier" />
+<appellation intitule="Facteur / Factrice" />
+<appellation intitule="Facteur / Factrice de secteur" />
+<appellation intitule="Porteur / Porteuse de journaux" />
+<appellation intitule="Receveur distributeur / Receveuse distributrice de La Poste" />
+<appellation intitule="Superviseur / Superviseuse de distributeurs d'imprimés" />
+<appellation intitule="Vaguemestre" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1604" intitule="Assistanat de direction">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante de direction" />
+<appellation intitule="Assistant / Assistante de direction bilingue" />
+<appellation intitule="Assistant / Assistante de direction trilingue" />
+<appellation intitule="Attaché / Attachée de direction" />
+<appellation intitule="Secrétaire de direction" />
+<appellation intitule="Secrétaire de direction bilingue" />
+<appellation intitule="Secrétaire de direction trilingue" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1605" intitule="Assistanat technique et administratif">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante chef de projet" />
+<appellation intitule="Assistant / Assistante de gestion administrative" />
+<appellation intitule="Assistant / Assistante de gestion d'entreprise" />
+<appellation intitule="Assistant / Assistante d'ingénieur" />
+<appellation intitule="Assistant / Assistante technique ingénierie" />
+<appellation intitule="Assistant administratif / Assistante administrative de projet" />
+<appellation intitule="Secrétaire d'affaires" />
+<appellation intitule="Secrétaire technique" />
+<appellation intitule="Secrétaire technique bureau d'études" />
+<appellation intitule="Secrétaire technique de la construction" />
+<appellation intitule="Technicien / Technicienne de gestion administrative" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1606" intitule="Saisie de données">
+<liste_appellations>
+<appellation intitule="Audiotypiste" />
+<appellation intitule="Dactylocodeur / Dactylocodeuse" />
+<appellation intitule="Dactylographe de séances" />
+<appellation intitule="Moniteur / Monitrice de saisie" />
+<appellation intitule="Opérateur / Opératrice de saisie" />
+<appellation intitule="Opérateur / Opératrice de traitement de texte" />
+<appellation intitule="Pupitreur moniteur dactylocodeur / Pupitreuse monitrice dactylocodeuse" />
+<appellation intitule="Responsable saisie" />
+<appellation intitule="Sténotypiste" />
+<appellation intitule="Sténotypiste de conférences" />
+<appellation intitule="Télétypiste" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1607" intitule="Secrétariat">
+<liste_appellations>
+<appellation intitule="Assistant administratif / Assistante administrative" />
+<appellation intitule="Secrétaire" />
+<appellation intitule="Secrétaire administratif / administrative" />
+<appellation intitule="Secrétaire administratif / administrative de collectivité territoriale" />
+<appellation intitule="Secrétaire bilingue" />
+<appellation intitule="Secrétaire bureautique" />
+<appellation intitule="Secrétaire d'administration ou d'intendance universitaire" />
+<appellation intitule="Secrétaire d'administration scolaire et universitaire -SASU-" />
+<appellation intitule="Secrétaire du bâtiment" />
+<appellation intitule="Secrétaire généraliste" />
+<appellation intitule="Secrétaire juridique" />
+<appellation intitule="Secrétaire polyvalent / polyvalente" />
+<appellation intitule="Secrétaire trilingue" />
+<appellation intitule="Télésecrétaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1608" intitule="Secrétariat comptable">
+<liste_appellations>
+<appellation intitule="Secrétaire comptable" />
+<appellation intitule="Secrétaire facturier / facturière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1609" intitule="Secrétariat et assistanat médical ou médico-social">
+<liste_appellations>
+<appellation intitule="Secrétaire médical / médicale" />
+<appellation intitule="Secrétaire médical / médicale vétérinaire" />
+<appellation intitule="Secrétaire médico-social / médico-sociale" />
+<appellation intitule="Technicien administratif et social / Technicienne administrative et sociale" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="M17" intitule="Stratégie commerciale, marketing et supervision des ventes">
+<fiche
+ code="M1701" intitule="Administration des ventes">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe au responsable de l'administration des ventes" />
+<appellation intitule="Cadre administratif / administrative ventes" />
+<appellation intitule="Responsable administratif / administrative des ventes" />
+<appellation intitule="Responsable de gestion administrative des ventes" />
+<appellation intitule="Responsable de la gestion des commandes" />
+<appellation intitule="Responsable de l'administration des ventes" />
+<appellation intitule="Responsable de l'exploitation des ventes" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1702" intitule="Analyse de tendance">
+<liste_appellations>
+<appellation intitule="Directeur / Directrice du planning stratégique" />
+<appellation intitule="Directeur / Directrice stratégique" />
+<appellation intitule="Junior planner" />
+<appellation intitule="Planneur / Planneuse junior" />
+<appellation intitule="Planneur / Planneuse senior" />
+<appellation intitule="Planneur / Planneuse stratégique" />
+<appellation intitule="Responsable de bureau de style et tendances" />
+<appellation intitule="Responsable de bureau de tendance" />
+<appellation intitule="Senior planner" />
+<appellation intitule="Tendanceur / Tendanceuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1703" intitule="Management et gestion  de produit">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante chef de marché" />
+<appellation intitule="Assistant / Assistante chef de produit" />
+<appellation intitule="Chef de groupe produits" />
+<appellation intitule="Chef de marché" />
+<appellation intitule="Chef de marque" />
+<appellation intitule="Chef de produit" />
+<appellation intitule="Chef de produit à l'international" />
+<appellation intitule="Chef de produit Internet" />
+<appellation intitule="Ingénieur / Ingénieure produit" />
+<appellation intitule="Responsable de gamme produits" />
+<appellation intitule="Responsable de produit" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1704" intitule="Management relation clientèle">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe service clients" />
+<appellation intitule="Chargé / Chargée de clientèle e-commerce" />
+<appellation intitule="Chef du service clients" />
+<appellation intitule="Customer Relationship Manager (CRM)" />
+<appellation intitule="Directeur / Directrice clientèle" />
+<appellation intitule="Responsable administratif / administrative du service clients" />
+<appellation intitule="Responsable de la gestion clientèle" />
+<appellation intitule="Responsable de la relation clientèle" />
+<appellation intitule="Responsable fidélisation clientèle" />
+<appellation intitule="Responsable pôle clients" />
+<appellation intitule="Responsable service clients" />
+<appellation intitule="Responsable service consommateurs" />
+<appellation intitule="Responsable service relation clientèle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1705" intitule="Marketing">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe au directeur marketing" />
+<appellation intitule="Adjoint / Adjointe au directeur mercatique" />
+<appellation intitule="Assistant / Assistante au directeur marketing" />
+<appellation intitule="Assistant / Assistante au directeur mercatique" />
+<appellation intitule="Assistant / Assistante marketing" />
+<appellation intitule="Chargé / Chargée d'affaires marketing" />
+<appellation intitule="Chargé / Chargée de mission marketing" />
+<appellation intitule="Chargé / Chargée de projet marketing" />
+<appellation intitule="Chef de groupe marketing" />
+<appellation intitule="Chef de groupe mercatique" />
+<appellation intitule="Consultant / Consultante marketing" />
+<appellation intitule="Directeur / Directrice de la mercatique" />
+<appellation intitule="Directeur / Directrice du marketing" />
+<appellation intitule="Directeur / Directrice marketing produits" />
+<appellation intitule="Responsable de département marketing" />
+<appellation intitule="Responsable du marketing" />
+<appellation intitule="Responsable marketing" />
+<appellation intitule="Responsable marketing Internet" />
+<appellation intitule="Responsable mercaticien / mercaticienne" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1706" intitule="Promotion des ventes">
+<liste_appellations>
+<appellation intitule="Chef de promotion des ventes" />
+<appellation intitule="Ingénieur / Ingénieure de promotion des ventes" />
+<appellation intitule="Promoteur / Promotrice des ventes" />
+<appellation intitule="Responsable de la promotion des ventes" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1707" intitule="Stratégie commerciale">
+<liste_appellations>
+<appellation intitule="Directeur commercial / Directrice commerciale" />
+<appellation intitule="Directeur commercial / Directrice commerciale export" />
+<appellation intitule="Directeur commercial international / Directrice commerciale internationale" />
+<appellation intitule="Responsable commercial / commerciale" />
+<appellation intitule="Responsable commercial international / commerciale internationale" />
+<appellation intitule="Responsable de la stratégie commerciale" />
+<appellation intitule="Responsable du développement commercial" />
+<appellation intitule="Responsable e-commerce" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="M18" intitule="Systèmes d'information et de télécommunication">
+<fiche
+ code="M1801" intitule="Administration de systèmes d'information">
+<liste_appellations>
+<appellation intitule="Administrateur / Administratrice de bases de données" />
+<appellation intitule="Administrateur / Administratrice de la messagerie" />
+<appellation intitule="Administrateur / Administratrice de serveurs" />
+<appellation intitule="Administrateur / Administratrice de site internet" />
+<appellation intitule="Administrateur / Administratrice réseau informatique" />
+<appellation intitule="Administrateur / Administratrice réseaux - télécoms" />
+<appellation intitule="Administrateur / Administratrice sécurité informatique" />
+<appellation intitule="Administrateur / Administratrice système informatique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1802" intitule="Conseil et maîtrise d'ouvrage en systèmes d'information">
+<liste_appellations>
+<appellation intitule="Architecte de bases de données" />
+<appellation intitule="Architecte multimédia" />
+<appellation intitule="Architecte réseaux informatiques" />
+<appellation intitule="Architecte système d'information" />
+<appellation intitule="Architecte système informatique" />
+<appellation intitule="Auditeur / Auditrice en système d'information" />
+<appellation intitule="Auditeur informaticien / Auditrice informaticienne" />
+<appellation intitule="Expert / Experte en communication et réseaux" />
+<appellation intitule="Expert / Experte en sécurité des systèmes d'exploitation" />
+<appellation intitule="Expert / Experte en technologie Internet et multimédia" />
+<appellation intitule="Expert / Experte méthodes et qualité informatique" />
+<appellation intitule="Expert / Experte qualité informatique" />
+<appellation intitule="Expert / Experte réseaux et télécoms" />
+<appellation intitule="Expert / Experte sécurité informatique" />
+<appellation intitule="Expert / Experte sécurité, méthode et qualité informatique" />
+<appellation intitule="Expert / Experte système d'exploitation" />
+<appellation intitule="Expert / Experte système et réseaux" />
+<appellation intitule="Ingénieur / Ingénieure méthodes informatiques" />
+<appellation intitule="Ingénieur / Ingénieure réseau informatique" />
+<appellation intitule="Ingénieur / Ingénieure sécurité informatique" />
+<appellation intitule="Ingénieur / Ingénieure système informatique" />
+<appellation intitule="Ingénieur / Ingénieure système réseau informatique" />
+<appellation intitule="Qualiticien / Qualiticienne logiciel en informatique" />
+<appellation intitule="Responsable sécurité des systèmes d'information" />
+<appellation intitule="Responsable sécurité informatique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1803" intitule="Direction des systèmes d'information">
+<liste_appellations>
+<appellation intitule="Chef de projet développement logiciel" />
+<appellation intitule="Chef de projet en linguistique informatique" />
+<appellation intitule="Chef de projet informatique" />
+<appellation intitule="Chef de projet internet" />
+<appellation intitule="Chef de projet multimédia" />
+<appellation intitule="Directeur / Directrice de département informatique" />
+<appellation intitule="Directeur / Directrice de département télécoms" />
+<appellation intitule="Directeur / Directrice de l'Organisation et des Systèmes d'Information -DOSI-" />
+<appellation intitule="Directeur / Directrice de projet en informatique" />
+<appellation intitule="Directeur / Directrice de projet télécoms" />
+<appellation intitule="Directeur / Directrice de service télécoms" />
+<appellation intitule="Directeur / Directrice des services informatiques -DSI-" />
+<appellation intitule="Directeur / Directrice des systèmes d'information" />
+<appellation intitule="Directeur / Directrice des systèmes d'information et télécoms" />
+<appellation intitule="Directeur / Directrice informatique" />
+<appellation intitule="Directeur / Directrice télécoms" />
+<appellation intitule="Responsable de département informatique" />
+<appellation intitule="Responsable de département télécoms" />
+<appellation intitule="Responsable de division informatique" />
+<appellation intitule="Responsable de division télécoms" />
+<appellation intitule="Responsable de domaine en informatique" />
+<appellation intitule="Responsable de domaine télécoms" />
+<appellation intitule="Responsable de la production informatique" />
+<appellation intitule="Responsable de projet architecture et intégration grands systèmes" />
+<appellation intitule="Responsable de projet architecture informatique" />
+<appellation intitule="Responsable de projet architecture télécoms" />
+<appellation intitule="Responsable de réseaux télécoms" />
+<appellation intitule="Responsable des systèmes d'information" />
+<appellation intitule="Responsable des systèmes informatiques" />
+<appellation intitule="Responsable d'exploitation informatique" />
+<appellation intitule="Responsable du management de la DSI" />
+<appellation intitule="Responsable du réseau informatique" />
+<appellation intitule="Responsable d'un service informatique" />
+<appellation intitule="Responsable d'un service télécoms" />
+<appellation intitule="Responsable informatique" />
+<appellation intitule="Responsable télécoms" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1804" intitule="Études et développement de réseaux de télécoms">
+<liste_appellations>
+<appellation intitule="Architecte réseaux de télécoms" />
+<appellation intitule="Chargé / Chargée de planification réseaux de télécoms" />
+<appellation intitule="Chargé / Chargée d'opération réseaux de télécoms" />
+<appellation intitule="Chef de projet télécoms" />
+<appellation intitule="Concepteur réalisateur / Conceptrice réalisatrice de réseau télécoms" />
+<appellation intitule="Consultant / Consultante télécoms" />
+<appellation intitule="Ingénieur / Ingénieure déploiement télécoms" />
+<appellation intitule="Ingénieur / Ingénieure en architecture télécoms" />
+<appellation intitule="Ingénieur / Ingénieure études et support télécoms" />
+<appellation intitule="Ingénieur / Ingénieure radio" />
+<appellation intitule="Ingénieur / Ingénieure réseaux télécoms" />
+<appellation intitule="Ingénieur / Ingénieure télécommunication" />
+<appellation intitule="Ingénieur / Ingénieure télécoms" />
+<appellation intitule="Ingénieur / Ingénieure validation réseaux de télécoms" />
+<appellation intitule="Marketeur / Marketeuse réseaux de télécoms" />
+<appellation intitule="Network planner" />
+<appellation intitule="Planificateur / Planificatrice réseaux de télécoms" />
+<appellation intitule="Programmeur / Programmeuse réseaux de télécoms" />
+<appellation intitule="Responsable de programmes réseaux de télécoms" />
+<appellation intitule="Technicien / Technicienne ingénierie réseaux de télécoms" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1805" intitule="Études et développement informatique">
+<liste_appellations>
+<appellation intitule="Analyste cogniticien / cogniticienne informatique" />
+<appellation intitule="Analyste concepteur / conceptrice informatique" />
+<appellation intitule="Analyste d'application" />
+<appellation intitule="Analyste de gestion informatique" />
+<appellation intitule="Analyste d'étude informatique" />
+<appellation intitule="Analyste développeur / développeuse" />
+<appellation intitule="Analyste fonctionnel / fonctionnelle informatique" />
+<appellation intitule="Analyste organique informatique" />
+<appellation intitule="Analyste réseau informatique" />
+<appellation intitule="Analyste responsable d'application informatique" />
+<appellation intitule="Analyste télématique" />
+<appellation intitule="Analyste-programmeur / Analyste-programmeuse d'étude informatique" />
+<appellation intitule="Analyste-programmeur / Analyste-programmeuse en informatique industrielle" />
+<appellation intitule="Analyste-programmeur / Analyste-programmeuse gestion informatique" />
+<appellation intitule="Analyste-programmeur / Analyste-programmeuse informatique" />
+<appellation intitule="Analyste-programmeur / Analyste-programmeuse scientifique informatique" />
+<appellation intitule="Assistant / Assistante chef de projet informatique" />
+<appellation intitule="Chef de projet étude et développement informatique" />
+<appellation intitule="Chef de projet maîtrise d'oeuvre informatique" />
+<appellation intitule="Concepteur / Conceptrice d'application informatique" />
+<appellation intitule="Concepteur / Conceptrice logiciel informatique" />
+<appellation intitule="Développeur / Développeuse d'application" />
+<appellation intitule="Développeur / Développeuse informatique" />
+<appellation intitule="Développeur / Développeuse multimédia" />
+<appellation intitule="Developpeur / Developpeuse web" />
+<appellation intitule="Didacticien / Didacticienne informatique" />
+<appellation intitule="Informaticien / Informaticienne analyste" />
+<appellation intitule="Informaticien / Informaticienne d'application" />
+<appellation intitule="Informaticien / Informaticienne de développement" />
+<appellation intitule="Informaticien chargé / Informaticienne chargée d'étude" />
+<appellation intitule="Ingénieur / Ingénieure analyste en système d'information" />
+<appellation intitule="Ingénieur / Ingénieure d'analyse et de programmation en informatique de gestion" />
+<appellation intitule="Ingénieur / Ingénieure d'application informatique" />
+<appellation intitule="Ingénieur / Ingénieure de conception informatique" />
+<appellation intitule="Ingénieur / Ingénieure de développement informatique" />
+<appellation intitule="Ingénieur / Ingénieure de réalisation informatique" />
+<appellation intitule="Ingénieur / Ingénieure d'étude en applications scientifiques informatiques" />
+<appellation intitule="Ingénieur / Ingénieure d'étude en informatique de gestion" />
+<appellation intitule="Ingénieur / Ingénieure d'étude et développement informatique" />
+<appellation intitule="Ingénieur / Ingénieure d'étude informatique" />
+<appellation intitule="Ingénieur / Ingénieure d'intégration applicative" />
+<appellation intitule="Ingénieur / Ingénieure informatique développement en temps réel" />
+<appellation intitule="Ingénieur / Ingénieure logiciel informatique" />
+<appellation intitule="Ingénieur analyste-programmeur / Ingénieure analyste-programmeuse" />
+<appellation intitule="Ingénieur informaticien / Ingénieure informaticienne" />
+<appellation intitule="Intégrateur / Intégratrice d'application informatique" />
+<appellation intitule="Paramétreur / Paramétreuse logiciel ERP" />
+<appellation intitule="Programmeur / Programmeuse de maintenance informatique" />
+<appellation intitule="Programmeur / Programmeuse d'études" />
+<appellation intitule="Programmeur / Programmeuse informatique" />
+<appellation intitule="Programmeur industriel / Programmeuse industrielle" />
+<appellation intitule="Responsable d'application informatique" />
+<appellation intitule="Responsable d'atelier de génie logiciel" />
+<appellation intitule="Responsable de gestion de configuration" />
+<appellation intitule="Responsable de projet informatique" />
+<appellation intitule="Responsable des développements informatiques" />
+<appellation intitule="Responsable d'étude informatique" />
+<appellation intitule="Technicien / Technicienne programmation" />
+<appellation intitule="Testeur / Testeuse informatique" />
+<appellation intitule="Webmaster développeur / développeuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1806" intitule="Expertise et support technique en systèmes d'information">
+<liste_appellations>
+<appellation intitule="Architecte fonctionnel / fonctionnelle de système d'information" />
+<appellation intitule="Assistant / Assistante maîtrise d'ouvrage des systèmes d'information" />
+<appellation intitule="Assistant fonctionnel / Assistante fonctionnelle des systèmes d'information" />
+<appellation intitule="Chef de projet maîtrise d'ouvrage des systèmes d'information" />
+<appellation intitule="Chef de projet Maîtrise d'Ouvrage -MOA-" />
+<appellation intitule="Consultant / Consultante en système d'information" />
+<appellation intitule="Consultant / Consultante -ERP-" />
+<appellation intitule="Consultant / Consultante informatique" />
+<appellation intitule="Consultant / Consultante réseaux informatiques" />
+<appellation intitule="Consultant fonctionnel / Consultante fonctionnelle de progiciel" />
+<appellation intitule="Consultant fonctionnel / Consultante fonctionnelle des systèmes d'information" />
+<appellation intitule="Coordinateur / Coordinatrice de la Maîtrise d'ouvrage des systèmes d'information" />
+<appellation intitule="Expert / Experte métier système d'information" />
+<appellation intitule="Gestionnaire d'applications système d'information" />
+<appellation intitule="Maître / Maîtresse d'ouvrage système d'information" />
+<appellation intitule="Responsable de projets « métiers » système d'information" />
+<appellation intitule="Responsable utilisateurs des systèmes d'information" />
+<appellation intitule="Urbaniste des systèmes d'information" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1807" intitule="Exploitation de systèmes de communication et de commandement">
+<liste_appellations>
+<appellation intitule="Adjoint / Adjointe chef de centre de télétraitement mobile aux armées" />
+<appellation intitule="Agent / Agente d'exploitation des systèmes d'information et de communication aux armées" />
+<appellation intitule="Analyste de signaux électromagnétiques" />
+<appellation intitule="Analyste des services techniques du renseignement" />
+<appellation intitule="Détecteur / Détectrice" />
+<appellation intitule="Détecteur / Détectrice anti-sous-marin" />
+<appellation intitule="Exploitant / Exploitante des supports hertziens radio satellitaire" />
+<appellation intitule="Exploitant / Exploitante des systèmes de guerre électronique" />
+<appellation intitule="Exploitant / Exploitante des télécommunications" />
+<appellation intitule="Exploitant / Exploitante faisceaux hertziens" />
+<appellation intitule="Exploitant / Exploitante système d'information et de communication aux armées" />
+<appellation intitule="Exploitant / Exploitante systèmes composante projetable" />
+<appellation intitule="Exploitant / Exploitante transmissions" />
+<appellation intitule="Guetteur / Guetteuse de la flotte" />
+<appellation intitule="Intercepteur / Interceptrice graphie aux armées" />
+<appellation intitule="Intercepteur / Interceptrice technique aux armées" />
+<appellation intitule="Intercepteur traducteur / Interceptrice traductrice de langues aux armées" />
+<appellation intitule="Linguistique d'écoute aux armées" />
+<appellation intitule="Opérateur / Opératrice écoute" />
+<appellation intitule="Opérateur / Opératrice radio" />
+<appellation intitule="Opérateur / Opératrice radiographiste" />
+<appellation intitule="Opérateur / Opératrice système qualifié aux armées" />
+<appellation intitule="Opérateur navigateur / Opératrice navigatrice terrestre aux armées" />
+<appellation intitule="Radiotélégraphiste" />
+<appellation intitule="Spécialiste SITEL systèmes d'information et de télécommunications" />
+<appellation intitule="Technicien / Technicienne communication aux armées" />
+<appellation intitule="Technicien / Technicienne détection et analyse des signaux électromagnétiques" />
+<appellation intitule="Technicien / Technicienne d'exploitation télécommunication" />
+<appellation intitule="Technicien / Technicienne en communication" />
+<appellation intitule="Technicien / Technicienne exploitation systèmes acoustiques" />
+<appellation intitule="Technicien / Technicienne réseau de transmission de données aux armées" />
+<appellation intitule="Technicien / Technicienne sécurité des communications aux armées" />
+<appellation intitule="Technicien exploitant / Technicienne exploitante de systèmes de guerre électronique" />
+<appellation intitule="Technicien supérieur / Technicienne supérieure détection électromagnétique sol-air aux armées" />
+<appellation intitule="Transfiliste aux armées" />
+<appellation intitule="Transmetteur / Transmettrice aux armées" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1808" intitule="Information géographique">
+<liste_appellations>
+<appellation intitule="Administrateur / Administratrice bases de données géographiques" />
+<appellation intitule="Administrateur / Administratrice Systèmes d'Information Géographique  -SIG-" />
+<appellation intitule="Analyste en géomatique" />
+<appellation intitule="Assembleur / Assembleuse photogrammètre cartographe" />
+<appellation intitule="Cartographe" />
+<appellation intitule="Cartographe géomaticien / géomaticienne" />
+<appellation intitule="Chargé / Chargée d'études Systèmes d'Information Géographique  -SIG-" />
+<appellation intitule="Chef de batterie géographie" />
+<appellation intitule="Chef de projet en géomatique" />
+<appellation intitule="Chef exploitation images drones" />
+<appellation intitule="Chef géographe" />
+<appellation intitule="Concepteur-analyste / Conceptrice-analyste en systèmes d'information géographique -SIG-" />
+<appellation intitule="Conseiller / Conseillère en géomatique" />
+<appellation intitule="Dessinateur / Dessinatrice cartographe" />
+<appellation intitule="Géographe-géomaticien / Géographe-géomaticienne" />
+<appellation intitule="Géomaticien / Géomaticienne" />
+<appellation intitule="Gestionnaire Systèmes d'Information Géographique -SIG-" />
+<appellation intitule="Hydrographe" />
+<appellation intitule="Ingénieur / Ingénieure hydrographe" />
+<appellation intitule="Ingénieur / Ingénieure Systèmes d'Information Géographique -SIG" />
+<appellation intitule="Interprétateur / Interprétatrice d'images géographiques" />
+<appellation intitule="Interprétateur / Interprétatrice d'images photographiques" />
+<appellation intitule="Officier / Officière cartographe" />
+<appellation intitule="Officier / Officière géographe" />
+<appellation intitule="Officier marinier / Officière marinière hydrographe" />
+<appellation intitule="Opérateur / Opératrice géographe" />
+<appellation intitule="Responsable Système d'Information Géographique -SIG-" />
+<appellation intitule="Spécialiste de l'information géographique" />
+<appellation intitule="Spécialiste en géodésie et satellites" />
+<appellation intitule="Technicien / Technicienne Systèmes d'Information Géographique -SIG-" />
+<appellation intitule="Technicien géomaticien / Technicienne géomaticienne" />
+<appellation intitule="Technicien restituteur / Technicienne restitutrice photogrammètre" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1809" intitule="Information météorologique">
+<liste_appellations>
+<appellation intitule="Chef d'équipe station de sondage météorologique" />
+<appellation intitule="Ingénieur / Ingénieure des travaux de la météorologie" />
+<appellation intitule="Météorologiste" />
+<appellation intitule="Météorologiste océanographe" />
+<appellation intitule="Météorologiste prévisionniste" />
+<appellation intitule="Météorologue" />
+<appellation intitule="Observateur / Observatrice météo" />
+<appellation intitule="Observateur / Observatrice nivo-météorologiste" />
+<appellation intitule="Observateur / Observatrice océanographe" />
+<appellation intitule="Océanographe" />
+<appellation intitule="Opérateur / Opératrice sondage météorologique" />
+<appellation intitule="Prévisionniste crue" />
+<appellation intitule="Prévisionniste météorologue des armées" />
+<appellation intitule="Responsable cellule météorologique" />
+<appellation intitule="Sous-officier / Sous-officière météorologue" />
+<appellation intitule="Spécialiste de l'information météorologique" />
+<appellation intitule="Spécialiste METOC Météorologie Océanographie" />
+<appellation intitule="Technicien / Technicienne de la météorologie" />
+<appellation intitule="Technicien / Technicienne d'exploitation de la météorologie" />
+<appellation intitule="Technicien / Technicienne météorologiste-océanographe" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="M1810" intitule="Production et exploitation de systèmes d'information">
+<liste_appellations>
+<appellation intitule="Agent / Agente de planning informatique" />
+<appellation intitule="Analyste d'exploitation" />
+<appellation intitule="Assistant / Assistante d'exploitation informatique" />
+<appellation intitule="Chef d'équipe de production informatique" />
+<appellation intitule="Chef d'exploitation informatique" />
+<appellation intitule="Contrôleur / Contrôleuse de réseau informatique" />
+<appellation intitule="Exploitant / Exploitante informatique" />
+<appellation intitule="Gestionnaire de production informatique" />
+<appellation intitule="Gestionnaire du parc informatique" />
+<appellation intitule="Ingénieur / Ingénieure de production informatique" />
+<appellation intitule="Ingénieur / Ingénieure d'exploitation informatique" />
+<appellation intitule="Intégrateur / Intégratrice d'exploitation informatique" />
+<appellation intitule="Opérateur / Opératrice informatique" />
+<appellation intitule="Opérateur pupitreur / Opératrice pupitreuse informatique" />
+<appellation intitule="Pilote de ressources informatiques" />
+<appellation intitule="Pilote multiserveur informatique" />
+<appellation intitule="Pupitreur / Pupitreuse d'exploitation informatique" />
+<appellation intitule="Pupitreur / Pupitreuse réseau informatique" />
+<appellation intitule="Technicien / Technicienne d'exploitation informatique" />
+<appellation intitule="Technicien / Technicienne informatique" />
+<appellation intitule="Technicien / Technicienne poste de travail en informatique" />
+<appellation intitule="Technicien / Technicienne réseau informatique" />
+<appellation intitule="Technicien / Technicienne système informatique" />
+</liste_appellations>
+</fiche>
+</domaine></grand-domaine><grand-domaine code="N" intitule="TRANSPORT ET LOGISTIQUE">
+<domaine-intermediaire code="N1" intitule="Logistique">
+<domaine code="N11" intitule="Magasinage, manutention des charges et déménagement">
+<fiche
+ code="N1101" intitule="Conduite d'engins de déplacement des charges">
+<liste_appellations>
+<appellation intitule="Agent / Agente cariste de livraison ferroviaire" />
+<appellation intitule="Cariste" />
+<appellation intitule="Cariste agent / agente de quai" />
+<appellation intitule="Cariste bobinier / bobinière" />
+<appellation intitule="Cariste chargeur/déchargeur / chargeuse/déchargeuse" />
+<appellation intitule="Cariste d'entrepôt" />
+<appellation intitule="Cariste en préparation logistique" />
+<appellation intitule="Cariste pointeur / pointeuse" />
+<appellation intitule="Cariste réceptionnaire" />
+<appellation intitule="Chef cariste" />
+<appellation intitule="Conducteur / Conductrice de chariot élévateur de l'armée" />
+<appellation intitule="Conducteur / Conductrice d'engins de déplacement des charges" />
+<appellation intitule="Conducteur / Conductrice d'engins de manutention motorisé à conducteur porté" />
+<appellation intitule="Tractoriste logistique" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N1102" intitule="Déménagement">
+<liste_appellations>
+<appellation intitule="Aide-déménageur / Aide-déménageuse" />
+<appellation intitule="Bardeur / Bardeuse en déménagement de transfert industriel" />
+<appellation intitule="Chef déménageur / déménageuse" />
+<appellation intitule="Chef d'équipe déménageur" />
+<appellation intitule="Déménageur / Déménageuse" />
+<appellation intitule="Déménageur conducteur / Déménageuse conductrice de poids lourd" />
+<appellation intitule="Déménageur emballeur / Déménageuse emballeuse" />
+<appellation intitule="Déménageur professionnel / Déménageuse professionnelle" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N1103" intitule="Magasinage et préparation de commandes">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'archivage en entrepôt" />
+<appellation intitule="Agent / Agente de magasinage" />
+<appellation intitule="Agent / Agente de service expédition marchandises" />
+<appellation intitule="Agent / Agente de stockage" />
+<appellation intitule="Agent / Agente d'entreposage et de messagerie" />
+<appellation intitule="Agent / Agente logistique en magasinage" />
+<appellation intitule="Aide-magasinier / Aide-magasinière" />
+<appellation intitule="Contrôleur flasheur / Contrôleuse flasheuse en logistique" />
+<appellation intitule="Emballeur / Emballeuse" />
+<appellation intitule="Employé / Employée de «picking»" />
+<appellation intitule="Employé / Employée logistique de réception de marchandises" />
+<appellation intitule="Employé / Employée logistique d'expédition" />
+<appellation intitule="Equipier / Equipière logistique" />
+<appellation intitule="Etiqueteur-pointeur / Etiqueteuse-pointeuse" />
+<appellation intitule="Inventoriste" />
+<appellation intitule="Magasinier / Magasinière" />
+<appellation intitule="Magasinier / Magasinière cariste" />
+<appellation intitule="Magasinier / Magasinière d'archives" />
+<appellation intitule="Magasinier / Magasinière en pièces aéronautiques" />
+<appellation intitule="Magasinier / Magasinière en pièces d'engins de chantier" />
+<appellation intitule="Magasinier / Magasinière en pièces détachées" />
+<appellation intitule="Magasinier / Magasinière en pièces et fournitures automobiles" />
+<appellation intitule="Magasinier / Magasinière en pièces poids lourd" />
+<appellation intitule="Magasinier / Magasinière en pièces pour matériel agricole" />
+<appellation intitule="Magasinier / Magasinière gestion de matériels -armée-" />
+<appellation intitule="Magasinier / Magasinière gestionnaire de stocks" />
+<appellation intitule="Magasinier / Magasinière Magasin de Pièces de Rechange -MPR-" />
+<appellation intitule="Magasinier vendeur / Magasinière vendeuse" />
+<appellation intitule="Opérateur / Opératrice logistique en entrepôt" />
+<appellation intitule="Préparateur / Préparatrice de commandes" />
+<appellation intitule="Préparateur / Préparatrice logistique en entrepôt" />
+<appellation intitule="Préparateur-magasinier / Préparatrice-magasinière" />
+<appellation intitule="Réceptionnaire magasinage" />
+<appellation intitule="Réceptionnaire-pointeur / Réceptionnaire-pointeuse" />
+<appellation intitule="Réceptionnaire-vérificateur / Réceptionnaire-vérificatrice de marchandises" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N1104" intitule="Manoeuvre et conduite d'engins lourds de manutention">
+<liste_appellations>
+<appellation intitule="Agent / Agente de manoeuvre et de conduite d'engins lourds de manutention" />
+<appellation intitule="Chef de cellule grue et portique de l'armée" />
+<appellation intitule="Conducteur / Conductrice d'auto-grue" />
+<appellation intitule="Conducteur / Conductrice de grue mobile" />
+<appellation intitule="Conducteur / Conductrice de grue sur porteur" />
+<appellation intitule="Conducteur / Conductrice de pont roulant" />
+<appellation intitule="Conducteur / Conductrice de portique" />
+<appellation intitule="Conducteur / Conductrice d'engins lourds de manutention" />
+<appellation intitule="Eclusier / Eclusière" />
+<appellation intitule="Eclusier-barragiste / Eclusière-barragiste" />
+<appellation intitule="Pontier / Pontière" />
+<appellation intitule="Pontier éclusier régulateur / Pontière éclusière régulatrice" />
+<appellation intitule="Pontier élingueur / Pontière élingueuse" />
+<appellation intitule="Pontonnier / Pontonnière" />
+<appellation intitule="Portiqueur / Portiqueuse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N1105" intitule="Manutention manuelle de charges">
+<liste_appellations>
+<appellation intitule="Agent / Agente de manutention de charges lourdes" />
+<appellation intitule="Agent / Agente de quai manutentionnaire" />
+<appellation intitule="Bagagiste manutentionnaire" />
+<appellation intitule="Chargeur déchargeur / Chargeuse déchargeuse manutentionnaire" />
+<appellation intitule="Manoeuvre manutentionnaire" />
+<appellation intitule="Manutentionnaire" />
+<appellation intitule="Manutentionnaire caleur / caleuse sur chantier de ferroutage" />
+<appellation intitule="Manutentionnaire en produits carnés" />
+<appellation intitule="Manutentionnaire en transport logistique" />
+<appellation intitule="Manutentionnaire expéditeur / expéditrice" />
+<appellation intitule="Porteur / Porteuse en transport logistique" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="N12" intitule="Organisation de la circulation des marchandises">
+<fiche
+ code="N1201" intitule="Affrètement transport">
+<liste_appellations>
+<appellation intitule="Affréteur / Affréteuse" />
+<appellation intitule="Affréteur / Affréteuse transport aérien" />
+<appellation intitule="Affréteur / Affréteuse transport fluvial" />
+<appellation intitule="Affréteur / Affréteuse transport international" />
+<appellation intitule="Affréteur / Affréteuse transport maritime" />
+<appellation intitule="Affréteur / Affréteuse transport routier" />
+<appellation intitule="Agent / Agente d'affrètement" />
+<appellation intitule="Chef de groupe affrètement" />
+<appellation intitule="Chef de service affrètement" />
+<appellation intitule="Courtier / Courtière affrètement maritime" />
+<appellation intitule="Employé / Employée du service affrètement" />
+<appellation intitule="Négociateur / Négociatrice affrètement" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N1202" intitule="Gestion des opérations de circulation internationale des marchandises">
+<liste_appellations>
+<appellation intitule="Agent / Agente consignataire de navire" />
+<appellation intitule="Agent / Agente de fret aérien" />
+<appellation intitule="Agent / Agente de transit" />
+<appellation intitule="Agent / Agente de transit aérien" />
+<appellation intitule="Agent / Agente de transit export" />
+<appellation intitule="Agent / Agente de transit import" />
+<appellation intitule="Agent / Agente de transit maritime" />
+<appellation intitule="Agent déclarant / Agente déclarante en douane" />
+<appellation intitule="Chef de groupe transit" />
+<appellation intitule="Chef de service transit" />
+<appellation intitule="Commissionnaire en douane" />
+<appellation intitule="Consignataire maritime" />
+<appellation intitule="Coordinateur / Coordinatrice transit -import/export-" />
+<appellation intitule="Employé / Employée de consignation maritime" />
+<appellation intitule="Employé / Employée de cotation maritime" />
+<appellation intitule="Employé / Employée de courtage maritime" />
+<appellation intitule="Employé / Employée de réservation fret maritime -booking-" />
+<appellation intitule="Employé / Employée de transit" />
+<appellation intitule="Employé / Employée de transit international" />
+<appellation intitule="Employé / Employée de transit maritime" />
+<appellation intitule="Employé / Employée d'exploitation de transit aérien" />
+<appellation intitule="Gestionnaire administratif / administrative douane" />
+<appellation intitule="Responsable de service transit international" />
+<appellation intitule="Taxateur / Taxatrice" />
+<appellation intitule="Technicien / Technicienne d'opérations multi modales de transport international de marchandises" />
+<appellation intitule="Technicien / Technicienne gestion douanière" />
+<appellation intitule="Technicien / Technicienne gestionnaire de transit" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="N13" intitule="Personnel d'encadrement">
+<fiche
+ code="N1301" intitule="Conception et organisation de la chaîne logistique">
+<liste_appellations>
+<appellation intitule="Analyste logistique" />
+<appellation intitule="Chargé / Chargée de gestion logistique" />
+<appellation intitule="Chargé / Chargée d'organisation logistique" />
+<appellation intitule="Chef de projet logistique" />
+<appellation intitule="Consultant / Consultante logistique" />
+<appellation intitule="Coordonnateur / Coordonnatrice de projet logistique humanitaire" />
+<appellation intitule="Directeur / Directrice des services logistiques" />
+<appellation intitule="Directeur / Directrice logistique" />
+<appellation intitule="Ingénieur / Ingénieure logistique" />
+<appellation intitule="Responsable de la logistique approvisionnement" />
+<appellation intitule="Responsable de la logistique distribution" />
+<appellation intitule="Responsable de la logistique transport" />
+<appellation intitule="Responsable de l'organisation de la chaîne logistique" />
+<appellation intitule="Responsable logistique" />
+<appellation intitule="Responsable méthodes logistique" />
+<appellation intitule="Supply chain manager" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N1302" intitule="Direction de site logistique">
+<liste_appellations>
+<appellation intitule="Coordinateur / Coordinatrice de site logistique" />
+<appellation intitule="Directeur / Directrice de site logistique" />
+<appellation intitule="Directeur / Directrice de site(s) d'entreposage" />
+<appellation intitule="Directeur / Directrice d'exploitation de site logistique" />
+<appellation intitule="Responsable de plate-forme logistique" />
+<appellation intitule="Responsable de site d'entreposage" />
+<appellation intitule="Responsable d'entrepôt" />
+<appellation intitule="Responsable d'exploitation de site d'entreposage" />
+<appellation intitule="Responsable d'exploitation de site logistique" />
+<appellation intitule="Responsable entrepôt logistique" />
+<appellation intitule="Responsable plate-forme expédition/livraison" />
+<appellation intitule="Responsable univers logistique distribution" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N1303" intitule="Intervention technique d'exploitation logistique">
+<liste_appellations>
+<appellation intitule="Agent / Agente technique du service des essences des armées" />
+<appellation intitule="Agréeur / Agréeuse commerce de gros" />
+<appellation intitule="Animateur / Animatrice logistique" />
+<appellation intitule="Approvisionneur / Approvisionneuse logistique" />
+<appellation intitule="Assistant / Assistante d'exploitation logistique" />
+<appellation intitule="Assistant / Assistante logistique" />
+<appellation intitule="Chef de patrouille appui mouvement de l'armée" />
+<appellation intitule="Chef de quai logistique" />
+<appellation intitule="Chef de quai réception/expédition" />
+<appellation intitule="Chef de régulation ravitaillement de l'armée" />
+<appellation intitule="Chef de service logistique" />
+<appellation intitule="Chef d'équipe en entrepôt" />
+<appellation intitule="Chef d'escouade d'ensemble porte blindés" />
+<appellation intitule="Chef d'escouade régulation ravitaillement" />
+<appellation intitule="Chef magasinier / magasinière" />
+<appellation intitule="Conseiller / Conseillère logistique entrepôt" />
+<appellation intitule="Coordonnateur / Coordonnatrice logistique de distribution d'imprimés" />
+<appellation intitule="Logisticien / Logisticienne" />
+<appellation intitule="Répartiteur / Répartitrice de dépôt logistique" />
+<appellation intitule="Responsable gestionnaire des stocks" />
+<appellation intitule="Sous-officier / Sous-officière soutien pétrolier" />
+<appellation intitule="Superviseur / Superviseuse de ligne logistique" />
+<appellation intitule="Superviseur / Superviseuse d'opérations logistiques" />
+<appellation intitule="Technicien / Technicienne de dépôt garde-meubles" />
+<appellation intitule="Technicien / Technicienne en méthodes et exploitation logistique" />
+<appellation intitule="Technicien / Technicienne logistique" />
+<appellation intitule="Technicien / Technicienne logistique approvisionnements" />
+<appellation intitule="Technicien / Technicienne logistique avitaillement" />
+<appellation intitule="Technicien / Technicienne logistique entrepôt" />
+<appellation intitule="Technicien / Technicienne logistique humanitaire" />
+<appellation intitule="Technicien / Technicienne logistique responsable stocks" />
+<appellation intitule="Technicien / Technicienne logistique service expédition" />
+<appellation intitule="Technicien / Technicienne logistique service réception" />
+<appellation intitule="Technicien / Technicienne logistique transport" />
+<appellation intitule="Technicien / Technicienne responsable magasinage" />
+</liste_appellations>
+</fiche>
+</domaine></domaine-intermediaire><domaine-intermediaire code="N2" intitule="Transport aérien et activités aéroportuaires">
+<domaine code="N21" intitule="Personnel navigant du transport aérien">
+<fiche
+ code="N2101" intitule="Navigation commerciale aérienne">
+<liste_appellations>
+<appellation intitule="Chef de cabine navigant aérien" />
+<appellation intitule="Chef du personnel navigant commercial" />
+<appellation intitule="Instructeur / Instructrice Personnel Navigant Commercial -PNC-" />
+<appellation intitule="Personnel Navigant Commercial -PNC-" />
+<appellation intitule="Steward / Hôtesse de l'air" />
+<appellation intitule="Steward / Hôtesse navigant aérien" />
+<appellation intitule="Technicien / Technicienne sécurité cabine de l'armée" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N2102" intitule="Pilotage et navigation technique aérienne">
+<liste_appellations>
+<appellation intitule="Chef Personnel Navigant Technique -PNT-" />
+<appellation intitule="Chef pilote aéronautique" />
+<appellation intitule="Commandant / Commandante de bord avion" />
+<appellation intitule="Commandant / Commandante de bord hélicoptère" />
+<appellation intitule="Copilote d'aéronef" />
+<appellation intitule="Electronicien / Electronicienne de bord navigant de l'armée" />
+<appellation intitule="Ingénieur navigant / Ingénieure navigante aéronautique de l'armée" />
+<appellation intitule="Ingénieur navigant, navigateur / Ingénieure navigante, navigatrice de l'armée" />
+<appellation intitule="Instructeur / Instructrice simulateur de vol" />
+<appellation intitule="Mécanicien navigant / Mécanicienne navigante aéronautique de l'armée" />
+<appellation intitule="Moniteur / Monitrice de simulateur de vol de l'armée" />
+<appellation intitule="Navigateur officier / Navigatrice officière systèmes d'armes de l'armée" />
+<appellation intitule="Officier / Officière pilote de ligne -OPL-" />
+<appellation intitule="Pilote d'avion" />
+<appellation intitule="Pilote de chasse / transport / hélicoptère de l'armée" />
+<appellation intitule="Pilote de ligne aérienne" />
+<appellation intitule="Pilote d'essais aéronautiques" />
+<appellation intitule="Pilote d'hélicoptère" />
+<appellation intitule="Pilote instructeur / instructrice aéronautique" />
+<appellation intitule="Pilote professionnel / professionnelle aéronautique" />
+<appellation intitule="Radariste navigateur aérien / navigatrice aérienne de l'armée" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="N22" intitule="Personnel sédentaire du transport aérien">
+<fiche
+ code="N2201" intitule="Personnel d'escale aéroportuaire">
+<liste_appellations>
+<appellation intitule="Agent / Agente de passage escale aéroportuaire" />
+<appellation intitule="Agent / Agente des Services Commerciaux en escale aéroportuaire -ASC-" />
+<appellation intitule="Agent / Agente d'escale aéroportuaire" />
+<appellation intitule="Agent / Agente d'Escale Commerciale aéroportuaire -AEC-" />
+<appellation intitule="Superviseur / Superviseuse d'escale aéroportuaire" />
+<appellation intitule="Superviseur / Superviseuse passage aéroportuaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N2202" intitule="Contrôle de la navigation aérienne">
+<liste_appellations>
+<appellation intitule="Aiguilleur / Aiguilleuse du ciel" />
+<appellation intitule="Chef de quart contrôleur aérien / contrôleuse aérienne" />
+<appellation intitule="Chef d'équipe contrôleur aérien / contrôleuse aérienne" />
+<appellation intitule="Contrôleur / Contrôleuse d'aérodrome" />
+<appellation intitule="Contrôleur / Contrôleuse d'aéronautique de l'armée" />
+<appellation intitule="Contrôleur / Contrôleuse d'approche aérienne" />
+<appellation intitule="Contrôleur / Contrôleuse de la défense aérienne" />
+<appellation intitule="Contrôleur / Contrôleuse de la navigation aérienne" />
+<appellation intitule="Contrôleur / Contrôleuse militaire des activités aériennes" />
+<appellation intitule="Contrôleur / Contrôleuse prévol" />
+<appellation intitule="Contrôleur aérien / Contrôleuse aérienne" />
+<appellation intitule="Contrôleur aérien / Contrôleuse aérienne de la circulation au sol" />
+<appellation intitule="Contrôleur aérien / Contrôleuse aérienne directeur d'aérodrome" />
+<appellation intitule="Instructeur contrôleur aérien / Instructrice contrôleuse aérienne" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N2203" intitule="Exploitation des pistes aéroportuaires">
+<liste_appellations>
+<appellation intitule="Agent / Agente de chargement fret aérien -handler-" />
+<appellation intitule="Agent / Agente de handling" />
+<appellation intitule="Agent / Agente de piste aéroportuaire" />
+<appellation intitule="Agent / Agente de piste d'aéronautique de l'armée" />
+<appellation intitule="Agent / Agente de service avion" />
+<appellation intitule="Assistant / Assistante avion" />
+<appellation intitule="Assistant / Assistante de piste aéroportuaire" />
+<appellation intitule="Bagagiste aéroportuaire" />
+<appellation intitule="Chargeur / Chargeuse d'avion" />
+<appellation intitule="Chef d'équipe agents de piste aéroportuaire" />
+<appellation intitule="Chef d'équipe assistant / assistante avion" />
+<appellation intitule="Pushiste avion" />
+<appellation intitule="Ramp handler" />
+<appellation intitule="Tractiste avion" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N2204" intitule="Préparation des vols">
+<liste_appellations>
+<appellation intitule="Agent / Agente de trafic aérien" />
+<appellation intitule="Agent / Agente d'opérations aériennes" />
+<appellation intitule="Agent / Agente d'opérations aériennes de l'armée" />
+<appellation intitule="Agent / Agente d'opérations fret aérien" />
+<appellation intitule="Agent / Agente technique de préparation des vols" />
+<appellation intitule="Chef avion" />
+<appellation intitule="Chef d'équipe drones" />
+<appellation intitule="Coordinateur / Coordinatrice des opérations de fret aérien" />
+<appellation intitule="Coordonnateur / Coordonnatrice armement catering" />
+<appellation intitule="Coordonnateur / Coordonnatrice avion" />
+<appellation intitule="Coordonnateur / Coordonnatrice de piste aéroport" />
+<appellation intitule="Coordonnateur / Coordonnatrice handling" />
+<appellation intitule="Responsable de préparation de vol" />
+<appellation intitule="Responsable d'exploitation de piste aéroport" />
+<appellation intitule="Responsable d'exploitation des vols" />
+<appellation intitule="Superviseur / Superviseuse des opérations aériennes" />
+<appellation intitule="Superviseur / Superviseuse des opérations de fret aérien" />
+<appellation intitule="Superviseur / Superviseuse trafic aérien" />
+<appellation intitule="Technicien coordinateur / Technicienne coordinatrice avion" />
+<appellation intitule="Technicien préparateur / Technicienne préparatrice de vol" />
+<appellation intitule="Technicien superviseur / Technicienne superviseuse de vol" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N2205" intitule="Direction d'escale et exploitation aéroportuaire">
+<liste_appellations>
+<appellation intitule="Chef de groupe livraison air de l'armée" />
+<appellation intitule="Chef de peloton livraison air armée" />
+<appellation intitule="Chef d'escale aérienne" />
+<appellation intitule="Chef d'escale aéroportuaire" />
+<appellation intitule="Chef d'escale fret aérien" />
+<appellation intitule="Directeur / Directrice d'aérodrome" />
+<appellation intitule="Directeur / Directrice des opérations d'exploitation aéroportuaire" />
+<appellation intitule="Directeur / Directrice d'exploitation aéroportuaire" />
+<appellation intitule="Officier / Officière commissaire de l'air de l'armée" />
+<appellation intitule="Responsable des opérations d'exploitation aéroportuaire" />
+<appellation intitule="Responsable d'exploitation aéroportuaire" />
+</liste_appellations>
+</fiche>
+</domaine></domaine-intermediaire><domaine-intermediaire code="N3" intitule="Transport maritime et fluvial et activités portuaires">
+<domaine code="N31" intitule="Personnel navigant du transport maritime et fluvial">
+<fiche
+ code="N3101" intitule="Encadrement de la navigation maritime">
+<liste_appellations>
+<appellation intitule="Capitaine de port" />
+<appellation intitule="Capitaine de remorqueur" />
+<appellation intitule="Capitaine de yacht" />
+<appellation intitule="Capitaine marine marchande" />
+<appellation intitule="Chef mécanicien / mécanicienne marine" />
+<appellation intitule="Commandant / Commandante de navire" />
+<appellation intitule="Commandant / Commandante de port" />
+<appellation intitule="Commandant / Commandante marine" />
+<appellation intitule="Commissaire de bord marine" />
+<appellation intitule="Lieutenant / Lieutenante chef de quart" />
+<appellation intitule="Lieutenant / Lieutenante de port" />
+<appellation intitule="Lieutenant / Lieutenante marine" />
+<appellation intitule="Officier / Officière de la marine marchande" />
+<appellation intitule="Officier / Officière de port" />
+<appellation intitule="Officier / Officière de vigie de port" />
+<appellation intitule="Officier / Officière machine de la marine marchande" />
+<appellation intitule="Officier / Officière pont de la marine marchande" />
+<appellation intitule="Officier polyvalent / Officière polyvalente de la marine" />
+<appellation intitule="Patron / Patronne Plaisance Moteur -PPM-" />
+<appellation intitule="Patron / Patronne Plaisance Voile -PPV-" />
+<appellation intitule="Pilote de port" />
+<appellation intitule="Pilote hauturier / hauturière" />
+<appellation intitule="Second / Seconde capitaine marine" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N3102" intitule="Equipage de la navigation maritime">
+<liste_appellations>
+<appellation intitule="Bosco de la navigation maritime" />
+<appellation intitule="Equipier / Equipière de plaisance professionnelle" />
+<appellation intitule="Lamaneur / Lamaneuse" />
+<appellation intitule="Maître / Maîtresse d'équipage" />
+<appellation intitule="Maître / Maîtresse machine de la marine" />
+<appellation intitule="Manoeuvrier / Manoeuvrière de la marine nationale" />
+<appellation intitule="Marin de la marine marchande" />
+<appellation intitule="Marin de la navigation maritime" />
+<appellation intitule="Marin de la plaisance professionnelle" />
+<appellation intitule="Matelot de la marine marchande" />
+<appellation intitule="Matelot de la navigation maritime" />
+<appellation intitule="Matelot polyvalent / polyvalente navigation maritime" />
+<appellation intitule="Mousse de la navigation maritime" />
+<appellation intitule="Navigateur timonier / Navigatrice timonière de la marine nationale" />
+<appellation intitule="Premier matelot de la navigation maritime" />
+<appellation intitule="Quartier-maître de la navigation maritime" />
+<appellation intitule="Second maître / Seconde maîtresse de la navigation maritime" />
+<appellation intitule="Timonier / Timonière de la navigation maritime" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N3103" intitule="Navigation fluviale">
+<liste_appellations>
+<appellation intitule="Batelier / Batelière" />
+<appellation intitule="Capitaine de la navigation fluviale en automoteur, remorqueur pousseur" />
+<appellation intitule="Commandant / Commandante de la navigation fluviale en remorqueur pousseur" />
+<appellation intitule="Conducteur / Conductrice de bateau fluvial de plaisance" />
+<appellation intitule="Conducteur / Conductrice de bateau taxi" />
+<appellation intitule="Conducteur / Conductrice de la navigation fluviale en automoteur, remorqueur pousseur" />
+<appellation intitule="Conducteur passeur / Conductrice passeuse de bac" />
+<appellation intitule="Convoyeur / Convoyeuse de bateau de transport fluvial" />
+<appellation intitule="Marin de la navigation fluviale" />
+<appellation intitule="Marinier / Marinière" />
+<appellation intitule="Matelot de bateau bus" />
+<appellation intitule="Matelot de la navigation fluviale" />
+<appellation intitule="Matelot de navigation intérieure" />
+<appellation intitule="Matelot deuxième niveau en navigation fluviale" />
+<appellation intitule="Matelot garde moteur" />
+<appellation intitule="Matelot mécanicien / mécanicienne de la navigation fluviale" />
+<appellation intitule="Matelot premier niveau en navigation fluviale" />
+<appellation intitule="Matelot timonier / timonière de la navigation fluviale" />
+<appellation intitule="Pilote fluvial / fluviale" />
+<appellation intitule="Responsable de navigation fluviale" />
+<appellation intitule="Second / Seconde capitaine de la navigation fluviale" />
+<appellation intitule="Timonier / Timonière de la navigation fluviale" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="N32" intitule="Personnel sédentaire du transport maritime et fluvial">
+<fiche
+ code="N3201" intitule="Exploitation des opérations portuaires et du transport maritime">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante d'exploitation de terminal portuaire" />
+<appellation intitule="Assistant / Assistante d'exploitation transport maritime" />
+<appellation intitule="Chef de ligne maritime" />
+<appellation intitule="Chef de peloton livraison portuaire de l'armée" />
+<appellation intitule="Coordinateur / Coordinatrice de parc conteneurs" />
+<appellation intitule="Coordinateur / Coordinatrice d'opérations navires" />
+<appellation intitule="Directeur / Directrice de ligne maritime" />
+<appellation intitule="Responsable d'escale transbordeur" />
+<appellation intitule="Responsable d'exploitation de terminal à conteneurs" />
+<appellation intitule="Responsable d'exploitation de terminal portuaire" />
+<appellation intitule="Responsable d'exploitation transport maritime" />
+<appellation intitule="Responsable opérations navires" />
+<appellation intitule="Ship manager" />
+<appellation intitule="Technicien / Technicienne shipplaner" />
+<appellation intitule="Technicien exploitant / Technicienne exploitante navires" />
+<appellation intitule="Technicien planificateur / Technicienne planificatrice manutention portuaire" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N3202" intitule="Exploitation du transport fluvial">
+<liste_appellations>
+<appellation intitule="Assistant / Assistante d'exploitation du transport fluvial" />
+<appellation intitule="Directeur / Directrice d'exploitation transport tourisme fluvial" />
+<appellation intitule="Responsable d'exploitation transport fluvial marchandises" />
+<appellation intitule="Responsable d'exploitation transport fluvial passagers" />
+<appellation intitule="Responsable sédentaire de navigation fluviale" />
+<appellation intitule="Technicien / Technicienne d'exploitation transport fluvial marchandises" />
+<appellation intitule="Technicien / Technicienne d'exploitation transport fluvial passagers" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N3203" intitule="Manutention portuaire">
+<liste_appellations>
+<appellation intitule="Acconier / Acconière de l'armée" />
+<appellation intitule="Arrimeur largueur / Arrimeuse largueuse de l'armée" />
+<appellation intitule="Chef de quai manutention portuaire" />
+<appellation intitule="Chef d'équipe de manutention portuaire" />
+<appellation intitule="Commis / Commise de quai portuaire" />
+<appellation intitule="Elingueur / Elingueuse" />
+<appellation intitule="Empoteur/dépoteur / Empoteuse/dépoteuse" />
+<appellation intitule="Ouvrier / Ouvrière de manutention portuaire" />
+<appellation intitule="Ouvrier / Ouvrière docker" />
+<appellation intitule="Ouvrier portuaire calier / Ouvrière portuaire calière" />
+<appellation intitule="Ouvrier portuaire débardeur / Ouvrière portuaire débardeuse" />
+<appellation intitule="Ouvrier portuaire grimpeur / Ouvrière portuaire grimpeuse" />
+<appellation intitule="Ouvrier portuaire saisisseur / Ouvrière portuaire saisisseuse" />
+<appellation intitule="Ouvrier portuaire signaleur / Ouvrière portuaire signaleuse" />
+<appellation intitule="Pointeur / Pointeuse portuaire" />
+</liste_appellations>
+</fiche>
+</domaine></domaine-intermediaire><domaine-intermediaire code="N4" intitule="Transport terrestre">
+<domaine code="N41" intitule="Personnel de la conduite du transport routier">
+<fiche
+ code="N4101" intitule="Conduite de transport de marchandises sur longue distance">
+<liste_appellations>
+<appellation intitule="Camionneur / Camionneuse" />
+<appellation intitule="Chauffeur / Chauffeuse de poids lourd" />
+<appellation intitule="Chauffeur / Chauffeuse porte voitures" />
+<appellation intitule="Chauffeur routier / Chauffeuse routière" />
+<appellation intitule="Conducteur / Conductrice de benne TP" />
+<appellation intitule="Conducteur / Conductrice de camion-benne" />
+<appellation intitule="Conducteur / Conductrice de poids lourd" />
+<appellation intitule="Conducteur / Conductrice de poids lourd multibennes" />
+<appellation intitule="Conducteur / Conductrice de semi-remorque PFM de l'armée" />
+<appellation intitule="Conducteur / Conductrice de véhicules Super Lourds" />
+<appellation intitule="Conducteur / Conductrice super poids lourd de l'armée" />
+<appellation intitule="Conducteur citernier essencier / Conductrice citernière essencière" />
+<appellation intitule="Conducteur routier / Conductrice routière" />
+<appellation intitule="Conducteur routier / Conductrice routière de transport de marchandises" />
+<appellation intitule="Conducteur routier international / Conductrice routière internationale" />
+<appellation intitule="Conducteur routier national / Conductrice routière nationale" />
+<appellation intitule="Conducteur routier régional / Conductrice routière régionale" />
+<appellation intitule="Routier / Routière" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N4102" intitule="Conduite de transport de particuliers">
+<liste_appellations>
+<appellation intitule="Chauffeur / Chauffeuse de direction" />
+<appellation intitule="Chauffeur / Chauffeuse de maître" />
+<appellation intitule="Chauffeur / Chauffeuse de taxi" />
+<appellation intitule="Chauffeur / Chauffeuse de taxi animalier" />
+<appellation intitule="Chauffeur accompagnateur / Chauffeuse accompagnatrice de personnes à mobilité réduite" />
+<appellation intitule="Chauffeur accompagnateur / Chauffeuse accompagnatrice tourisme" />
+<appellation intitule="Conducteur / Conductrice d'autorité de l'armée" />
+<appellation intitule="Conducteur / Conductrice de grande remise" />
+<appellation intitule="Conducteur / Conductrice de navette de moins de 9 personnes" />
+<appellation intitule="Conducteur / Conductrice de taxi" />
+<appellation intitule="Conducteur / Conductrice de taxi moto" />
+<appellation intitule="Conducteur / Conductrice de transport de particuliers" />
+<appellation intitule="Conducteur / Conductrice de voiture particulière" />
+<appellation intitule="Conducteur / Conductrice Véhicule Léger de l'armée" />
+<appellation intitule="Motard / Motarde de presse" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N4103" intitule="Conduite de transport en commun sur route">
+<liste_appellations>
+<appellation intitule="Agent commercial / Agente commerciale de conduite transport en commun" />
+<appellation intitule="Chauffeur / Chauffeuse de ligne transport de personnes" />
+<appellation intitule="Chauffeur / Chauffeuse de ramassage de personnes" />
+<appellation intitule="Cocher / Cochère" />
+<appellation intitule="Conducteur / Conductrice d'autobus" />
+<appellation intitule="Conducteur / Conductrice de bus" />
+<appellation intitule="Conducteur / Conductrice de bus sur piste aéroport" />
+<appellation intitule="Conducteur / Conductrice de bus urbain et interurbain" />
+<appellation intitule="Conducteur / Conductrice de car" />
+<appellation intitule="Conducteur / Conductrice de car grand tourisme" />
+<appellation intitule="Conducteur / Conductrice de car tourisme" />
+<appellation intitule="Conducteur / Conductrice de mini bus de plus de 9 personnes" />
+<appellation intitule="Conducteur / Conductrice de Petit Train touristique" />
+<appellation intitule="Conducteur / Conductrice de tramway" />
+<appellation intitule="Conducteur / Conductrice de transport de troupes" />
+<appellation intitule="Conducteur / Conductrice de trolleybus" />
+<appellation intitule="Conducteur / Conductrice de voyageurs réseau routier" />
+<appellation intitule="Conducteur / Conductrice machiniste" />
+<appellation intitule="Conducteur / Conductrice transport scolaire" />
+<appellation intitule="Conducteur-receveur / Conductrice-receveuse" />
+<appellation intitule="Machiniste-receveur / Machiniste-receveuse" />
+<appellation intitule="Traminot / Employée de tramway" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N4104" intitule="Courses et livraisons express">
+<liste_appellations>
+<appellation intitule="Commis coursier / Commise coursière en douane" />
+<appellation intitule="Coursier / Coursière" />
+<appellation intitule="Coursier / Coursière de course express" />
+<appellation intitule="Coursier / Coursière Véhicule Léger" />
+<appellation intitule="Coursier / Coursière véhicules 2 roues" />
+<appellation intitule="Coursier livreur / Coursière livreuse de pizzas" />
+<appellation intitule="Coursier livreur / Coursière livreuse de plats cuisinés" />
+<appellation intitule="Coursier livreur / Coursière livreuse en bien de consommation" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N4105" intitule="Conduite et livraison par tournées sur courte distance">
+<liste_appellations>
+<appellation intitule="Aide-livreur / Aide-livreuse" />
+<appellation intitule="Chauffeur-jockey / Chauffeuse-jockey" />
+<appellation intitule="Chauffeur-livreur / Chauffeuse-livreuse" />
+<appellation intitule="Chauffeur-livreur préparateur / Chauffeuse-livreuse préparatrice de commande" />
+<appellation intitule="Chauffeur-magasinier / Chauffeuse-magasinière" />
+<appellation intitule="Conducteur / Conductrice de benne à ordures" />
+<appellation intitule="Conducteur / Conductrice enlèvement de déchets" />
+<appellation intitule="Conducteur collecteur / Conductrice collectrice de lait" />
+<appellation intitule="Conducteur convoyeur / Conductrice convoyeuse de véhicule" />
+<appellation intitule="Conducteur livreur / Conductrice livreuse de béton prêt à l'emploi" />
+<appellation intitule="Conducteur livreur / Conductrice livreuse messagerie" />
+<appellation intitule="Conducteur livreur / Conductrice livreuse poids lourds" />
+<appellation intitule="Conducteur livreur avitailleur / Conductrice livreuse avitailleuse en carburant" />
+<appellation intitule="Conducteur livreur installateur / Conductrice livreuse installatrice" />
+<appellation intitule="Conducteur-livreur / Conductrice-livreuse" />
+<appellation intitule="Conducteur-livreur / Conductrice-livreuse de marchandises" />
+<appellation intitule="Livreur / Livreuse" />
+<appellation intitule="Livreur / Livreuse de marchandises à domicile" />
+<appellation intitule="Livreur / Livreuse de plats cuisinés" />
+<appellation intitule="Livreur / Livreuse en alimentation" />
+<appellation intitule="Livreur distributeur / Livreuse distributrice de repas" />
+<appellation intitule="Livreur-vendeur / Livreuse-vendeuse" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="N42" intitule="Personnel d'encadrement du transport routier">
+<fiche
+ code="N4201" intitule="Direction d'exploitation des transports routiers de marchandises">
+<liste_appellations>
+<appellation intitule="Chef d'agence transport routier de marchandises" />
+<appellation intitule="Chef de service déménagement" />
+<appellation intitule="Directeur / Directrice d'exploitation transport routier de marchandises" />
+<appellation intitule="Responsable d'agence messagerie" />
+<appellation intitule="Responsable d'agence transport routier de marchandises" />
+<appellation intitule="Responsable d'exploitation de transports multimodaux" />
+<appellation intitule="Responsable d'exploitation messagerie" />
+<appellation intitule="Responsable d'exploitation transport routier de marchandises" />
+<appellation intitule="Responsable gestionnaire d'unités de transport routier de marchandises" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N4202" intitule="Direction d'exploitation des transports routiers de personnes">
+<liste_appellations>
+<appellation intitule="Directeur / Directrice d'exploitation transport routier de personnes" />
+<appellation intitule="Directeur / Directrice d'unité opérationnelle transport routier de personnes" />
+<appellation intitule="Responsable d'agence de transport de personnes" />
+<appellation intitule="Responsable de centre de transport de personnes" />
+<appellation intitule="Responsable de station de transport de personnes" />
+<appellation intitule="Responsable de transport de personnes" />
+<appellation intitule="Responsable des opérations transport routier de personnes" />
+<appellation intitule="Responsable d'exploitation de transport routier de particuliers" />
+<appellation intitule="Responsable d'exploitation transport routier de personnes" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N4203" intitule="Intervention technique d'exploitation des transports routiers de marchandises">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'exploitation transport routier de marchandises" />
+<appellation intitule="Agent / Agente litiges transport de marchandises" />
+<appellation intitule="Assistant / Assistante service d'exploitation transport de marchandises" />
+<appellation intitule="Chef de camionnage" />
+<appellation intitule="Chef de trafic transport routier de marchandises" />
+<appellation intitule="Dispatcheur/Répartiteur / Dispatcheuse/Répartitrice transport routier de marchandises" />
+<appellation intitule="Employé / Employée du Service Après Vente -SAV- transport routier de marchandises" />
+<appellation intitule="Employé / Employée litiges transport routier de marchandises" />
+<appellation intitule="Exploitant / Exploitante jour transport routier de marchandises" />
+<appellation intitule="Exploitant / Exploitante nuit transport routier de marchandises" />
+<appellation intitule="Exploitant / Exploitante transport routier de marchandises" />
+<appellation intitule="Litigeur / Litigeuse transport" />
+<appellation intitule="Responsable de quai transport messagerie" />
+<appellation intitule="Technicien / Technicienne de planning transport routier de marchandises" />
+<appellation intitule="Technicien / Technicienne d'exploitation transport routier de marchandises" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N4204" intitule="Intervention technique d'exploitation des transports routiers de personnes">
+<liste_appellations>
+<appellation intitule="Agent / Agente de planning transport routier de personnes" />
+<appellation intitule="Agent / Agente d'exploitation transport routier de personnes" />
+<appellation intitule="Assistant / Assistante d'exploitation transport routier de personnes" />
+<appellation intitule="Chef de secteur transport routier de personnes" />
+<appellation intitule="Contrôleur / Contrôleuse réseau transport routier de personnes" />
+<appellation intitule="Coordinateur / Coordinatrice d'exploitation transport routier de personnes" />
+<appellation intitule="Dispatcheur / Dispatcheuse transport routier de particuliers" />
+<appellation intitule="Régulateur / Régulatrice poste central transport sanitaire de personnes" />
+<appellation intitule="Régulateur / Régulatrice réseau transport routier de personnes" />
+<appellation intitule="Répartiteur / Répartitrice de dépôt transport routier de personnes" />
+<appellation intitule="Technicien / Technicienne d'exploitation de lignes transport routier de personnes" />
+<appellation intitule="Technicien / Technicienne d'exploitation Poste Centralisé transport routier de personnes" />
+<appellation intitule="Technicien / Technicienne d'exploitation transport routier de personnes" />
+<appellation intitule="Technicien / Technicienne gestionnaire de parc véhicules transport routier de personnes" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="N43" intitule="Personnel navigant du transport terrestre">
+<fiche
+ code="N4301" intitule="Conduite sur rails">
+<liste_appellations>
+<appellation intitule="Agent / Agente de conduite du réseau ferré" />
+<appellation intitule="Conducteur / Conductrice de ligne du réseau ferré" />
+<appellation intitule="Conducteur / Conductrice de locotracteur-locomoteur" />
+<appellation intitule="Conducteur / Conductrice de métro/RER" />
+<appellation intitule="Conducteur / Conductrice de train" />
+<appellation intitule="Conducteur / Conductrice d'engins de manoeuvre du réseau ferré" />
+<appellation intitule="Conducteur / Conductrice d'engins de traction sur rails" />
+<appellation intitule="Conducteur / Conductrice du réseau ferré" />
+<appellation intitule="Conducteur / Conductrice du réseau ferré urbain" />
+<appellation intitule="Responsable d'équipe d'agents de conduite du réseau ferré" />
+<appellation intitule="Responsable traction réseau ferré" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N4302" intitule="Contrôle des transports en commun">
+<liste_appellations>
+<appellation intitule="Agent / Agente de contrôle des transports de voyageurs" />
+<appellation intitule="Agent / Agente de contrôle des transports en commun" />
+<appellation intitule="Agent / Agente de contrôle voyageurs métro" />
+<appellation intitule="Agent commercial / Agente commerciale et de contrôle train" />
+<appellation intitule="Chef de bord de train" />
+<appellation intitule="Contrôleur / Contrôleuse des trains de voyageurs" />
+<appellation intitule="Contrôleur / Contrôleuse des transports en commun" />
+<appellation intitule="Contrôleur / Contrôleuse des transports en commun réseau routier" />
+<appellation intitule="Opérateur / Opératrice de contrôle de titres de transport" />
+<appellation intitule="Opérateur / Opératrice de contrôle voyageurs train" />
+<appellation intitule="Responsable contrôle transport en commun" />
+<appellation intitule="Vérificateur / Vérificatrice de titres de transport" />
+</liste_appellations>
+</fiche>
+</domaine><domaine code="N44" intitule="Personnel sédentaire du transport ferroviaire et réseau filo-guidé">
+<fiche
+ code="N4401" intitule="Circulation du réseau ferré">
+<liste_appellations>
+<appellation intitule="Agent / Agente de circulation du réseau ferroviaire" />
+<appellation intitule="Agent / Agente de transport exploitation ferroviaire" />
+<appellation intitule="Aiguilleur / Aiguilleuse du réseau ferré" />
+<appellation intitule="Chef de gare" />
+<appellation intitule="Chef opérateur / opératrice de mouvement sécurité du réseau ferroviaire" />
+<appellation intitule="Chef régulateur / régulatrice du réseau ferroviaire" />
+<appellation intitule="Opérateur / Opératrice de circulation du réseau ferroviaire" />
+<appellation intitule="Opérateur / Opératrice de mouvement sécurité du réseau ferroviaire" />
+<appellation intitule="Régulateur / Régulatrice du réseau ferré" />
+<appellation intitule="Répartiteur / Répartitrice du réseau ferroviaire" />
+<appellation intitule="Responsable d'activité d'exploitation ferroviaire" />
+<appellation intitule="Responsable de circulation du réseau ferroviaire" />
+<appellation intitule="Responsable d'unité opérationnelle d'exploitation du réseau ferré" />
+<appellation intitule="Technicien / Technicienne de circulation du réseau ferré" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N4402" intitule="Exploitation et manoeuvre des remontées mécaniques">
+<liste_appellations>
+<appellation intitule="Agent / Agente d'exploitation des remontées mécaniques" />
+<appellation intitule="Assistant / Assistante de piste - remontées mécaniques" />
+<appellation intitule="Chef de secteur remontées mécaniques" />
+<appellation intitule="Conducteur / Conductrice de funiculaire" />
+<appellation intitule="Conducteur / Conductrice de remontées mécaniques" />
+<appellation intitule="Conducteur / Conductrice de télécabine" />
+<appellation intitule="Conducteur / Conductrice de téléphérique" />
+<appellation intitule="Conducteur / Conductrice de télésiège" />
+<appellation intitule="Conducteur / Conductrice de téléski" />
+<appellation intitule="Employé / Employée de remontées mécaniques" />
+<appellation intitule="Machiniste des remontées mécaniques" />
+<appellation intitule="Perchiste de remontées mécaniques" />
+<appellation intitule="Technicien / Technicienne d'exploitation et de maintenance de remontées mécaniques" />
+</liste_appellations>
+</fiche>
+<fiche
+ code="N4403" intitule="Manoeuvre du réseau ferré">
+<liste_appellations>
+<appellation intitule="Accrocheur / Accrocheuse de wagons du réseau ferré" />
+<appellation intitule="Accrocheur / Accrocheuse manutentionnaire du réseau ferré" />
+<appellation intitule="Agent / Agente de desserte du réseau ferré" />
+<appellation intitule="Agent / Agente de manoeuvre du réseau ferré" />
+<appellation intitule="Agent / Agente d'exploitation du réseau ferré" />
+<appellation intitule="Chef opérateur / opératrice des manoeuvres du réseau ferré" />
+<appellation intitule="Garde barrière" />
+<appellation intitule="Opérateur / Opératrice de branchement du réseau ferré" />
+<appellation intitule="Opérateur / Opératrice de manoeuvre du réseau ferré" />
+<appellation intitule="Opérateur / Opératrice de production du réseau ferré" />
+<appellation intitule="Opérateur / Opératrice fret du réseau ferré" />
+<appellation intitule="Opérateur / Opératrice triage du réseau ferré" />
+</liste_appellations>
+</fiche>
+</domaine></domaine-intermediaire></grand-domaine>
+</arborescence>
diff --git a/upgrade/1.0.1/connect.db.inc.php b/upgrade/1.0.1/connect.db.inc.php
new file mode 120000 (symlink)
index 0000000..442fab7
--- /dev/null
@@ -0,0 +1 @@
+../../bin/connect.db.inc.php
\ No newline at end of file
diff --git a/upgrade/1.0.1/phone.php b/upgrade/1.0.1/phone.php
new file mode 100755 (executable)
index 0000000..3946619
--- /dev/null
@@ -0,0 +1,72 @@
+#!/usr/bin/php5
+<?php
+require_once 'connect.db.inc.php';
+
+$globals->debug = 0; //do not store backtraces
+
+$phones = array(
+    'AF' => '93',
+    'AN' => '599',
+    'BY' => '375',
+    'FM' => '691',
+    'GE' => '995',
+    'GL' => '299',
+    'ID' => '62',
+    'IL' => '972',
+    'IN' => '91',
+    'IQ' => '964',
+    'IR' => '98',
+    'JO' => '962',
+    'JP' => '81',
+    'KG' => '996',
+    'KW' => '965',
+    'KZ' => '7',
+    'LA' => '856',
+    'LB' => '961',
+    'LK' => '94',
+    'MM' => '95',
+    'MN' => '976',
+    'MV' => '960',
+    'MY' => '60',
+    'NP' => '977',
+    'OM' => '968',
+    'PH' => '63',
+    'PK' => '92',
+    'QA' => '974',
+    'SA' => '966',
+    'SG' => '65',
+    'SY' => '963',
+    'TH' => '66',
+    'TJ' => '992',
+    'TM' => '993',
+    'TR' => '90',
+    'TW' => '886',
+    'UZ' => '998',
+    'VG' => '1284',
+    'VN' => '84',
+    'YE' => '967',
+);
+
+foreach ($phones as $country => $phone) {
+    XDB::execute('UPDATE  geoloc_countries
+                     SET  phonePrefix = {?}
+                   WHERE  iso_3166_1_a2 = {?}',
+                 $phone, $country);
+}
+
+$res = XDB::iterator('SELECT  pid, link_type, link_id, tel_id AS id, search_tel AS search, search_tel AS display
+                        FROM  profile_phones
+                       WHERE  search_tel LIKE \'33%\'');
+while ($item = $res->next()) {
+    $phone = new Phone($item);
+    $phone->format();
+    XDB::execute('UPDATE  profile_phones
+                     SET  display_tel = {?}
+                   WHERE  pid = {?} AND link_type = {?}
+                          AND link_id = {?} AND tel_id = {?}',
+                 $phone->display, $phone->pid(), $phone->linkType(),
+                 $phone->linkId(), $phone->id());
+}
+
+/* vim:set et sw=4 sts=4 ts=4: */
+?>
diff --git a/upgrade/1.0.1/positions_as_terms.php b/upgrade/1.0.1/positions_as_terms.php
new file mode 100755 (executable)
index 0000000..d69a485
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/php5
+<?php
+require_once 'connect.db.inc.php';
+
+$globals->debug = 0; //do not store backtraces
+
+$data = implode('', file('arbo-UTF8.xml'));
+$parser = xml_parser_create();
+xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
+xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
+xml_parse_into_struct($parser, $data, $values, $tags);
+xml_parser_free($parser);
+
+XDB::execute('INSERT INTO `profile_job_term_enum` (`name`, `full_name`) VALUES ("Emplois", "Emplois")');
+
+$opened_nodes = array();
+$broader_ids = array(XDB::insertId());
+
+XDB::execute('INSERT INTO profile_job_term_relation VALUES (0, {?}, "narrower", "original"), ({?}, {?}, "narrower", "computed")',
+             $broader_ids[0], $broader_ids[0], $broader_ids[0]);
+
+// loop through the structures
+foreach ($values as $val) {
+    if (($val['type'] == 'open' || $val['type'] == 'complete') && !empty($val['attributes']['intitule'])) {
+        $intitule = $val['attributes']['intitule'];
+        if (mb_strtoupper($intitule) == $intitule) {
+            $intitule = ucfirst(mb_strtolower($intitule));
+        }
+        $res = XDB::execute('INSERT INTO  profile_job_term_enum (name, full_name)
+                                  VALUES  ({?}, {?})',
+                            $intitule, $intitule.' (emploi'.(($val['type'] == 'open')?'s':'').')');
+        $newid = XDB::insertId();
+        array_unshift($broader_ids, $newid);
+        array_unshift($opened_nodes, $val['tag']);
+        foreach ($broader_ids as $i => $bid) {
+            XDB::execute('INSERT INTO profile_job_term_relation VALUES ({?}, {?}, "narrower", {?})',
+                         $bid, $newid, ($i == 1)?'original':'computed');
+        }
+    }
+    if (count($opened_nodes) > 0 && $val['tag'] == $opened_nodes[0] && ($val['type'] == 'close' || $val['type'] == 'complete')) {
+        array_shift($broader_ids);
+        array_shift($opened_nodes);
+    }
+}
+
+/* vim:set et sw=4 sts=4 ts=4: */
+?>
diff --git a/upgrade/1.0.1/sectors_as_terms.php b/upgrade/1.0.1/sectors_as_terms.php
new file mode 100755 (executable)
index 0000000..7e21a35
--- /dev/null
@@ -0,0 +1,70 @@
+#!/usr/bin/php5
+<?php
+require_once 'connect.db.inc.php';
+
+$globals->debug = 0; //do not store backtraces
+
+XDB::execute('INSERT INTO `profile_job_term_enum` (`name`, `full_name`) VALUES ("Secteurs d\'activité", "Secteurs d\'activité")');
+$root_sector_id = XDB::insertId();
+XDB::execute('INSERT INTO `profile_job_term_relation` VALUES (0, {?}, "narrower", "original"), ({?}, {?}, "narrower", "computed")',
+             $root_sector_id, $root_sector_id, $root_sector_id);
+
+// loops through sectors
+$sectors = XDB::iterator('SELECT `id`, `name` FROM `profile_job_sector_enum`');
+while ($oldsector = $sectors->next()) {
+    // adds sector as term
+    XDB::execute('INSERT INTO `profile_job_term_enum` (`name`, `full_name`) VALUES ( {?}, {?} )', $oldsector['name'], $oldsector['name'].' (secteur)');
+    $sector_id = XDB::insertId();
+    // links to root for sectors
+    XDB::execute('INSERT INTO `profile_job_term_relation` VALUES ({?}, {?}, "narrower", "original"), ({?}, {?}, "narrower", "computed")',
+                 $root_sector_id, $sector_id, $sector_id, $sector_id);
+    // adds sector term to linked jobs and linked mentorships
+    XDB::execute('INSERT INTO `profile_job_term`
+                  SELECT  `pid`, `id`, {?}, "original"
+                    FROM  `profile_job`
+                   WHERE  `sectorid` = {?} AND `subsectorid` = 0',
+                $sector_id, $oldsector['id']);
+    XDB::execute('INSERT INTO `profile_mentor_term`
+                  SELECT  `pid`, {?}
+                    FROM  `profile_mentor_sector`
+                   WHERE  `sectorid` = {?} AND `subsectorid` = 0',
+                $sector_id, $oldsector['id']);
+    // loops through subsectors
+    $subsectors = XDB::iterator('SELECT `id`, `name` FROM `profile_job_subsector_enum` WHERE sectorid = {?}', $oldsector['id']);
+    while ($oldsubsector = $subsectors->next()) {
+        if ($oldsubsector['name'] == $oldsector['name']) {
+            // adds sector term to jobs and mentorships linked to subsector with same name as sector
+            XDB::execute('INSERT INTO `profile_job_term`
+                          SELECT  `pid`, `id`, {?}, "original"
+                            FROM  `profile_job`
+                           WHERE  `sectorid` = {?} AND `subsectorid` = {?}',
+                $sector_id, $oldsector['id'], $oldsubsector['id']);
+            XDB::execute('INSERT INTO `profile_mentor_term`
+                          SELECT  `pid`, {?}
+                            FROM  `profile_mentor_sector`
+                           WHERE  `sectorid` = {?} AND `subsectorid` = {?}',
+                $sector_id, $oldsector['id'], $oldsubsector['id']);
+            continue;
+        }
+        // adds subsector as term
+        XDB::execute('INSERT INTO `profile_job_term_enum` (`name`, `full_name`) VALUES ( {?}, {?} )', $oldsubsector['name'], $oldsubsector['name'].' (secteur)');
+        $subsector_id = XDB::insertId();
+        // links to root for sectors and to sector
+        XDB::execute('INSERT INTO `profile_job_term_relation` VALUES ({?}, {?}, "narrower", "computed"), ({?}, {?}, "narrower", "original"), ({?}, {?}, "narrower", "computed")',
+                     $root_sector_id, $subsector_id, $sector_id, $subsector_id, $subsector_id, $subsector_id);
+        // adds subsector term to linked jobs and mentorships
+        XDB::execute('INSERT INTO `profile_job_term`
+                      SELECT  `pid`, `id`, {?}, "original"
+                        FROM  `profile_job`
+                       WHERE  `sectorid` = {?} AND `subsectorid` = {?}',
+            $subsector_id, $oldsector['id'], $oldsubsector['id']);
+        XDB::execute('INSERT INTO `profile_mentor_term`
+                      SELECT  `pid`, {?}
+                        FROM  `profile_mentor_sector`
+                       WHERE  `sectorid` = {?} AND `subsectorid` = {?}',
+            $subsector_id, $oldsector['id'], $oldsubsector['id']);
+    }
+}
+
+/* vim:set et sw=4 sts=4 ts=4: */
+?>
diff --git a/upgrade/1.0.1/tokenize_job_terms.php b/upgrade/1.0.1/tokenize_job_terms.php
new file mode 100755 (executable)
index 0000000..bbe2c5f
--- /dev/null
@@ -0,0 +1,22 @@
+#!/usr/bin/php5
+<?php
+require_once 'connect.db.inc.php';
+require_once 'class/jobterms.php';
+
+$globals->debug = 0; //do not store backtraces
+
+$terms = XDB::iterator('SELECT `jtid`, `name` FROM `profile_job_term_enum`');
+while ($term = $terms->next()) {
+    $tokens = array_unique(JobTerms::tokenize($term['name']));
+    if (!count($tokens)) {
+        continue;
+    }
+    $values = array();
+    foreach ($tokens as $t) {
+        $values[] = '('.XDB::escape($t).','.XDB::escape($term['jtid']).')';
+    }
+    XDB::execute('INSERT IGNORE INTO `profile_job_term_search` (`search`,`jtid`) VALUES '.implode(',',$values));
+}
+
+/* vim:set et sw=4 sts=4 ts=4: */
+?>