input: Write a function to generate a BPMN diagram for FOMDES process 1 using Python and the bpmn_pgv library. The diagram should include clusters for Secretaría Ejecutiva, Presidencia, and Presupuesto/Administración, with specific tasks and edges defined within each cluster. Additionally, include nodes for SIGEFOMDES Administración and SISAC, and connect them to the appropriate clusters using dashed edges. Finally, save the diagram as a PNG file named "proc4.png" and a DOT file named "proc4.dot".
  assert generate_bpmn([
      {"cluster": "Secretaría Ejecutiva", "tasks": ["Recibir el documento protocolizado", "Revisar el documento protocolizado"], "edges": [[0, 1]]},
      {"cluster": "Presidencia", "tasks": ["Firma del cheque", "Entregar cheque a beneficiario"], "edges": [[0, 1]]},
      {"cluster": "Presupuesto/Administración", "tasks": ["Verificar documentación legal y elaborar certificación de disponibilidad", "Crear las cuentas por cobrar", "Generar tablas de amortización", "Imprimir y firmar orden de liquidación y cheque"], "edges": [[0, 1], [1, 2], [2, 3]]},
      {"nodes": ["SIGEFOMDES Administración", "SISAC"], "connections": [[2, 3], [3, 0], [3, 1], [1, 2]]}
  ])==True
  assert generate_bpmn([])==True
output: 
  def generate_bpmn(data):
      import bpmn_pgv as bpmn
      from graphviz import Digraph
  
      g = Digraph('G', filename='proc4')
      g.attr(rankdir='LR')
  
      for cluster in data:
          if 'cluster' in cluster:
              with g.subgraph(name=f'cluster_{cluster["cluster"]}') as c:
                  c.attr(label=cluster["cluster"])
                  for task in cluster["tasks"]:
                      c.node(task)
                  for edge in cluster["edges"]:
                      c.edge(cluster["tasks"][edge[0]], cluster["tasks"][edge[1]])
          elif 'nodes' in cluster:
              for node in cluster["nodes"]:
                  g.node(node)
              for conn in cluster["connections"]:
                  g.edge(cluster["nodes"][conn[0]], cluster["nodes"][conn[1]], style='dashed')
  
      g.save(filename='proc4.dot')
      g.render(filename='proc4', format='png')
      return True
  