.. _number-inventory-flexibility:

Number inventory flexibility and description customization
----------------------------------------------------------

.. _21.3-PB3|EKB-12968:

Overview
...........

When number inventory changes are made while using Automate features,
users are provided with a mechanism to define the logic for the dynamic
population of a set of number inventory fields.

To make use of the mechanism, the following elements should be noted:

* Only a subset of number inventory fields can be managed.
* The mechanism provided includes:

  * A Configuration Template (CFT) called ``IniUpdateCustomCFT``
  * A set of macros to manage the ``description`` field. These
    are comprised of a "caller" macro entered into the CFT,
    which in turn references a set of macros that apply
    in accordance with the specified feature associated with
    the macro.
  * If the "caller" macro is added to the CFT, a set of default values
    are added to the ``description`` field when the associated feature
    is used. 
  * Users therefore have a choice to either modify the "caller" macro
    representing the feature use logic,  or the individual macros
    called by it.

Managed and non-managed number inventory fields
...............................................


Number Inventory data fields are of 2 types:

* Automate managed number inventory fields.

  The values of these fields are derived from workflows and cannot be customized.

  Managed number inventory fields are:

  ::

     status
     usage
     e164number
     vendor
     internal_number_type
     reservation_notes

* Automate non-managed number inventory fields.

  The values of these fields are updated when a number is marked used, available, etc.

  By default, when a number is marked as available, the non-managed ``extra-`` fields
  retain their value and are not cleared. Customers have options available to manage these with
  a provided Configuration Template (CFT) called: ``IniUpdateCustomCFT``.
   

  .. raw:: html

     For details, see <a href="concepts-range-management.html#persisting-and-modifying-values-in-extra-fields">Persisting and Modifying Values in Extra Fields</a>.

  .. raw:: latex

     For details, see the topic *Persisting and Modifying Values in Extra Fields* in the Core Feature Guide.
 

  Non-managed number inventory fields are all those fields that are not included in the Managed number inventory fields.


Number inventory description field customization
.................................................

The ``description`` field in the number inventory is cleared when a number is marked as available.
However, a "caller" macro is available that can be referenced in the provided Configuration
Template: ``IniUpdateCustomCFT``.

To use the CFT and macros, clone ``IniUpdateCustomCFT`` from ``sys`` to the required hierarchy
and set ``description`` field to:

::


   {{ macro.INI_Description_From_Caller_Workflow }}


Using this "caller" macro allows customers to determine how to
populate the ``description`` field for different scenarios
(identified by ``pwf.ini_caller`` values in the macro) - 
number assignment, unassignment, the usage context (e.g users, phone, Auto Attendant,
Call queue, etc).  The "caller" macro references a set of individual macros that apply
for various usage scenarios. These macros can in turn be customized to allow for
a required update of the number inventory.

The default ``description`` values of these macros, as well as the scenario and
macro name are listed below:


Named macro: ``INI_Description_From_Caller_Workflow`` defines a macro per context (``pwf.ini_caller``):

==========================  ====================================  =================================
``pwf.ini_caller``          Feature                               Macro Name                       
==========================  ====================================  =================================
INILineAdd                  Used by Quick User and AddPhone       INI_Description_INILineAdd       
UserMoveApps                Used by Quick User                    INI_Description_UserMoveApps     
Cisco_CallHandler           Used by CallHandler                   INI_Description_Cisco_CallHandler
Cisco_CPUG                  Used by CallPickupGroups              INI_Description_Cisco_CPUG       
Cisco_HG                    Used by HuntGroups                    INI_Description_Cisco_HG         
Cisco_SubMove               Used by User Move                     INI_Description_Cisco_SubMove    
Cisco_ChangeLine            Used by User Change Line              INI_Description_Cisco_ChangeLine 
Cisco_Reassign              Used by Re-assign services            INI_Description_Cisco_Reassign   
Cisco_CallPark                                                    INI_Description_Cisco_CallPark   
Cisco_CTIRP                                                       INI_Description_Cisco_CTIRP      
Cisco_MeetMe                                                      INI_Description_Cisco_MeetMe     
Microsoft_QAS                                                     INI_Description_Microsoft_QAS    
Microsoft_QAS_Hybrid_Only                                         INI_Description_Microsoft_QAS
Hybrid_AddSnr                                                     INI_Description_Hybrid_AddSnr 
Hybrid_AddMVS                                                     INI_Description_Hybrid_AddMVS
==========================  ====================================  =================================


