# Configurações para Guiné-Bissau

Este documento descreve as configurações específicas implementadas para garantir compatibilidade com a Guiné-Bissau.

## Informações do País

- **Código do País**: GW (ISO 3166-1 alpha-2)
- **Nome**: Guiné-Bissau
- **Moeda**: XOF (Franco CFA da África Ocidental)
- **Símbolo da Moeda**: FCFA
- **Timezone**: Africa/Bissau (UTC+0)
- **Locale**: pt_GW (Português da Guiné-Bissau)
- **Código Telefônico**: +245

## Configurações Implementadas

### 1. Timezone

O sistema está configurado para usar o timezone `Africa/Bissau` (UTC+0) em todas as operações:

- **application.yml**: `spring.jackson.time-zone: Africa/Bissau`
- **SigefpApplication**: Configuração do timezone padrão na inicialização
- **LocaleConfig**: Bean para garantir timezone correto

### 2. Locale e Idioma

- **Locale padrão**: `pt_GW` (Português da Guiné-Bissau)
- **Fallback**: `pt` (Português genérico) se pt_GW não estiver disponível
- Configurado em `LocaleConfig` e `JacksonConfig`

### 3. Formatação de Datas

Formatos padrão implementados:

- **Data**: `dd/MM/yyyy` (ex: 25/12/2024)
- **Data e Hora**: `dd/MM/yyyy HH:mm` (ex: 25/12/2024 14:30)
- **Data e Hora Completo**: `dd/MM/yyyy HH:mm:ss` (ex: 25/12/2024 14:30:45)

### 4. Formatação de Moeda

- **Código**: XOF
- **Símbolo**: FCFA
- **Formato**: Números com separador de milhares (ponto) e decimal (vírgula)
- **Exemplo**: `1.234,56 FCFA`

### 5. Formatação de Números

- **Separador de milhares**: Ponto (.)
- **Separador decimal**: Vírgula (,)
- **Exemplo**: `1.234,56`

### 6. Utilitários

A classe `GuineaBissauConfig` fornece métodos utilitários para:

- `formatCurrency(BigDecimal)`: Formata valores monetários
- `formatNumber(BigDecimal)`: Formata números decimais
- `formatInteger(Long)`: Formata números inteiros
- `getDateFormatter()`: Retorna formatter para datas
- `getDateTimeFormatter()`: Retorna formatter para data/hora

## Uso

### No Backend (Java)

```java
import br.gov.sigefp.common.util.GuineaBissauConfig;
import java.math.BigDecimal;

// Formatar moeda
BigDecimal valor = new BigDecimal("1234.56");
String formatado = GuineaBissauConfig.formatCurrency(valor);
// Resultado: "1.234,56 FCFA"

// Formatar número
String numero = GuineaBissauConfig.formatNumber(valor);
// Resultado: "1.234,56"

// Formatar data
LocalDate data = LocalDate.now();
String dataFormatada = data.format(GuineaBissauConfig.getDateFormatter());
// Resultado: "25/12/2024"
```

### Configuração de Perfil

Para usar o perfil específico da Guiné-Bissau:

```bash
mvn spring-boot:run -Dspring-boot.run.profiles=gw
```

Ou definir a variável de ambiente:

```bash
export SPRING_PROFILES_ACTIVE=gw
```

## Arquivos de Configuração

- `application.yml`: Configuração base com timezone e locale
- `application-gw.yml`: Perfil específico para Guiné-Bissau
- `LocaleConfig.java`: Configuração de locale e timezone
- `JacksonConfig.java`: Configuração de serialização JSON
- `WebConfig.java`: Configuração de formatação web
- `GuineaBissauConfig.java`: Utilitários e constantes

## Validações

O sistema valida automaticamente:

- Timezone em todas as operações de data/hora
- Locale em formatação de números e moedas
- Formato de datas em serialização JSON
- Formato de números em serialização JSON

## Notas Importantes

1. **PostgreSQL**: Certifique-se de que o PostgreSQL está configurado com timezone `Africa/Bissau`:
   ```sql
   SET timezone = 'Africa/Bissau';
   ```

2. **JVM**: O timezone da JVM é configurado automaticamente na inicialização da aplicação.

3. **Frontend**: O frontend deve usar as mesmas configurações de locale e timezone para consistência.

4. **Moeda**: XOF (Franco CFA) é a moeda oficial da Guiné-Bissau e é compartilhada com outros países da África Ocidental.


