feat(platform): checkpoint current implementation state

This commit is contained in:
2026-04-01 07:42:03 +02:00
parent 3e53471f05
commit 8c5be51251
125 changed files with 10269 additions and 17808 deletions
@@ -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.",
],
};
}