Functional Weave
Code in Rust

manufacturing.lot-number@1.0.0

impl/python.py

982 bytes · the Python implementation · view raw

Imports name this capability’s declared dependencies, which fune builds next to it in your project; each one links to its page.

from .dates_add_days import days_from_civil, parse_iso_date  ← from dates.add-days ^1.0.0 · built alongside by fune


def lot_number(production_date: str, line: int, sequence: int) -> str:
    """Lot code YYDDD-LL-SSS: two-digit year, day of the year, line, sequence.

    The day of the year counts from the epoch-day kernel in dates.add-days, so
    leap years move every date after 28 February without a month table.
    """
    if isinstance(line, bool) or not isinstance(line, int) or line < 1 or line > 99:
        raise ValueError("line must be a whole number from 1 to 99, received %r" % (line,))
    if isinstance(sequence, bool) or not isinstance(sequence, int) or sequence < 1 or sequence > 999:
        raise ValueError("sequence must be a whole number from 1 to 999, received %r" % (sequence,))
    date = parse_iso_date(production_date)
    day_of_year = days_from_civil(date.year, date.month, date.day) - days_from_civil(date.year, 1, 1) + 1
    return "%02d%03d-%02d-%03d" % (date.year % 100, day_of_year, line, sequence)