# integração sefsc <> SmartCityTec

### Visão Geral do Fluxo

O processo de obtenção do documento segue as seguintes etapas

```
[Início] 
   │
   ├── 1. Recupera CPF do Solicitante (Contexto ou Env Var)
   ├── 2. Identifica tipo do contribuinte (CPF vs CNPJ pelo tamanho)
   ├── 3. Envia requisição POST para a API SEF-SC
   ├── 4. Valida a estrutura de retorno (ResultCode, Data)
   ├── 5. Mapeia o Tipo da Certidão (Status e Regras de Validade)
   └── 6. Decodifica o PDF (Base64) e gera o Resultado
```

#### Configurações e Variáveis de Ambiente

- **URL do Endpoint**: Configurada via `SEF_SC_API_URL` (padrão: `https://sat.sef.sc.gov.br/api/cnd/Certidao/Gerar`).
- **Solicitante Padrão:** `CPFCNPJ_SOLICITANTE_PADRAO`. Utilizado como \*fallback\* caso nenhum CPF do solicitante seja fornecido no contexto da requisição.

#### Estrutura de Comunicação da API

##### Requisição (POST)

  
O payload exige a identificação do contribuinte consultado e o CPF do solicitante.

```json
// Identificacao.Type = "Cnpj" se len == 14, caso contrário "Cpf"
{
  "Identificacao": {
    "Type": "Cnpj",
    "Value": "12075748000132"
  },
  "CpfSolicitante": {
    "Type": "Cpf",
    "Value": "00000000000"
  }
}
```

Resposta de Sucesso (Exemplo)

```json
{
  "ResultCode": "OK",
  "Data": {
    "Numero": "250140126228731",
    "Identificacao": {
      "Type": "Cnpj",
      "Value": "12075748000132"
    },
    "Nome": "CONSORCIO INTERFEDERATIVO SANTA CATARINA",
    "Tipo": "Negativa",
    "DataEmissao": "2025-04-22T15:47:40",
    "DataValidade": "2025-10-19T15:47:40",
    "Situacao": "Valida",
    "OrigemDebitos": null,
    "ArquivoCndPdf": {
      "CND": "250140126228731",
      "Nome": "CND_250140126228731.pdf",
      "Dados": "<Conteudo do arquivo em base64>",
      "ContentType": "application/pdf"
    }
  },
  "Messages": null
}
```

#### Regras de Negócio e Processamento de Dados

##### Mapeamento de Status do Documento

A partir do campo `"Tipo"` retornado na resposta, define-se o status interno:

<table border="1" id="bkmrk-tipo-retornado-%28sef-" style="border-collapse: collapse; width: 100%; height: 148.984px;"><colgroup><col style="width: 24.9383%;"></col><col style="width: 24.9383%;"></col><col style="width: 24.9383%;"></col><col style="width: 24.9383%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">**Tipo Retornado (SEF-SC)**</td><td style="height: 29.7969px;">**Status Interno**</td><td style="height: 29.7969px;">**Tipo da Certidão**</td><td style="height: 29.7969px;">**Observação / Mensagem**</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`Negativa`</td><td style="height: 29.7969px;">APROVADO</td><td style="height: 29.7969px;">NEGATIVA</td><td style="height: 29.7969px;">Sem pendências.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`Positiva`</td><td style="height: 29.7969px;">REPROVADO</td><td style="height: 29.7969px;">POSITIVA</td><td style="height: 29.7969px;">Apresenta pendências na SEF-SC.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`PositivaComEfeitoNegativa`</td><td style="height: 29.7969px;">APROVADO</td><td style="height: 29.7969px;">POSITIVA\_NEGATIVA</td><td style="height: 29.7969px;">Certidão positiva com efeito de negativa.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">*Qualquer outro*  
</td><td style="height: 29.7969px;">PENDENTE</td><td style="height: 29.7969px;">INDEFINIDO</td><td style="height: 29.7969px;">Tipo de certidão não reconhecido.</td></tr></tbody></table>

#### Tratamento de Datas

- **Timezone**: Se a string de data da API não contiver fuso horário explícito, é assumido o sufixo `-03:00` (horário de Brasília).
- **Ajuste para Certidão Positiva**: Caso a certidão seja classificada como `POSITIVA`, a data de validade é ajustada para o final do mesmo dia da emissão (`23:59:59.999999`).