{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "required": ["schema_version", "analysis_by_K"],
  "properties": {
    "schema_version": {
      "type": "string"
    },
    "methodological_scope": {
      "type": "object",
      "properties": {
        "k_recommendation_scope": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "analysis_by_K": {
      "type": "object",
      "patternProperties": {
        "^[0-9]+$": {
          "type": "object",
          "required": ["metrics"],
          "properties": {

            "metrics": {
              "type": "object",
              "properties": {
                "inertia_intra": { "type": "number" },
                "inertia_ratio": { "type": "number" },
                "calinski_harabasz_score": { "type": "number" },
                "davies_bouldin_score": { "type": "number" }
              },
              "required": ["inertia_intra"]
            },

            "kpp1_audit_benchmark": {
              "type": "object",
              "properties": {
                "inertia": { "type": "number" },
                "ratio_sst": { "type": "number" },
                "alert": { "type": "boolean" }
              }
            },

            "structural_signal": {
              "type": "object",
              "properties": {
                "structural_signal_strength": { "type": "number" },
                "structural_signal_risk_worst_case": { "type": "number" },
                "structural_signal_risk_critical_pair": {
                  "type": "array",
                  "items": { "type": "integer" }
                }
              }
            },

            "connected_components": {
              "type": "object",
              "properties": {
                "nb_components": { "type": "integer" },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "array",
                    "items": { "type": "integer" }
                  }
                }
              }
            },

            "cart_surrogate": {
              "type": "object",
              "properties": {
                "status": { "type": "string" },
                "K": { "type": "integer" },
                "tree_info": {
                  "type": "object",
                  "properties": {
                    "criterion": { "type": "string" },
                    "max_leaf_nodes": { "type": "integer" },
                    "min_samples_split": { "type": "integer" },
                    "random_state": { "type": "integer" },
                    "n_features": { "type": "integer" },
                    "n_classes": { "type": "integer" },
                    "n_nodes": { "type": "integer" },
                    "n_leaves": { "type": "integer" },
                    "max_depth": { "type": "integer" },
                    "n_features_used": { "type": "integer" },
                    "features_used_ratio": { "type": "number" }
                  }
                },
                "metrics": {
                  "type": "object",
                  "properties": {
                    "accuracy": { "type": "number" },
                    "weighted_f1": { "type": "number" }
                  }
                },
                "feature_importances": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "feature": { "type": "string" },
                      "importance_gini": { "type": "number" }
                    },
                    "required": ["feature", "importance_gini"]
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": { "type": "string" }
                }
              }
            },

            "clusters_statistics": {
              "type": "object",
              "properties": {
                "method": { "type": "string" },
                "method_description": { "type": "string" },
                "alpha_v": { "type": "number" },
                "filter_rule": { "type": "string" },

                "explainability": {
                  "type": "object",
                  "properties": {
                    "n_total": { "type": "integer" },
                    "n_clusters_total": { "type": "integer" },
                    "n_clusters_evaluated": { "type": "integer" },
                    "n_clusters_singleton": { "type": "integer" },
                    "n_features_valid_global": { "type": "integer" },
                    "explainability_unweighted": { "type": "number" },
                    "mean_features_per_cluster": { "type": "number" },
                    "explainability_weighted": { "type": "number" }
                  }
                },

                "clusters": {
                  "type": "object",
                  "patternProperties": {
                    "^[0-9]+$": {
                      "type": "object",
                      "properties": {
                        "size": { "type": "integer" },
                        "share": { "type": "number" },
                        "status": { "type": "string" },
                        "n_features_explaining": { "type": "integer" },
                        "features": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "feature": { "type": "string" },
                              "mean_cluster": { "type": "number" },
                              "mean_global": { "type": "number" },
                              "v_test": { "type": "number" },
                              "p_value": { "type": "number" },
                              "direction": {
                                "type": "string",
                                "enum": ["+", "-"]
                              }
                            },
                            "required": ["feature", "v_test"]
                          }
                        }
                      }
                    }
                  }
                }
              }
            },

            "atomicity": {
              "type": "object",
              "properties": {
                "atomicity_k": { "type": "number" },
                "atomicity_k_over_k": { "type": "number" }
              }
            }

          }
        }
      }
    }
  },
  "additionalProperties": false
}
