Skip to content

deck ​

Tipo
Referência
Para
Desenvolvedor, Analista

Um deck é um Deck: slides desenhados com textos, formas, imagens e gráficos vivos, que puxam o dado de um Widget de uma Aplicação. O arquivo fica em decks/<slug>--<id>.yaml. Decks e Apresentações pela tela estão em Apresentações; a skill lumo-decks ensina o agente a escrevê-los (veja Agentes de código).

bash
lumo new deck --name "Vendas do trimestre"
lumo app widgets app:7302      # os pares appId e widgetGuid dos gráficos

Campos ​

  • fileName
    string · opcional · valores: regex ^[a-z0-9-]+--\d+\.yaml$
  • header
    object · obrigatório
  • header.id
    integer · obrigatório · valores: ≥ 1
  • header.kind
    string · obrigatório · valores: deck (fixo)
  • header.lumo
    string · obrigatório · valores: v2 (fixo)
  • header.tenantId
    integer · obrigatório · valores: ≥ 1
  • header.appId
    integer · opcional · valores: ≥ 1
  • header.dashboardId
    integer · opcional · valores: ≥ 1
  • body
    object · obrigatório
  • body.criado_em
    string ou null · opcional · valores: regex ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$
    Somente leitura: o servidor preenche.
  • body.criado_por
    string ou integer ou null · opcional
    Somente leitura: o servidor preenche.
  • body.publicado_em
    string ou null · opcional · valores: regex ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$
    Somente leitura: o servidor preenche.
  • body.publicado_por
    string ou integer ou null · opcional
    Somente leitura: o servidor preenche.
  • body.nome
    string · obrigatório · valores: não vazio
  • body.version
    integer ou null · opcional · valores: ≥ 0
    Somente leitura: o servidor preenche. Server-managed resource version.
  • body.slides
    array de object · obrigatório
  • body.slides[].id
    string · opcional
  • body.slides[].elements
    array de object · opcional
  • body.slides[].elements[].appId
    integer · obrigatório: sim, se type: horus-widget
  • body.slides[].elements[].widgetGuid
    string · obrigatório: sim, se type: horus-widget · valores: não vazio

Exemplo ​

yaml
# decks/vendas-trimestre--8120.yaml
# yaml-language-server: $schema=https://docs.horusbi.com.br/schemas/v2/deck.schema.json
id: 8120
kind: deck
lumo: v2
tenantId: 1200
---
nome: Vendas do trimestre
slides:
  - id: s1
    elements:
      - type: text
        id: t1
        left: 40
        top: 30
        width: 920
        height: 60
        rotate: 0
        content: "<p>Vendas do trimestre</p>"
      - type: horus-widget       # gráfico vivo: aponta para um Widget de uma Aplicação
        id: w1
        left: 40
        top: 110
        width: 600
        height: 400
        rotate: 0
        appId: 7302              # obrigatório
        widgetGuid: "3f2a9c1e-5b7d-4e8a-9c0f-1d2e3f4a5b6c"   # obrigatório (lumo app widgets app:7302)
        filters: null            # null = usa os filtros salvos no Widget

O slide tem tela fixa de 1000 × 562,5 unidades (16:9), e left, top, width e height dos elementos são medidos nela.

Conferir e publicar ​

bash
lumo lint decks/vendas-trimestre--8120.yaml   # forma do arquivo, offline
lumo push deck:8120
lumo deck preview deck:8120                    # todo gráfico roda contra o dado real?
lumo deck publish deck:8120                    # publica e imprime o link /p/<código>
lumo deck check deck:8120                      # o link responde?

O lint confere só a forma. O deck preview roda a consulta de cada gráfico vivo do Deck salvo no servidor e sai com código diferente de 0 se algum falhar, por Aplicação errada, Widget apagado ou widgetGuid velho. Rode depois do push. lumo deck export deck:<id> --format pdf gera o arquivo.

Limites ​

  • O arquivo tem dois documentos YAML separados por ---, como todo recurso. Um arquivo com header: e body: aninhados é recusado com o erro missing body document.
  • Em elementos type: horus-widget, appId e widgetGuid são obrigatórios. Os outros campos dos elementos não são conferidos pelo lint: um erro neles só aparece no export ou na tela.
  • Publicar um Deck cria (ou reaproveita) uma Apresentação que contém só ele e publica essa Apresentação. Ela aparece em lumo list presentation, e isso é o esperado. --seconds no publish é o tempo de cada slide.
  • lumo deck url e lumo deck check só leem o link: não publicam e não pedem permissão de publicar. Não use publish para descobrir o link.
  • lumo deck unpublish tira o link do ar.