Skip to content

Frontend — Fluxo de Configurações (railway/roadway)

Este documento descreve como o frontend deve consumir os endpoints do config_service para obter configurações completas e salvar overrides.

Endpoints

  • Resolve (GET/POST): https://us-central1-wwcalc-d2140.cloudfunctions.net/configs_resolve
  • Override (POST): https://us-central1-wwcalc-d2140.cloudfunctions.net/configs_override

Etapa 1 — Mostrar padrões

Quando o usuário abre a tela de configurações: - Para mostrar o base:

{ "config_type": "railway" }
  • Para mostrar um padrão (ex.: 2):
{ "config_pattern_id": "2" }

Etapa 2 — Criar configuração do usuário

Fluxo: 1) Buscar o baseline via configs_resolve (com o padrão escolhido). 2) Usuário altera parâmetros + escolhe moeda/taxa. 3) Enviar para configs_override com target = user_config.

Exemplo:

{
  "target": "user_config",
  "user_id": "<USER_ID>",
  "user_config_id": "<NOVO_ID>",
  "config_pattern_id": "2",
  "payload": {
    "values_params": {
      "platform": { "platform_width": 7.5 }
    },
    "capex": {
      "CAPEX": {
        "BDI": 0.25,
        "Unit Cost": { "_patch": { "37": 123.45, "43": 456.78, "52": 789.01 } }
      },
      "currency_rate": 5.75
    }
  }
}

Etapa 3 — Abrir projeto

Quando o usuário escolhe um config dele e inicia um projeto:

{
  "user_id": "<USER_ID>",
  "project_id": "<PROJECT_ID>",
  "user_config_id": "<USER_CONFIG_ID>",
  "config_pattern_id": "2"
}

Esse retorno já vem com: - base + override do padrão - override do user_config - override do projeto (se houver) - taxa aplicada no CAPEX

Etapa 4 — Alterações dentro do projeto

Se o usuário alterar algo no projeto:

{
  "target": "project_params",
  "user_id": "<USER_ID>",
  "project_id": "<PROJECT_ID>",
  "user_config_id": "<USER_CONFIG_ID>",
  "config_pattern_id": "2",
  "payload": {
    "values_params": {
      "earthwork": { "max_cut": 30 }
    }
  }
}

Observações importantes

  • O frontend não deve fazer merge local nem aplicar taxa de câmbio. Isso é feito pelo backend.
  • Arrays são substituídos por completo. Não tente mesclar arrays localmente.
  • Exceção: para atualizar itens específicos de array, use {"_patch": {"indice": valor}}.
  • list_curves pode ter tamanho variável sem problema.
  • Unit Cost With BDI é calculado no backend (não enviar no payload).
  • Valores enviados via _patch em Unit Cost já devem estar na moeda final escolhida.
  • Para obter apenas base, basta chamar configs_resolve com config_type.
  • Para receber campos de hierarquia (tabela), use include_fields com CAPEX_HIERARCHY.

Recomendacao para o frontend: - Sempre incluir CAPEX_HIERARCHY em include_fields quando for consumir CAPEX para montar a tabela.

Erros comuns

  • 400: payload incompleto
  • 404: ids inexistentes
  • 500: erro interno

IDs que o frontend deve guardar

  • config_pattern_id (padrão escolhido)
  • user_config_id (config do usuário)
  • project_id
  • user_id

CAPEX.Variables (base x i18n)

  • Base (/configs/railway/v0_1/base.CAPEX.Variables): cada opção contém somente { "2": valor }.
  • i18n (/configs/i18n/railway/{lang}.base.CAPEX.Variables): cada opção contém somente { "0": texto, "1": unidade }.
  • O backend mescla i18n sobre o base mantendo o índice 2 do base.

Consultar apenas patterns (duas opções)

1) Firestore REST (field mask) - PT-BR: GET https://firestore.googleapis.com/v1/projects/wwcalc-d2140/databases/(default)/documents/configs/i18n/railway/pt-br?mask.fieldPaths=patterns - EN: GET https://firestore.googleapis.com/v1/projects/wwcalc-d2140/databases/(default)/documents/configs/i18n/railway/en?mask.fieldPaths=patterns 2) SDK do Firestore

const ref = doc(db, 'configs/i18n/railway/pt-br');
const snap = await getDoc(ref, { fieldMask: ['patterns'] });