import { clsx } from "clsx"; interface ResourceMonthTemplateCompleteness { scope: "resource_month"; isAuditReady: boolean; isRecommendedComplete: boolean; recommendedColumnCount: number; selectedRecommendedColumnCount: number; minimumAuditColumnCount: number; selectedMinimumAuditColumnCount: number; missingRecommendedColumns: string[]; missingMinimumAuditColumns: string[]; } interface ResourceMonthConfigSectionProps< TBlueprint extends { id: string; label: string; description: string }, > { periodMonth: string; onPeriodMonthChange: (value: string) => void; blueprints: TBlueprint[]; onApplyBlueprint: (blueprint: TBlueprint) => void; completeness: ResourceMonthTemplateCompleteness | null; selectedTemplate: { isShared?: boolean; isOwner?: boolean } | null; hasTemplateDraftChanges: boolean; selectedColumns: Set; onToggleColumn: (column: string) => void; columnLabelMap: Map; recommendedColumns: readonly string[]; summarizeMissing: (columns: string[], labelMap: Map) => string; } export function ResourceMonthConfigSection< TBlueprint extends { id: string; label: string; description: string }, >({ periodMonth, onPeriodMonthChange, blueprints, onApplyBlueprint, completeness, selectedTemplate, hasTemplateDraftChanges, selectedColumns, onToggleColumn, columnLabelMap, recommendedColumns, summarizeMissing, }: ResourceMonthConfigSectionProps) { return (
onPeriodMonthChange(e.target.value)} className="rounded-xl border border-emerald-300 bg-white px-3 py-2 text-sm text-gray-700 focus:border-emerald-500 focus:ring-emerald-500 dark:border-emerald-900 dark:bg-slate-950 dark:text-gray-300" />

Resource Months uses the CapaKraken holiday and absence logic directly. SAH, booked hours and chargeability are calculated per resource and month with country, state and city context.

{blueprints.map((blueprint) => ( ))}
{completeness ? (
{completeness.isAuditReady ? "Audit ready" : "Audit gap"} {completeness.selectedMinimumAuditColumnCount}/ {completeness.minimumAuditColumnCount} minimum audit columns {completeness.selectedRecommendedColumnCount}/{completeness.recommendedColumnCount}{" "} recommended columns {selectedTemplate && !hasTemplateDraftChanges ? "Saved template status" : "Current builder status"}
{completeness.missingMinimumAuditColumns.length > 0 ? (

Missing audit/export basis columns:{" "} {summarizeMissing(completeness.missingMinimumAuditColumns, columnLabelMap)}

) : completeness.missingRecommendedColumns.length > 0 ? (

Audit-ready, but still missing recommended basis columns:{" "} {summarizeMissing(completeness.missingRecommendedColumns, columnLabelMap)}

) : (

This view includes the full recommended audit/export basis set for monthly SAH and chargeability checks.

)}
) : null}
Recommended transparency columns
{recommendedColumns.map((column) => ( ))}

Formula reference: base available hours - holiday deduction - absence deduction = monthly SAH. Chargeability uses booked hours divided by monthly SAH.

Export recommendation: include both basis columns and computed metrics in the CSV. That keeps Excel as a review layer instead of rebuilding CapaKraken logic outside the product.

Minimum audit set: month, location context, SAH, holiday deductions, absence deductions, target hours, booked hours and unassigned hours.

); }