VRM_PERF_OBLIG_DR_RULE_DIST_V

Details

  • Schema: FUSION

  • Object owner: VRM

  • Object type: VIEW

Columns

Name

PERF_OBLIGATION_LINE_ID

DOCUMENT_LINE_ID

REVENUE_RULE_TYPE

PERIOD_START_DATE

PERIOD_END_DATE

ACCOUNTING_DATE

SATISFACTION_PERIOD_PROPORTION

ENTER_ALLOC_TRX_PERIOD_AMT

NET_LINE_PERIOD_AMT

ORIGINAL_LINE_PERIOD_AMT

ENTERED_CUR_ALLOCATED_AMT

NET_LINE_AMT

ORIGINAL_LINE_AMT

PERIOD_TYPE

PERIOD_SET_NAME

PERIOD_NUMBER

FIRST_PERIOD_FLAG

LAST_PERIOD_FLAG

Query

SQL_Statement

SELECT main_qry.PERF_OBLIGATION_LINE_ID,

main_qry.DOCUMENT_LINE_ID,

main_qry.REVENUE_RULE_TYPE,

main_qry.START_DATE PERIOD_START_DATE,

main_qry.END_DATE PERIOD_END_DATE,

DECODE(main_qry.LAST_PERIOD_FLAG, 'N', main_qry.END_DATE,

main_qry.ACCOUNTING_DATE) ACCOUNTING_DATE,

(CASE main_qry.REVENUE_RULE_TYPE

WHEN 'PP_DR_ALL'

THEN days_per_gl_period

WHEN 'PP_DR_PP'

THEN (CASE full_or_partial

WHEN 'F' THEN

/** Full periods **/

ROUND(((main_qry.total_days_in_schedule - main_qry.days_in_partial_periods) / (main_qry.cnt_of_full_periods)), 10)

ELSE

/** Partial Periods **/

main_qry.days_per_gl_period

END)

ELSE 0

END) SATISFACTION_PERIOD_PROPORTION,

(CASE main_qry.REVENUE_RULE_TYPE

WHEN 'PP_DR_ALL'

THEN (main_qry.ENTER_ALLOC_TRX_AMT_DAILY_RATE * days_per_gl_period)

WHEN 'PP_DR_PP'

THEN (CASE full_or_partial

WHEN 'F' THEN

/** Full periods **/

((main_qry.ENTERED_CUR_ALLOCATED_AMT - ( main_qry.days_in_partial_periods * main_qry.ENTER_ALLOC_TRX_AMT_DAILY_RATE )) / (main_qry.cnt_of_full_periods))

ELSE

/** Partial Periods **/

main_qry.days_per_gl_period

END)

ELSE ((main_qry.ENTERED_CUR_ALLOCATED_AMT * main_qry.period_factor) / (main_qry.no_of_full_periods))

END) ENTER_ALLOC_TRX_PERIOD_AMT,

(CASE main_qry.REVENUE_RULE_TYPE

WHEN 'PP_DR_ALL'

THEN (main_qry.NET_LINE_AMT_DAILY_RATE * days_per_gl_period)

WHEN 'PP_DR_PP'

THEN (CASE full_or_partial

WHEN 'F' THEN

/** Full periods **/

((main_qry.NET_LINE_AMT - ( main_qry.days_in_partial_periods * main_qry.NET_LINE_AMT_DAILY_RATE )) / (main_qry.cnt_of_full_periods))

ELSE

/** Partial Periods **/

(main_qry.NET_LINE_AMT_DAILY_RATE * main_qry.days_per_gl_period)

END)

ELSE ((main_qry.NET_LINE_AMT * main_qry.period_factor) / (main_qry.no_of_full_periods))

END) NET_LINE_PERIOD_AMT,

