
    iL                     V    S SK JrJr  S SKJrJrJr  S SKJr  S SKJ	r	   " S S\5      r
g)    )ABCabstractmethod)ListDictOptional)datetime)Stampc                       \ rS rSrSrS\4S jr\S\\	   S\
S\4S j5       r\S\
S	\S
\S\S\4
S j5       r\S\4S j5       r\S\
S\\
   4S j5       r\S\
S\\
   4S j5       rS\
S\4S jrSrg)IPayrollAdapter   z3Abstract base class for payroll system integrationsintegration_configc                     UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        g)z
Initialize adapter with integration configuration

Args:
    integration_config: Dictionary containing:
        - api_endpoint: API endpoint URL
        - api_key: API key or client ID
        - api_secret: API secret or client secret
api_endpoint api_key
api_secretN)getr   r   r   )selfr   s     &D:\TimeStamps\payroll\adapters\base.py__init__IPayrollAdapter.__init__
   sA     /22>2F)--i<,00rB    stampsemployee_idreturnc                     g)z
Transform internal Stamp data to payroll-specific format

Args:
    stamps: List of Stamp objects
    employee_id: External employee ID in payroll system
    
Returns:
    Payroll-specific data structure
N )r   r   r   s      r   transform_stamp_data$IPayrollAdapter.transform_stamp_data   s     	r   period_start
period_endtimesheet_datac                     g)a  
Submit timesheet data to payroll system

Args:
    employee_id: External employee ID
    period_start: Start date of the period
    period_end: End date of the period
    timesheet_data: Transformed timesheet data
    
Returns:
    Response with submission status, reference ID, etc.
    {
        'success': bool,
        'reference_id': str,
        'message': str,
        'errors': List[str]
    }
Nr   )r   r   r    r!   r"   s        r   submit_timesheet IPayrollAdapter.submit_timesheet&   s    4 	r   c                     g)zb
Validate API credentials/connection

Returns:
    True if credentials are valid, False otherwise
Nr   )r   s    r   validate_credentials$IPayrollAdapter.validate_credentialsB   s     	r   user_idc                     g)z
Map internal user_id to payroll system employee ID

Args:
    user_id: Internal user UUID
    
Returns:
    Payroll employee ID or None
Nr   )r   r)   s     r   get_employee_mapping$IPayrollAdapter.get_employee_mappingL        	r   
project_idc                     g)z
Map internal project_id to payroll system project/cost center

Args:
    project_id: Internal project UUID
    
Returns:
    Payroll project code or None
Nr   )r   r.   s     r   get_project_mapping#IPayrollAdapter.get_project_mappingY   r-   r   duration_strc                 >   U(       d  gUR                  SS5      R                  5       nSU;   aD  UR                  S5      n[        U5      S:X  a$   [	        US   5      n[	        US   5      nX4S-  -   $  [        U5      $ ! [
         a     Nf = f! [
         a     gf = f)	zg
Parse duration string to hours (float)

Supports formats:
- "8:30" -> 8.5
- "8.5" -> 8.5
- "8" -> 8.0
g        hrsr   :   r      g      N@)replacestripsplitlenint
ValueErrorfloat)r   r2   partshoursminutess        r   _parse_durationIPayrollAdapter._parse_durationf   s      $++E26<<> , &&s+E5zQaME!%(mG dN33
	&& "   		s$   "A? 4
B ?
BB
BB)r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r	   strr   r   r$   boolr'   r   r+   r0   r>   rB   __static_attributes__r   r   r   r   r      s    =C4 C 4; S T     	
  
 6 d   
C 
HSM 
 
 
c 
hsm 
 
C E r   r   N)abcr   r   typingr   r   r   r   stamps.modelsr	   r   r   r   r   <module>rO      s"    # ' '  }c }r   