feat(platform): checkpoint current implementation state
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
export type ResourceMonthReportExplainability = {
|
||||
entity: "resource_month";
|
||||
periodMonth: string | null;
|
||||
locationContextColumns: string[];
|
||||
holidayMetricColumns: string[];
|
||||
absenceMetricColumns: string[];
|
||||
capacityMetricColumns: string[];
|
||||
chargeabilityMetricColumns: string[];
|
||||
missingRecommendedColumns: string[];
|
||||
notes: string[];
|
||||
};
|
||||
|
||||
export type ReportExplainability = ResourceMonthReportExplainability;
|
||||
|
||||
const RESOURCE_MONTH_LOCATION_COLUMNS = [
|
||||
"countryCode",
|
||||
"countryName",
|
||||
"federalState",
|
||||
"metroCityName",
|
||||
] as const;
|
||||
|
||||
const RESOURCE_MONTH_HOLIDAY_COLUMNS = [
|
||||
"monthlyPublicHolidayCount",
|
||||
"monthlyPublicHolidayWorkdayCount",
|
||||
"monthlyPublicHolidayHoursDeduction",
|
||||
] as const;
|
||||
|
||||
const RESOURCE_MONTH_ABSENCE_COLUMNS = [
|
||||
"monthlyAbsenceDayEquivalent",
|
||||
"monthlyAbsenceHoursDeduction",
|
||||
] as const;
|
||||
|
||||
const RESOURCE_MONTH_CAPACITY_COLUMNS = [
|
||||
"monthlyBaseWorkingDays",
|
||||
"monthlyEffectiveWorkingDays",
|
||||
"monthlyBaseAvailableHours",
|
||||
"monthlySahHours",
|
||||
"monthlyChargeabilityTargetPct",
|
||||
"monthlyTargetHours",
|
||||
] as const;
|
||||
|
||||
const RESOURCE_MONTH_CHARGEABILITY_COLUMNS = [
|
||||
"monthlyActualBookedHours",
|
||||
"monthlyExpectedBookedHours",
|
||||
"monthlyActualChargeabilityPct",
|
||||
"monthlyExpectedChargeabilityPct",
|
||||
"monthlyUnassignedHours",
|
||||
] as const;
|
||||
|
||||
const RESOURCE_MONTH_RECOMMENDED_COLUMNS = [
|
||||
...RESOURCE_MONTH_LOCATION_COLUMNS,
|
||||
...RESOURCE_MONTH_HOLIDAY_COLUMNS,
|
||||
...RESOURCE_MONTH_ABSENCE_COLUMNS,
|
||||
...RESOURCE_MONTH_CAPACITY_COLUMNS,
|
||||
] as const;
|
||||
|
||||
function pickIncludedColumns(
|
||||
requestedColumns: string[],
|
||||
columnGroup: readonly string[],
|
||||
): string[] {
|
||||
return columnGroup.filter((column) => requestedColumns.includes(column));
|
||||
}
|
||||
|
||||
export function buildResourceMonthReportExplainability(
|
||||
requestedColumns: string[],
|
||||
periodMonth?: string,
|
||||
): ResourceMonthReportExplainability {
|
||||
const missingRecommendedColumns = RESOURCE_MONTH_RECOMMENDED_COLUMNS.filter(
|
||||
(column) => !requestedColumns.includes(column),
|
||||
);
|
||||
|
||||
return {
|
||||
entity: "resource_month",
|
||||
periodMonth: periodMonth ?? null,
|
||||
locationContextColumns: pickIncludedColumns(requestedColumns, RESOURCE_MONTH_LOCATION_COLUMNS),
|
||||
holidayMetricColumns: pickIncludedColumns(requestedColumns, RESOURCE_MONTH_HOLIDAY_COLUMNS),
|
||||
absenceMetricColumns: pickIncludedColumns(requestedColumns, RESOURCE_MONTH_ABSENCE_COLUMNS),
|
||||
capacityMetricColumns: pickIncludedColumns(requestedColumns, RESOURCE_MONTH_CAPACITY_COLUMNS),
|
||||
chargeabilityMetricColumns: pickIncludedColumns(requestedColumns, RESOURCE_MONTH_CHARGEABILITY_COLUMNS),
|
||||
missingRecommendedColumns,
|
||||
notes: [
|
||||
"monthlySahHours already reflects region-specific public holidays from country, federal state, and city context when those attributes exist on the resource.",
|
||||
"monthlyAbsence* metrics only deduct workdays that are not already counted as public holidays.",
|
||||
"monthlyBaseAvailableHours shows pre-deduction capacity; compare it with holiday, absence, and SAH columns to explain the final monthly availability.",
|
||||
],
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user