/*
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2018 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
///////////////////////////////////////////////////////////////////////////////
//
//  File:          Revised_Advice_of_Charge_Operations.asn
//  Description:   Functional protocol for ISDN
//
//  References:    ETSI EN 300 182-1 
//                 Integrated Services Digital Network (ISDN);
//                 Generic functional protocol for the support
//                 of supplementary services;
//  Rev:          R3C
//  Prodnr:       CNL 113 435
//  Updated:      2012.04.19.
//  Contact:      http://ttcn.ericsson.se
*/

Revised-Advice-of-Charge-Operations  {itu-t identified-organization etsi (0) 182 operations-and-errors (1)}

DEFINITIONS IMPLICIT TAGS ::=

BEGIN

EXPORTS
  chargingRequest,
  aOCSCurrency,
  aOCSSpecialArr,
  aOCDCurrency,
  aOCDChargingUnit,
  aOCECurrency,
  aOCEChargingUnit,
  noChargingInfoAvailable,
  ChargingAssociation;
  
IMPORTS
    OPERATION,
    ERROR
  FROM Remote-Operations-Information-Objects
  {joint-iso-itu-t remote-operations (4) notation (0)}    
    
    notSubscribed,
    notAvailable,
    notImplemented,
    invalidCallState
  FROM Revised-General-Errors
  {itu-t identified-organization etsi (0) 196 general-errors (2)}    
  
    PartyNumber
  FROM Revised-Addressing-Data-Elements
  {itu-t identified-organization etsi (0) 196 addressing-data-elements (6)};
  
  chargingRequest OPERATION ::=
  {
    ARGUMENT ChargingCase
    
    RESULT  CHOICE {
      aOCSCurrencyInfoList  AOCSCurrencyInfoList,
      aOCSSpecialArrInfo    AOCSSpecialArrInfo,
      chargingInfoFollows   NULL  
    }  
    
    CODE  local:30
  }
  
  aOCSCurrency OPERATION ::=                    -- AOC-S given in currency units
  {    
    ARGUMENT CHOICE {
      chargeNotAvailable    NULL,
      aOCSCurrencyInfoList  AOCSCurrencyInfoList }
      
    CODE  local:31  
  }
 
  aOCSSpecialArr OPERATION ::=                  -- AOC-S for special charging arrangement
  {      
    ARGUMENT CHOICE {
      chargeNotAvailable  NULL,
      aOCSSpecialArrInfo  AOCSSpecialArrInfo }
      
    CODE  local:32  
  }
 
  aOCDCurrency OPERATION ::=                    -- AOC-D given in currency units
  {    
    ARGUMENT CHOICE {
      chargeNotAvailable  NULL,
      aOCDCurrencyInfo    AOCDCurrencyInfo }
      
    CODE local:33  
  }
 
  aOCDChargingUnit OPERATION ::=                -- AOC-D given in charging units
  {    
    ARGUMENT CHOICE {
      chargeNotAvailable    NULL,
      aOCDChargingUnitInfo  AOCDChargingUnitInfo }
      
    CODE local:34  
  }
 
  aOCECurrency OPERATION ::=                    -- AOC-E given in currency units
  {    
    ARGUMENT CHOICE {
      chargeNotAvailable NULL,
      aOCECurrencyInfo   AOCECurrencyInfo }
      
    CODE local:35  
  }
 
  aOCEChargingUnit OPERATION ::=                -- AOC-E given in charging units
  {    
    ARGUMENT CHOICE {
      chargeNotAvailable    NULL,
      aOCEChargingUnitInfo  AOCEChargingUnitInfo }
      
    CODE  local:36  
  }
 
  ChargingCase ::=
      ENUMERATED {
        chargingInformationAtCallSetup (0),
        chargingDuringACall            (1),
        chargingAtTheEndOfACall        (2) }

 
  AOCSCurrencyInfoList ::= SEQUENCE SIZE (1..10) OF AOCSCurrencyInfo
  
  AOCSCurrencyInfo ::=
      SEQUENCE {
        chargedItem                ChargedItem,
        cc                
        CHOICE {
          specificCurrency
          CHOICE {
            durationCurrency       [1] DurationCurrency,
            flatRateCurrency       [2] FlatRateCurrency,
            volumeRateCurrency     [3] VolumeRateCurrency },
          specialChargingCode      SpecialChargingCode,
          freeOfCharge             [4] NULL,
          currencyInfoNotAvailable [5] NULL } }

 
  AOCSSpecialArrInfo ::= INTEGER (1..10)

 
  ChargedItem ::=
      ENUMERATED {
        basicCommunication              (0),
        callAttempt                     (1),
        callSetup                       (2),
        userToUserInfo                  (3),
        operationOfSupplementaryService (4) }

 
  DurationCurrency ::=
      SEQUENCE {
        dCurrency     [1] Currency,
        dAmount       [2] Amount,
        dChargingType [3] ChargingType,
        dTime         [4] Time,
        dGranularity  [5] Time OPTIONAL }

 
  FlatRateCurrency ::=
      SEQUENCE {
        fRCurrency    [1] Currency,
        fRAmount      [2] Amount }

 
  VolumeRateCurrency ::=
      SEQUENCE {
        vRCurrency     [1] Currency,
        vRAmount       [2] Amount,
        vRVolumeUnit   [3] VolumeUnit }

 
  SpecialChargingCode ::= INTEGER (1..10)

 
  AOCDCurrencyInfo ::=
      CHOICE {
        specificCurrency
          SEQUENCE {
            recordedCurrency   [1] RecordedCurrency,
            typeOfChargingInfo [2] TypeOfChargingInfo,
            aOCDBillingId      [3] AOCDBillingId OPTIONAL },
        freeOfCharge           [1] NULL }

 
  AOCDChargingUnitInfo ::=
      CHOICE {
        specificChargingUnits
          SEQUENCE {
            recordedUnitsList  [1] RecordedUnitsList,
            typeOfChargingInfo [2] TypeOfChargingInfo,
            aOCDBillingId      [3] AOCDBillingId OPTIONAL },
        freeOfCharge           [1] NULL }

 
  RecordedCurrency ::=
      SEQUENCE {
        rCurrency    [1] Currency,
        rAmount      [2] Amount }

 
  RecordedUnitsList ::= SEQUENCE SIZE (1..32) OF RecordedUnits

 
  TypeOfChargingInfo ::=
      ENUMERATED {
        subTotal (0),
        total    (1) }

 
  RecordedUnits ::=
      SEQUENCE {
        cc CHOICE {
          recordedNumberOfUnits NumberOfUnits,
          notAvailable          NULL },
        recordedTypeOfUnits     TypeOfUnit OPTIONAL }

 
  AOCDBillingId ::=
      ENUMERATED {
        normalCharging     (0),
        reverseCharging    (1),
        creditCardCharging (2) }

 
  AOCECurrencyInfo ::=
      SEQUENCE {
        cc CHOICE {
          specificCurrency SEQUENCE {
            recordedCurrency  [1] RecordedCurrency,
            aOCEBillingId     [2] AOCEBillingId OPTIONAL },
          freeOfCharge  [1] NULL },
        chargingAssociation  ChargingAssociation OPTIONAL }

 
  AOCEChargingUnitInfo ::=
      SEQUENCE {
        cc CHOICE {
          specificChargingUnits  SEQUENCE {
            recordedUnitsList  [1] RecordedUnitsList,
            aOCEBillingId      [2] AOCEBillingId OPTIONAL },
          freeOfCharge  [1] NULL },
        chargingAssociation  ChargingAssociation OPTIONAL }

  AOCEBillingId ::=
      ENUMERATED {
        normalCharging              (0),
        reverseCharging             (1),
        creditCardCharging          (2),
        callForwardingUnconditional (3),
        callForwardingBusy          (4),
        callForwardingNoReply       (5),
        callDeflection              (6),
        callTransfer                (7) }

 
  Currency ::= IA5String (SIZE (1..10))

 
  Amount ::=
      SEQUENCE {
        currencyAmount [1] CurrencyAmount,
        multiplier     [2] Multiplier }

 
  CurrencyAmount ::= INTEGER (0..16777215)

 
  Multiplier ::=
      ENUMERATED {
        oneThousandth (0),
        oneHundredth  (1),
        oneTenth      (2),
        one           (3),
        ten           (4),
        hundred       (5),
        thousand      (6) }

 
  Time ::=
      SEQUENCE {
        lengthOfTimeUnit [1] LengthOfTimeUnit,
        scale            [2] Scale }

 
  LengthOfTimeUnit ::= INTEGER (0..16777215)

  Scale ::=
      ENUMERATED {
        oneHundredthSecond (0),
        oneTenthSecond     (1),
        oneSecond          (2),
        tenSeconds         (3),
        oneMinute          (4),
        oneHour            (5),
        twentyFourHours    (6) }

 
  VolumeUnit ::=
      ENUMERATED {
        octet   (0),
        segment (1),
        message (2) }

 
  TypeOfUnit ::= INTEGER (1..16)     -- Value 1-16

 
  NumberOfUnits ::= INTEGER (0..16777215)

 
  ChargingType ::=
      ENUMERATED {
        continuousCharging (0),
        stepFunction       (1) }

 
  ChargingAssociation ::=
      CHOICE {
        chargeNumber      [0] EXPLICIT PartyNumber,
        chargeIdentifier  ChargeIdentifier }

 
  ChargeIdentifier ::= INTEGER (-32768..32767)
  
  noChargingInfoAvailable  ERROR ::= {CODE local:16}
  

END
