input: 
  def create_bpmn_diagram(process_label: str, clusters: dict, edges: dict, image_path: str) -> None:
      """ Create a BPMN diagram using the bpmn_pgv library and save it as a PNG and DOT file.
      The diagram should include clusters with specific tasks and edges defined within each cluster.
      Additionally, it should include nodes for SIGEFOMDES Administración and SISAC, and connect them to the 
      appropriate clusters using dashed edges.
      >>> create_bpmn_diagram("Liquidación de Créditos", {
              "se_cluster": {
                  "se7": ("Recibir el documento protocolizado", "start"),
                  "se8": ("Revisar el documento protocolizado", "human"),
                  "se9": ("", "end")
              },
              "p_cluster": {
                  "p1": ("Firma del cheque", "human"),
                  "p2": ("Entregar cheque a beneficiario", "message")
              },
              "pr_cluster": {
                  "pr2": ("Verificar documentación legal y elaborar certificación de disponibilidad", "human"),
                  "pr3": ("Crear las cuentas por cobrar", "human"),
                  "pr4": ("Generar tablas de amortización", "human"),
                  "pr5": ("Imprimir y firmar orden de liquidación y cheque", "human")
              }
          }, {
              "se7": {"se8": {}},
              "se8": {"se9": {"style": "invis"}},
              "p1":{"p2": {}},
              "pr2": {"pr3": {}},
              "pr3": {"pr4": {}},
              "pr4": {"pr5": {}},
              "Beneficiario":  {"se7": {"style": "dashed"}},
              "se8": {"pr2": {"style": "dashed"}},
              "pr3": {"SIGEFOMDES Administración": {"style": "dashed"}},
              "pr4": {"SISAC": {"style": "dashed"}},
              "pr5": {"p1": {"style": "dashed"}},
              "p2": {"se9": {"style": "dashed"}, "Beneficiario": {"style": "dashed"}}
          }, "path/to/image.png")
      """
      from bpmn_pgv import *
      import pygraphviz as pgv
  
      F = pgv.AGraph(strict=False, directed=True)
  
      F.graph_attr.update(label="", rankdir="TB", splines="ortho", labelloc="b",
                          size="8, 7.5", forcelabels="true", ranksep="0.25", fontname="Liberation Sans Narrow Condensed")
      F.node_attr.update(fontname="Liberation Sans Narrow Condensed")
      F.edge_attr.update(fontname="Liberation Sans Narrow Condensed", fontsize="10")
  
      for cluster_name, cluster_data in clusters.items():
          cluster = add_cluster(F, cluster_name[:2], cluster_name.capitalize(), cluster_data, edges)
  
      F.add_node("SIGEFOMDES Administración", image=image_path + "database.png", shape="plaintext", label="", xlabel="SIGEFOMDES Administración")
      F.add_node("SISAC", image=image_path + "database.png", shape="plaintext", label="", xlabel="SISAC")
  
      add_edges(F, edges)
  
      F.draw("proc4.png", prog='dot')
      F.write("proc4.dot")
  
output:     for node, node_data in clusters.items():
          for task_id, (task_label, task_type) in node_data.items():
              if task_type == "start":
                  F.add_node(task_id, shape="circle", style="filled", fillcolor="green", label="")
              elif task_type == "end":
                  F.add_node(task_id, shape="circle", style="filled", fillcolor="red", label="")
              elif task_type == "human":
                  F.add_node(task_id, shape="rectangle", style="rounded", label=task_label)
              elif task_type == "message":
                  F.add_node(task_id, shape="diamond", label=task_label)
  
      for source, targets in edges.items():
          for target, edge_attrs in targets.items():
              if edge_attrs.get("style") == "dashed":
                  F.add_edge(source, target, style="dashed")
              else:
                  F.add_edge(source, target)