{
    "id": "BR-L-03-01-indemnites-legales",
    "label": "Calcul des indemnités légales d’absence",
    "description": "Calcule les indemnités légales en cas d’absence : maladie, maternité, AT. Prend en compte les jours de carence, le statut et le salaire journalier de référence.",
  
    "inputs": {
      "absences": "array",
      "salaire_brut_mensuel": "number",
      "statut": "string",
      "jours_carence_legale": "number"
    },
  
    "outputs": {
      "indemnites_legales": "number",
      "jours_indemnises": "number",
      "error": "string|null"
    },
  
    "ast": {
      "type": "Program",
      "body": [
        {
          "type": "Let",
          "name": "salaire_journalier",
          "value": {
            "type": "BinaryExpression",
            "operator": "/",
            "left": {"type": "Identifier", "name": "salaire_brut_mensuel"},
            "right": {"type": "Literal", "value": 30}
          }
        },
  
        {
          "type": "Let",
          "name": "jours_indemnises",
          "value": {"type": "Literal", "value": 0}
        },
  
        {
          "type": "Let",
          "name": "indemnites",
          "value": {"type": "Literal", "value": 0}
        },
  
        {
          "type": "ForEach",
          "item": "absence",
          "array": {"type": "Identifier", "name": "absences"},
          "body": {
            "type": "Block",
            "body": [
  
              {
                "type": "If",
                "condition": {
                  "type": "BinaryExpression",
                  "operator": "!=",
                  "left": {"type": "Identifier", "name": "absence.type"},
                  "right": { "type": "Literal", "value": "maladie" }
                },
                "then": { "type": "Continue" }
              },
  
              {
                "type": "Let",
                "name": "jours_a_indemniser",
                "value": {
                  "type": "BinaryExpression",
                  "operator": "-",
                  "left": {"type": "Identifier", "name": "absence.jours"},
                  "right": {"type": "Identifier", "name": "jours_carence_legale"}
                }
              },
  
              {
                "type": "If",
                "condition": {
                  "type": "BinaryExpression",
                  "operator": "<",
                  "left": {"type": "Identifier", "name": "jours_a_indemniser"},
                  "right": {"type": "Literal", "value": 0}
                },
                "then": {
                  "type": "Let",
                  "name": "jours_a_indemniser",
                  "value": {"type": "Literal", "value": 0}
                }
              },
  
              {
                "type": "Let",
                "name": "montant",
                "value": {
                  "type": "BinaryExpression",
                  "operator": "*",
                  "left": {"type": "Identifier", "name": "jours_a_indemniser"},
                  "right": {
                    "type": "BinaryExpression",
                    "operator": "*",
                    "left": {"type": "Identifier", "name": "salaire_journalier"},
                    "right": {"type": "Literal", "value": 0.5}
                  }
                }
              },
  
              {
                "type": "Let",
                "name": "indemnites",
                "value": {
                  "type": "BinaryExpression",
                  "operator": "+",
                  "left": {"type": "Identifier", "name": "indemnites"},
                  "right": {"type": "Identifier", "name": "montant"}
                }
              },
  
              {
                "type": "Let",
                "name": "jours_indemnises",
                "value": {
                  "type": "BinaryExpression",
                  "operator": "+",
                  "left": {"type": "Identifier", "name": "jours_indemnises"},
                  "right": {"type": "Identifier", "name": "jours_a_indemniser"}
                }
              }
            ]
          }
        },
  
        {
          "type": "Return",
          "value": {
            "type": "ObjectExpression",
            "properties": [
              { "key": "indemnites_legales", "value": {"type": "Identifier", "name": "indemnites"} },
              { "key": "jours_indemnises", "value": {"type": "Identifier", "name": "jours_indemnises"} }
            ]
          }
        }
      ]
    }
  }
  