Spaces:
Sleeping
Sleeping
| from pydantic import BaseModel, Field | |
| from typing import Optional,List | |
| from langchain_core.output_parsers import JsonOutputParser # type: ignore | |
| class Noc_Residential_TimeSheetInformation(BaseModel): | |
| """Details of a timesheet entry.""" | |
| full_name: str = Field(..., description="Full name of the person.") | |
| position_title: str = Field(..., description="Position title of the person.") | |
| work_location: str = Field(..., description="Work location of the person.") | |
| contractor: str = Field(..., description="Contractor's name.") | |
| noc_id: str = Field(..., description="NOC ID of the person.") | |
| month_year: str = Field(..., description="Month and year in MM/YYYY format.") | |
| service_days_onshore: int = Field(0, description="Number of service days onshore.") | |
| standby_days_onshore: int = Field(0, description="Number of standby days onshore in Doha.") | |
| service_days_offshore: int = Field(0, description="Number of service days offshore.") | |
| service_days_weekend_public_holiday: int = Field(0, description="Number of service days during weekends or public holidays.") | |
| standby_extended_hitch_days_offshore: int = Field(0, description="Number of standby and extended hitch days offshore.") | |
| extended_hitch_days_onshore: int = Field(0, description="Number of extended hitch days onshore for rotational personnel.") | |
| overtime_Hourly_Rate_ONSHORE:int = Field(0,description="number of over time hours onshore (Over 8 hours) ") | |
| overtime_Hourly_Rate_OFFSHORE:int = Field(0,description="number of over time hours offshore (Over 12 hours) ") | |
| per_diem_days: int = Field(0, description="Number of Per Diem days for onshore/offshore rotational personnel.") | |
| training_days: int = Field(0, description="Number of training days.") | |
| travel_days: int = Field(0, description="Number of travel days.") | |
| approval_status: str = Field("not approved",description="Indicates whether the NOC representative's name and date are present on the document (e.g., 'approved', 'not approved').") | |
| approved_on : str = Field(...,description="DD/MM/YY of the stamp") | |
| approved_by : str = Field(...,description="Name of the person who approved the document") | |
| class Noc_Rotational_TimeSheetInformation(BaseModel): | |
| """Details of a timesheet entry.""" | |
| full_name: str = Field(..., description="Full name of the person.") | |
| position_title: str = Field(..., description="Position title of the person.") | |
| work_location: str = Field(..., description="Work location of the person.") | |
| contractor: str = Field(..., description="Contractor's name.") | |
| PO_number: Optional[str] = Field(None,description="Purchase order") | |
| noc_id: str = Field(..., description="NOC ID of the person.") | |
| month_year: str = Field(..., description="Month and year in MM/YYYY format.") | |
| service_days_onshore: int = Field(0, description="Number of service days onshore.") | |
| standby_days_onshore: int = Field(0, description="Number of standby days onshore in Doha.") | |
| service_days_offshore: int = Field(0, description="Number of service days offshore.") | |
| service_days_weekend_public_holiday: int = Field(0, description="Number of service days during weekends or public holidays.") | |
| standby_extended_hitch_days_offshore: int = Field(0, description="Number of standby and extended hitch days offshore.") | |
| extended_hitch_days_onshore: int = Field(0, description="Number of extended hitch days onshore for rotational personnel.") | |
| overtime_Hourly_Rate_ONSHORE:int = Field(0,description="number of over time hours onshore (Over 8 hours) ") | |
| overtime_Hourly_Rate_OFFSHORE:int = Field(0,description="number of over time hours offshore (Over 12 hours) ") | |
| per_diem_days: int = Field(0, description="Number of Per Diem days for onshore/offshore rotational personnel.") | |
| training_days: int = Field(0, description="Number of training days.") | |
| travel_days: int = Field(0, description="Number of travel days.") | |
| approval_status: str = Field("not approved",description="Indicates whether the NOC representative's name and date are present on the document (e.g., 'approved', 'not approved').") | |
| approved_on : str = Field(...,description="DD/MM/YY of the stamp") | |
| approved_by : str = Field(...,description="Name of the person who approved the document") | |
| class Noc_TimeSheetInformation(BaseModel): | |
| """Details of a timesheet entry.""" | |
| position_title: str = Field(..., description="Position title of the person.") | |
| work_location: str = Field(..., description="Work location ") | |
| agency: str = Field(..., description="the agency") | |
| working_schedule: str = Field(...,description="schedule.") | |
| noc_id: str = Field(..., description="NOC ID of the person.") | |
| full_name: str = Field(..., description="Full name of the person.") | |
| approval_status: str = Field("not approved",description="(e.g., 'approved', 'not approved').") | |
| approved_on : str = Field(...,description="DD/MM/YY of the stamp") | |
| approved_by : str = Field(...,description="Name of the person who approved the document") | |
| service_days_onshore: int = Field(0, description="Number of service days onshore.") | |
| standby_days_onshore: int = Field(0, description="Number of standby days onshore in Doha.") | |
| service_days_offshore: int = Field(0, description="Number of service days offshore.") | |
| service_days_weekend_public_holiday: int = Field(0, description="Number of service days during weekends or public holidays.") | |
| standby_extended_hitch_days_offshore: int = Field(0, description="Number of standby and extended hitch days offshore.") | |
| extended_hitch_days_onshore: int = Field(0, description="Number of extended hitch days onshore for rotational personnel.") | |
| overtime_Hourly_Rate_ONSHORE:int = Field(0,description="number of over time hours onshore (Over 8 hours) ") | |
| overtime_Hourly_Rate_OFFSHORE:int = Field(0,description="number of over time hours offshore (Over 12 hours) ") | |
| per_diem_days: int = Field(0, description="Number of any Per Diem listed with each type of day.") | |
| training_days: int = Field(0, description="Number of training days.") | |
| travel_days: int = Field(0, description="Number of travel days.") | |
| class Noc_Item_Information(BaseModel): | |
| """Details of each item in the document.""" | |
| item_number : int = Field(...,description="the number of the item") | |
| service_description_code: str = Field(..., description="Service description code for the item.") | |
| completion_date: str = Field(..., description="Completion date of the service in DD/MM/YYYY format.") | |
| quantity: float = Field(..., description="Quantity of the service or item provided.") | |
| unit: str = Field(..., description="Unit of measurement, e.g., Days.") | |
| unit_price: float = Field(..., description="Unit price.") | |
| net_amount: float = Field(..., description="Total net amount for this item, calculated as quantity * unit price.") | |
| service_details: str = Field(..., description="Detailed description of the service provided.") | |
| class Noc_Document_Information(BaseModel): | |
| """Details of the entire document.""" | |
| position_title: str = Field(..., description="Position title of the person.") | |
| location: Optional[str] = Field(None, description="Location where the service is rendered.") | |
| mobilization_date: str = Field(..., description="Mobilization date in DD/MM/YYYY format.") | |
| end_date: str = Field(..., description="End date of the contract in DD/MM/YYYY format.") | |
| notice_period: Optional[str] = Field(None, description="Notice period for resignation, if applicable") | |
| items: List[Noc_Item_Information] = Field(..., description="List of items or services provided in the document.") | |
| class Noc_items(BaseModel): | |
| items: List[Noc_Item_Information] = Field(None, description="List of items or services provided in the document.") | |
| class Noc_total(BaseModel): | |
| """totals of the invoice""" | |
| total_amount_wo_taxes : float = Field(...,description="total amount without taxes") | |
| total_net_amount_of_order: float = Field(..., description="total net amount of order.") | |
| total_amount_of_order: float = Field(..., description="total amount of order.") | |
| class Noc_PurchaseOrderInformation(BaseModel): | |
| """Details of a purchase order entry.""" | |
| purchase_order_number: str = Field(..., description="The unique identifier for the purchase order.") | |
| date: str = Field(..., description="Date of the purchase order in DD/MM/YYYY format.") | |
| company_name: str = Field(..., description="Name of the company issuing the purchase order.") | |
| address: str = Field(..., description="Address of the company issuing the purchase order.") | |
| tel: Optional[str] = Field(None, description="Telephone number of the company.") | |
| email: Optional[str] = Field(None, description="Email address of the company.") | |
| final_shipping_address: Optional[str] = Field(None, description="Final shipping address for the order.") | |
| buyer_contact_name: str = Field(..., description="Full name of the buyer contact.") | |
| buyer_contact_company: str = Field(..., description="Company name of the buyer contact.") | |
| buyer_contact_tel: Optional[str] = Field(None, description="Telephone number of the buyer contact.") | |
| buyer_contact_email: Optional[str] = Field(None, description="Email address of the buyer contact.") | |
| our_reference: Optional[str] = Field(None, description="under Our reference title.") | |
| your_reference: Optional[str] = Field(None, description="under Your reference title.") | |
| incoterms: Optional[str] = Field(None, description="Incoterms applicable to the order.") | |
| total_value_of_order: str = Field(..., description="Total value of the purchase order.") | |
| signed: bool = Field(..., description="Whether the document has been signed or not.") | |
| signature_released_by: str = Field(None, description="Name of the person who released the purchase order.") | |
| signature_date: Optional[str] = Field(None, description="Date the order was signed.") | |
| class Noc_Clauses(BaseModel): | |
| Clauses: str = Field(..., description="the contract clauses.") | |
| class service(BaseModel): | |
| service: str = Field(..., description="the service name.") | |
| from_date: str = Field(None,description="starting date in DD/MM/YYYY format..") | |
| to_date: str = Field(None,description="ending date in DD/MM/YYYY format.") | |
| currency : str =Field(...,description="currency of the rate.") | |
| fx: str = Field(None,description="foreign exchange.") | |
| Number_of_days_hours: str = Field(...,description="number of hours or days for the service.") | |
| rate: str = Field(..., description="the rate of the service.") | |
| total: str = Field(...,description="total which is the rate* No of days/hours .") | |
| class bank_details(BaseModel): | |
| bank_name: str = Field(..., description="Name of the bank.") | |
| swift_bic_code: str = Field(None, description=" SWIFT/BIC CODE.") | |
| iban_number: str = Field(...,description="IBAN Number.") | |
| beneficiary_name:str = Field(...,description="full name") | |
| account_currency: str = Field(...,description="Account currency.") | |
| expected_amount: str = Field(...,description="the amount.") | |
| class Noc_Invoice(BaseModel): | |
| """Details of an invoice.""" | |
| invoice_date: str = Field(..., description="Date of the invoice in DD/MM/YYYY format") | |
| invoice_number: str = Field(..., description="Unique identifier for the invoice.") | |
| full_name: str = Field(..., description="Full name of the person.") | |
| invoice_to:str = Field(...,description="email to send the invoice forward to.") | |
| company_name: str = Field(...,description="company name") | |
| address: str = Field(..., description="Address of the company.") | |
| services : List[service] = Field(None,description="list of services in the table.") | |
| sub_total: float = Field(...,description="the sub total.") | |
| vat: float = Field(None, description="the vat.") | |
| Withholding_tax : float = Field(None,description="Withholding Tax.") | |
| total_due:float= Field(...,description="the total due.") | |
| first_bank : List[bank_details]=Field(...,description="first bank informations.") | |
| second_details : List[bank_details]=Field(...,description="second bank details") | |
| Noc_timesheet_prompt = """ | |
| Based on the provided timesheet details, extract the following information: | |
| - Position title of the person. | |
| - Work location . | |
| - the agency. | |
| - schedule. | |
| - NOC ID of the person. | |
| - Name of the person. | |
| - approval status | |
| - date of the approval | |
| - approved by | |
| - Number of service days onshore | |
| - Number of standby days onshore in Doha | |
| - Number of service days offshore | |
| - Number of service days during weekends or public holidays | |
| - Number of standby and extended hitch days offshore | |
| - Number of extended hitch days onshore for rotational personnel | |
| - Number of over time hours onshore (Over 8 hours) | |
| - Number of over time hours offshore (Over 12 hours) | |
| - Number of any Per Diem listed with each type of day. | |
| for example: travel day per diem:here we have the per diem only, travel day + per diem : we have both a travel day and the per diem. | |
| - Number of training days | |
| - Number of travel days | |
| """ | |
| Noc_invoice_prompt =""" | |
| Based on the provided timesheet details, extract the following information: | |
| - Invoice date | |
| - Invoice number | |
| - Full name of the person | |
| - Email to send the invoice forward to. | |
| - Company name | |
| - Address of the company | |
| - List of services,for each existing service provide: | |
| - the service name. | |
| - starting date in DD/MM/YYYY format. | |
| - ending date in DD/MM/YYYY format. | |
| - currency of the rate. | |
| - foreign exchange. | |
| - number of hours or days for the service. | |
| - the rate of the service. | |
| - total which is the rate* No of days/hours . | |
| - Sub total | |
| - VAT or Withholding Tax. | |
| - Total due | |
| - First bank informations, for each existing bank provide, do not mess up the iban: | |
| - Name of the bank. | |
| - SWIFT/BIC CODE. | |
| - IBAN Number. | |
| - full name. | |
| - Account currency. | |
| - the amount. | |
| - Second bank informations, for each existing bank provide,do not mess up the iban: | |
| - Name of the bank. | |
| - SWIFT/BIC CODE. | |
| - IBAN Number. | |
| - full name. | |
| - Account currency. | |
| - the amount. | |
| """ | |
| Noc_Res_timesheet_prompt = """ | |
| Based on the provided timesheet details, extract the following information: | |
| - Full name of the person | |
| - Position title of the person | |
| - Work location | |
| - Contractor's name | |
| - NOC ID | |
| - Month and year (in MM/YYYY format) | |
| And from the bottom table : | |
| - Number of service days onshore | |
| - Number of standby days onshore in Doha | |
| - Number of service days offshore | |
| - Number of service days during weekends or public holidays | |
| - Number of standby and extended hitch days offshore | |
| - Number of extended hitch days onshore for rotational personnel | |
| - Number of over time hours onshore (Over 8 hours) | |
| - Number of over time hours offshore (Over 12 hours) | |
| - Number of Per Diem days for onshore/offshore rotational personnel | |
| - Number of training days | |
| - Number of travel days | |
| - Indicates whether the NOC representative's name and date are present on the document (e.g., 'approved', 'not approved'). | |
| - DD/MM/YY of the stamp | |
| - Name of the person who approved the document | |
| """ | |
| Noc_Rot_timesheet_prompt = """ | |
| Based on the provided timesheet details, extract the following information: | |
| - Full name of the person | |
| - Position title of the person | |
| - Work location | |
| - Contractor's name | |
| - PO number which is the Purchase order | |
| - NOC ID | |
| - Month and year (in MM/YYYY format) | |
| And from the bottom table : | |
| - Number of service days onshore | |
| - Number of standby days onshore in Doha | |
| - Number of service days offshore | |
| - Number of service days during weekends or public holidays | |
| - Number of standby and extended hitch days offshore | |
| - Number of extended hitch days onshore for rotational personnel | |
| - ONSHORE Overtime Hourly Rate (Over 8 hours) | |
| - OFFSHORE Overtime Hourly Rate (Over 12 hours) | |
| - Number of Per Diem days for onshore/offshore rotational personnel | |
| - Number of training days | |
| - Number of travel days | |
| - Indicates whether the NOC representative's name and date are present on the document (e.g., 'approved', 'not approved'). | |
| - DD/MM/YY of the stamp | |
| - Name of the person who approved the document | |
| """ | |
| invoice_first_page_prompt=""" | |
| Extract the following details from the provided purchase order document: | |
| - Purchase Order Number: The unique identifier for the purchase order. | |
| - Date: The date the purchase order was issued (format: DD/MM/YYYY). | |
| - Company Name: The name of the company issuing the purchase order. | |
| - Address: The address of the company issuing the purchase order. | |
| - Telephone Number: The company's telephone number (if provided). | |
| - Email: The company's email address (if provided). | |
| - Final Shipping Address: The destination shipping address (if specified). | |
| - Buyer Contact Name: The full name of the buyer's contact person. | |
| - Buyer Contact Company: The company name of the buyer contact. | |
| - Buyer Contact Telephone Number: The buyer contact's telephone number (if provided). | |
| - Buyer Contact Email: The buyer contact's email address (if provided). | |
| - Our Reference: Reference specified under the "Our Reference" section (if present). | |
| - Your Reference: Reference specified under the "Your Reference" section (if present). | |
| - Incoterms: Any applicable incoterms mentioned in the document (e.g., FOB, CIF). | |
| - Total Value of the Order: The total monetary value of the purchase order (include currency). | |
| - signed: Whether the document has been signed or not. | |
| - Signature Released By: The name of the person who authorized or released the purchase order. | |
| - Signature Date: The date when the order was signed (format: DD/MM/YYYY). | |
| """ | |
| invoice_item_page1_prompt = """ | |
| Given the document, extract the following information: | |
| - Position Title: The role or title mentioned in the document. | |
| - Location: The place where the service is being provided. | |
| - Mobilization Date: The date work begins in DD-MM-YYYY format. | |
| - End Date: The date the work ends in DD-MM-YYYY format. | |
| - Notice Period: The required notice period for resignation or termination. | |
| - Items: For each item in the document, provide: | |
| - Service Description Code: A code identifying the service. | |
| - Completion Date: The date the service was completed in DD-MM-YYYY format. | |
| - Quantity: The amount of the item/service provided. | |
| - Unit: The unit of measurement (e.g., Days, Hours). | |
| - Unit Price: The price per unit. | |
| - Net Amount: The total value for the item. | |
| - Service Details:A description of the service, which follows the corresponding row for the item. | |
| """ | |
| invoice_item_pages_prompt = """ | |
| Given the document, extract the following information: | |
| - Items: | |
| - Service Description Code: A code identifying the service. | |
| - Completion Date: The date the service was completed in DD-MM-YYYY format. | |
| - Quantity: The amount of the item/service provided. | |
| - Unit: The unit of measurement (e.g., Days, Hours). | |
| - Unit Price: The price per unit. | |
| - Net Amount: The total value for the item. | |
| - Service Details:A description of the service, which follows the corresponding row for the item. | |
| """ | |
| invoice_total_page_prompt = """ | |
| extract from the document: | |
| - Total Amount without taxes. | |
| - Total net amount of order. | |
| - Total amount of order. | |
| """ | |
| invoice_clauses_page_prompt = """ | |
| extract from the document the clauses """ | |
| # CHOOSING PARSER DEPENDING ON THE TYPE OF DOCUMENT | |
| Noc_Res_timeSheet_parser = JsonOutputParser(pydantic_object=Noc_Residential_TimeSheetInformation) | |
| Noc_Rot_timeSheet_parser = JsonOutputParser(pydantic_object=Noc_Rotational_TimeSheetInformation) | |
| Noc_PurchaseOrder_information_parser = JsonOutputParser(pydantic_object=Noc_PurchaseOrderInformation) | |
| Noc_PurchaseOrder_item1_parser = JsonOutputParser(pydantic_object=Noc_Document_Information) | |
| Noc_PurchaseOrder_items_parser = JsonOutputParser(pydantic_object=Noc_items) | |
| Noc_PurchaseOrder_total_parser = JsonOutputParser(pydantic_object=Noc_total) | |
| Noc_PurchaseOrder_clauses_parser = JsonOutputParser(pydantic_object=Noc_Clauses) | |
| Noc_invoice_parser_v1 = JsonOutputParser(pydantic_object=Noc_Invoice) | |
| Noc_timesheet_parser_v1 = JsonOutputParser(pydantic_object=Noc_TimeSheetInformation) |