What does BY_DAY_COUNT and BY_WEEKDAY_COUNT mean in IfcRecurrenceTypeEnum?

Here is my understanding with some examples to illustrate:

  • DAILY: every Nth (interval) day for up to X (Occurrences) occurrences. e.g. Every 2 days.
  • WEEKLY: every Nth (interval) MTWTFSS (WeekdayComponent) for up to X (Occurrences) occurrences. e.g. Every Monday.
  • MONTHLY_BY_DAY_OF_MONTH: every Nth (DayComponent) of every Xth (Interval) Month up to Y (Occurrences) occurrences. e.g. Every 15th of the Month.
  • MONTHLY_BY_POSITION: Every Nth (Position) MTWTFSS (WeekdayComponent) of every Xth (Interval) Month up to Y (Occurrences) occurrences. e.g. Every second Tuesday of the Month.
  • YEARLY_BY_DAY_OF_MONTH: every Nth (DayComponent) of every JFMAMJJASOND (MonthComponent) month of every Yth (Interval) Year up to Z (Occurrences) occurrences. e.g. every 25th of December.
  • YEARLY_BY_POSITION: every Nth (Position) MTWTFSS (WeekdayComponent) of every JFMAMJJASOND (MonthComponent) month of every Yth (Interval) Year up to Z (Occurrences) occurrences. e.g. every third Wednesday of January.

What is BY_DAY_COUNT and BY_WEEKDAY_COUNT? It seems to be identical to DAILY and WEEKLY.

Oh, and there’s a typo for nterval in the row in the table.

For reference here is some examples in the BlenderBIM Add-on source code:

    recurrence_types: EnumProperty(items=[
        ("DAILY", "Daily", "e.g. Every day"),
        ("WEEKLY", "Weekly", "e.g. Every Friday"),
        ("MONTHLY_BY_DAY_OF_MONTH", "Monthly on Specified Date", "e.g. Every 2nd of each Month"),
        ("MONTHLY_BY_POSITION", "Monthly on Specified Weekday", "e.g. Every 1st Friday of each Month"),
        # https://forums.buildingsmart.org/t/what-does-by-day-count-and-by-weekday-count-mean-in-ifcrecurrencetypeenum/3571
        # ("BY_DAY_COUNT", "", ""),
        # ("BY_WEEKDAY_COUNT", "", ""),
        ("YEARLY_BY_DAY_OF_MONTH", "Yearly on Specified Date", "e.g. Every 2nd of October"),
        ("YEARLY_BY_POSITION", "Yearly on Specified Weekday", "e.g. Every 1st Friday of October"),
    ], name="Recurrence Types")

I think it is to be used in conjunction with Interval. So BY_DAY_COUNT with Interval=2 means once every two days. WEEKDAY_COUNT same, except it excludes weekends?

Interval IfcInteger ? An interval can be given according to the pattern type. An interval value of 2 can for instance every two days, weeks, months, years. An empty interval value is regarded as 1. The used interval values should be in a reasonable range, e.g. not 0 or <0.

IfcRecurrencePattern

@aothms however DAILY is also allowed to be used in conjunction with Interval (see table in screenshot). Therefore, i can equally specify DAILY + Interval=2. Thoughts?

Ok, but with DAILY Interval=2 you cannot exclude the weekends (BY_WEEKDAY_COUNT). I’m just guessing here though.

Uh, I think BY_WEEKDAY_COUNT is a totally separate concept to DAILY. BY_WEEKDAY_COUNT basically equivalent to WEEKLY. Weekday doesn’t mean excludes weekends, it means you specify the list of valid weekdays (which may or may not include weekends)

The ambiguity:

  • DAILY = BY_DAY_COUNT
  • WEEKLY = BY_WEEKDAY_COUNT

Hopefully the examples I give in the first post can clarify.