
    @6i                         d Z ddlmZ ddlZddlmZ ed        Zedefd       Zedefd	       Z	ed
ddede
fd       Zy)zFinland.    )	lru_cacheN)	validatorc                  ,    t        j                  d      S )zBusiness ID Pattern.z^[0-9]{7}-[0-9]$)recompile     U/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/validators/i18n/fi.py_business_id_patternr      s     ::)**r	   ssn_check_marksc                 j    t        j                  dj                  |       t         j                        S )zSSN Pattern.z^
        (?P<date>(0[1-9]|[1-2]\d|3[01])
        (0[1-9]|1[012])
        (\d{{2}}))
        [ABCDEFYXWVU+-]
        (?P<serial>(\d{{3}}))
        (?P<checksum>[{check_marks}])$)check_marks)r   r   formatVERBOSE)r   s    r
   _ssn_patternr      s/     ::	* +1&_&*M


	 	r	   valuec                   | syt        j                  t               |       syg d}t        t        | dd       }t	        | d         }t        d t        ||      D              dz  }d|z
  |k(  xs ||cxk(  xr dk(  S c S )	a  Validate a Finnish Business ID.

    Each company in Finland has a distinct business id. For more
    information see [Finnish Trade Register][1]

    [1]: http://en.wikipedia.org/wiki/Finnish_Trade_Register

    Examples:
        >>> fi_business_id('0112038-9')  # Fast Monkeys Ltd
        True
        >>> fi_business_id('1234567-8')  # Bogus ID
        ValidationError(func=fi_business_id, args={'value': '1234567-8'})

    Args:
        value:
            Business ID string to be validated.

    Returns:
        (Literal[True]): If `value` is a valid finnish business id.
        (ValidationError): If `value` is an invalid finnish business id.
    F)   	   
               Nr   r   c              3   ,   K   | ]  \  }}||z    y w)Nr   ).0fns      r
   	<genexpr>z!fi_business_id.<locals>.<genexpr>>   s     941aQ9s      r   )r   matchr   mapintsumzip)r   factorsnumberschecksummodulos        r
   fi_business_idr*       s    . 88(*E2$G#uRay!G58}H93w#899B>FK8#A8)@q)@A)@Ar	   T)allow_temporal_ssnr+   c                  | syd}t        j                  t        |      |       x}sy|j                         }t	        |d   |d   z         }t	        |d         dk\  xr. |xs t	        |d         dk  xr ||t        |      z     |d   k(  S )a  Validate a Finnish Social Security Number.

    This validator is based on [django-localflavor-fi][1].

    [1]: https://github.com/django/django-localflavor-fi/

    Examples:
        >>> fi_ssn('010101-0101')
        True
        >>> fi_ssn('101010-0102')
        ValidationError(func=fi_ssn, args={'value': '101010-0102'})

    Args:
        value:
            Social Security Number to be validated.
        allow_temporal_ssn:
            Whether to accept temporal SSN numbers. Temporal SSN numbers are the
            ones where the serial is in the range [900-999]. By default temporal
            SSN numbers are valid.

    Returns:
        (Literal[True]): If `value` is a valid finnish SSN.
        (ValidationError): If `value` is an invalid finnish SSN.
    F0123456789ABCDEFHJKLMNPRSTUVWXYdateserialr   i  r(   )r   r!   r   	groupdictr#   len)r   r+   r   resultgdr(   s         r
   fi_ssnr4   B   s    4 7Ohh|O<eDDFD				B2f:8,-HBxLQ 	O;3r(|#4#;	OHs?';;<:Nr	   )__doc__	functoolsr   r   validators.utilsr   r   strr   r*   boolr4   r   r	   r
   <module>r:      s       	 ' + +
 #   B# B BB 8< $# $ $ $r	   