Módulo: DDO - Documentos de Descentralização Orçamentária

Sistema completo de gestão de DDOs com funcionalidades de solicitação, controle, geração de documentos e acompanhamento de status

📋 Módulo: DDO - Documentos de Descentralização Orçamentária

Sistema completo de gestão de DDOs com funcionalidades de solicitação, controle, geração de documentos e acompanhamento de status

📋 Visão Geral do Módulo

ℹ️ Sobre este Módulo

  • Função Principal: Gerenciar todo o ciclo de vida dos DDOs
  • Telas: 4 telas
  • Tipos de DDO: Novo (Programação), Novo (Demanda), Passivo
  • Integração: SEI (Sistema Eletrônico de Informações)

🗂️ Telas do Módulo

🎯 DDO_Controle_1

Controle e acompanhamento geral

➕ DDO_Novo

Solicitar DDO (origem: programação)

➕ DDO_Novo_1

Solicitar DDO (origem: demanda)

📊 DDO_Passivo

DDOs passivos e histórico


🎯 Tela: DDO_Controle_1

Controle Geral de DDOs

Tipo: Tela de Controle e Listagem

Acesso: APMD e Gestores

📊 Estatísticas da Tela

30+
Controles Totais
1
Gallery Principal
4
Filtros de Busca

Colunas Exibidas

ControleCampoDescrição
ID_Destino_DDOID DestinoID da programação/demanda destino
Objeto_DDOObjetoNome/descrição do objeto
ObjetosAssociados_DDOObjetos AssociadosLista de objetos vinculados
Sei_DDOSEINúmero do processo SEI
TextID_Destino_DDOID Destino (Text)Versão texto do ID
TextOBJAssociados_DDOObjetos (Text)Texto dos objetos associados
TextObjeto_DDOObjeto (Text)Texto do objeto principal
TextSEI_DDOSEI (Text)Texto do número SEI

🔍 Sistema de Filtros

ControleTipoCampo Filtrado
scObjeto_11TextInputCanvasObjeto do DDO
scObjeto_DDOTextInputCanvasObjeto (alternativo)
scSiafiEntrada_8TextInputCanvasSIAFI Entrada
ButtonCanvas30_1ButtonCanvasAplicar filtros

Lógica de Filtro da Gallery:

Filter(
    BaseControleDDO_PorObjeto,
    If(!IsBlank(scObjeto_DDO.Text),
        StartsWith(Objeto, scObjeto_DDO.Text),
        true
    ),
    If(!IsBlank(scSiafiEntrada_8.Text),
        'SIAFI Entrada' = scSiafiEntrada_8.Text,
        true
    )
)

🎬 Botões de Ação

➕ Button_AdicionarNovo

Função: Solicitar novo DDO (origem: programação)

OnSelect:

Navigate(DDO_Novo, ScreenTransition.Fade)

➕ Button_AdicionarPassivo

Função: Acessar DDOs passivos

OnSelect:

Navigate(DDO_Passivo, ScreenTransition.Fade)

➕ Tela: DDO_Novo

Solicitar DDO - Origem: Programação

Tipo: Seleção e Solicitação

Origem dos Dados: PlanejamentoGeral2025

📊 Estatísticas da Tela

60+
Controles Totais
1
Gallery de Seleção
10+
Filtros

⚙️ Evento OnVisible

ClearCollect(
    colBaseDDO,
    Filter(
        PlanejamentoGeral2025,
        Status = "Ativo",
        IsBlank('DDO Gerado') || 'DDO Gerado' = false
    )
)

🎯 Gallery4_3 - Seleção de Programações

Componentes da Gallery:

// CheckboxCanvas1 - Seleção
OnCheck: Collect(colDDO, ThisItem)
OnUncheck: Remove(colDDO, LookUp(colDDO, ID = ThisItem.ID))

// Campos exibidos
TextCanvas4_112: ThisItem.ID
TextCanvas4_21: ThisItem.Ação
TextCanvas4_22: ThisItem.'E.I.'
TextCanvas4_23: ThisItem.Objeto
TextCanvas4_24: ThisItem.'U.A'
TextCanvas4_25: Text(ThisItem.Replanejado, "R$ #,##0.00")
TextCanvas4_60: ThisItem.'SIAFI entrada'
TextCanvas4_63: ThisItem.Status

