# Company and plan configuration

The company record and the four configuration sections that make up a plan.

## Company

```protobuf
message Company {
  string uuid = 1;
  string business_name = 2;
  optional string business_phone = 3;
  string email = 4;
  com.basiccapital.common.external.Address company_address = 5;
  EntityType entity_type = 6;
  string ein = 7;
  optional string state_of_organization = 8;
  Status status = 9;
}
```

**References:** [EntityType](/core-data-types/company-and-plan#entitytype), [Status](/core-data-types/company-and-plan#status)

## EntityType

```protobuf
enum EntityType {
  UNKNOWN_COMPANY_ENTITY_TYPE = 0;
  C_CORP = 1;
  S_CORP = 2;
  LLC = 3;
  SOLE_PROPRIETORSHIP = 4;
  LLP = 5;
  NON_PROFIT = 6;
  PARTNERSHIP = 7;
  ELECTING_CHURCH = 9;
  OTHER = 10;
}
```

## Status

```protobuf
enum Status {
  UNKNOWN_STATUS = 0;
  ACTIVE = 1;
  ONBOARDING = 2;
  CREATED = 3;
  INACTIVE = 4;
  LAPSED = 5;
}
```

## PlanConfiguration

```protobuf
message PlanConfiguration {
  ManagementOption management_option = 1;
  InvestmentConfig investment_config = 2;
  CoreConfig core_config = 3;
  optional MigrationConfig plan_migration_info = 4;

  enum Status {
    UNKNOWN_STATUS = 0;
    DRAFT = 1;
    IN_REVIEW = 2;
    READY_FOR_SUBMISSION = 3;
    SUBMITTED = 4;
  }

  Status status = 5;
}
```

**References:** [CoreConfig](/core-data-types/company-and-plan#coreconfig), [InvestmentConfig](/core-data-types/company-and-plan#investmentconfig), [ManagementOption](/core-data-types/company-and-plan#managementoption), [MigrationConfig](/core-data-types/company-and-plan#migrationconfig)

## ConfigurationSectionStatus

```protobuf
enum ConfigurationSectionStatus {
  UNKNOWN_CONFIGURATION_SECTION_STATUS = 0;
  INCOMPLETE = 1;
  COMPLETE = 2;
  LOCKED_INCOMPLETE = 3;
  LOCKED_COMPLETE = 4;
}
```

## ManagementOption

```protobuf
message ManagementOption {
  repeated ManagementOptionOffering management_option_offerings = 1;
  ManagementOptionType type = 2;
  string summary = 3;
  ConfigurationSectionStatus status = 4;
}
```

**References:** [ConfigurationSectionStatus](/core-data-types/company-and-plan#configurationsectionstatus), [ManagementOptionOffering](/core-data-types/company-and-plan#managementoptionoffering), [ManagementOptionType](/core-data-types/company-and-plan#managementoptiontype)

## ManagementOptionOffering

```protobuf
message ManagementOptionOffering {
  enum ManagementOptionOfferingType {
    UNKNOWN = 0;
    FIDUCIARY_316 = 1;
    FIDUCIARY_338 = 2;
    FORM_5500_FILING = 3;
    CURATED_INVESTMENT_OPTION_SELECTION = 4;
    ROTH_401K = 5;
    TRADITIONAL_401K = 6;
    EMPLOYER_MATCH = 7;
    SAFE_HARBOR = 8;
    COMPLIANCE_TESTING = 9;
    MEGA_BACKDOOR_ROTH = 10;
    BROKERAGE_WINDOW = 11;
  }

  ManagementOptionOfferingType type = 1;
  bool isSupported = 2;
}
```

## ManagementOptionType

```protobuf
enum ManagementOptionType {
  UNKNOWN_MANAGEMENT_TYPE = 0;
  PARTNER_USP_FULLY_MANAGED = 1;
  PARTNER_USP_EMPLOYER_MANAGED = 2;
  PARTNER_PEO = 3;
  PARTNER_IC = 4;
}
```

## InvestmentConfig

```protobuf
message InvestmentConfig {
  QdiaType qdia = 1;
  repeated AssetMetadata investment_options = 2;
  optional ConfigurationSectionStatus status = 3;
}
```

**References:** [AssetMetadata](/core-data-types/accounts-and-investments#assetmetadata), [ConfigurationSectionStatus](/core-data-types/company-and-plan#configurationsectionstatus), [QdiaType](/core-data-types/company-and-plan#qdiatype)

## QdiaType

```protobuf
enum QdiaType {
  UNKNOWN_QDIA_TYPE = 0;
  FIDELITY = 1;
  VANGUARD = 2;
  OTHER_QDIA_TYPE = 3;
}
```

## CoreConfig

```protobuf
message CoreConfig {
  repeated EmployerMatchTier employer_match_tiers = 1;
  optional bool enable_roth = 2;
  optional bool enable_plan401K_loans = 3;
  optional bool enable_mega_backdoor_roth = 4;
  optional int32 employee_auto_enrollment_bps = 5;
  optional int32 employee_auto_enrollment_increase_bps = 6;
  optional Date ideal_start_date = 7;
  optional EligibilityConfig eligibility_config = 8;
  ConfigurationSectionStatus status = 9;
}
```

**References:** [ConfigurationSectionStatus](/core-data-types/company-and-plan#configurationsectionstatus), [Date](/core-data-types/common#date), [EligibilityConfig](/core-data-types/company-and-plan#eligibilityconfig), [EmployerMatchTier](/core-data-types/company-and-plan#employermatchtier)

## EligibilityConfig

```protobuf
message EligibilityConfig {
  message HoursConfig {
    int32 hours_required = 1;
    int32 rolling_period = 2;
  }

  oneof period {
    int32 days_since_start = 1;
    HoursConfig hours_config = 2;
  }
}
```

## EmployerMatchTier

```protobuf
message EmployerMatchTier {
  int32 match_bps = 1;
  int32 match_cap_bps = 2;
}
```

## MigrationConfig

```protobuf
message MigrationConfig {
  string migration_record_keeper = 1;
}
```

## KnownRecordKeeper

```protobuf
message KnownRecordKeeper {
  string name = 1;
  optional string logo_url = 2;
}
```

## BankAccount

```protobuf
message BankAccount {
  string bank_account_uuid = 1;
  string institution_name = 2;
  string last_4 = 3;
  bool is_verified = 4;
}
```