package com.platform2easy.genesis.domain.model;

import jakarta.persistence.*;
import lombok.*;
import java.time.LocalDate;
import java.time.OffsetDateTime;

@Entity
@Table(name = "cpr")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Cpr {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @EqualsAndHashCode.Include
    @Column(name = "cpr_id")
    private Long id;

    @Column(name = "cpr_additive", nullable = false)
    private String additive;

    @Column(name = "cpr_agents_sender_phone", nullable = false)
    private String senderPhone;

    @Column(name = "cpr_agents_sender_cep", nullable = false)
    private String senderCep;

    @Column(name = "cpr_agents_creditor_document_number", nullable = false)
    private String creditorDocumentNumber;

    @Column(name = "cpr_agents_creditor_status", nullable = false)
    private Boolean creditorStatus;

    @Column(name = "cpr_agents_creditor_person_type", nullable = false)
    private Integer creditorPersonType;

    @Column(name = "cpr_agents_endorsement_date", nullable = false)
    private String endorsementDate;

    @Column(name = "cpr_agents_endorser", nullable = false)
    private Boolean endorser;

    @Column(name = "cpr_agents_creditor_id", nullable = false)
    private Integer creditorId;

    @Column(name = "cpr_agents_wallet_holder", nullable = false)
    private String walletHolder;

    @Column(name = "cpr_agents_cnpj_holder", nullable = false)
    private String cnpjHolder;

    @Column(name = "cpr_agents_debtor_cep", nullable = false)
    private String debtorCep;

    @Column(name = "cpr_agents_debtor_email", nullable = false)
    private String debtorEmail;

    @Column(name = "cpr_agents_debtor_name_corporate_name", nullable = false)
    private String debtorNameCorporateName;

    @Column(name = "cpr_agents_debtor_phone_number", nullable = false)
    private String debtorPhoneNumber;

    @Column(name = "cpr_agents_debtor_document_number", nullable = false)
    private String debtorDocumentNumber;

    @Column(name = "cpr_agents_debtor_status", nullable = false)
    private Boolean debtorStatus;

    @Column(name = "cpr_agents_debtor_person_type", nullable = false)
    private Integer debtorPersonType;

    @Column(name = "cpr_agents_debtor_id", nullable = false)
    private Integer debtorId;

    @Column(name = "cpr_agents_sender_email", nullable = false)
    private String senderEmail;

    @Column(name = "cpr_agents_sender_credit_agency", nullable = false)
    private String senderCreditAgency;

    @Column(name = "cpr_agents_sender_credit_bank", nullable = false)
    private String senderCreditBank;

    @Column(name = "cpr_agents_sender_credit_checking_account", nullable = false)
    private String senderCreditCheckingAccount;

    @Column(name = "cpr_agents_guarantor_phone", nullable = false)
    private String guarantorPhone;

    @Column(name = "cpr_agents_guarantor_email", nullable = false)
    private String guarantorEmail;

    @Column(name = "cpr_agents_guarantor_cep", nullable = false)
    private String guarantorCep;

    @Column(name = "cpr_agents_guarantor_document_number", nullable = false)
    private String guarantorDocumentNumber;

    @Column(name = "cpr_agents_guarantor_status", nullable = false)
    private Boolean guarantorStatus;

    @Column(name = "cpr_agents_guarantor_person_type", nullable = false)
    private Integer guarantorPersonType;

    @Column(name = "cpr_agents_guarantor_id", nullable = false)
    private Integer guarantorId;

    @Column(name = "cpr_agents_guarantor_type", nullable = false)
    private Integer guarantorType;

    @Column(name = "cpr_agents_sender_document_number", nullable = false)
    private String senderDocumentNumber;

    @Column(name = "cpr_agents_sender_person_type", nullable = false)
    private Integer senderPersonType;

    @Column(name = "cpr_area_total", nullable = false)
    private Double areaTotal;

    @Column(name = "cpr_area_registry", nullable = false)
    private String areaRegistry;

    @Column(name = "cpr_area_cep", nullable = false)
    private String areaCep;

    @Column(name = "cpr_area_address", nullable = false)
    private String areaAddress;

    @Column(name = "cpr_area_property_unitary_fraction", nullable = false)
    private String areaPropertyUnitaryFraction;

    @Column(name = "cpr_area_id", nullable = false)
    private Integer areaId;

    @Column(name = "cpr_area_latitude", nullable = false)
    private Double areaLatitude;

    @Column(name = "cpr_area_logitude", nullable = false)
    private Double areaLongitude;

    @Column(name = "cpr_area_registration", nullable = false)
    private String areaRegistration;

    @Column(name = "cpr_area_farm_name", nullable = false)
    private String areaFarmName;

    @Column(name = "cpr_area_product_cpr_necessery_area", nullable = false)
    private Double productCprNecesseryArea;

    @Column(name = "cpr_area_product_total_productive_area", nullable = false)
    private Double productTotalProductiveArea;

    @Column(name = "cpr_area_product_class_type_ph", nullable = false)
    private String productClassTypePh;

    @Column(name = "cpr_area_product_culture", nullable = false)
    private String productCulture;

    @Column(name = "cpr_area_product_culture_specificity", nullable = false)
    private String productCultureSpecificity;

    @Column(name = "cpr_area_product_packaging_method", nullable = false)
    private String productPackagingMethod;

    @Column(name = "cpr_area_product_id", nullable = false)
    private Integer productId;

    @Column(name = "cpr_area_product_assessment_index", nullable = false)
    private String productAssessmentIndex;

    @Column(name = "cpr_area_product_institution_responsible_index", nullable = false)
    private String productInstitutionResponsibleIndex;

    @Column(name = "cpr_area_product_delivery_location_city", nullable = false)
    private String productDeliveryLocationCity;

    @Column(name = "cpr_area_product_delivery_location_regional", nullable = false)
    private String productDeliveryLocationRegional;

    @Column(name = "cpr_area_product_delivery_location_fu", nullable = false)
    private String productDeliveryLocationFu;

    @Column(name = "cpr_area_product_volume_price", nullable = false)
    private Double productVolumePrice;

    @Column(name = "cpr_area_product_production", nullable = false)
    private String productProduction;

    @Column(name = "cpr_area_product_productivity", nullable = false)
    private String productProductivity;

    @Column(name = "cpr_area_product_harvest", nullable = false)
    private String productHarvest;

    @Column(name = "cpr_area_product_situation", nullable = false)
    private String productSituation;

    @Column(name = "cpr_area_product_status", nullable = false)
    private Boolean productStatus;

    @Column(name = "cpr_area_product_volume_mesuring_unit", nullable = false)
    private String productVolumeMesuringUnit;

    @Column(name = "cpr_area_product_register_value", nullable = false)
    private String productRegisterValue;

    @Column(name = "cpr_area_product_volume_quantity", nullable = false)
    private String productVolumeQuantity;

    @Column(name = "cpr_area_owner", nullable = false)
    private String areaOwner;

    @Column(name = "cpr_area_legal_reserve", nullable = false)
    private Double areaLegalReserve;

    @Column(name = "cpr_area_status", nullable = false)
    private Boolean areaStatus;

    @Column(name = "cpr_contracts_registration_authorized_and_clear_fi_record", nullable = false)
    private Boolean contractsRegistrationAuthorizedAndClearFiRecord;

    @Column(name = "cpr_contracts_credit_operation_contract_code", nullable = false)
    private String contractsCreditOperationContractCode;

    @Column(name = "cpr_contracts_contract_scr", nullable = false)
    private String contractsContractScr;

    @Column(name = "cpr_contracts_coin_code", nullable = false)
    private String contractsCoinCode;

    @Column(name = "cpr_contracts_other_fi_discharge_date", nullable = false)
    private OffsetDateTime contractsOtherFiDischargeDate;

    @Column(name = "cpr_contracts_fi_hiring_date", nullable = false)
    private OffsetDateTime contractsFiHiringDate;

    @Column(name = "cpr_contracts_original_register_date", nullable = false)
    private OffsetDateTime contractsOriginalRegisterDate;

    @Column(name = "cpr_contracts_transaction_date", nullable = false)
    private LocalDate contractsTransactionDate;

    @Column(name = "cpr_contracts_scr_standardized_identification", nullable = false)
    private String contractsScrStandardizedIdentification;

    @Column(name = "cpr_contracts_indexation", nullable = false)
    private String contractsIndexation;

    @Column(name = "cpr_contracts_operation_nature", nullable = false)
    private String contractsOperationNature;

    @Column(name = "cpr_contracts_indexing_percentage", nullable = false)
    private Double contractsIndexingPercentage;

    @Column(name = "cpr_contracts_installments_quantity_contracted", nullable = false)
    private Integer contractsInstallmentsQuantityContracted;

    @Column(name = "cpr_contracts_extern_reference", nullable = false)
    private String contractsExternReference;

    @Column(name = "cpr_contracts_operation_interest_rate", nullable = false)
    private Double contractsOperationInterestRate;

    @Column(name = "cpr_contracts_asset_type", nullable = false)
    private String contractsAssetType;

    @Column(name = "cpr_contracts_contract_financed_value", nullable = false)
    private Double contractsContractFinancedValue;

    @Column(name = "cpr_contracts_credit_liquid_value", nullable = false)
    private Double contractsCreditLiquidValue;

    @Column(name = "cpr_contracts_credit_total_value", nullable = false)
    private Double contractsCreditTotalValue;

    @Column(name = "cpr_emission_delivery_date", nullable = false)
    private LocalDate emissionDeliveryDate;

    @Column(name = "cpr_emission_id", nullable = false)
    private Integer emissionId;

    @Column(name = "cpr_emission_location", nullable = false)
    private String emissionLocation;

    @Column(name = "cpr_emission_issuer_corporate_name", nullable = false)
    private String emissionIssuerCorporateName;

    @Column(name = "cpr_emission_cpr_type", nullable = false)
    private String emissionCprType;

    @Column(name = "cpr_guarantee_status", nullable = false)
    private Boolean guaranteeStatus;

    @Column(name = "cpr_guarantee_id", nullable = false)
    private Integer guaranteeId;

    @Column(name = "cpr_guarantee_type", nullable = false)
    private String guaranteeType;

    @Column(name = "cpr_installment_control_code", nullable = false)
    private String installmentControlCode;

    @Column(name = "cpr_installment_due_date", nullable = false)
    private String installmentDueDate;

    @Column(name = "cpr_installment_register_id", nullable = false)
    private Integer installmentRegisterId;

    @Column(name = "cpr_installment_number", nullable = false)
    private Integer installmentNumber;

    @Column(name = "cpr_installment_assignment_price", nullable = false)
    private Integer installmentAssignmentPrice;

    @Column(name = "cpr_installment_status", nullable = false)
    private Integer installmentStatus;

    @Column(name = "cpr_installment_value", nullable = false)
    private Double installmentValue;

    @Column(name = "cpr_installment_main_value", nullable = false)
    private Double installmentMainValue;

    @Column(name = "cpr_status", nullable = false)
    private String status;
}