Configuring CDR Processing

The MATRIXX Engine can import and rate Solution42® call detail records (CDRs) and generate MATRIXX Event Detail Records (EDRs) from them. Generally, this is used only when integrating with an Oracle BRM system. Other projects should use external mediation to convert external CDRs into Diameter messages for MATRIXX processing.

To implement CDR processing, perform the following configuration tasks:
  • Create the subscribers identified in the CDRs.
  • Create the pricing plan to charge for the CDR events and include the private event types and the MDC-to-EDR field mappings in the pricing configuration. This enables the MATRIXX Engine to add the fields for each event type to an EDR. The event types must be added in My MATRIXX and the MDC-to-EDR field mappings must be added to the service type definitions in My MATRIXX. For more information, see the discussions about defining an Event Type and adding fields to Event Detail Records in My MATRIXX Help and MATRIXX Integration respectively.
  • Load the pricing configuration XML file into the MATRIXX Engine.
  • Purchase the necessary offers for all subscribers and set the purchase date to before the earliest CDR date.
  • Edit the create_config.info file to:
    • Add any custom AVPs to the Diameter Dictionary.
    • Add a private Diameter message MDC, for example, AnalyticsDiamRoMsg, that is based off of the MtxDiamRoMsg MDC. This MDC must contain the fields for each new Diameter AVP added. This enables the fields to get added to the MATRIXX Event Detail Records (EDRs).
    • Add a private subscriber MDC, for example, AnalyticsSubscriberObject, that is based off of the MtxSubscriberObject MDC. Include any custom fields required for rating, for example, a FriendsAndFamily phone number field on which to normalize rates.
    • Add a private usage event MDC, for example, AnalyticsUsageEvent, that extends the MtxUsageEvent MDC to hold the base event data. Include fields for each CDR field. Each custom MDC defines a MATRIXX event type that gets rated.
    • For each event type to rate, define private usage event MDCs based off of the private base usage event MDC (AnalyticsUsageEvent), for example AnalyticsDataEvent and AnalyticsVoiceEvent.
    • Add a custom MDC for each CDR type to convert into an EDR, for example, Sol42DetailRecord, Sol42GSMRecord, Sol42GPRSRecord, and Sol42MMSRecord.
    • Add selective updates to the mtx_config.xml file to handle dynamic field mappings that are dependent on the service type definitions. For detailed information about how to add selective updates, see the discussion about using selective updates to customize MATRIXX Engine in MATRIXX Integration.
    • If the server is outside the engine, update the MATRIXX Engine configuration to include the IP address and port of the Diameter Gateway or Traffic Routing Agent load balancer.
  • Run the create_config.py and configure_engine.py scripts to configure all servers in the engine with the CDR requirements.
  • If running the conversion from an off-engine server, configure the CDR Converter to access the engine's Traffic Routing Agent IP address and port or the Diameter Gateway IP address and port, if the engine does not have a Traffic Routing Agent.

CDR Data Types

CDR data types have the properties listed here.
Note: CDR lists can have any number of elements, but must be processed sequentially. CDR arrays can be processed in any order, but you must set the maximum number of elements when you create them.
For Java/Python/C++ code, CDR fields have these properties:
  • A field can be a list of any data type.
  • A field can be an array of any data type.
  • A field cannot be both a list and an array.
For C++ code, CDR lists have these properties. They can have any number of elements and they can be processed sequentially:
  • Essentially, there are no limits to the number of elements.
  • The entire element must fit in a large MtxBuf (except Structs).
  • You can only append to the end of a list.
  • You must access a list serially.
  • You can delete a list element by marking it not-present.
  • Have an isPresent flag per element, so you can delete an element without having to recreate the entire list.
For C++ code, CDR arrays have these properties. Arrays can be processed in any order:
  • You set the maximum number of elements when you create the array.
  • You can configure or set the maximum number of elements programmatically.
  • Once created, arrays cannot be re-sized.
  • You can access arrays by using a zero-relative index.
  • You can delete an array element by marking it not-present.
  • The entire array must fit in a large MtxBuf (except variable-sized fields).
  • Have an isPresent flag per element, so you can have sparse arrays.