diff -r 32c9467660ff src-db/database/model/functions/M_GETJSONDESCRIPTION.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src-db/database/model/functions/M_GETJSONDESCRIPTION.xml	Tue Oct 24 14:24:23 2017 +0200
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+  <database name="FUNCTION M_GETJSONDESCRIPTION">
+    <function name="M_GETJSONDESCRIPTION" type="VARCHAR">
+      <parameter name="p_attributesetinstance_id" type="VARCHAR" mode="in">
+        <default/>
+      </parameter>
+      <parameter name="p_exclude_characters" type="VARCHAR" mode="in">
+        <default/>
+      </parameter>
+      <parameter name="p_language_id" type="VARCHAR" mode="in">
+        <default/>
+      </parameter>
+      <parameter name="p_dateformatsql" type="VARCHAR" mode="in">
+        <default><![CDATA[DD-MM-YYYY]]></default>
+      </parameter>
+      <body><![CDATA[/*
+ ************************************************************************************
+ * Copyright (C) 2016-2017 Openbravo S.L.U.
+ * Licensed under the Openbravo Commercial License version 1.0
+ * You may obtain a copy of the License at http://www.openbravo.com/legal/obcl.html
+ * or in the legal folder of this module distribution.
+ ************************************************************************************
+ */
+ 
+ /*
+ * Generates a JSON with the attributesetinstance description.
+ * Example: '{"lot":{"value":"L0","name":"lot"},"serialno":{"value":"#0","name":"serialno"},"CEE55391F603473DBD164BF00A6FCDBC":{"value":"77","name":"Instanciable1"},"AC8962C737FA47D6872654D4C1769427":{"value":"","name":"Not Mandatory"}}'
+ */
+
+  v_json VARCHAR2(2000):='{';
+  v_serno VARCHAR2(2000):='';
+  v_lot VARCHAR2(2000):='';
+  v_guaranteedate VARCHAR2(2000):='';
+  v_serno_sk VARCHAR(60):='SerialNoLabel';
+  v_guaranteedate_sk VARCHAR(60):='ExpirationDateLabel';
+  v_lot_sk VARCHAR(60):='LotLabel';
+  v_serno_label AD_Message.MsgText%TYPE;
+  v_guaranteedate_label AD_Message.MsgText%TYPE;
+  v_lot_label AD_Message.MsgText%TYPE;
+  v_language_code VARCHAR(6);
+  TYPE RECORD IS REF CURSOR;
+  Cur_Attribute RECORD;
+  
+BEGIN
+  SELECT ad_language into v_language_code from ad_language where ad_language_id = p_language_id;
+  select ad_message_get2(v_serno_sk, v_language_code) INTO v_serno_label from dual;
+  select ad_message_get2(v_guaranteedate_sk, v_language_code) INTO v_guaranteedate_label from dual;
+  select ad_message_get2(v_lot_sk, v_language_code) INTO v_lot_label from dual;
+  
+  FOR Cur_Attribute IN
+    (SELECT mai.m_attribute_id as attributeId, coalesce(to_char(mai.value), '') as attributeValue, ma.name as attributeName, mau.seqno as seqNo, ma.ismandatory as isMandatory
+     FROM m_attributeinstance mai
+     INNER JOIN m_attribute ma on (ma.m_attribute_id=mai.m_attribute_id)
+     INNER JOIN m_attributesetinstance masi on (masi.m_attributesetinstance_id=mai.m_attributesetinstance_id)
+     INNER JOIN m_attributeuse mau on (ma.m_attribute_id = mau.m_attribute_id and masi.m_attributeset_id = mau.m_attributeset_id)
+     WHERE mai.m_attributesetinstance_id = p_attributesetinstance_id
+     ORDER BY seqno asc, ma.name)
+  LOOP
+    v_json:=v_json || '"' || Cur_Attribute.attributeId || '":{"value":"' || Cur_Attribute.attributeValue || '","name":"' || Cur_Attribute.attributeName || '","ismandatory":' || (CASE WHEN (Cur_Attribute.isMandatory = 'Y') THEN 'true' ELSE 'false' END)  || ',"seqno":' || Cur_Attribute.seqNo || '},';
+  END LOOP;
+  
+  SELECT coalesce(to_char(case when mas.M_SERNOCTL_ID is null AND p_exclude_characters = 'N' then concat('#', masi.serno) else masi.serno end), ''),
+         coalesce(to_char(case when mas.M_LOTCTL_ID is null AND p_exclude_characters = 'N' then concat('L', masi.lot) else masi.lot end),  ''), 
+         coalesce(to_char(TO_DATE(masi.guaranteedate), p_dateformatsql), '')
+  INTO v_serno, 
+       v_lot, 
+       v_guaranteedate
+  FROM m_attributesetinstance masi
+  INNER JOIN m_attributeset mas on (mas.m_attributeset_id = masi.m_attributeset_id)
+  where masi.m_attributesetinstance_id = p_attributesetinstance_id;
+
+  v_json:=v_json || '"lot":{"value":"' || v_lot || '","name":"lot","label":"' || v_lot_label || '"},';
+  v_json:=v_json || '"serialno":{"value":"' || v_serno || '","name":"serialno","label":"' || v_serno_label || '"},';
+  v_json:=v_json || '"guaranteedate":{"value":"' || v_guaranteedate || '","name":"guaranteedate","label":"' || v_guaranteedate_label || '"}';
+
+  v_json:=v_json || '}';
+  
+  RETURN v_json;
+END M_GETJSONDESCRIPTION
+]]></body>
+    </function>
+  </database>