🔍 Filtros Disponíveis

🔢 scID

Items: Distinct(colBaseDDO, ID)

OnChange:

Set(searchIDelecionado, Self.Selected.Result);
Set(searchIDValor, Self.Selected.Result)
📊 scEI_1

Items: Distinct(colBaseDDO, 'E.I.')

💰 scFonte_1

Items: Distinct(colBaseDDO, Fonte)

📋 scGrupo_1

Items: Distinct(colBaseDDO, Grupo)

🎯 scObjeto_1

Type: TextInputCanvas

🏢 scProcedencia_1

Items: Distinct(colBaseDDO, Procedência)

🔢 scSiafiEntrada_1

Type: TextInputCanvas

🔢 scSiafiSaida_1

Type: TextInputCanvas

📝 Campos do Formulário

📄 TextInputCanvas7 - Número SEI

Hint: "Digite o número do processo SEI"

Obrigatório: ✅ Sim

📋 TextInputCanvas7_1 - Observações

Mode: MultiLine

Obrigatório: ❌ Não

🎯 textModalidade

Hint: "Modalidade do DDO"

💰 TextInputCanvas6 - Valor Total

Default:

Text(Sum(colDDO, Replanejado), "R$ #,##0.00")

DisplayMode: View

📊 TextInputCanvas6_2 - Quantidade

Default:

Text(CountRows(colDDO))

DisplayMode: View

✅ CheckboxCanvas3 - Selecionar Todos

Default: false

OnCheck:
    ClearCollect(colDDO, Gallery4_3.AllItems)

OnUncheck:
    Clear(colDDO)

🎬 Ações Principais

💾 ButtonCanvas10 - Gerar DDO

OnSelect:

If(
    CountRows(colDDO) = 0,
    Notify("Selecione ao menos um item", NotificationType.Warning);
    Exit(),
    IsBlank(TextInputCanvas7.Text),
    Notify("Informe o número do processo SEI", NotificationType.Warning);
    Exit()
);

UpdateContext({visLoading: true}); Set(varImagem, First(Shuffle(colImagensLoading)).Imagem);

ForAll( colDDO, Patch( BaseControleDDO, Defaults(BaseControleDDO), { ‘ID Programação’: ThisRecord.ID, Objeto: ThisRecord.Objeto, ‘Número SEI’: TextInputCanvas7.Text, Modalidade: textModalidade.Text, Observações: TextInputCanvas7_1.Text, ‘Valor Total’: ThisRecord.Replanejado, Status: “Pendente”, ‘Data Criação’: Now(), ‘Criado Por’: UsuáriosdoOffice365.MyProfileV2().mail, Ação: ThisRecord.Ação, ‘E.I.’: ThisRecord.‘E.I.’, ‘U.A’: ThisRecord.‘U.A’, Fonte: ThisRecord.Fonte, Grupo: ThisRecord.Grupo, Procedência: ThisRecord.Procedência, ‘SIAFI Entrada’: ThisRecord.‘SIAFI entrada’, ‘SIAFI Saída’: ThisRecord.‘SIAFI saida’ } );

Patch(
    PlanejamentoGeral2025,
    LookUp(PlanejamentoGeral2025, ID = ThisRecord.ID),
    {
        'DDO Gerado': true,
        'Data DDO': Now()
    }
)

);

Clear(colDDO); Reset(CheckboxCanvas3); Reset(TextInputCanvas7); Reset(TextInputCanvas7_1); Reset(textModalidade);

Set(Timer3.Start, true); UpdateContext({visLoading: false}); Notify(“DDO(s) gerado(s) com sucesso!”, NotificationType.Success)

📄 ButtonCanvas10_2 - Gerar HTML/PDF

OnSelect:

If(
    CountRows(colDDO) = 0,
    Notify("Selecione itens para gerar o documento", NotificationType.Warning);
    Exit()
);

Set(varlinkSEI, TextInputCanvas7.Text);

‘Teste_DDO_Html’.Run( JSON(colDDO), varlinkSEI, textModalidade.Text, TextInputCanvas7_1.Text );