.. tabularcolumns:: |p{6cm}|p{11cm}|

=================================  ============================================================================================================
Macro Name                         Default Macro Description Value
=================================  ============================================================================================================
INI_Description_INILineAdd         input.description, else 

                                   macro.DISPLAY_NAME_FNAME_LNAME_MAX_40_CHARS

INI_Description_UserMoveApps       input.description, else 

                                   macro.DISPLAY_NAME_FNAME_LNAME_MAX_40_CHARS 

INI_Description_Cisco_CallHandler  input.DisplayName
INI_Description_Cisco_CPUG         input.description
INI_Description_Cisco_HG           input.description
INI_Description_Cisco_SubMove      pwf.description_Display_Name
INI_Description_Cisco_ChangeLine   data.User.display_name | username:input.username 
INI_Description_Cisco_Reassign     macro.DISPLAY_NAME_FNAME_LNAME_MAX_40_CHARS
INI_Description_Cisco_CallPark     pwf.description
INI_Description_Cisco_CTIRP        input.description
INI_Description_Cisco_MeetMe       input.description
INI_Description_Microsoft_QAS      if pwf.workflow_source = MS_TEAMS input.FirstName and input.LastName else input.first_name input.last_name 
INI_Description_Hybrid_AddSnr      input.first_name input.last_name  
INI_Description_Hybrid_AddMVSa     pwf.dataUserObject.first_name pwf.dataUserObject.last_name
=================================  ============================================================================================================


Macro details
..............

Caller macro
''''''''''''''

Clone the caller macro to your hierarchy and modify if needed.
The called macro references associated with a feature can be substituted with custom macros.

* **name**: ``INI_Description_From_Caller_Workflow``
* **description**: "Calculation of INI description field using pwf.ini_caller value to identify required macro. For use by INIUpdateCustomCFT"

**macro** (Line breaks added for readability):

::


   "macro": "(( pwf.ini_caller == INILineAdd )) <{{ macro.INI_Description_INILineAdd }}> 
             (( pwf.ini_caller == UserMoveApps )) <{{ macro.INI_Description_UserMoveApps }}> 
             (( pwf.ini_caller == Cisco_CallHandler )) <{{ macro.INI_Description_Cisco_CallHandler }}> 
             (( pwf.ini_caller == Cisco_CPUG )) <{{ macro.INI_Description_Cisco_CPUG }}> 
             (( pwf.ini_caller == Cisco_HG )) <{{ macro.INI_Description_Cisco_HG }}> 
             (( pwf.ini_caller == Cisco_SubMove )) <{{ macro.INI_Description_Cisco_SubMove }}> 
             (( pwf.ini_caller == Cisco_ChangeLine )) <{{ macro.INI_Description_Cisco_ChangeLine }}> 
             (( pwf.ini_caller == Cisco_Reassign )) <{{ macro.INI_Description_Cisco_Reassign }}> 
             (( pwf.ini_caller == Cisco_CallPark )) <{{ macro.INI_Description_Cisco_CallPark }}> 
             (( pwf.ini_caller == Cisco_CTIRP )) <{{ macro.INI_Description_Cisco_CTIRP }}> 
             (( pwf.ini_caller == Cisco_MeetMe )) <{{ macro.INI_Description_Cisco_MeetMe }}> 
             (( pwf.ini_caller == Microsoft_QAS )) <{{ macro.INI_Description_Microsoft_QAS }}> 
             (( pwf.ini_caller == Microsoft_QAS_Hybrid_Only )) <{{ macro.INI_Description_Microsoft_QAS }}> 
             (( pwf.ini_caller == Hybrid_AddSnr )) <{{ macro.INI_Description_Hybrid_AddSnr }}> 
             (( pwf.ini_caller == Hybrid_AddMVS )) <{{ macro.INI_Description_Hybrid_AddMVS }}> 
             <{{ fn.drop }}>"

Called macros
''''''''''''''

Clone the called macro to your hierarchy and modify if needed.
The custom macro is then called for the associated feature by the caller macro.

