# Gerenciamento de Planos Customizados

Organizações corporativas agora podem criar planos de assinatura customizados e atribuí-los a organizações filhas com configuração de quantidade de documentos, créditos de verificação, tier e comportamento de renovação.

#### Como utilizar

1. Crie um plano de assinatura usando `createSubscriptionPlan`
2. Liste seus planos com `subscriptionPlans`
3. Atribua planos a organizações filhas usando `updateOrganizationSubscription`

### Queries

#### `subscriptionPlans`

```graphql
query SubscriptionPlans(
  $id: String,      # Opcional: ID específico do plano para recuperar
  $limit: Int,      # Opcional: Máximo de resultados por página (padrão: 60, máx: 60)
  $page: Int        # Opcional: Número da página (padrão: 1)
) {
  subscriptionPlans(id: $id, limit: $limit, page: $page) {
    # Consulte o tipo CorporatePlan abaixo
    id
    display_name
    document_amount
    credit_amount
    credits_recurrence_method
    interval
    interval_type
    tier
  }
}
```

### Mutations

#### `createSubscriptionPlan`

```graphql
mutation CreateSubscriptionPlan(
  $plan: SubscriptionPlanInput!  # Consulte SubscriptionPlanInput abaixo
) {
  createSubscriptionPlan(plan: $plan) {
    # Consulte o tipo CorporatePlan abaixo
    id
    display_name
    document_amount
    credit_amount
    credits_recurrence_method
    interval
    interval_type
    tier
  }
}
```

#### `updateSubscriptionPlan`

```graphql
mutation UpdateSubscriptionPlan(
  $id: String!,                  # ID do plano a ser atualizado
  $plan: SubscriptionPlanInput!  # Consulte SubscriptionPlanInput abaixo
) {
  updateSubscriptionPlan(id: $id, plan: $plan) {
    # Consulte o tipo CorporatePlan abaixo
    id
    display_name
    document_amount
    credit_amount
    credits_recurrence_method
    interval
    interval_type
    tier
  }
}
```

#### `updateOrganizationSubscription`

```graphql
mutation UpdateOrganizationSubscription(
  $organization_id: Int!,              # ID da organização filha para atualizar
  $plan_id: String!,                   # ID do plano para atribuir
  $renew_date: InternationalDateScalar # Opcional: Data de renovação customizada (ex: '2026-12-01') (Padrão: Próximo intervalo de recorrência)
) {
  updateOrganizationSubscription(
    organization_id: $organization_id,
    plan_id: $plan_id,
    renew_date: $renew_date
  ) {
    # Consulte o tipo Subscription abaixo
    name
    documents
    credits
    credits_bonus
    renew_at
    bought_at
  }
}
```

### Referência do Schema

#### Tipos de Input

**`SubscriptionPlanInput`**

```graphql
input SubscriptionPlanInput {
  display_name: String!                    # Nome do plano
  document_amount: Int!                    # Quantidade de documentos disponíveis durante o intervalo (> 0)
  credit_amount: Int!                      # Créditos de verificação disponíveis durante o intervalo (> 0)
  interval: Int                            # Fator do intervalo (padrão: 1) (ex: interval: 1 & interval_type: MONTH ... renovação a cada 1 mês)
  interval_type: IntervalTypeEnum          # Tipo do intervalo (padrão: MONTH) (ex: interval: 1 & interval_type: MONTH ... renovação a cada 1 mês)
  tier: TierEnum                           # Tier do plano (padrão: FREE)
  credits_recurrence_method: CreditsRecurrenceEnum # Comportamento dos créditos de verificação (padrão: DETACHED)
}
```

#### Tipos de Retorno

**`CorporatePlan`**

```graphql
type CorporatePlan {
  id: String!                                       # ID do plano
  display_name: String!                             # Nome de exibição do plano
  document_amount: Int!                             # Quantidade de documentos disponíveis durante o intervalo
  credit_amount: Int!                               # Créditos de verificação por intervalo
  credits_recurrence_method: CreditsRecurrenceEnum! # Comportamento de renovação dos créditos
  interval: Int!                                    # Fator do intervalo de cobrança
  interval_type: IntervalTypeEnum!                  # Tipo do intervalo de cobrança
  tier: TierEnum!                                   # Nível do tier do plano
}
```

**`Subscription`**

```graphql
type Subscription {
  name: String                     # Nome de exibição do plano
  documents: Int!                  # Contagem de documentos disponíveis
  credits: Int                     # Créditos de verificação disponíveis
  credits_bonus: Int               # Créditos de verificação destacados (Ao usar a opção DETACHED)
  renew_at: TimestampScalar        # Data da próxima renovação automática
  bought_at: TimestampScalar       # Data de compra/criação
}
```

#### Enums

**`CreditsRecurrenceEnum`**

* `DETACHED`: O saldo de créditos de verificação da renovação é um valor independente, facilitando que a renovação funcione junto com créditos adquiridos
* `OVERRIDE`: O saldo de créditos de verificação é resetado para a quantidade do plano se estiver menor na renovação

**`IntervalTypeEnum`**

* `DAY`: Atualização diária
* `WEEK`: Atualização semanal
* `MONTH`: Atualização mensal
* `YEAR`: Atualização anual

**`TierEnum`**

* `FREE`: Este tier pode usar apenas recursos básicos
* `PROFESSIONAL`: Este tier permite o uso de todos os recursos (Marcado com "Pro" na plataforma)