Notify(“Documento sendo gerado…”, NotificationType.Information)

⏱️ Timer3

Duration: 3000
AutoStart: false

OnTimerEnd:
    UpdateContext({visLoading: false})

➕ Tela: DDO_Novo_1

Solicitar DDO - Origem: Demanda

Tipo: Seleção e Solicitação

Origem dos Dados: BaseDemandasOrcamentarias2025

📊 Estatísticas da Tela

70+
Controles Totais
1
Gallery de Seleção
12+
Filtros

⚙️ Evento OnVisible

ClearCollect(
    colBaseDDO,
    Filter(
        BaseDemandasOrcamentarias2025,
        Status = "Ativo",
        IsBlank('DDO Gerado') || 'DDO Gerado' = false
    )
)

Componentes:

// Checkbox_Gallery_SolicitarDDO
OnCheck: Collect(colDDO, ThisItem)
OnUncheck: Remove(colDDO, LookUp(colDDO, ID = ThisItem.ID))

// Campos exibidos
Text_AcaoDDO: ThisItem.Ação
Text_EI_DDO: ThisItem.'E.I.'
Text_ID_DDO: ThisItem.ID
Text_ObjetoDDO: ThisItem.Título
Text_ValorLOA: Text(ThisItem.'Valor LOA', "R$ #,##0.00")
Text_ValorNaoComprometido: Text(
    ThisItem.'Valor LOA' - ThisItem.'Valor Comprometido',
    "R$ #,##0.00"
)

// Text_Valor_SolicitarDDO - Campo editável
Value: Text(ThisItem.'Valor Disponível', "R$ #,##0.00")
Format: Currency

🔍 Filtros Disponíveis

ControleItems/Fonte
scID_1Distinct(colBaseDDO, ID)
sc_EI3Distinct(colBaseDDO, ‘E.I.’)
scFonte_6Distinct(colBaseDDO, Fonte)
scGrupo_16Distinct(colBaseDDO, Grupo)
scObjeto_8TextInputCanvas (busca texto)
scProcedencia_6Distinct(colBaseDDO, Procedência)
scSiafiEntrada_7TextInputCanvas
scSiafiSaida_5TextInputCanvas
sc_Acao3Distinct(colBaseDDO, Ação)

OnChange dos Filtros:

// sc_EI3.OnChange
Set(searchIDelecionado, Self.Selected);
Set(searchIDValor, Self.Selected.Result);

📝 Formulário

📄 TextInput_SEI_DDO

Obrigatório: ✅ Sim

📝 TextInput_Objeto_DDO

Mode: MultiLine

💰 TextCanvas_ValorTotal_DDO

Text:

"Valor Total: " & Text(
    Sum(colDDO, Value(Text_Valor_SolicitarDDO.Text)),
    "R$ #,##0.00"
)
📊 TextCanvas6_5

Text:

"Total de Itens: " & CountRows(colDDO)

🎬 Ações Principais

💾 Button_GerarDDO

OnSelect:

If(
    CountRows(colDDO) = 0,
    Notify("Selecione ao menos uma demanda", NotificationType.Warning);
    Exit(),
    IsBlank(TextInput_SEI_DDO.Text),
    Notify("Informe o número do processo SEI", NotificationType.Warning);
    Exit()
);

UpdateContext({visLoading: true}); Set(varImagem, First(Shuffle(colImagensLoading)).Imagem);

ForAll( colDDO, Patch( BaseControleDDO, Defaults(BaseControleDDO), { ‘ID Demanda’: ThisRecord.ID, Objeto: ThisRecord.Título, ‘Número SEI’: TextInput_SEI_DDO.Text, ‘Valor Solicitado’: Value( LookUp( Gallery_SolicitarDDO.AllItems, ID = ThisRecord.ID ).Text_Valor_SolicitarDDO.Text ), Status: “Pendente Demanda”, ‘Data Criação’: Now(), ‘Criado Por’: UsuáriosdoOffice365.MyProfileV2().mail, Ação: ThisRecord.Ação, ‘E.I.’: ThisRecord.‘E.I.’, ‘U.A’: ThisRecord.‘U.A’, Fonte: ThisRecord.Fonte, Grupo: ThisRecord.Grupo, Procedência: ThisRecord.Procedência } );

Patch(
    BaseDemandasOrcamentarias2025,
    ThisRecord,
    {
        'DDO Gerado': true,
        'Data DDO': Now(),
        'Valor Comprometido': ThisRecord.'Valor Comprometido' + 
            Value(
                LookUp(
                    Gallery_SolicitarDDO.AllItems,
                    ID = ThisRecord.ID
                ).Text_Valor_SolicitarDDO.Text
            )
    }
)

);