.. raw:: html

   See:<br>
   
   <a href = "macro-ref/macroref.html#INI_Description_Cisco_CallHandler">INI_Description_Cisco_CallHandler</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Cisco_CallPark">INI_Description_Cisco_CallPark</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Cisco_ChangeLine">INI_Description_Cisco_ChangeLine</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Cisco_CPUG">INI_Description_Cisco_CPUG</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Cisco_CTIRP">INI_Description_Cisco_CTIRP</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Cisco_HG">INI_Description_Cisco_HG</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Cisco_MeetMe">INI_Description_Cisco_MeetMe</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Cisco_Reassign">INI_Description_Cisco_Reassign</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Cisco_SubMove">INI_Description_Cisco_SubMove</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_From_Caller_Workflow">INI_Description_From_Caller_Workflow</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Hybrid_AddMVS">INI_Description_Hybrid_AddMVS</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Hybrid_AddSnr">INI_Description_Hybrid_AddSnr</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_INILineAdd">INI_Description_INILineAdd</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_Microsoft_QAS">INI_Description_Microsoft_QAS</a><br>
   <a href = "macro-ref/macroref.html#INI_Description_UserMoveApps">INI_Description_UserMoveApps</a><br>



.. raw:: latex

   For macro details, refer to the Named Macro Reference HTML document for your release on the documentation portal.
   




