laws-application

graph TB;
    A[Незаконное завладение имуществом?] -- Да --> B[С применением насилия или угрозы?]
    B -- Да --> C[Группой лиц, рецидив, причинение вреда?]
    B -- Нет --> D{Ст. 158}
    C -- Да --> E{Ст. 161}
    C -- Нет --> G{Ст. 162}
    A -- Нет --> H[Нарушение обязательств возвращать имущество?]
    H -- Нет --> I[Злоупотребление доверием/обман для получения имущества?]
    I -- Да --> J{Ст. 159}
    I -- Нет --> K[Хищение исторически, научно или художественно ценных предметов?]
    K -- Да --> L{Ст. 164}
    K -- Нет --> M[Присвоение или растрата?]
    M -- Да --> N{Ст. 160}
    M -- Нет --> O{Нет применимых статей}
    H -- Да --> P{Ст. 163}
Loading

С начала проверяется, было ли незаконное завладение имуществом. Если да, то проверяется, было ли оно с применением насилия или угрозы. Если применялось насилие или угроза, проверяется участие группы лиц, рецидив или причинение вреда: если да, ст. 161, если нет - ст. 162. Если насилие или угроза не применялись, применяется ст. 158. Если незаконного завладения имуществом не было, проверяется, были ли нарушены обязательства по возврату имущества: если да, ст. 163. Если обязательства не нарушались, проверяется наличие злоупотребления доверием или обмана: если да, ст. 159. Если их не было, проверяется наличие хищения исторически, научно или художественно ценных предметов: если да, ст. 164. Если их не было, проверяется наличие присвоения или растраты: если да, ст. 160. Если и их не было, уголовные статьи с 158 по 164 не применяются.

function getApplicableArticles(caseFacts) {
    let applicableArticles = [];

    caseFacts.forEach(fact => {
        if (fact.unlawfulDeprivationOfProperty) {
            if (fact.immediateDangerToLife || fact.useOfForce) {
                applicableArticles.push(161);
                if (fact.groupConspiracy || fact.significantDamage) {
                    applicableArticles.push(162);
                }
            } else {
                applicableArticles.push(158);
            }
        }

        if (fact.unlawfulAquiring) {
            applicableArticles.push(159);
        }

        if (fact.specialValueItemTheft) {
            applicableArticles.push(164);
        }

        if (fact.personInPossessionOfProperty) {
            applicableArticles.push(160);
        }
    });

    return applicableArticles;
}