One other minor comment / consideration is finding the last day. There should be a choice stage to identify the end day (28 or 29 or 30 or 31).
For 31:
Expression:
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 1 OR
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 3 OR
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 5 OR
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 7 OR
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 8 OR
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 10 OR
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 12
True:
MakeDate(31, ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")), FormatDate(Today(), ""yyyy"")
For 30:
Expression:
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 4 OR
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 6 OR
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 9 OR
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 11
True:
MakeDate(30, ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")), FormatDate(Today(), ""yyyy"")
For 28:
Expression:
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 2 AND InStr(ToNumber(FormatDate(Today(), ""yyyy"")) / 4, ""."")0
True:
MakeDate(28, ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")), FormatDate(Today(), ""yyyy"")
For 29:
Expression:
ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")) = 2 AND InStr(ToNumber(FormatDate(Today(), ""yyyy"")) / 4, ""."")=0
True:
MakeDate(29, ToNumber(FormatDate(AddMonths(Today(), -1), ""MM"")), FormatDate(Today(), ""yyyy"")
I have built an utility (Make Date) to perform these type of actions.