Tipos e campos
O gerador suporta doze tipos fundamentais (kinds). Cada chamada retorna um objeto contendo metadados (kind, seed, count) e a lista de items:
1. Pessoa (person)
Representa uma pessoa física com dados demográficos e endereço coerente:
name(string): Nome completofirstName,lastName(string): Primeiro nome e sobrenomegender(string):"F"ou"M"birthDate(string): Data de nascimento no padrão ISOYYYY-MM-DDage(number): Idade calculada na data de referênciacpf(string): CPF válido com 11 dígitos numéricosrg(string): Registro Geral (padrão São Paulo)cnh(string): Carteira Nacional de Habilitação (11 dígitos, DENATRAN)pis(string): PIS/PASEP (11 dígitos, ponderação 3-2)motherName(string): Nome completo da mãeemail(string): E-mail em domínio seguro RFC 2606 (ex:@example.com)mobilePhone(string): Celular com DDD correspondente à cidade do endereço e nono dígito (nunca todos os dígitos iguais)phone(string): Telefone fixo com DDD e prefixo comercial/residencial [2-5]address(object): Objeto de endereço completo correspondente
2. Empresa (company)
Representa uma pessoa jurídica com sócios e atividade econômica:
corporateName(string): Razão socialtradeName(string): Nome fantasiacnpj(string): CNPJ filial0001com dígitos verificadores válidosstateRegistration,municipalRegistration(string): Inscrições estadual e municipalopeningDate(string): Data de fundação/abertura (YYYY-MM-DD)size(string): Porte:"MEI","ME","EPP"ou"DEMAIS"activity(object): Atividade CNAE comcnae(código oficial) edescriptionemail,phone,mobilePhone(string): Contatos comerciaiswebsite(string): Endereço web seguro (ex:https://www.<slug>.example.com)address(object): Endereço da sede da empresapartners(array): Lista de 1 a 3 pessoas físicas (Person[]) sócias no mesmo estado
3. Endereço (address)
Endereço geográfico real cobrindo todos os 27 estados da federação:
postalCode(string): CEP de 8 dígitos na faixa oficial da cidadestreet(string): Tipo de logradouro e nome da rua/avenidanumber(string): Número do imóvel ("1"a"4999"ou"S/N")complement(string): Complemento (apto, sala, casa, bloco ou vazio)district(string): Bairrocity(string): Nome do municípiostate(string): Sigla da Unidade Federativa (UF, ex:"SP")stateName(string): Nome por extenso do estadoibgeCode(string): Código IBGE oficial de 7 dígitoscountry(string):"Brasil"
4. Documentos individuais (cpf, cnpj, cnh, pis, rg)
Cada documento avulso retorna um objeto simplificado:
value(string): Valor numérico sem máscara (ou com dígito verificador)formatted(string): Valor formatado com pontuação e traços padrão
5. Cartão de crédito (credit-card)
Cartão de teste pronto para ser transacionado:
holderName(string): Nome do titular em caixa altanumber(string): Número do cartão (16 dígitos)brand(string): Bandeira:VISA,MASTERCARD,ELOouAMEXexpiryMonth(string): Mês de expiração ("01"a"12")expiryYear(string): Ano de expiração (1 a 6 anos à frente da data de referência)ccv(string): Código de segurança de 3 dígitosoutcome(string): Comportamento no Asaas:"APPROVE","DECLINE"ou"UNKNOWN"
6. Conta bancária (bank-account)
Conta corrente ou poupança em instituições financeiras brasileiras reais:
bank(object): Dados do banco comcode(ex:"001"),name(ex:"Banco do Brasil") eispbagency,agencyDigit(string): Agência e dígito verificadoraccount,accountDigit(string): Número da conta e dígitotype(string): Modalidade:"CONTA_CORRENTE"ou"CONTA_POUPANCA"
7. Chave Pix (pix-key)
Chave de endereçamento do arranjo Pix do Banco Central:
type(string): Modalidade:"CPF","CNPJ","EMAIL","PHONE"ou"EVP"key(string): Chave no formato adequado (+55 com DDD para telefone, UUID v4 para EVP)
8. Cobrança (charge)
Dados de emissão financeira prontos para envio ao Asaas:
billingType(string): Forma de pagamento:"PIX","BOLETO"ou"CREDIT_CARD"valueCents(number): Valor em centavos inteiros (ex:15000)value(number): Valor monetário em BRL com duas casas decimais (ex:150.00)dueDate(string): Vencimento no formatoYYYY-MM-DD(entre 0 e 30 dias à frente denow)description(string): Descrição do serviço ou produto cobradoexternalReference(string): Identificador único no formatoGEN-<8 caracteres>
Parâmetros de consulta
| Parâmetro | Tipo | Valores e limites | Descrição |
|---|---|---|---|
count |
Inteiro | 1 a 1000 (padrão 1) |
Quantidade de itens a gerar na mesma resposta. Valores fora do limite são ajustados automaticamente para o intervalo permitido. |
seed |
String / Número | Qualquer string alfanumérica | Semente para o gerador pseudoaleatório. Garante reproducibilidade total da resposta. |
formatted |
Booleano | true, false (padrão false) |
Aplica máscara visual em documentos (CPF, CNPJ, PIS, RG), CEPs e números de telefone. |
state |
String | Sigla de 2 letras (ex: SP, RJ, MG) |
Filtra o estado brasileiro para endereços, DDD de telefones e sócios da empresa. |
gender |
String | F ou M |
Fixa o gênero para nomes e cadastros de pessoa física. |
outcome |
String | APPROVE, DECLINE, RANDOM |
Define o comportamento do cartão de crédito no simulador do Asaas. |
billingType |
String | PIX, BOLETO, CREDIT_CARD |
Fixa a modalidade de pagamento em cobranças geradas. |
now |
Data | Formato YYYY-MM-DD ou ISO 8601 |
Data de referência para cálculo de idades, vencimentos de cobrança e datas de expiração de cartão. |
Determinismo
O gerador é totalmente determinístico. Todo o motor de geração baseia-se em uma instância de Rng alimentada pelo algoritmo mulberry32 a partir de uma semente textual ou numérica.
A regra de ouro é: mesmo kind + mesma seed + mesmas opções + mesma data now geram exatamente os mesmos dados. Nenhuma chamada interna utiliza Math.random(), exceto a função utilitária randomSeed() que gera um identificador de 8 caracteres caso nenhuma semente seja informada.
Isso permite que suítes de teste de integração e rotinas de CI sejam 100% reproduzíveis, eliminando oscilações causadas por dados aleatórios imprevisíveis.
Dados seguros
Todos os dados foram arquitetados para serem seguros em testes sem risco de vazamento ou disparo involuntário contra pessoas reais:
- E-mails: restritos aos domínios especiais da RFC 2606:
example.com,example.orgeexample.net. Nenhum e-mail pode ser entregue na internet pública. - Websites: apontam exclusivamente para subdomínios seguros (ex:
https://www.slug.example.com). - Cartões de crédito:
4444444444444444: número oficial de teste que força aprovação (APPROVE) no mock do Asaas.5184019740373151: número oficial de teste que força recusa imediata de captura (DECLINE) no mock do Asaas.- Opção
RANDOM: gera números aleatórios matematicamente válidos pelo algoritmo de Luhn (Visa, Master, Elo, Amex) com statusUNKNOWN.
- Documentos: nenhum documento gerado possui todos os dígitos iguais repetidos (ex:
111.111.111-11), prevenindo rejeições por regras básicas de integridade.
Integração com Asaas
A integração entre o gerador e o mock do Asaas opera com descoberta automática nos dois sentidos, sem necessidade de configurar URLs:
- O gerador acha o Asaas: quando
ASAAS_URLnão estiver definida, o gerador procura o mock nos serviçosasaaseasaas-mockdo compose, nesta máquina (localhost) e no host do Docker (host.docker.internal) na porta45445, identificado porGET /health(comstatus: "ok"eclockMode). A busca ocorre no boot e a cada 10 segundos. Assim, rodar ambos viadocker runou em qualquer compose funciona imediatamente sem variáveis. - O Asaas acha o gerador: o mock do Asaas busca o serviço
generatorougenerator-mockna porta45450(no compose, nesta máquina ou no host do Docker) no boot e a cada 10 s, aceitando apenas serviços que respondamGET /healthcomservice: "generator". A variávelGENERATOR_URLquando definida fixa o destino; vazia, desativa a busca. O navegador o abre porGENERATOR_UI_URL(padrãohttp://localhost:45450).
A aba do painel do Asaas
Enquanto o gerador for encontrado, o painel do Asaas exibe a aba Integrações › Gerador com as ações Abrir o gerador e Popular esta conta. Ao clicar em popular, pessoas e empresas com CPF/CNPJ válidos tornam-se clientes da conta selecionada na barra superior, com cobranças geradas por Pix, boleto e cartão (parte delas já pagas). Essa ação dispara POST /_admin/generator/populate no Asaas, que repassa a chave de API dessa conta para o gerador. Quando o gerador não é encontrado ou está desligado, a aba não existe no painel.
Endpoint POST /_mock/asaas/populate
O endpoint no gerador pode ser invocado diretamente. O campo apiKey no corpo é opcional e direciona a população para a conta informada (caso omitido, usa ASAAS_API_KEY):
POST /_mock/asaas/populate
Content-Type: application/json
{
"people": 5,
"companies": 2,
"chargesPerCustomer": 2,
"billingTypes": ["PIX", "BOLETO", "CREDIT_CARD"],
"confirm": 0.5,
"seed": "minha-semente-opcional",
"apiKey": "$aact_hmlg_local_master"
}O que cada passo executa
- Criação de Clientes: gera pessoas físicas e empresas com endereços válidos e chama
POST /v3/customersno Asaas para cada uma. - Emissão de Cobranças: para cada cliente criado, emite
chargesPerCustomercobranças distribuídas entre os tipos de pagamento selecionados viaPOST /v3/payments. - Confirmação de Pagamento: calcula a fração informada em
confirm(ex:0.5= 50% das cobranças emitidas) e executaPOST /v3/sandbox/payment/{id}/confirmna API do Asaas, simulando o pagamento imediato e disparando os webhooks correspondentes.
Tratamento de falhas
Se alguma chamada ao Asaas falhar ou retornar erro HTTP, o endpoint não aborta: ele acumula o erro na lista errors: [{ step, status, message }] e continua o processo para os registros restantes, devolvendo o relatório consolidado ao final.
Compose em outro projeto
Para usar o gerador no docker-compose.yml de outro projeto, basta adicionar o serviço generator ao lado do serviço asaas. Os dois serviços se acham automaticamente pelo nome na rede interna, sem precisar definir variáveis de URL:
generator:
image: ghcr.io/instituto-ama/generator-mock:latest
ports:
- '45450:45450'
environment:
PORT: 45450Variáveis de ambiente
| Variável | Padrão | Significado |
|---|---|---|
PORT |
45450 |
Porta do servidor HTTP do gerador |
GENERATOR_ENABLED |
1 |
No compose do repositório: 1 sobe o gerador; 0 desliga (deploy.replicas: 0) |
ASAAS_URL |
(sem valor: achado sozinho) | URL base do mock do Asaas. Quando não definida, é encontrado sozinho (asaas, asaas-mock, localhost, host do Docker na porta 45445) no boot e a cada 10 s |
ASAAS_API_KEY |
$aact_hmlg_local_master |
Chave de API principal utilizada para autenticar as chamadas ao Asaas |
ASAAS_PANEL_URL |
http://localhost:45445 |
URL do painel do Asaas como o navegador do desenvolvedor o alcança (usada em links retornados) |
GENERATOR_ASAAS_SEED_ON_BOOT |
(vazio) | Configuração de população automática no boot do container, no formato people=10,companies=3,charges=2,confirm=0.5. Fica desligada a menos que definida |
MOCK_ALLOWED_HOSTS |
(vazio) | Lista de hosts adicionais separados por vírgula aceitos pela proteção local |
Proteção local (Local Guard)
Para proteger a máquina do desenvolvedor contra ataques de DNS rebinding e chamadas forjadas entre sites (CSRF originadas de páginas maliciosas na web):
- As rotas sensíveis (
/,/_mock/*) validam o cabeçalhoHostcontra a lista permitida:localhost,127.0.0.1,::1,host.docker.internale os hosts extras definidos emMOCK_ALLOWED_HOSTS. - Requisições do tipo
POST(comoPOST /_mock/asaas/populate) validam adicionalmente a origem no cabeçalhoOrigin. - As rotas públicas de geração sob
/v1/*emitem cabeçalhoAccess-Control-Allow-Origin: *, permitindo que qualquer aplicação frontend de desenvolvimento consulte a API sem restrições.