VRM_PERF_OBLIG_FV_RULE_DIST_V

Details

  • Schema: FUSION

  • Object owner: VRM

  • Object type: VIEW

Columns

Name

PERF_OBLIGATION_LINE_ID

DOCUMENT_LINE_ID

REVENUE_RULE_TYPE

FIXED_RULE_PERIOD_PERCENT

FIRST_PERIOD_VAR_RULE_PERCENT

PERIOD_START_DATE

PERIOD_END_DATE

ACCOUNTING_DATE

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

vpol_gt.PERF_OBLIGATION_LINE_ID

, vpol_gt.DOCUMENT_LINE_ID

, vpol_gt.REVENUE_RULE_TYPE

, rrs.PERCENT FIXED_RULE_PERIOD_PERCENT

, NVL(rrs_lump.PERCENT, DECODE(vpol_gt.line_status,'TEMPORARY',-1, ROUND(100/vpol_gt.REVENUE_RULE_DURATION,10))) FIRST_PERIOD_VAR_RULE_PERCENT

, all_periods.START_DATE PERIOD_START_DATE

, all_periods.END_DATE PERIOD_END_DATE

, NVL(RRS.RULE_DATE,

LEAST( ((vpol_gt.REVENUE_START_DATE - first_period.START_DATE) + all_periods.START_DATE),

all_periods.END_DATE,

NVL(vpol_gt.REVENUE_END_DATE, TO_DATE('31-12-4712','DD-MM-RRRR')))

) ACCOUNTING_DATE

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

, TO_NUMBER(DECODE((RRS_LUMP.PERCENT + DECODE(RRS.PERIOD_NUMBER, 1, 1, NULL)), /* Will be Null for Fixed Rules and for Variable Rules periods other than period number 1 */

NULL, DECODE(vpol_gt.REVENUE_RULE_TYPE, 'A', vpol_gt.ENTERED_CUR_ALLOCATED_AMT * (RRS.PERCENT / 100), /* For Fixed Rules PRORATE using schedules defined */

/* For Variable rule PRORATE the left over amount for other than first periods across all the subsequent periods based on Rule Duration */

(vpol_gt.ENTERED_CUR_ALLOCATED_AMT - NVL( ( vpol_gt.ENTERED_CUR_ALLOCATED_AMT * (RRS_LUMP.PERCENT / 100) ), 0 ) ) /

DECODE(RRS_LUMP.PERCENT, NULL, vpol_gt.REVENUE_RULE_DURATION, vpol_gt.REVENUE_RULE_DURATION -1) ), /* END NOT LUMP SUM CASE */

vpol_gt.ENTERED_CUR_ALLOCATED_AMT * (RRS_LUMP.PERCENT / 100)

)

) ENTER_ALLOC_TRX_PERIOD_AMT

, TO_NUMBER(DECODE((RRS_LUMP.PERCENT + DECODE(RRS.PERIOD_NUMBER, 1, 1, NULL)), /* Will be Null for Fixed Rules and for Variable Rules periods other than period number 1 */

NULL, DECODE(vpol_gt.REVENUE_RULE_TYPE, 'A', vpol_gt.NET_LINE_AMT * (RRS.PERCENT / 100), /* For Fixed Rules PRORATE using schedules defined */

/* For Variable rule PRORATE the left over amount for other than first periods across all the subsequent periods based on Rule Duration */

(vpol_gt.NET_LINE_AMT - NVL( ( vpol_gt.NET_LINE_AMT * (RRS_LUMP.PERCENT / 100) ), 0 ) ) /

DECODE(RRS_LUMP.PERCENT, NULL, vpol_gt.REVENUE_RULE_DURATION, vpol_gt.REVENUE_RULE_DURATION -1) ), /* END NOT LUMP SUM CASE */

vpol_gt.NET_LINE_AMT * (RRS_LUMP.PERCENT / 100)

)

) NET_LINE_PERIOD_AMT

