Index: main/plugin-odf/src/org/ametys/odf/cdmfr/AmetysCDMfrExtension.java
===================================================================
--- main/plugin-odf/src/org/ametys/odf/cdmfr/AmetysCDMfrExtension.java	(revision 31196)
+++ main/plugin-odf/src/org/ametys/odf/cdmfr/AmetysCDMfrExtension.java	(working copy)
@@ -43,6 +43,8 @@
 import org.ametys.plugins.repository.metadata.ModifiableBinaryMetadata;
 import org.ametys.plugins.repository.metadata.ModifiableCompositeMetadata;
 import org.ametys.runtime.config.Config;
+import org.ametys.runtime.util.I18nUtils;
+import org.ametys.runtime.util.I18nizableText;
 import org.ametys.runtime.util.URLEncoder;
 
 /**
@@ -53,6 +55,7 @@
     private OdfEnumerationHelper _enumerationHelper;
     private CatalogsManager _catalogsManager;
     private SourceResolver _sourceResolver;
+    private I18nUtils _i18nUtils;
     
     @Override
     public void service(ServiceManager manager) throws ServiceException
@@ -60,6 +63,7 @@
         _enumerationHelper = (OdfEnumerationHelper) manager.lookup(OdfEnumerationHelper.ROLE);
         _catalogsManager = (CatalogsManager) manager.lookup(CatalogsManager.ROLE);
         _sourceResolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
+        _i18nUtils = (I18nUtils) manager.lookup(I18nUtils.ROLE);
     }
     
     @Override
@@ -164,7 +168,8 @@
         }
         
         
-        // Fichier attachées
+        // Fichier attachés
+        // <ametys-cdm:attachments/>
         if (program.getMetadataHolder().hasMetadata(AbstractProgram.ATTACHMENTS))
         {
             XMLUtils.startElement(contentHandler, CDMFRTagsConstants.NAMESPACE_AMETYS_CDM + AbstractProgram.ATTACHMENTS);
@@ -196,6 +201,25 @@
             
             XMLUtils.endElement(contentHandler, CDMFRTagsConstants.NAMESPACE_AMETYS_CDM + AbstractProgram.ATTACHMENTS);
         }
+        
+        // Niveau RNCP
+        // <ametys-cdm:rncpLevel/>
+        if (program.getMetadataHolder().hasMetadata(AbstractProgram.RNCP_LEVEL))
+        {
+            String rncpValue = program.getString(AbstractProgram.RNCP_LEVEL);
+            if (StringUtils.isNotEmpty(rncpValue))
+            {
+                attrs = new AttributesImpl();
+                attrs.addCDATAAttribute("value", rncpValue);
+                I18nizableText rncpLabel = _enumerationHelper.getItemLabel(OdfEnumerationConstant.RNCP_LEVEL, rncpValue);
+                
+                XMLUtils.createElement(contentHandler, CDMFRTagsConstants.NAMESPACE_AMETYS_CDM + AbstractProgram.RNCP_LEVEL, attrs, _i18nUtils.translate(rncpLabel));
+            }
+            else
+            {
+                XMLUtils.createElement(contentHandler, CDMFRTagsConstants.NAMESPACE_AMETYS_CDM + AbstractProgram.RNCP_LEVEL);
+            }
+        }
     }
     
     private void _sortRepeaterEntries(String[] entryNames)
Index: main/plugin-odf/src/org/ametys/odf/cdmfr/ExportCDMfrManager.java
===================================================================
--- main/plugin-odf/src/org/ametys/odf/cdmfr/ExportCDMfrManager.java	(revision 31196)
+++ main/plugin-odf/src/org/ametys/odf/cdmfr/ExportCDMfrManager.java	(working copy)
@@ -774,6 +774,24 @@
             XMLUtils.createElement(contentHandler, CDMFRTagsConstants.NAMESPACE_CDMFR + CDMFRTagsConstants.TAG_PROGRAM_CODE, attrs, code);
         }
         
+        // <programCode codeSet="codeCNIS-NSF">code</programCode>
+        // <programCode libSet="codeCNIS-NSF">label</programCode>
+        String nsfCode = program.getString("nsfCode");
+        if (StringUtils.isNotBlank(nsfCode))
+        {
+            attrs = new AttributesImpl();
+            attrs.addCDATAAttribute(CDMFRTagsConstants.ATTRIBUTE_CODE_SET, "codeCNIS-NSF");
+            XMLUtils.createElement(contentHandler, CDMFRTagsConstants.NAMESPACE_CDMFR + CDMFRTagsConstants.TAG_PROGRAM_CODE, attrs, nsfCode);
+            
+            String codeLib = _enumerationHelper.getItemCDMfrValue(OdfEnumerationConstant.CODE_NSF, nsfCode, false);
+            if (StringUtils.isNotEmpty(codeLib))
+            {
+                attrs = new AttributesImpl();
+                attrs.addCDATAAttribute(CDMFRTagsConstants.ATTRIBUTE_LIB_SET, "codeCNIS-NSF");
+                XMLUtils.createElement(contentHandler, CDMFRTagsConstants.NAMESPACE_CDMFR + CDMFRTagsConstants.TAG_PROGRAM_CODE, attrs, codeLib);
+            }
+        }
+        
         // <programCode codeSet="sectDGESIP">code</programCode>
         // <programCode libSet="sectDGESIP">label</programCode>
         for (String dgesipCode : program.getDGESIPCode())
Index: main/plugin-odf/src/org/ametys/odf/program/AbstractProgram.java
===================================================================
--- main/plugin-odf/src/org/ametys/odf/program/AbstractProgram.java	(revision 31196)
+++ main/plugin-odf/src/org/ametys/odf/program/AbstractProgram.java	(working copy)
@@ -182,6 +182,9 @@
 
     /** Constants for metadata 'rncpCode' */
     public static final String RNCP_CODE = "rncpCode";
+    
+    /** Constants for metadata 'rncpLevel' */
+    public static final String RNCP_LEVEL = "rncpLevel";
 
     /** Constants for metadata 'siseCode' */
     public static final String SISE_CODE = "siseCode";
