# Flight Planning Automated Testing Interface (v0.7.0)

Esta interface é fornecida por um USS (UAS Service Supplier) que deseja participar de testes automatizados envolvendo tentativas de planejamento de voo. Um cliente (geralmente o `uss_qualifier`) instrui um usuário virtual a interagir com a interface do USS para planejar, atualizar e fechar planos de voo.

## Segurança (Autenticação)

- **Tipo:** OAuth2 (Client Credentials)
- **Escopos Necessários:**
    
    
    - `interuss.flight_planning.direct_automated_test`: Permite determinar a prontidão do USS para o teste e instruir o administrador a preparar a área de testes.
    - `interuss.flight_planning.plan`: Permite enviar instruções ao usuário virtual para planejar, modificar ou fechar um plano de voo.
- **Descrição:** O token JWT deve ser enviado no header `Authorization: Bearer <token>`.

## Endpoints

### 1. Consultar Status da Interface

**Rota:** `GET /status`

Obtém o status atual desta interface de testes automatizados.

- **Escopo Exigido:** `interuss.flight_planning.direct_automated_test`
- **Respostas Esperadas:**
    
    
    - **200 OK:** Interface disponível. Retorna se está `Starting` ou `Ready`.
    - **404 Not Found:** A interface de testes não está disponível.

### 2. Limpar Área (Clear Area)

**Rota:** `POST /clear_area_requests`

Solicita que o administrador do USS cancele e remova todos os planos de voo gerenciados por ele que interceptem a área especificada no payload.

- **Escopo Exigido:** `interuss.flight_planning.direct_automated_test`
- **Corpo da Requisição:** Requer `request_id` único e a extensão da área (`extent`).
- **Respostas Esperadas:**
    
    
    - **200 OK:** Área limpa com sucesso. Retorna `ClearAreaResponse` (indicando sucesso ou detalhes de falha na limpeza).

### 3. Criar ou Atualizar Plano de Voo (Upsert)

**Rota:** `PUT /flight_plans/{flight_plan_id}`

Simula a intenção de um usuário de enviar um plano de voo novo ou atualizado.

- **Escopo Exigido:** `interuss.flight_planning.plan`
- **Parâmetros de Rota:** `flight_plan_id` (obrigatório) - UUID formato v4. Ex: `03e5572a-f733-49af-bc14-8a18bd53ee39`
- **Corpo da Requisição:** Requer o objeto `UpsertFlightPlanRequest`.
- **Respostas Esperadas:**
    
    
    - **200 OK:** Dados processados com sucesso. Retorna `UpsertFlightPlanResponse` com o status do planejamento (`Completed`, `Rejected`, `Failed`, etc).
    - **409 Conflict:** Conflito de `request_id` duplicado ou outra condição de conflito.

### 4. Fechar/Deletar Plano de Voo

**Rota:** `DELETE /flight_plans/{flight_plan_id}`

Permite que o diretor de testes instrua o USS a remover um plano de voo que não é mais necessário para os testes.

- **Escopo Exigido:** `interuss.flight_planning.direct_automated_test`
- **Parâmetros de Rota:** `flight_plan_id` (obrigatório).
- **Respostas Esperadas:**
    
    
    - **200 OK:** Plano de voo deletado com sucesso. Retorna `DeleteFlightPlanResponse`.
    - **404 Not Found:** Plano de voo não encontrado (já pode ter sido deletado).

### 5. Consultar Notificações de Usuário

**Rota:** `GET /user_notifications`

Retorna a lista de notificações observadas pelo usuário virtual. Devem estar disponíveis para consulta em até 5 segundos após a observação.

- **Escopo Exigido:** `interuss.flight_planning.plan`
- **Parâmetros de Query:** \* `after` (obrigatório): Limite inferior de tempo.
    
    
    - `before` (opcional): Limite superior de tempo (padrão é o momento atual).
- **Respostas Esperadas:**
    
    
    - **200 OK:** Notificações recuperadas.
    - **400 Bad Request:** Parâmetros de tempo ausentes ou inválidos.

## Payload de Exemplo (JSON)

Formato simplificado esperado para a criação/atualização de um plano de voo (`PUT /flight_plans/{flight_plan_id}`):

<div _ngcontent-ng-c2141869219="" class="code-block ng-tns-c2141869219-71 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwiB9JTg8o6VAxUAAAAAHQAAAAAQpwQ" decode-data-ved="1" id="bkmrk-json" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_5240a7bcde9addbc","c_c96b9eb05b5ddc8a",null,"rc_2ba1c3b0e3e849bf",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c2141869219="" class="formatted-code-block-internal-container ng-tns-c2141869219-71"><div _ngcontent-ng-c2141869219="" class="animated-opacity ng-tns-c2141869219-71"><div _ngcontent-ng-c2141869219="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2141869219-71 ng-star-inserted"><span class="ng-tns-c2141869219-71">JSON</span><div _ngcontent-ng-c2141869219="" class="buttons ng-tns-c2141869219-71 ng-star-inserted"><button aria-label="Baixar código" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Copiar o código" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
{
  "request_id": "b5a9b837-1234-4a2b-9876-c5096a295a12",
  "execution_style": "IfAllowed",
  "flight_plan": {
    "basic_information": {
      "usage_state": "Planned",
      "description": "Medical supplies delivery operated by Example Drone Company",
      "utm_id": "ae1fa066-6d68-4018-8274-af867966978e",
      "area": [
        {
          "volume": {
            "outline_polygon": {
              "vertices": [
                { "lat": -23.179, "lng": -45.887 },
                { "lat": -23.180, "lng": -45.888 }
              ]
            },
            "altitude_lower": { "value": 0, "reference": "W84", "units": "M" },
            "altitude_upper": { "value": 120, "reference": "W84", "units": "M" }
          },
          "time_start": { "value": "2024-04-22T16:30:00Z", "format": "RFC3339" },
          "time_end": { "value": "2024-04-22T17:30:00Z", "format": "RFC3339" }
        }
      ]
    }
  }
}
```