(cDate as date)=>
let
sDate = #date(Date.Year(cDate), 1, 1),
dList = List.Select(List.Dates(sDate, Duration.Days(#date(Date.Year(cDate)+2,1,1) - sDate) + 1, #duration(1,0,0,0)), each Date.DayOfWeek(_, Day.Sunday)=0 and Date.Day(_)<=7),
sList = List.Generate(()=>0, each _ < List.Count(dList), each _ + 1, each if Date.Day(dList{_}) <=4 then dList{_} else Date.AddDays(dList{_},-7)),
mStart = List.Max(List.Select(sList, each _<= cDate)),
mEnd = List.Min(List.Select(sList, each _> cDate)),
mList = List.Dates(mStart, Duration.Days(mEnd - mStart), #duration(1,0,0,0)),
wList = Record.Field(List.Last(List.Generate(
()=> [Date=null, WkNum=null, y=0, x=-1],
each [x] < List.Count(mList) and ([Date]=null or [Date]<=cDate),
each [Date=mList{x}, WkNum=Number.RoundUp((x+1)/7), y=[y]+1, x=[x]+1],
each [[Date],[WkNum],[y]])), "WkNum")
in
wList