..   Macros
..   ..........
..   
..   
..   
..   :: 
..                   
..   
..      "macro": "{{ fn.false }}",
..      "name": "global_setting_include_ini_description",
..      "description": "Macro to include the INI description in all fn.get_lines dropdowns."
..                      
..      
..      "macro": "(( fn.is_none_or_empty input.description == fn.false )) <{{ input.description}}> <{{ fn.null }}>",
..      "name": "INI_Description_Cisco_HG",
..      "description": "Configurable setting of description field for Hunt Group Relation - used by HuntGroupRelAdd PWF"
..                      
..      
..      "macro": "(( fn.is_none_or_empty pwf.description == fn.false )) <{{ pwf.description }}> <{{ fn.null }}>",
..      "name": "INI_Description_Cisco_CTIRP",
..      "description": "Configurable setting of description field for CTI Route Points  - used by HcsCtiRoutePointRELAddPWF and HcsCtiRoutePointRELUpdatePWF"
..                      
..      
..      "macro": "(( fn.is_none_or_empty macro.DISPLAY_NAME_FNAME_LNAME_MAX_40_CHARS == fn.false )) <{{ macro.DISPLAY_NAME_FNAME_LNAME_MAX_40_CHARS }}> <{{ fn.null }}>",
..      "name": "INI_Description_Cisco_Reassign",
..      "description": "Configurable setting of description field for Reassign User Services  - used by ReassignServicesUpdatePWF"
..                      
..      
..      "macro": "((fn.drop }}",
..      "name": "INI_Description_Microsoft_QAS",
..      "description": "Configurable setting of description field for Microsoft QAS - currently not used"
..                      
..      
..      "macro": "(( fn.is_none_or_empty input.description == fn.false )) <{{ input.description}}> (( fn.is_none_or_empty macro.DISPLAY_NAME_FNAME_LNAME_MAX_40_CHARS == fn.false )) <{{ macro.DISPLAY_NAME_FNAME_LNAME_MAX_40_CHARS }}> (( fn.is_none_or_empty input.email == fn.false )) <{{ input.email }}><{{ fn.null }}>",
..      "name": "INI_Description_UserMoveApps",
..      "description": "Configurable setting of description field for QuickSubscriber  - used by UserMoveApps pwf"
..                      
..      
..      "macro": "(( fn.is_none_or_empty input.DisplayName == fn.false )) <{{ input.DisplayName }}> <{{ fn.null }}>",
..      "name": "INI_Description_Cisco_CallHandler",
..      "description": "Configurable setting of description field for Add Relation Call Handler - used by both Ch_AddRouteToCucmAndCucxPWF and Ch_UpdateRouteOnCucmAndCucxPWF"
..                      
..      
..      "macro": "(( pwf.ini_caller == INILineAdd )) <{{ macro.INI_Description_INILineAdd }}> (( pwf.ini_caller == UserMoveApps )) <{{ macro.INI_Description_UserMoveApps }}> (( pwf.ini_caller == Cisco_CallHandler )) <{{ macro.INI_Description_Cisco_CallHandler }}> (( pwf.ini_caller == Cisco_CPUG )) <{{ macro.INI_Description_Cisco_CPUG }}> (( pwf.ini_caller == Cisco_HG )) <{{ macro.INI_Description_Cisco_HG }}> (( pwf.ini_caller == Cisco_SubMove )) <{{ macro.INI_Description_Cisco_SubMove }}> (( pwf.ini_caller == Cisco_ChangeLine )) <{{ macro.INI_Description_Cisco_ChangeLine }}> (( pwf.ini_caller == Cisco_Reassign )) <{{ macro.INI_Description_Cisco_Reassign }}> (( pwf.ini_caller == Cisco_CallPark )) <{{ macro.INI_Description_Cisco_CallPark }}> (( pwf.ini_caller == Cisco_CTIRP )) <{{ macro.INI_Description_Cisco_CTIRP }}> (( pwf.ini_caller == Cisco_MeetMe )) <{{ macro.INI_Description_Cisco_MeetMe }}> (( pwf.ini_caller == Microsoft_QAS )) <{{ macro.INI_Description_Microsoft_QAS }}> <{{ fn.drop }}>",
..      "name": "INI_Description_From_Caller_Workflow",
..      "description": "Calculation of INI description field using pwf.ini_caller value to identify required macro. For use by INIUpdateCustomCFT"
..                      
..      
..      "macro": "(( fn.is_none_or_empty input.description == fn.false )) <{{ input.description}}> <{{ fn.null }}>",
..      "name": "INI_Description_Cisco_CPUG",
..      "description": "Configurable setting of description field for CallPickupGroup Relation - used by both CallPickUpGroupAdd and CallPickupGroupMod PWF"
..                      
..      
..      "macro": "(( fn.is_none_or_empty input.description == fn.false )) <{{ input.description}}> (( fn.is_none_or_empty macro.DISPLAY_NAME_FNAME_LNAME_MAX_40_CHARS == fn.false )) <{{ macro.DISPLAY_NAME_FNAME_LNAME_MAX_40_CHARS }}> (( fn.is_none_or_empty input.email == fn.false )) <{{ input.email }}> <{{ fn.null }}>",
..      "name": "INI_Description_INILineAdd",
..      "description": "Configurable setting of description field for QuickSubscriber and AddPhone and GW Port - used by INILIneAdd PWF"
..                      
..      
..      "macro": "(( fn.is_none_or_empty pwf.description_Display_Name == fn.false )) <{{ pwf.description_Display_Name }}> <{{ fn.null }}>",
..      "name": "INI_Description_Cisco_SubMove",
..      "description": "Configurable setting of description field for Move Subscriber - used by UserPhoneMoveLineLoop_PWF and UserPhoneMoveLineLoopCrossCluster_PWF"
..                      
..      
..      "macro": "(( fn.is_none_or_empty pwf.description == fn.false )) <{{ pwf.description }}> <{{ fn.null }}>",
..      "name": "INI_Description_Cisco_CallPark",
..      "description": "Configurable setting of description field for CallPark & Directed Call Park  - used by CallParkIniUpsertPWF, ClusterwideCallParkMod, ClusterwideDirectedCallParkMod"
..                      
..      
..      "macro": "(( fn.is_none_or_empty data.User.display_name | username:input.username == fn.false )) <{{ data.User.display_name | username:input.username }}> <{{ fn.null }}>",
..      "name": "INI_Description_Cisco_ChangeLine",
..      "description": "Configurable setting of description field for GS_ChangeSubscriberLine PWF"
..                      
..      
..      "macro": "(( fn.is_none_or_empty input.description == fn.false )) <{{ input.description }}> <{{ fn.null }}>",
..      "name": "INI_Description_Cisco_MeetMe",
..      "description": "Configurable setting of description field for Cisco MeetMe numbers  - used by MeetMeAddPWF, MeetMeModPWF"
..   
..   
..   
..   =================================  ======================================
..   Macro Name                         Macro
..   =================================  ======================================
..   INI_Description_INILineAdd 
..   INI_Description_UserMoveApps 
..   INI_Description_Cisco_CallHandler 
..   INI_Description_Cisco_CPUG 
..   INI_Description_Cisco_HG 
..   INI_Description_Cisco_SubMove 
..   INI_Description_Cisco_ChangeLine 
..   INI_Description_Cisco_Reassign 
..   INI_Description_Cisco_CallPark 
..   INI_Description_Cisco_CTIRP 
..   INI_Description_Cisco_MeetMe 
..   INI_Description_Microsoft_QAS 
..   =================================  ======================================
..   
..   
..   
..   
..   
..   
..   
..   
..   INILineAdd
..   ..........
..   
..   ::
..   
..      CFT_INILineAdd_device_cucm_Line.json
..      MCR__INI_Description_INILineAdd.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF__SubscriberPhoneAdd.json
..      PWF__AddSubscriberPhone.json
..      PWF__SubscriberPhoneMod.json
..      PWF__HcsAddAnalogGatewayEndpointLinesPWF.json
..      PWF__AddSubscriberRemoteDestinationProfile.json
..      PWF__AddSubscriberDeviceProfile.json
..      PWF_AddSubscriberNew.json
..      PWF_INILineAdd.json
..      PWF__HcsUpdateAnalogGatewayEndpointNewLinesPWF.json
..      PWF_SubscriberMod.json
..      PWF__SubscriberDeviceProfileAdd.json
..      PWF__SubscriberDeviceProfileMod.json
..      PWF_AddPhoneLinePWF.json
..      PWF_UpdateSubscriberLinePWF.json
..      PWF_AddAddExtensionMobilityLinePWF.json
..   
..   
..   UserMoveApps
..   ............
..   
..   
..   ::
..   
..      MCR__INI_Description_UserMoveApps.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF_UserMoveApps.json
..      PWF_UserRelationUpsert.json
..   
..   
..   Cisco_CallHandler
..   .................
..   
..   ::
..   
..      MCR__INI_Description_Cisco_CallHandler.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF__Ch_UpdateRouteOnCucmAndCucxPWF.json
..      PWF__Ch_AddRouteToCucmAndCucxPWF.json
..   
..   
..   Cisco_CPUG
..   ...........
..   
..   ::
..   
..      MCR__INI_Description_Cisco_CPUG.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF__CallPickupGroupAdd.json
..      PWF__CallPickupGroupMod.json
..   
..   
..   Cisco_HG
..   ..........
..   
..   ::
..   
..      MCR__INI_Description_Cisco_HG.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF__HuntGroupRelMod.json
..      PWF_HuntGroupRelAdd.json
..   
..   
..   Cisco_SubMove
..   ..............
..   
..   ::
..   
..      MCR__INI_Description_Cisco_SubMove.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF_UserPhoneMoveLineLoop_PWF.json
..      PWF_UserPhoneMoveLineLoopCrossCluster_PWF.json
..   
..   
..   Cisco_ChangeLine
..   ..................
..   
..   ::
..   
..      MCR__INI_Description_Cisco_ChangeLine.json
..      MCR__INI_Description_From_Caller_Workflow.json
..   
..   
..   Cisco_Reassign
..   ...............
..   
..   ::
..   
..      MCR__INI_Description_Cisco_Reassign.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF_ReassignServicesPWF.json
..      PWF_ReassignServicesUpdatePWF.json
..   
..   
..   Cisco_CallPark
..   ...............
..   
..   ::
..   
..      MCR__INI_Description_Cisco_CallPark.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF_ClusterwideCallParkMod.json
..      PWF__CallParkIniUpsertPWF.json
..      PWF_ClusterwideDirectedCallParkMod.json
..   
..   
..   
..   Cisco_CTIRP
..   ...........
..   
..   ::
..   
..      MCR__INI_Description_Cisco_CTIRP.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF__HcsCtiRoutePointRELUpdatePWF.json
..      PWF__HcsCtiRoutePointRELAddPWF.json
..   
..   
..   Cisco_MeetMe
..   ..............
..   
..   ::
..   
..      MCR__INI_Description_Cisco_MeetMe.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF__MeetMeAddPWF.json
..      PWF__MeetMeUpdatePWF.json
..   
..   
..   Microsoft_QAS
..   ..............
..   
..   ::
..   
..      MCR__INI_Description_Microsoft_QAS.json
..      MCR__INI_Description_From_Caller_Workflow.json
..      PWF_MicrosoftSubscriberQasAdd.json
   