Clear(colDDO); Reset(CheckboxCanvas3_2); Reset(TextInput_SEI_DDO);

Set(Timer3_1.Start, true); UpdateContext({visLoading: false}); Notify(“DDO(s) de demanda gerado(s)!”, NotificationType.Success)

🧪 ButtonTeste

OnSelect:

Set(varlinkSEI, TextInput_SEI_DDO.Text);

‘Teste_DDO_Html’.Run( JSON(colDDO), varlinkSEI, TextInput_Objeto_DDO.Text, "" );

Notify(“Teste de geração iniciado”, NotificationType.Information)

🔄 Button_LimparFiltros3

OnSelect:

Reset(scID_1);
Reset(sc_EI3);
Reset(scFonte_6);
Reset(scGrupo_16);
Reset(scObjeto_8);
Reset(scProcedencia_6);
Reset(scSiafiEntrada_7);
Reset(scSiafiSaida_5);
Reset(sc_Acao3);

ClearCollect( colBaseDDO, Filter( BaseDemandasOrcamentarias2025, Status = “Ativo”, IsBlank(‘DDO Gerado’) || ‘DDO Gerado’ = false ) )

✅ CheckboxCanvas3_2 - Selecionar Todos

OnCheck: ClearCollect(colDDO, Gallery_SolicitarDDO.AllItems)
OnUncheck: Clear(colDDO)

📊 Tela: DDO_Passivo

DDOs Passivos e Histórico

Tipo: Visualização e Edição

Função: Gerenciar DDOs já processados ou passivos

📊 Estatísticas da Tela

90+
Controles Totais
1
Gallery Principal
2
Menus Laterais

🎯 Gallery4_5 - DDOs Passivos

Componentes da Gallery:

// CheckboxCanvas1_1 - Seleção
OnCheck: Collect(colDDO, ThisItem)
OnUncheck: Remove(colDDO, LookUp(colDDO, ID = ThisItem.ID))

// Campos exibidos
TextCanvas4_32: ThisItem.ID
TextCanvas4_33: ThisItem.Objeto
TextCanvas4_34: ThisItem.'Número SEI'
TextCanvas4_35: ThisItem.Status
TextCanvas4_36: Text(ThisItem.'Valor Total', "R$ #,##0.00")
TextCanvas4_45: Text(ThisItem.Created, "dd/mm/yyyy")

// TextInputCanvas6_3, 6_4, 6_5 - Campos editáveis
Value: valores do ThisItem

🔍 Filtros

ControleTipoItems/Fonte
scEI_2ComboboxCanvasDistinct(BaseControleDDO, ‘E.I.’)
scFonte_2ComboboxCanvasDistinct(BaseControleDDO, Fonte)
scGrupo_2ComboboxCanvasDistinct(BaseControleDDO, Grupo)
scObjeto_4TextInputCanvasBusca por texto
scProcedencia_2ComboboxCanvasDistinct(BaseControleDDO, Procedência)
scSiafiEntrada_3TextInputCanvasSIAFI Entrada
scSiafiSaida_2TextInputCanvasSIAFI Saída
scID_3ComboboxCanvasDistinct(BaseControleDDO, ID)
scEI_14ComboboxCanvasItems alternativos

📋 Modo Detalhamento (visDetalhar)

📦 Visibilidade

Variável: visDetalhar

Ativação: ButtonCanvas5_4.OnSelect

Campos Detalhados Visíveis:

Botões de Campo (Button1_95 a 1_136)

15 botões de campo para labels/títulos

Dropdowns (DropdownCanvas10_4, 10_5)

2 dropdowns para seleção de classificação

TextInputs (TextInputCanvas5_16 a 5_22)