(CASE main_qry.REVENUE_RULE_TYPE

WHEN 'PP_DR_ALL'

THEN (main_qry.ORIG_LINE_AMT_DAILY_RATE * days_per_gl_period)

WHEN 'PP_DR_PP'

THEN (CASE full_or_partial

WHEN 'F' THEN

/** Full periods **/

((main_qry.ORIGINAL_LINE_AMT - ( main_qry.days_in_partial_periods * main_qry.ORIG_LINE_AMT_DAILY_RATE )) / (main_qry.cnt_of_full_periods))

ELSE

/** Partial Periods **/

(main_qry.ORIG_LINE_AMT_DAILY_RATE * main_qry.days_per_gl_period)

END)

ELSE ((main_qry.ORIGINAL_LINE_AMT * main_qry.period_factor) / (main_qry.no_of_full_periods))

END) ORIGINAL_LINE_PERIOD_AMT,

main_qry.ENTERED_CUR_ALLOCATED_AMT,

main_qry.NET_LINE_AMT,

main_qry.ORIGINAL_LINE_AMT,

main_qry.PERIOD_TYPE,

main_qry.PERIOD_SET_NAME,

main_qry.PERIOD_NUMBER,

main_qry.FIRST_PERIOD_FLAG,

main_qry.LAST_PERIOD_FLAG

FROM

