Tópico anterior: Exemplo de modelagem de métricas financeiras

Próximo tópico: Exemplos de modelagem de dados

Estudo de caso 6: Condições de modelagem financeira de um contrato/serviço

Há três tipos gerais de métricas financeiras usadas para criar as condições financeiras de um serviço ou contrato. São elas:

Veja o seguinte exemplo:

Uma nova empresa é aberta e requer que um serviço de email seja fornecido juntamente com a configuração e manutenção de suas caixas de correio. Como a nova equipe foi contratada, o número de caixas de correio certamente é aumenta. O fornecimento de um serviço de email para um contrato incorre um custo de preço fixo de $1000, e há um custo adicional por caixa de correio a ser cobrado por mês. Esse custo por caixa de correio é um modelo de preços com vários níveis, como segue:

Número de caixas de correio

Custo por caixa de correio

1-1.000

$1,00

1,001 - 5,000

$0,80

5,001+

$0,50

Desse modo, quanto mais caixas de correio forem adicionadas, menor será o custo adicional. (Por exemplo: 1500 caixas de correio custarão (1000 x $1) + (500 x $0.80) = $1400. Usando este modelo, duas métricas podem ser produzidas para refletir isso no contrato.

Além disso, há uma estimativa feita pela equipe de gerenciamento do número de integrantes da equipe em todo o ano (2007), conforme indicado a seguir. A tendência se deve ao crescimento inicial da organização em razão da contratação de funcionários e de novos escritórios abertos em outras regiões:

Jan

Fev

Mar

Abr

Maio

Jun

Jul

Ago

Set

Out

Nov

Dez

50

100

500

900

1600

1700

1800

2500

2600

3500

3600

5800

Para criar essas métricas, faça o seguinte:

Crie a métrica de custo fixo (use o tipo de item de preço) no contrato, usando os seguintes detalhes:

Para especificar o custo fixo para o contrato de serviço, implemente essa opção como um parâmetro para a lógica de negócios (em que o custo fixo deve ser retornado da função de resultados). Este parâmetro pode ser exibido por meio da declaração de objetivo da métrica, como mostrado a seguir:

Retornar o valor do parâmetro para essa métrica é simplesmente um caso de retornar o valor do custo de serviço por meio da função de resultados.

Em seguida, crie a métrica de preço variável (novamente use o tipo de item de preço) para determinar os custos de consumo das caixas de correio usadas. Nomeie essa métrica como Custo de consumo da caixa de correio e crie-a com os seguintes detalhes:

Nesse caso, é necessário digitar os parâmetros de consumo nos detalhes da métrica. Eles vão para a tabela Preço por unidade. Para criar a tabela acima de número de caixas de correio em relação ao custo, crie uma coluna para o limite máximo de caixas de correio e uma para os preços por unidade.

Em seguida, digite os valores para cada nível. Nesse caso, o limite máximo de caixas de correio determina o custo de suporte associado a ele. Como não há 3 camadas, elas são adicionadas à tabela desta maneira:

Além disso, implemente a função de previsão no consumo de caixas de correio. Faça isso criando a tabela Previsão com o layout mensal predefinido.

Ele é preenchido com os valores de tabelas fornecidos na descrição do cenário.

Agora é possível adicionar a declaração do objetivo para a métrica. Nesse caso, não há valores de parâmetro necessários, pois eles são derivados das tabelas Preço por Unidade e Previsão.

Por fim, complete a lógica de negócios, como a seguir:

Option Explicit

Dim PPUmap1, PPUmap2, PPUmap3, PPUkey, FCmap, periodFC, TierPPU
Dim currentMonth, TotalMailboxes, MailboxesThisPeriod, TotalPrice

Sub OnRegistration(dispatcher)
   registro de amostras apenas
   dispatcher.RegisterByMetric "OnMailboxAddedEvent", "NewMailboxEventType", _
      "MailboxResource", "MONTH", "MetricName", "MetricContract", _
      "MetricContractParty"
End Sub

Sub OnLoad(TIME)
   Inicie os mapas de níveis de preço e os mapas de previsão
   Set PPUmap1 = Context.Field ("Price Per Unit")(1)
   Set PPUmap2 = Context.Field ("Price Per Unit")(2)
   Set PPUmap3 = Context.Field ("Price Per Unit")(3) 
   Set FCmap = Context.Field ("Forecast")(1)
End Sub

Sub OnPeriodStart(TIME)
   'TODO: ADD code here TO handle period START event
   currentMonth = GetMonth (time)
   If Context.IsInForecast Then
      periodFC = getForecastValue (currentMonth)
   End If
   MailboxesThisPeriod = 0
   TotalPrice = 0
End Sub

Sub OnPeriodEnd(TIME, isComplete)
   Calcule o preço atual de todas as caixas de correio usando o modelo de preços
   em vários níveis
   Isto usa uma abordagem cumulativa, pois passa por cada nível para
   determinar o custo total.
   TotalPrice = getMailboxCost (TotalMailboxes)
End Sub

Sub OnTimeslotEnter(TIME)
End Sub

Sub OnTimeslotExit(TIME)
End Sub

Sub OnMailboxAddedEvent(eventDetails)
   MailboxesThisPeriod = MailboxesThisPeriod + 1
   TotalMailboxes = TotalMailBoxes + 1
End Sub

Função de previsão
   Forecast = getMailboxCost (periodFC)
End Function

Objetivo da função
   Target = Null
End Function

Function Result
   result = TotalPrice
End Function

Function getforecastvalue(q)
   getforecastvalue = FCmap (q)
End Function

Function getmonth(time)
   esta função recupera o mês
   Dim lTime
   lTime = Tools.GetLocaleTime(time)
   getmonth = monthname (datepart ("m", lTime), True) & _
      "-0" & datepart ("d", lTime) & "-" & datepart ("yyyy", lTime)
End Function

Function getMailboxCost(num_boxes)
   A função calcula o custo das caixas de correio usando o modelo de preços em vários níveis
   Dim returnValue
   If num_boxes <= PPUmap1 ("Mailboxes") Then 
      Primeiro nível
      returnValue = num_boxes * PPUmap1 ("UnitCost")
      'Out.Log "Tier1: " & num_boxes
   Else If num_boxes > PPUmap1 ("Mailboxes") And num_boxes <= PPUmap2 ("Mailboxes") Then
      'segundo nível apenas
      returnValue = (PPUmap1 ("Mailboxes") * PPUmap1 ("UnitCost")) + _
         ((num_boxes - PPUmap1 ("Mailboxes")) * PPUmap2 ("UnitCost"))
      'Out.Log "Tier2: " & num_boxes
   Else If num_boxes > PPUmap2 ("Mailboxes") Then
      'terceiro nível
      returnValue = (PPUmap1 ("Mailboxes") * PPUmap1 ("UnitCost")) + _
         ((PPUmap2 ("Mailboxes") - PPUmap1 ("Mailboxes")) * PPUmap2 ("UnitCost")) + _
         ((num_boxes - PPUmap2 ("Mailboxes")) * PPUmap3 ("UnitCost"))
      'Out.Log "Tier3: " & num_boxes
   End If
   getMailboxCost = returnValue
   'Out.Log "Cost is: " & returnValue
End Function

Observação: o script de lógica de negócios trata tanto o cálculo de previsão (usando a tabela Previsão) quanto os resultados do custo de consumo financeiro. Ambos usam a mesma fórmula getMailboxCost(), que calcula o preço com base em vários níveis de acordo com a tabela Preço por Unidade definida para essa métrica.