, TO_NUMBER(DECODE((RRS_LUMP.PERCENT + DECODE(RRS.PERIOD_NUMBER, 1, 1, NULL)), /* Will be Null for Fixed Rules and for Variable Rules periods other than period number 1 */

NULL, DECODE(vpol_gt.REVENUE_RULE_TYPE, 'A', vpol_gt.ORIGINAL_LINE_AMT * (RRS.PERCENT / 100), /* For Fixed Rules PRORATE using schedules defined */

/* For Variable rule PRORATE the left over amount for other than first periods across all the subsequent periods based on Rule Duration */

(vpol_gt.ORIGINAL_LINE_AMT - NVL( ( vpol_gt.ORIGINAL_LINE_AMT * (RRS_LUMP.PERCENT / 100) ), 0 ) ) /

DECODE(RRS_LUMP.PERCENT, NULL, vpol_gt.REVENUE_RULE_DURATION, vpol_gt.REVENUE_RULE_DURATION -1) ), /* END NOT LUMP SUM CASE */

vpol_gt.ORIGINAL_LINE_AMT * (RRS_LUMP.PERCENT / 100)

)

) ORIGINAL_LINE_PERIOD_AMT

, vpol_gt.ENTERED_CUR_ALLOCATED_AMT

, vpol_gt.NET_LINE_AMT

, vpol_gt.ORIGINAL_LINE_AMT

, first_period.PERIOD_TYPE

, first_period.PERIOD_SET_NAME

, RRS.PERIOD_NUMBER PERIOD_NUMBER

, (CASE WHEN RRS.PERIOD_NUMBER = 1

THEN 'Y'

ELSE 'N'

END ) FIRST_PERIOD_FLAG

, (CASE WHEN (ADD_MONTHS(vpol_gt.REVENUE_START_DATE, vpol_gt.REVENUE_RULE_DURATION - 1) BETWEEN all_periods.START_DATE AND all_periods.END_DATE)

THEN 'Y'

ELSE 'N'

END ) LAST_PERIOD_FLAG

FROM

VRM_PERF_OBLIG_LINES_GT vpol_gt,

GL_LEDGERS ledger,

RA_RULE_SCHEDULES rrs, /* Join to rrs for Fixed Rules */

RA_RULE_SCHEDULES rrs_lump, /* Join to rrs_lump Variable Rules */

VRM_PERIODS first_period,

VRM_PERIODS all_periods

WHERE vpol_gt.SATISFACTION_MEASUREMENT_MODEL = 'ORA_MEASURE_PERIOD_SATISFIED' /* This view is applicable for only for Fixed and Variable Rules */

AND ledger.LEDGER_ID = vpol_gt.LEDGER_ID

AND first_period.PERIOD_SET_NAME = ledger.PERIOD_SET_NAME

AND vpol_gt.REVENUE_RULE_TYPE IN ('A', 'ACC_DUR') /* Additional condition to filter only Fixed and Variable Rules */

AND rrs.RULE_ID = DECODE(vpol_gt.REVENUE_RULE_TYPE, 'A', vpol_gt.REVENUE_RULE_ID, -1) /* Fixed rules join condition */

AND rrs_lump.RULE_ID(+) = DECODE(vpol_gt.REVENUE_RULE_TYPE, 'ACC_DUR', vpol_gt.REVENUE_RULE_ID, -10) /* Variable rules join condition */

AND rrs_lump.PERIOD_NUMBER(+) = 1

AND rrs.PERIOD_NUMBER <= vpol_gt.REVENUE_RULE_DURATION

AND first_period.PERIOD_TYPE = ledger.ACCOUNTED_PERIOD_TYPE

AND vpol_gt.REVENUE_START_DATE BETWEEN first_period.START_DATE AND first_period.END_DATE

AND all_periods.PERIOD_SET_NAME = ledger.PERIOD_SET_NAME

AND all_periods.PERIOD_TYPE = ledger.ACCOUNTED_PERIOD_TYPE

AND all_periods.NEW_PERIOD_NUM = first_period.NEW_PERIOD_NUM + (rrs.PERIOD_NUMBER - 1)