(SELECT /*+ cardinality(vpol_gt 10) index(vpol_gt VRM_PERF_OBLIG_LINES_GT_U1) */

vpol_gt.PERF_OBLIGATION_LINE_ID,

vpol_gt.DOCUMENT_LINE_ID,

vpol_gt.REVENUE_START_DATE,

vpol_gt.REVENUE_END_DATE,

periods.START_DATE,

periods.END_DATE,

periods.PERIOD_TYPE,

periods.PERIOD_SET_NAME,

vpol_gt.REVENUE_RULE_TYPE,

vpol_gt.REVENUE_RULE_DURATION,

/** Accounting Date **/

LEAST((vpol_gt.REVENUE_START_DATE - FIRST_VALUE(periods.START_DATE)

OVER (PARTITION BY vpol_gt.PERF_OBLIGATION_LINE_ID ORDER BY periods.START_DATE ) ) + periods.start_date,

periods.END_DATE, vpol_gt.REVENUE_END_DATE ) ACCOUNTING_DATE,

/** Period Sequence Number *+/

ROW_NUMBER() OVER( PARTITION BY vpol_gt.PERF_OBLIGATION_LINE_ID ORDER BY periods.start_date ) period_seq_num, */

/** Partial or Full ***/

DECODE(LEAST((periods.END_DATE - periods.START_DATE),

(periods.END_DATE - vpol_gt.REVENUE_START_DATE),

(vpol_gt.REVENUE_END_DATE - periods.START_DATE)),

(periods.END_DATE - periods.START_DATE), 'F', 'P' ) full_or_partial,

/** Total number of days in RevRec schedule **/

(vpol_gt.REVENUE_END_DATE - vpol_gt.REVENUE_START_DATE) + 1 total_days_in_schedule,

/** Allocated Transaction Price in Entered Currency Daily Rate **/

(vpol_gt.ENTERED_CUR_ALLOCATED_AMT) /((vpol_gt.REVENUE_END_DATE - vpol_gt.REVENUE_START_DATE) + 1) ENTER_ALLOC_TRX_AMT_DAILY_RATE,

/** Net Line Amount Daily Rate **/

(vpol_gt.NET_LINE_AMT) /((vpol_gt.REVENUE_END_DATE - vpol_gt.REVENUE_START_DATE) + 1) NET_LINE_AMT_DAILY_RATE,

/** Original Line Amount Daily Rate **/

(vpol_gt.ORIGINAL_LINE_AMT) /((vpol_gt.REVENUE_END_DATE - vpol_gt.REVENUE_START_DATE) + 1) ORIG_LINE_AMT_DAILY_RATE,

/** Days per given GL period **/

(LEAST((periods.END_DATE - periods.START_DATE),

(periods.END_DATE - vpol_gt.REVENUE_START_DATE),

(vpol_gt.REVENUE_END_DATE - periods.START_DATE))) + 1 days_per_gl_period,

/** Maximum Days per given GL period ***/

(periods.END_DATE - periods.START_DATE) + 1 max_days_per_gl_period,

/** Period Factor **/

(LEAST((periods.END_DATE - periods.START_DATE),

(periods.END_DATE - vpol_gt.REVENUE_START_DATE),

(vpol_gt.REVENUE_END_DATE - periods.START_DATE)) + 1 ) / ((periods.END_DATE - periods.START_DATE) + 1) period_factor,

/** total full periods (includes partial periods) ***/

SUM((LEAST((periods.END_DATE - periods.START_DATE),

(periods.END_DATE - vpol_gt.REVENUE_START_DATE),

(vpol_gt.REVENUE_END_DATE - periods.START_DATE)) + 1 ) / ((periods.END_DATE - periods.START_DATE) + 1) ) OVER (PARTITION BY vpol_gt.PERF_OBLIGATION_LINE_ID ) no_of_full_periods,

/** Count of only full periods ***/

SUM( CASE

/** Count only full periods **/

WHEN LEAST((periods.END_DATE - periods.START_DATE),

(periods.END_DATE - vpol_gt.REVENUE_START_DATE),

(vpol_gt.REVENUE_END_DATE - periods.START_DATE)) = (periods.END_DATE - periods.START_DATE)

THEN 1

ELSE

/** Do not count partial periods */

0

END ) OVER (PARTITION BY vpol_gt.PERF_OBLIGATION_LINE_ID) cnt_of_full_periods,

/** Days in partial periods ***/

SUM( CASE

WHEN LEAST((periods.END_DATE - periods.START_DATE),

(periods.END_DATE - vpol_gt.REVENUE_START_DATE),

(vpol_gt.REVENUE_END_DATE - periods.START_DATE)) = (periods.END_DATE - periods.START_DATE)

THEN

/** Full periods **/

0

ELSE

/** Partial periods */

LEAST((periods.END_DATE - periods.START_DATE),

(periods.END_DATE - vpol_gt.REVENUE_START_DATE),

(vpol_gt.REVENUE_END_DATE - periods.START_DATE)) + 1

END ) OVER (PARTITION BY vpol_gt.PERF_OBLIGATION_LINE_ID) days_in_partial_periods,

/** Allocated Transaction Price in Entered Currency ***/

vpol_gt.ENTERED_CUR_ALLOCATED_AMT,

/** Net Line Amount ***/

vpol_gt.NET_LINE_AMT,

/** Original Line Amount ***/

vpol_gt.ORIGINAL_LINE_AMT,

COUNT(periods.START_DATE) OVER (PARTITION BY vpol_gt.PERF_OBLIGATION_LINE_ID ORDER BY periods.START_DATE ASC) PERIOD_NUMBER,

(CASE WHEN COUNT(periods.START_DATE) OVER (PARTITION BY vpol_gt.PERF_OBLIGATION_LINE_ID ORDER BY periods.START_DATE ASC) = 1

THEN 'Y'

ELSE 'N'

END ) FIRST_PERIOD_FLAG,

(CASE WHEN vpol_gt.REVENUE_END_DATE BETWEEN periods.START_DATE AND periods.END_DATE

THEN 'Y'

ELSE 'N'

END ) LAST_PERIOD_FLAG

FROM VRM_PERF_OBLIG_LINES_GT vpol_gt,

GL_LEDGERS ledger,

GL_PERIODS periods

WHERE vpol_gt.SATISFACTION_MEASUREMENT_MODEL = 'ORA_MEASURE_PERIOD_SATISFIED'

AND ledger.LEDGER_ID = vpol_gt.LEDGER_ID

AND periods.PERIOD_SET_NAME = ledger.PERIOD_SET_NAME

AND vpol_gt.REVENUE_RULE_TYPE IN ('PP_DR_ALL', 'PP_DR_PP') /* Additional condition to filter only Daily Rate Rules */

AND periods.PERIOD_TYPE = ledger.ACCOUNTED_PERIOD_TYPE

AND periods.ADJUSTMENT_PERIOD_FLAG = 'N'

AND ( vpol_gt.REVENUE_START_DATE BETWEEN periods.START_DATE AND periods.END_DATE

OR vpol_gt.REVENUE_END_DATE BETWEEN periods.START_DATE AND periods.END_DATE

OR periods.START_DATE BETWEEN vpol_gt.REVENUE_START_DATE AND vpol_gt.REVENUE_END_DATE )

) main_qry