{
  "_meta": {
    "descricao": "Registro dos projetos mapeados pelo protocolo de dossie. As ferramentas em ../_tools/ leem este arquivo.",
    "formato": {
      "id": "identificador curto do projeto",
      "titulo": "nome de exibicao",
      "dos": "diretorio onde os dossies deste projeto vivem (relativo a raiz do workspace)",
      "versoes": "mapa nome -> { raiz: caminho relativo a raiz do workspace }",
      "prefixos_codigo": "prefixos de caminho que o auditor valida",
      "modulos.modelo": "registry | pastas | implicito | hibrido",
      "modulos.comando": "consulta que devolve o registro (modelo registry)",
      "modulos.caminho": "diretorio com as pastas de modulo (modelo pastas)",
      "modulos.ignorar": "pastas excluidas, com razao",
      "alias": "slug do registro -> pasta do dossie, quando divergem",
      "extras": "grupos adicionais de modulos, alem do registro",
      "estado": "preparado | em_andamento | completo (o gate de cobertura so exige em \"completo\")",
      "cobertura.lacunas": "caminhos de classe sem dossie, com destino decidido na F2 (o gate exige destino, nao resolucao)",
      "raiz_codigo": "raiz do codigo, quando o projeto vive fora da raiz do workspace (padrao: a propria raiz do workspace)",
      "modulos.profundidade": "1 (Modulos/<Mod>) ou 2 (Modulos/<Grupo>/<Modulo>, slug grupo/modulo)"
    }
  },
  "padrao": "portal-municipal",
  "projetos": {
    "portal-municipal": {
      "titulo": "Portal Municipal",
      "descricao": "Portal da prefeitura: v5 (Laravel 5.5) e v6 (evolucao). 56 modulos na v6 + 10 exclusivos da v5.",
      "dos": "dossie_modules",
      "versoes": {
        "v5": {
          "raiz": "v5"
        },
        "v6": {
          "raiz": "v6"
        }
      },
      "prefixos_codigo": [
        "v5",
        "v6"
      ],
      "modulos": {
        "modelo": "registry",
        "comando": "docker exec v6_6f22e1bd-postgres-1 psql -U postgres -d prefeituras_v5 -tAc \"select id,name,slug,status from modulos order by id\"",
        "separador": "|",
        "ignorar": [],
        "campos": [
          "id",
          "nome",
          "slug",
          "status"
        ]
      },
      "alias": {
        "diario-ofifical": "diario-oficial",
        "detaques": "destaques",
        "a-prefeitura": "a-cidade"
      },
      "extras": {
        "v5-only": {
          "rotulo": "Exclusivos da v5",
          "descricao": "Modulos que existem apenas na v5. Resgate obrigatorio na reconstrucao.",
          "modulos": {
            "obras": "Obras publicas (cadastro mestre, categorias, status, galeria de anexos)",
            "obras-paralisadas": "Obras paralisadas (fiscalizacao de atraso)",
            "concursos-pss": "Concursos PSS (processos seletivos simplificados)",
            "estagiarios": "Estagiarios (cadastro e publicizacao)",
            "fila-espera-sus": "Fila de espera do SUS",
            "licitantes-sancionados": "Licitantes sancionados",
            "terceirizados": "Terceirizados (contratos de mao de obra)",
            "gemini": "Integracao com a API Google Gemini (geracao de texto)",
            "relatorio-estatistico-ouvidoria": "Relatorio estatistico da Ouvidoria (so o CMS foi perdido na v6)",
            "arquivo": "Infraestrutura de arquivos/galerias (Archive, ArchiveCategory)"
          }
        }
      },
      "painorama": "_00_panorama",
      "correcoes": "_01_v5_fix",
      "gerados": [
        "dossie_modules/README.md",
        "dossie_modules/_00_panorama/10-INVENTARIO-DE-MODULOS.md",
        "dossie_modules/_00_panorama/11-INVENTARIO-MECANICO.md"
      ],
      "estado": "completo",
      "cobertura": {
        "lacunas": [
          "app/Http/Controllers/Admin/MailController.php",
          "app/Http/Controllers/Admin/StateController.php",
          "app/Http/Controllers/Portal/CulturalMapping/FormController.php",
          "app/Http/Controllers/Portal/TutorialController.php",
          "app/Http/Model/Admin/AddressType.php",
          "app/Http/Model/Admin/Country.php",
          "app/Http/Model/Admin/EmailType.php",
          "app/Http/Model/Admin/LegalPerson.php",
          "app/Http/Model/Admin/PhysicalPerson.php",
          "app/Http/Model/Prefecture/CategoryContest.php",
          "app/Http/Model/Prefecture/CategoryEntity.php",
          "app/Http/Model/Prefecture/Entity.php",
          "app/Http/Model/Prefecture/EmendaParlamentarCategory.php"
        ],
        "nota": "Lacunas de cobertura conhecidas. Cada entrada tem DESTINO: ou sera coberta pelo dossie do modulo de destino na F2, ou sera formalmente declarada fora do escopo. O gate exige destino, nao resolucao."
      }
    },
    "cms": {
      "titulo": "CMS",
      "descricao": "CMS moderno (Laravel 11 + nwidart/laravel-modules). Modulos como pastas fisicas.",
      "dos": "dossie_modules/cms",
      "versoes": {
        "atual": {
          "raiz": "cms"
        }
      },
      "prefixos_codigo": [
        "cms"
      ],
      "modulos": {
        "modelo": "pastas",
        "caminho": "cms/modules",
        "ignorar": [
          {
            "slug": "Demo",
            "razao": "modulo de demonstracao, sem valor de negocio"
          }
        ]
      },
      "alias": {},
      "extras": {},
      "estado": "preparado",
      "gerados": [
        "dossie_modules/cms/README.md",
        "dossie_modules/cms/_00_panorama/10-INVENTARIO-DE-MODULOS.md",
        "dossie_modules/cms/_00_panorama/11-INVENTARIO-MECANICO.md"
      ]
    },
    "sucesu-cms": {
      "titulo": "Sucesu CMS",
      "descricao": "CMS do Sucesu (Laravel). Modulos como pastas fisicas em V2/Modules.",
      "dos": "dossie_modules/sucesu-cms",
      "versoes": {
        "atual": {
          "raiz": "sucesu-cms"
        }
      },
      "prefixos_codigo": [
        "sucesu-cms"
      ],
      "modulos": {
        "modelo": "pastas",
        "caminho": "sucesu-cms/V2/Modules",
        "ignorar": [
          {
            "slug": "_Exemplos",
            "razao": "andaime de exemplo"
          },
          {
            "slug": "Demo",
            "razao": "modulo de demonstracao"
          }
        ]
      },
      "alias": {},
      "extras": {},
      "estado": "preparado",
      "gerados": [
        "dossie_modules/sucesu-cms/README.md",
        "dossie_modules/sucesu-cms/_00_panorama/10-INVENTARIO-DE-MODULOS.md",
        "dossie_modules/sucesu-cms/_00_panorama/11-INVENTARIO-MECANICO.md"
      ]
    },
    "tecvoto": {
      "titulo": "TecVoto",
      "descricao": "Monorepo da Camara (Laravel 5.5), mesma linhagem do Portal Municipal. Registro de modulos por tabela.",
      "dos": "dossie_modules/tecvoto",
      "versoes": {
        "atual": {
          "raiz": "tecvoto-monorepo"
        }
      },
      "prefixos_codigo": [
        "tecvoto-monorepo"
      ],
      "modulos": {
        "modelo": "registry",
        "comando": "grep -oE \"'[a-z0-9-]+'\" tecvoto-monorepo/database/migrations/2024_11_01_150206_create_modulos_table.php | tr -d \"'\" | sort -u",
        "separador": "",
        "ignorar": [],
        "campos": [
          "slug"
        ]
      },
      "alias": {},
      "extras": {},
      "estado": "preparado",
      "gerados": [
        "dossie_modules/tecvoto/README.md",
        "dossie_modules/tecvoto/_00_panorama/10-INVENTARIO-DE-MODULOS.md",
        "dossie_modules/tecvoto/_00_panorama/11-INVENTARIO-MECANICO.md"
      ]
    },
    "lotep-v2": {
      "titulo": "Lotep V2",
      "descricao": "Portal/CMS da LOTEP - camada modular V2 (Laravel 5.5, PHP 7.4) com Core/Modules/Services e auto-descoberta; projeto fora da raiz do workspace.",
      "dos": "dossie_modules/lotep-v2",
      "raiz_codigo": "../../../lotep",
      "versoes": {
        "v2": {
          "raiz": "../../../lotep/V2"
        }
      },
      "prefixos_codigo": [
        "V2",
        "tests"
      ],
      "modulos": {
        "modelo": "pastas",
        "caminho": "V2/Modules",
        "profundidade": 2,
        "ignorar": [
          {
            "slug": "_exemplos",
            "razao": "andaime de exemplo"
          }
        ]
      },
      "alias": {
        "dadosabertos/transparenciafiscal": "dadosabertos-transparenciafiscal",
        "infraestrutura/formulariosdinamicos": "infraestrutura-formulariosdinamicos",
        "infraestrutura/gestaopermissoes": "infraestrutura-gestaopermissoes",
        "publicacoes/legislacao": "publicacoes-legislacao",
        "publicacoes/licitacoes": "publicacoes-licitacoes",
        "publicacoes/noticias": "publicacoes-noticias",
        "servicos/ouvidoria": "servicos-ouvidoria",
        "support/structurallandingeditor": "support-structurallandingeditor"
      },
      "extras": {},
      "estado": "preparado",
      "gerados": [
        "dossie_modules/lotep-v2/README.md",
        "dossie_modules/lotep-v2/_00_panorama/10-INVENTARIO-DE-MODULOS.md",
        "dossie_modules/lotep-v2/_00_panorama/11-INVENTARIO-MECANICO.md"
      ]
    }
  }
}