7 campos de entrada de texto editáveis

TextCanvas (TextCanvas4_20, 4_30, 4_31)

3 labels informativos

📱 Menus Laterais

Controle de Visibilidade dos Menus:

// AppLogo1_31.OnSelect - Toggle menu principal
UpdateContext({
    visMenu: !visMenu,
    visMenu2: false,
    visMenu3: false,
    visMenu4: false,
    visMenu5: false
})

// Button5_3.OnSelect - Navegar entre menus
UpdateContext({
    visMenu: false,
    visMenu2: !visMenu2
})

// Rectangle5_8.OnSelect - Fechar menus (overlay)
UpdateContext({
    visMenu: false,
    visMenu2: false,
    visMenu3: false,
    visMenu4: false,
    visMenu5: false
})

🎬 Ações Principais

👁️ ButtonCanvas5_4 - Detalhar

OnSelect:

UpdateContext({visDetalhar: !visDetalhar})

💾 ButtonCanvas10_1 - Salvar Alterações

OnSelect:

UpdateContext({visLoading: true});
Set(varImagem, First(Shuffle(colImagensLoading)).Imagem);

ForAll( Filter(Gallery4_5.AllItems, CheckboxCanvas1_1.Value = true), Patch( BaseControleDDO, ThisRecord, { // Atualiza campos editados Campo1: TextInputCanvas5_16.Text, Campo2: TextInputCanvas5_17.Text, Campo3: TextInputCanvas5_18.Text, Campo4: TextInputCanvas5_19.Text, Campo5: TextInputCanvas5_20.Text, Campo6: TextInputCanvas5_21.Text, Campo7: TextInputCanvas5_22.Text, ‘Última Modificação’: Now(), ‘Modificado Por’: UsuáriosdoOffice365.MyProfileV2().mail } ) );

UpdateContext({visLoading: false}); Notify(“Alterações salvas!”, NotificationType.Success); Refresh(BaseControleDDO)

🗑️ Button1_129 - Excluir DDO

OnSelect:

If(
    Confirm("Tem certeza que deseja excluir este(s) DDO(s)?"),
Set(varAcao, "Excluir");

ForAll(
    Filter(Gallery4_5.AllItems, CheckboxCanvas1_1.Value = true),
    Remove(BaseControleDDO, ThisRecord)
);

Notify("DDO(s) excluído(s)", NotificationType.Warning);
Refresh(BaseControleDDO)

)

📊 Button5_3 - Abrir Submenu

OnSelect:

UpdateContext({
    visMenu: false,
    visMenu2: true,
    visMenu3: false,
    visMenu4: false,
    visMenu5: false
})

🎨 Elementos Visuais

📐 Rectangle5_7

Container do modo detalhamento

Visible: visDetalhar

📐 Rectangle5_8

Overlay dos menus laterais

Visible: visMenu || visMenu2 || ...

OnSelect: Fecha todos os menus

📐 Rectangle7_12, 7_13

Separadores visuais do detalhamento

Visible: visDetalhar

🎨 TextCanvas3_6

Título do menu lateral

Visible: visMenu


📊 Variáveis Globais do Módulo

VariávelTipoEscopoFunção
colBaseDDOTableGlobalDados base para seleção (Programação ou Demanda)
colDDOTableGlobalItens selecionados para gerar DDO
varlinkSEITextGlobalNúmero do processo SEI
varImagemTextGlobalImagem de loading selecionada
varAcaoTextGlobalAção atual (Excluir, Editar, etc.)

Variáveis de Contexto

VariávelTipoTelaFunção
visLoadingBooleanTodasMostra/oculta tela de loading
visDetalharBooleanDDO_PassivoMostra/oculta campos detalhados
visMenuBooleanDDO_PassivoMenu lateral principal
visMenu2BooleanDDO_PassivoSubmenu 1
visMenu3BooleanDDO_PassivoSubmenu 2
visMenu4BooleanDDO_PassivoSubmenu 3
visMenu5BooleanDDO_PassivoSubmenu 4

Variáveis de Filtro

🔍 Padrão de Filtros

Similar aos outros módulos, com variáveis search* para cada campo filtrável


📊 Collections do Módulo

CollectionCriada emFunção
colBaseDDOOnVisible (DDO_Novo, DDO_Novo_1)Base de dados disponíveis para DDO
colDDODurante seleçãoItens selecionados temporariamente
colImagensLoadingOnStart (App)Imagens para loading

📚 Fontes de Dados Utilizadas

Fonte de DadosTipoFunção no Módulo
BaseControleDDOSharePoint ListRegistro principal de DDOs
BaseControleDDO_PorObjetoSharePoint List ViewVista agrupada por objeto
PlanejamentoGeral2025SharePoint ListFonte para DDOs de programação
BaseDemandasOrcamentarias2025SharePoint ListFonte para DDOs de demanda
Teste_DDO_HtmlPower Automate FlowGeração de documento HTML/PDF
UsuáriosdoOffice365Office 365 ConnectorInformações do usuário

🔗 Fluxo de Navegação do Módulo

graph TD
    A[Capa_Nova] --> B[DDO_Controle_1]
    
    B --> C[DDO_Novo]
    B --> D[DDO_Passivo]
    
    C --> E[Seleciona Programações]
    D --> F[Visualiza/Edita DDOs Passivos]
    
    E --> G[Gera DDO]
    G --> H[Atualiza BaseControleDDO]
    G --> I[Marca Programação]
    
    J[Demandas] --> K[DDO_Novo_1]
    K --> L[Seleciona Demandas]
    L --> M[Gera DDO]
    M --> H
    M --> N[Atualiza Demanda]
    
    H --> O[Power Automate]
    O --> P[Gera HTML/PDF]
    P --> Q[Processo SEI]
    
    style A fill:#667eea
    style B fill:#28a745
    style C fill:#17a2b8
    style D fill:#ffc107
    style E fill:#6f42c1
    style F fill:#fd7e14
    style G fill:#20c997
    style K fill:#17a2b8
    style O fill:#dc3545

💡 Dicas de Uso do Módulo

📋 Duas Origens de DDO

O sistema permite criar DDOs de duas formas:

  • DDO_Novo: A partir de programações já aprovadas
  • DDO_Novo_1: A partir de demandas orçamentárias

Cada tipo tem seu próprio fluxo e controle de valores.

✅ Seleção Múltipla

Use o checkbox "Selecionar Todos" para agilizar a criação de DDOs com múltiplos itens. Isso é especialmente útil para DDOs que agrupam várias programações/demandas relacionadas.

📄 Geração de Documentos

O botão "Gerar HTML/PDF" chama um flow do Power Automate que:

  • Formata os dados em HTML
  • Converte para PDF
  • Pode anexar automaticamente ao processo SEI

🔍 Filtros Inteligentes

Os filtros são específicos para cada tipo de DDO. Use-os para encontrar rapidamente programações/demandas elegíveis para descentralização.

📊 DDOs Passivos

A tela DDO_Passivo mantém histórico completo de todos os DDOs já processados, permitindo consulta e edição quando necessário.

💰 Controle de Valores

Em DDOs de demanda, o valor pode ser editado individualmente para cada item. O sistema calcula automaticamente o valor total e atualiza o "Valor Comprometido" da demanda.

🔗 Vínculo com SEI

O número SEI é obrigatório e cria o vínculo entre o DDO e o processo no Sistema Eletrônico de Informações.

⏱️ Loading com Variedade

As imagens de loading são escolhidas aleatoriamente da collection, tornando a experiência mais agradável durante operações demoradas.


⚠️ Considerações Importantes

🔐 Número SEI Obrigatório

Não é possível gerar DDO sem informar o número do processo SEI. Este campo é validado antes de qualquer operação.

🔄 Marca Permanente

Ao gerar um DDO, a programação/demanda é marcada com 'DDO Gerado' = true. Isso impede que o mesmo item seja usado novamente para gerar outro DDO.

💾 Collections Temporárias

As collections colBaseDDO e colDDO são recriadas a cada vez que a tela é aberta. Sair da tela sem gerar o DDO limpa toda a seleção.

📄 Power Automate

A geração de HTML/PDF depende do flow Teste_DDO_Html estar ativo e configurado corretamente. Verifique o status do flow se a geração falhar.

🗑️ Exclusão de DDOs

Excluir um DDO NÃO reverte a marca na programação/demanda original. Se necessário reverter, edite manualmente o campo 'DDO Gerado' na lista.

📊 Valores em DDOs de Demanda

Ao gerar DDO de demanda, o sistema adiciona o valor ao campo 'Valor Comprometido'. Certifique-se de que há saldo disponível antes de gerar.

🎯 Status dos DDOs

DDOs de programação recebem status "Pendente", enquanto DDOs de demanda recebem "Pendente Demanda". Isso permite filtrar e acompanhar cada tipo separadamente.


🔧 Troubleshooting

❓ Problema: Programação não aparece na seleção

Causas Possíveis:

  • Status diferente de "Ativo"
  • Já possui DDO gerado (DDO Gerado = true)
  • Filtros muito restritivos aplicados

Solução:

// Verificar no SharePoint
Status = "Ativo" E
('DDO Gerado' = false OU IsBlank('DDO Gerado'))

❓ Problema: Erro ao gerar DDO

Verificar:

  • Número SEI foi preenchido?
  • Há itens selecionados em colDDO?
  • Permissões de edição na lista BaseControleDDO?

Debug:

// Adicionar label temporário
"SEI: " & TextInputCanvas7.Text & 
" | Itens: " & CountRows(colDDO)

❓ Problema: Documento HTML não é gerado

Verificar:

  • Flow 'Teste_DDO_Html' está ativo?
  • Flow tem permissões corretas?
  • JSON da collection está sendo gerado corretamente?

Teste:

// ButtonTeste.OnSelect
Set(varlinkSEI, TextInput_SEI_DDO.Text);
'Teste_DDO_Html'.Run(
    JSON(colDDO),
    varlinkSEI,
    "Teste",
    "Observação teste"
)

❓ Problema: Menu lateral não abre

Causa: Variáveis de visibilidade não inicializadas

Solução:

// No OnVisible da tela
UpdateContext({
    visMenu: false,
    visMenu2: false,
    visMenu3: false,
    visMenu4: false,
    visMenu5: false
})

📝 Checklist de Implementação

✅ Antes de Usar o Módulo

  • ☐ Listas SharePoint criadas (BaseControleDDO, BaseControleDDO_PorObjeto)?
  • ☐ Flow 'Teste_DDO_Html' configurado e ativo?
  • ☐ Permissões de edição nas listas?
  • ☐ Campos 'DDO Gerado' e 'Data DDO' existem em PlanejamentoGeral2025?
  • ☐ Campos 'DDO Gerado', 'Valor Comprometido' existem em BaseDemandasOrcamentarias2025?
  • ☐ Collection colImagensLoading foi criada no OnStart?
  • ☐ Conexão Office 365 está ativa?
  • ☐ Teste de geração de DDO de programação?
  • ☐ Teste de geração de DDO de demanda?
  • ☐ Teste de geração de documento HTML/PDF?
  • ☐ Validação do vínculo com SEI?
  • ☐ Teste de edição de DDOs passivos?
  • ☐ Teste de exclusão de DDOs?

📈 Fluxo Completo de Geração de DDO

🔄 Processo Completo

1️⃣ Seleção

Usuário acessa DDO_Novo ou DDO_Novo_1 e seleciona programações/demandas

2️⃣ Preenchimento

Informa número SEI, modalidade e observações

3️⃣ Validação

Sistema valida campos obrigatórios e itens selecionados

4️⃣ Gravação

Cria registros em BaseControleDDO para cada item selecionado

5️⃣ Atualização

Marca programações/demandas como tendo DDO gerado

6️⃣ Documento (Opcional)

Gera documento HTML/PDF via Power Automate

7️⃣ SEI (Opcional)

Documento pode ser anexado automaticamente ao processo SEI

8️⃣ Acompanhamento

DDO aparece em DDO_Controle_1 para acompanhamento

9️⃣ Conclusão

Após processado, DDO passa para status "Passivo" ou "Concluído"

🔟 Histórico

DDO concluído fica disponível em DDO_Passivo para consulta


Última modificação October 22, 2025: moduloddo (9a7aaee)