{"id":2560,"date":"2024-10-30T13:46:46","date_gmt":"2024-10-30T13:46:46","guid":{"rendered":"https:\/\/www.zlati.legal\/?p=2560"},"modified":"2025-12-28T16:33:43","modified_gmt":"2025-12-28T16:33:43","slug":"calculator-pentru-prescriptia-raspunderii-penale","status":"publish","type":"post","link":"https:\/\/zic.legal\/ro\/calculator-pentru-prescriptia-raspunderii-penale\/","title":{"rendered":"Calculator online pentru prescrip\u021bia r\u0103spunderii penale"},"content":{"rendered":"<div id=\"zic-prescriptie-calculator-v2\" class=\"zic2\" data-zic2=\"1\">\r\n  <div class=\"zic2__wrap\">\r\n    <!-- Header -->\r\n    <header class=\"zic2__hero\">\r\n      <div class=\"zic2__brandbar\">\r\n        <div class=\"zic2__mark\" aria-hidden=\"true\">\r\n          <svg width=\"20\" height=\"20\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n            <circle cx=\"12\" cy=\"12\" r=\"10\"\/>\r\n            <polyline points=\"12 6 12 12 16 14\"\/>\r\n          <\/svg>\r\n        <\/div>\r\n        <div class=\"zic2__headerText\">\r\n          <h2 class=\"zic2__title\">Calculator prescriptie<\/h2>\r\n          <p class=\"zic2__subtitle\">Calculeaza termenele conform Art. 154-156 Cod penal<\/p>\r\n        <\/div>\r\n      <\/div>\r\n    <\/header>\r\n\r\n    <!-- Formula info -->\r\n    <div class=\"zic2__formula\">\r\n      <div class=\"zic2__formulaIcon\">\r\n        <svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n          <circle cx=\"12\" cy=\"12\" r=\"10\"\/>\r\n          <path d=\"M12 16v-4\"\/>\r\n          <path d=\"M12 8h.01\"\/>\r\n        <\/svg>\r\n      <\/div>\r\n      <div class=\"zic2__formulaText\">\r\n        <strong>Termen general:<\/strong> de la data savarsirii pana la implinirea termenului. <strong>Termen special:<\/strong> 2x termenul general (daca intreruperea e posibila).\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Card: Setari generale -->\r\n    <section class=\"zic2__card\" aria-labelledby=\"zic2-sec-setari\">\r\n      <div class=\"zic2__cardHeader\">\r\n        <div class=\"zic2__cardIcon zic2__cardIcon--purple\">\r\n          <svg width=\"18\" height=\"18\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n            <path d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 0 0-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 0 0-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 0 0-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 0 0-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 0 0 1.066-2.573c-.94-1.543.826-3.31 2.37-2.37 1 .608 2.296.07 2.572-1.065Z\"\/>\r\n            <circle cx=\"12\" cy=\"12\" r=\"3\"\/>\r\n          <\/svg>\r\n        <\/div>\r\n        <h3 id=\"zic2-sec-setari\" class=\"zic2__cardTitle\">Setari generale<\/h3>\r\n      <\/div>\r\n\r\n      <div class=\"zic2__field\" style=\"margin-bottom: 16px;\">\r\n        <label class=\"zic2__label\" for=\"zic2-favorable-law\">Legea penala mai favorabila<\/label>\r\n        <select id=\"zic2-favorable-law\" class=\"zic2__select\" data-field=\"favorableLaw\">\r\n          <option value=\"\">Selectati perioada...<\/option>\r\n          <option value=\"pre-2018\">Anterioara datei de 25.06.2018<\/option>\r\n          <option value=\"2018-2022\">Perioada 25.06.2018 - 30.05.2022<\/option>\r\n          <option value=\"post-2022\">Ulterioara datei de 30.05.2022<\/option>\r\n        <\/select>\r\n      <\/div>\r\n\r\n      <label class=\"zic2__checkbox\">\r\n        <input type=\"checkbox\" data-field=\"includePandemic\">\r\n        <span class=\"zic2__checkmark\"><\/span>\r\n        <span class=\"zic2__checkLabel\">\r\n          <strong>Include suspendarea pandemiei<\/strong>\r\n          <small>16.03.2020 - 14.05.2020 (pana la 60 zile, in functie de suprapunere)<\/small>\r\n        <\/span>\r\n      <\/label>\r\n\r\n      <!-- Hint -->\r\n      <div class=\"zic2__hint\" style=\"margin-top: 16px;\">\r\n        <svg width=\"14\" height=\"14\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"\/><path d=\"M12 17h.01\"\/><\/svg>\r\n        <span>In perioada 25.06.2018 - 30.05.2022, mecanismul intreruperii prescriptiei a fost pus sub semnul intrebarii (Deciziile CCR 297\/2018 si 358\/2022).<\/span>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- Card: Infractiuni -->\r\n    <section class=\"zic2__card\" aria-labelledby=\"zic2-sec-infractiuni\">\r\n      <div class=\"zic2__cardHeader\">\r\n        <div class=\"zic2__cardIcon zic2__cardIcon--purple\">\r\n          <svg width=\"18\" height=\"18\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n            <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\"\/>\r\n            <polyline points=\"14 2 14 8 20 8\"\/>\r\n            <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"\/>\r\n            <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"\/>\r\n          <\/svg>\r\n        <\/div>\r\n        <h3 id=\"zic2-sec-infractiuni\" class=\"zic2__cardTitle\">Infractiuni<\/h3>\r\n      <\/div>\r\n\r\n      <div class=\"zic2__btnGroup\">\r\n        <button type=\"button\" class=\"zic2__btn zic2__btn--outline\" data-action=\"addOffense\">\r\n          <svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n          Adauga infractiune\r\n        <\/button>\r\n        <button type=\"button\" class=\"zic2__btn zic2__btn--success\" data-action=\"example\">\r\n          <svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><polyline points=\"14 2 14 8 20 8\"\/><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"\/><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"\/><\/svg>\r\n          Exemplu\r\n        <\/button>\r\n      <\/div>\r\n\r\n      <!-- Offenses Container -->\r\n      <div class=\"zic2__rows\" data-offenses><\/div>\r\n\r\n      <div class=\"zic2__emptyState\" data-empty=\"offenses\">\r\n        <svg width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\r\n          <circle cx=\"12\" cy=\"12\" r=\"10\"\/>\r\n          <polyline points=\"12 6 12 12 16 14\"\/>\r\n        <\/svg>\r\n        <span>Adauga cel putin o infractiune<\/span>\r\n      <\/div>\r\n\r\n      <div class=\"zic2__error is-hidden\" role=\"alert\" aria-live=\"polite\" data-errors><\/div>\r\n    <\/section>\r\n\r\n    <!-- Actions -->\r\n    <div class=\"zic2__actions\">\r\n      <button type=\"button\" class=\"zic2__btn zic2__btn--primary zic2__btn--large\" data-action=\"calculate\">\r\n        <svg width=\"18\" height=\"18\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"9 11 12 14 22 4\"\/><path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"\/><\/svg>\r\n        Calculeaza\r\n      <\/button>\r\n      <button type=\"button\" class=\"zic2__btn zic2__btn--secondary\" data-action=\"reset\">\r\n        <svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"\/><path d=\"M3 3v5h5\"\/><\/svg>\r\n        Reseteaza\r\n      <\/button>\r\n      <button type=\"button\" class=\"zic2__btn zic2__btn--secondary\" data-action=\"export-pdf\">\r\n        <svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><polyline points=\"14 2 14 8 20 8\"\/><path d=\"M12 18v-6\"\/><path d=\"M9 15l3 3 3-3\"\/><\/svg>\r\n        Descarca PDF\r\n      <\/button>\r\n    <\/div>\r\n\r\n    <!-- Result -->\r\n    <section class=\"zic2__card zic2__resultCard is-hidden\" data-result aria-live=\"polite\">\r\n      <div class=\"zic2__cardHeader\">\r\n        <div class=\"zic2__cardIcon zic2__cardIcon--green\">\r\n          <svg width=\"18\" height=\"18\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\r\n        <\/div>\r\n        <h3 class=\"zic2__cardTitle\">Rezultat calcul prescriptie<\/h3>\r\n      <\/div>\r\n      <div class=\"zic2__pandNote is-hidden\" data-pandemic-note>\r\n        <svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg>\r\n        <span>Prima data = fara suspendare. A doua (daca apare) = cu suspendarea pe perioada starii de urgenta.<\/span>\r\n      <\/div>\r\n      <div class=\"zic2__resultBody\" data-result-content><\/div>\r\n    <\/section>\r\n\r\n    <!-- Disclaimer -->\r\n    <div class=\"zic2__disclaimer\">\r\n      <svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg>\r\n      <div>\r\n        <strong>Disclaimer:<\/strong> Acest calculator este oferit exclusiv in scop informativ si educativ. Rezultatele generate nu constituie consultanta juridica si nu pot inlocui sfatul unui avocat specializat.\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Footer -->\r\n    <footer class=\"zic2__footer\">\r\n      <a href=\"https:\/\/zic.legal\/ro\/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"zic2__footerLink\">\r\n        &copy; 2025 ZIC Legal\r\n      <\/a>\r\n    <\/footer>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n\/* ============================================================\r\n   ZIC Calculator v2 - Prescriptie\r\n   Theme: Purple\/Mov | Fully Responsive | Optimized\r\n   ============================================================ *\/\r\n\r\n\/* === CSS Variables === *\/\r\n#zic-prescriptie-calculator-v2 {\r\n  --zic-primary: #8A88FF;\r\n  --zic-primary-dark: #6F6CFF;\r\n  --zic-primary-light: rgba(138,136,255,.08);\r\n  --zic-primary-border: rgba(138,136,255,.25);\r\n\r\n  --zic-success: #10B981;\r\n  --zic-success-light: rgba(16,185,129,.08);\r\n  --zic-success-border: rgba(16,185,129,.25);\r\n\r\n  --zic-danger: #EF4444;\r\n  --zic-danger-light: rgba(239,68,68,.08);\r\n  --zic-danger-border: rgba(239,68,68,.25);\r\n\r\n  --zic-warning: #F59E0B;\r\n  --zic-warning-light: rgba(245,158,11,.08);\r\n  --zic-warning-border: rgba(245,158,11,.25);\r\n\r\n  --zic-blue: #3B82F6;\r\n  --zic-blue-light: rgba(59,130,246,.08);\r\n\r\n  --zic-ink: #1F2937;\r\n  --zic-ink-light: #374151;\r\n  --zic-muted: #6B7280;\r\n  --zic-light: #9CA3AF;\r\n\r\n  --zic-bg: #F9FAFB;\r\n  --zic-surface: #FFFFFF;\r\n  --zic-border: #E5E7EB;\r\n\r\n  --zic-shadow-sm: 0 1px 2px rgba(0,0,0,.05);\r\n  --zic-shadow: 0 4px 6px -1px rgba(0,0,0,.1), 0 2px 4px -1px rgba(0,0,0,.06);\r\n  --zic-shadow-lg: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -2px rgba(0,0,0,.05);\r\n\r\n  --zic-radius: 16px;\r\n  --zic-radius-sm: 12px;\r\n  --zic-radius-xs: 8px;\r\n\r\n  --zic-transition: 150ms ease;\r\n\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\r\n  color: var(--zic-ink);\r\n  line-height: 1.5;\r\n  -webkit-font-smoothing: antialiased;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 *,\r\n#zic-prescriptie-calculator-v2 *::before,\r\n#zic-prescriptie-calculator-v2 *::after {\r\n  box-sizing: border-box;\r\n}\r\n\r\n\/* === WordPress\/Avada Override Protection === *\/\r\n#zic-prescriptie-calculator-v2 input[type=\"checkbox\"] {\r\n  -webkit-appearance: checkbox !important;\r\n  -moz-appearance: checkbox !important;\r\n  appearance: checkbox !important;\r\n  width: 18px !important;\r\n  height: 18px !important;\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n  border: none !important;\r\n  background: none !important;\r\n  box-shadow: none !important;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 input[type=\"number\"],\r\n#zic-prescriptie-calculator-v2 input[type=\"text\"],\r\n#zic-prescriptie-calculator-v2 input[type=\"date\"] {\r\n  -webkit-appearance: none !important;\r\n  -moz-appearance: textfield !important;\r\n  appearance: none !important;\r\n  background-image: none !important;\r\n  box-shadow: none !important;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 select {\r\n  background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236B7280' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\") !important;\r\n  background-repeat: no-repeat !important;\r\n  background-position: right 12px center !important;\r\n  padding-right: 36px !important;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 button:not(.zic2__btn--primary) {\r\n  background-image: none !important;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 button {\r\n  text-shadow: none !important;\r\n  letter-spacing: normal !important;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 h2,\r\n#zic-prescriptie-calculator-v2 h3 {\r\n  text-transform: none !important;\r\n  letter-spacing: normal !important;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 a {\r\n  text-decoration: none;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 a:hover {\r\n  text-decoration: underline;\r\n}\r\n\r\n\/* === Layout === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__wrap {\r\n  max-width: 720px;\r\n  margin: 0 auto;\r\n  padding: 16px;\r\n}\r\n\r\n\/* === Header === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__hero {\r\n  margin-bottom: 16px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__brandbar {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 14px;\r\n  background: linear-gradient(135deg, var(--zic-primary), var(--zic-primary-dark));\r\n  border-radius: var(--zic-radius);\r\n  padding: 20px;\r\n  color: #fff;\r\n  box-shadow: var(--zic-shadow-lg);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__mark {\r\n  width: 48px;\r\n  height: 48px;\r\n  background: rgba(255,255,255,.2);\r\n  border-radius: 12px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  flex-shrink: 0;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__headerText {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__title {\r\n  margin: 0;\r\n  font-size: 20px;\r\n  font-weight: 700;\r\n  line-height: 1.2;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__subtitle {\r\n  margin: 4px 0 0;\r\n  font-size: 14px;\r\n  opacity: 0.9;\r\n}\r\n\r\n\/* === Formula Box === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__formula {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 10px;\r\n  background: var(--zic-primary-light);\r\n  border: 1px solid var(--zic-primary-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  padding: 12px 14px;\r\n  margin-bottom: 16px;\r\n  font-size: 14px;\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__formulaIcon {\r\n  color: var(--zic-primary-dark);\r\n  flex-shrink: 0;\r\n  margin-top: 1px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__formulaText strong {\r\n  color: var(--zic-ink);\r\n}\r\n\r\n\/* === Cards === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__card {\r\n  background: var(--zic-surface);\r\n  border: 1px solid var(--zic-border);\r\n  border-radius: var(--zic-radius);\r\n  padding: 20px;\r\n  margin-bottom: 16px;\r\n  box-shadow: var(--zic-shadow-sm);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__cardHeader {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__cardIcon {\r\n  width: 36px;\r\n  height: 36px;\r\n  border-radius: 10px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  flex-shrink: 0;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__cardIcon--purple {\r\n  background: var(--zic-primary-light);\r\n  color: var(--zic-primary-dark);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__cardIcon--green {\r\n  background: var(--zic-success-light);\r\n  color: var(--zic-success);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__cardTitle {\r\n  margin: 0;\r\n  font-size: 17px;\r\n  font-weight: 700;\r\n  color: var(--zic-ink);\r\n}\r\n\r\n\/* === Form Elements === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__field {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 4px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__label {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  color: var(--zic-muted);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__input,\r\n#zic-prescriptie-calculator-v2 .zic2__select {\r\n  width: 100%;\r\n  padding: 10px 12px;\r\n  font-size: 15px;\r\n  font-family: inherit;\r\n  color: var(--zic-ink);\r\n  background: var(--zic-surface);\r\n  border: 2px solid var(--zic-border);\r\n  border-radius: var(--zic-radius-xs);\r\n  outline: none;\r\n  transition: border-color var(--zic-transition), box-shadow var(--zic-transition);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__input:focus,\r\n#zic-prescriptie-calculator-v2 .zic2__select:focus {\r\n  border-color: var(--zic-primary);\r\n  box-shadow: 0 0 0 3px var(--zic-primary-light);\r\n}\r\n\r\n\/* === Checkbox === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__checkbox {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 12px;\r\n  padding: 14px;\r\n  background: var(--zic-bg);\r\n  border: 1px solid var(--zic-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  cursor: pointer;\r\n  transition: all var(--zic-transition);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__checkbox:hover {\r\n  background: var(--zic-primary-light);\r\n  border-color: var(--zic-primary-border);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__checkbox input[type=\"checkbox\"] {\r\n  width: 18px;\r\n  height: 18px;\r\n  accent-color: var(--zic-primary);\r\n  flex-shrink: 0;\r\n  margin-top: 2px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__checkLabel {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 2px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__checkLabel strong {\r\n  font-size: 14px;\r\n  font-weight: 700;\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__checkLabel small {\r\n  font-size: 12px;\r\n  color: var(--zic-muted);\r\n}\r\n\r\n\/* === Buttons === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__btnGroup {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 8px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 6px;\r\n  padding: 10px 16px;\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  border-radius: var(--zic-radius-sm);\r\n  border: 1px solid transparent;\r\n  cursor: pointer;\r\n  transition: all var(--zic-transition);\r\n  white-space: nowrap;\r\n  text-decoration: none;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn:focus {\r\n  outline: none;\r\n  box-shadow: 0 0 0 3px var(--zic-primary-border);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn:active {\r\n  transform: translateY(1px);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--primary {\r\n  background: linear-gradient(135deg, var(--zic-primary), var(--zic-primary-dark));\r\n  color: #fff;\r\n  box-shadow: 0 4px 14px rgba(138,136,255,.35);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--primary:hover {\r\n  box-shadow: 0 6px 20px rgba(138,136,255,.45);\r\n  transform: translateY(-1px);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--large {\r\n  padding: 14px 24px;\r\n  font-size: 15px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--secondary {\r\n  background: var(--zic-surface);\r\n  border-color: var(--zic-border);\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--secondary:hover {\r\n  background: var(--zic-bg);\r\n  border-color: var(--zic-primary-border);\r\n  color: var(--zic-primary-dark);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--outline {\r\n  background: var(--zic-surface);\r\n  border-color: var(--zic-primary-border);\r\n  color: var(--zic-primary-dark);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--outline:hover {\r\n  background: var(--zic-primary-light);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--success {\r\n  background: var(--zic-success-light);\r\n  border-color: var(--zic-success-border);\r\n  color: var(--zic-success);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--success:hover {\r\n  background: rgba(16,185,129,.15);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--danger {\r\n  background: var(--zic-danger-light);\r\n  border-color: var(--zic-danger-border);\r\n  color: var(--zic-danger);\r\n  padding: 8px 12px;\r\n  font-size: 13px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__btn--danger:hover {\r\n  background: rgba(239,68,68,.15);\r\n}\r\n\r\n\/* === Rows === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__rows {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 10px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__row {\r\n  background: var(--zic-bg);\r\n  border: 1px solid var(--zic-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  padding: 14px;\r\n  transition: border-color var(--zic-transition);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__row:hover {\r\n  border-color: var(--zic-primary-border);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__rowHeader {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  margin-bottom: 12px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__rowTag {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  font-size: 13px;\r\n  font-weight: 700;\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__rowBadge {\r\n  width: 24px;\r\n  height: 24px;\r\n  background: linear-gradient(135deg, var(--zic-primary), var(--zic-primary-dark));\r\n  color: #fff;\r\n  border-radius: 8px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: 12px;\r\n  font-weight: 800;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__rowGrid {\r\n  display: grid;\r\n  grid-template-columns: 1fr;\r\n  gap: 10px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__rowGrid2 {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 10px;\r\n  margin-top: 10px;\r\n}\r\n\r\n\/* === Pills === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__pills {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 8px;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__pill {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 8px 12px;\r\n  border-radius: var(--zic-radius-xs);\r\n  border: 2px solid var(--zic-border);\r\n  background: var(--zic-bg);\r\n  cursor: pointer;\r\n  transition: all var(--zic-transition);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__pill:hover {\r\n  background: var(--zic-primary-light);\r\n  border-color: var(--zic-primary-border);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__pill.is-active {\r\n  background: var(--zic-primary-light);\r\n  border-color: var(--zic-primary);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__pill input {\r\n  width: 16px;\r\n  height: 16px;\r\n  accent-color: var(--zic-primary);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__pill span {\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n\/* === Empty State === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__emptyState {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 8px;\r\n  padding: 24px;\r\n  background: var(--zic-bg);\r\n  border: 2px dashed var(--zic-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  color: var(--zic-light);\r\n  font-size: 13px;\r\n  text-align: center;\r\n}\r\n\r\n\/* === Hint === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__hint {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 8px;\r\n  padding: 10px 12px;\r\n  background: var(--zic-bg);\r\n  border-radius: var(--zic-radius-xs);\r\n  font-size: 12px;\r\n  color: var(--zic-muted);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__hint svg {\r\n  flex-shrink: 0;\r\n  margin-top: 1px;\r\n}\r\n\r\n\/* === Actions === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__actions {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 10px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__actions .zic2__btn--primary {\r\n  flex: 1;\r\n  min-width: 200px;\r\n}\r\n\r\n\/* === Error === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__error {\r\n  margin-top: 12px;\r\n  padding: 12px;\r\n  background: var(--zic-danger-light);\r\n  border: 1px solid var(--zic-danger-border);\r\n  border-radius: var(--zic-radius-xs);\r\n  color: var(--zic-danger);\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__error ul {\r\n  margin: 8px 0 0 18px;\r\n  padding: 0;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__error li {\r\n  margin: 4px 0;\r\n}\r\n\r\n\/* === Result === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__resultCard {\r\n  border-color: var(--zic-success-border);\r\n  background: linear-gradient(135deg, rgba(16,185,129,.02), rgba(16,185,129,.06));\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__resultBody {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 12px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__pandNote {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 10px;\r\n  padding: 12px 14px;\r\n  background: var(--zic-warning-light);\r\n  border: 1px solid var(--zic-warning-border);\r\n  border-radius: var(--zic-radius-xs);\r\n  font-size: 13px;\r\n  color: #92400E;\r\n  margin-bottom: 12px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__pandNote svg {\r\n  flex-shrink: 0;\r\n  margin-top: 1px;\r\n  color: var(--zic-warning);\r\n}\r\n\r\n\/* Result Table *\/\r\n#zic-prescriptie-calculator-v2 .zic2__tableWrap {\r\n  overflow-x: auto;\r\n  border-radius: var(--zic-radius-sm);\r\n  border: 1px solid var(--zic-border);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  min-width: 600px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 th {\r\n  text-align: left;\r\n  font-size: 11px;\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.5px;\r\n  color: var(--zic-muted);\r\n  padding: 12px 14px;\r\n  border-bottom: 2px solid var(--zic-border);\r\n  background: var(--zic-bg);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 td {\r\n  padding: 12px 14px;\r\n  border-bottom: 1px solid var(--zic-border);\r\n  font-size: 13px;\r\n  color: var(--zic-ink-light);\r\n  vertical-align: top;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 tr:last-child td {\r\n  border-bottom: none;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 tr:nth-child(even) td {\r\n  background: rgba(249, 250, 251, 0.5);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__chip {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  padding: 4px 10px;\r\n  border-radius: 999px;\r\n  font-weight: 700;\r\n  font-size: 11px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__chip--yes {\r\n  background: var(--zic-success-light);\r\n  color: var(--zic-success);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__chip--no {\r\n  background: var(--zic-danger-light);\r\n  color: var(--zic-danger);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__subdate {\r\n  font-size: 12px;\r\n  margin-top: 4px;\r\n  color: var(--zic-primary-dark);\r\n}\r\n\r\n\/* Mobile Cards *\/\r\n#zic-prescriptie-calculator-v2 .zic2__mobileResult {\r\n  display: block;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__desktopResult {\r\n  display: none;\r\n}\r\n\r\n@media (min-width: 768px) {\r\n  #zic-prescriptie-calculator-v2 .zic2__mobileResult { display: none; }\r\n  #zic-prescriptie-calculator-v2 .zic2__desktopResult { display: block; }\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__miniCard {\r\n  background: var(--zic-surface);\r\n  border: 1px solid var(--zic-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  padding: 14px;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__miniCard:last-child {\r\n  margin-bottom: 0;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__miniTitle {\r\n  font-weight: 700;\r\n  font-size: 14px;\r\n  margin: 0 0 12px 0;\r\n  padding-bottom: 10px;\r\n  border-bottom: 1px solid var(--zic-border);\r\n  color: var(--zic-ink);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__miniGrid {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 12px;\r\n  font-size: 13px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__klabel {\r\n  color: var(--zic-muted);\r\n  font-size: 11px;\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.05em;\r\n  margin-bottom: 4px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__kvalue {\r\n  font-weight: 700;\r\n  color: var(--zic-ink);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__kvalue--yes { color: var(--zic-success); }\r\n#zic-prescriptie-calculator-v2 .zic2__kvalue--no { color: var(--zic-danger); }\r\n\r\n\/* === Disclaimer === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__disclaimer {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 10px;\r\n  padding: 14px;\r\n  background: var(--zic-bg);\r\n  border: 1px solid var(--zic-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  font-size: 12px;\r\n  color: var(--zic-muted);\r\n  line-height: 1.5;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__disclaimer svg {\r\n  flex-shrink: 0;\r\n  color: var(--zic-warning);\r\n  margin-top: 1px;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__disclaimer strong {\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n\/* === Footer === *\/\r\n#zic-prescriptie-calculator-v2 .zic2__footer {\r\n  text-align: center;\r\n  padding: 8px 0;\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__footerLink {\r\n  color: var(--zic-primary-dark);\r\n  text-decoration: none;\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  transition: color var(--zic-transition);\r\n}\r\n\r\n#zic-prescriptie-calculator-v2 .zic2__footerLink:hover {\r\n  color: var(--zic-primary);\r\n  text-decoration: underline;\r\n}\r\n\r\n\/* === Utility === *\/\r\n#zic-prescriptie-calculator-v2 .is-hidden {\r\n  display: none !important;\r\n}\r\n\r\n\/* === RESPONSIVE === *\/\r\n\r\n\/* Small mobile (max 500px) *\/\r\n@media (max-width: 500px) {\r\n  #zic-prescriptie-calculator-v2 .zic2__actions {\r\n    flex-direction: column;\r\n  }\r\n\r\n  #zic-prescriptie-calculator-v2 .zic2__actions .zic2__btn {\r\n    width: 100%;\r\n    min-width: unset;\r\n  }\r\n\r\n  #zic-prescriptie-calculator-v2 .zic2__btnGroup {\r\n    flex-direction: column;\r\n  }\r\n\r\n  #zic-prescriptie-calculator-v2 .zic2__btnGroup .zic2__btn {\r\n    width: 100%;\r\n  }\r\n\r\n  #zic-prescriptie-calculator-v2 .zic2__rowGrid {\r\n    grid-template-columns: 1fr;\r\n  }\r\n}\r\n\r\n\/* Tablet (640px+) *\/\r\n@media (min-width: 640px) {\r\n  #zic-prescriptie-calculator-v2 .zic2__wrap {\r\n    padding: 24px;\r\n  }\r\n  #zic-prescriptie-calculator-v2 .zic2__title {\r\n    font-size: 24px;\r\n  }\r\n  #zic-prescriptie-calculator-v2 .zic2__rowGrid {\r\n    grid-template-columns: 1fr 1fr;\r\n  }\r\n}\r\n\r\n@media (min-width: 768px) {\r\n  #zic-prescriptie-calculator-v2 .zic2__card {\r\n    padding: 24px;\r\n  }\r\n  #zic-prescriptie-calculator-v2 .zic2__brandbar {\r\n    padding: 24px;\r\n  }\r\n  #zic-prescriptie-calculator-v2 .zic2__mark {\r\n    width: 56px;\r\n    height: 56px;\r\n  }\r\n  #zic-prescriptie-calculator-v2 .zic2__title {\r\n    font-size: 26px;\r\n  }\r\n}\r\n\r\n@media (min-width: 1024px) {\r\n  #zic-prescriptie-calculator-v2 .zic2__wrap {\r\n    max-width: 900px;\r\n  }\r\n}\r\n\r\n\/* Print styles *\/\r\n@media print {\r\n  #zic-prescriptie-calculator-v2 .zic2__btnGroup,\r\n  #zic-prescriptie-calculator-v2 .zic2__actions,\r\n  #zic-prescriptie-calculator-v2 .zic2__hint,\r\n  #zic-prescriptie-calculator-v2 .zic2__emptyState,\r\n  #zic-prescriptie-calculator-v2 .zic2__footer {\r\n    display: none !important;\r\n  }\r\n  #zic-prescriptie-calculator-v2 .zic2__card {\r\n    box-shadow: none;\r\n    border: 1px solid #ddd;\r\n    break-inside: avoid;\r\n  }\r\n  #zic-prescriptie-calculator-v2 .zic2__resultCard.is-hidden {\r\n    display: block !important;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function() {\r\n  'use strict';\r\n\r\n  const ROOT_ID = 'zic-prescriptie-calculator-v2';\r\n  const MS_DAY = 86400000;\r\n\r\n  \/\/ === SECURITY: HTML Sanitization Function ===\r\n  \/\/ Prevents XSS attacks by escaping HTML special characters\r\n  function escapeHtml(unsafe) {\r\n    if (unsafe === null || typeof unsafe === 'undefined') return '';\r\n    return String(unsafe)\r\n      .replace(\/&\/g, '&amp;')\r\n      .replace(\/<\/g, '&lt;')\r\n      .replace(\/>\/g, '&gt;')\r\n      .replace(\/\"\/g, '&quot;')\r\n      .replace(\/'\/g, '&#039;');\r\n  }\r\n\r\n  \/\/ === SECURITY: Validate and sanitize offense name ===\r\n  \/\/ Allows only alphanumeric, Romanian diacritics, spaces, dots, dashes, and common punctuation\r\n  function sanitizeOffenseName(name) {\r\n    if (!name || typeof name !== 'string') return '';\r\n    \/\/ Remove any potentially dangerous characters, keep only safe ones\r\n    \/\/ Allow: letters (including Romanian diacritics), numbers, spaces, dots, dashes, parentheses\r\n    return name\r\n      .replace(\/[^\\w\\s\u0102\u0103\u00c2\u00e2\u00ce\u00ee\u0218\u0219\u021a\u021b.,\\-()]\/gi, '')\r\n      .substring(0, 200); \/\/ Limit length to prevent DoS\r\n  }\r\n\r\n  \/\/ === SECURITY: Validate numeric input (integers only for penalty years) ===\r\n  function validateNumericInput(value, min, max) {\r\n    \/\/ First, clean the input to only allow digits\r\n    const cleanValue = String(value).replace(\/[^0-9]\/g, '');\r\n    if (cleanValue === '') return null;\r\n    const num = parseInt(cleanValue, 10);\r\n    if (!Number.isFinite(num)) return null;\r\n    if (num < min || num > max) return null;\r\n    return num;\r\n  }\r\n\r\n  \/\/ === SECURITY: Validate date format (YYYY-MM-DD) ===\r\n  function isValidDateFormat(dateStr) {\r\n    if (!dateStr || typeof dateStr !== 'string') return false;\r\n    const dateRegex = \/^\\d{4}-\\d{2}-\\d{2}$\/;\r\n    if (!dateRegex.test(dateStr)) return false;\r\n    const parts = dateStr.split('-').map(n => parseInt(n, 10));\r\n    const [year, month, day] = parts;\r\n    if (year < 1900 || year > 2100) return false;\r\n    if (month < 1 || month > 12) return false;\r\n    if (day < 1 || day > 31) return false;\r\n    return true;\r\n  }\r\n\r\n  const root = document.getElementById(ROOT_ID);\r\n  if (!root) return;\r\n\r\n  const $ = (sel) => root.querySelector(sel);\r\n  const $$ = (sel) => root.querySelectorAll(sel);\r\n\r\n  const elements = {\r\n    errors: $('[data-errors]'),\r\n    offenses: $('[data-offenses]'),\r\n    emptyState: $('[data-empty=\"offenses\"]'),\r\n    resultCard: $('[data-result]'),\r\n    resultContent: $('[data-result-content]'),\r\n    pandemicNote: $('[data-pandemic-note]'),\r\n    favorableLaw: $('[data-field=\"favorableLaw\"]'),\r\n    includePandemic: $('[data-field=\"includePandemic\"]')\r\n  };\r\n\r\n  let state = {\r\n    offenses: [],\r\n    lastResult: null\r\n  };\r\n\r\n  \/\/ === Date Helpers ===\r\n  function parseISOToDay(value) {\r\n    if (!isValidDateFormat(value)) return null;\r\n    const parts = value.split('-').map(n => parseInt(n, 10));\r\n    const [y, m, d] = parts;\r\n    return Math.floor(Date.UTC(y, m - 1, d) \/ MS_DAY);\r\n  }\r\n\r\n  function dayToISO(day) {\r\n    const dt = new Date(day * MS_DAY);\r\n    const y = dt.getUTCFullYear();\r\n    const m = String(dt.getUTCMonth() + 1).padStart(2, '0');\r\n    const d = String(dt.getUTCDate()).padStart(2, '0');\r\n    return y + '-' + m + '-' + d;\r\n  }\r\n\r\n  function formatDay(day) {\r\n    if (day === null || typeof day === 'undefined') return '-';\r\n    const dt = new Date(day * MS_DAY);\r\n    const dd = String(dt.getUTCDate()).padStart(2, '0');\r\n    const mm = String(dt.getUTCMonth() + 1).padStart(2, '0');\r\n    const yyyy = dt.getUTCFullYear();\r\n    return dd + '.' + mm + '.' + yyyy;\r\n  }\r\n\r\n  function addYears(day, years) {\r\n    const dt = new Date(day * MS_DAY);\r\n    dt.setUTCFullYear(dt.getUTCFullYear() + years);\r\n    return Math.floor(dt.getTime() \/ MS_DAY);\r\n  }\r\n\r\n  function overlapDays(aStart, aEnd, bStart, bEnd) {\r\n    const start = Math.max(aStart, bStart);\r\n    const end = Math.min(aEnd, bEnd);\r\n    return start <= end ? (end - start + 1) : 0;\r\n  }\r\n\r\n  function applySuspension(baseEnd, start, suspStart, suspEnd) {\r\n    let end = baseEnd;\r\n    for (let i = 0; i < 8; i++) {\r\n      const ov = overlapDays(start, end, suspStart, suspEnd);\r\n      const next = baseEnd + ov;\r\n      if (next === end) break;\r\n      end = next;\r\n    }\r\n    return end;\r\n  }\r\n\r\n  \/\/ === Legal Logic ===\r\n  function calculatePrescriptionTermYears(offense) {\r\n    if (offense.isLifeSentence) return 15;\r\n    if (offense.isFine) return 3;\r\n    const max = validateNumericInput(offense.maxPenalty, 0, 100);\r\n    if (max === null) return null;\r\n    if (max > 20) return 15;\r\n    if (max > 10) return 10;\r\n    if (max > 5) return 8;\r\n    if (max > 1) return 5;\r\n    return 3;\r\n  }\r\n\r\n  function interruptionAllowedByRegime(regime) {\r\n    return regime === 'pre-2018' || regime === 'post-2022';\r\n  }\r\n\r\n  \/\/ === UI Helpers ===\r\n  \/\/ SECURITY FIX: Use textContent and DOM methods instead of innerHTML\r\n  function showErrors(messages) {\r\n    if (!messages || !messages.length) {\r\n      elements.errors.classList.add('is-hidden');\r\n      \/\/ Clear properly\r\n      while (elements.errors.firstChild) {\r\n        elements.errors.removeChild(elements.errors.firstChild);\r\n      }\r\n      return;\r\n    }\r\n    elements.errors.classList.remove('is-hidden');\r\n\r\n    \/\/ SECURITY: Build error list using DOM methods instead of innerHTML\r\n    \/\/ Clear properly first\r\n    while (elements.errors.firstChild) {\r\n      elements.errors.removeChild(elements.errors.firstChild);\r\n    }\r\n    const headerText = document.createTextNode('Corectati urmatoarele:');\r\n    elements.errors.appendChild(headerText);\r\n\r\n    const ul = document.createElement('ul');\r\n    messages.forEach(function(m) {\r\n      const li = document.createElement('li');\r\n      li.textContent = m; \/\/ SECURITY: textContent automatically escapes HTML\r\n      ul.appendChild(li);\r\n    });\r\n    elements.errors.appendChild(ul);\r\n\r\n    elements.errors.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n  }\r\n\r\n  function hideErrors() {\r\n    elements.errors.classList.add('is-hidden');\r\n    \/\/ Clear error content properly\r\n    while (elements.errors.firstChild) {\r\n      elements.errors.removeChild(elements.errors.firstChild);\r\n    }\r\n  }\r\n\r\n  function updateEmptyState() {\r\n    const hasOffenses = state.offenses.length > 0;\r\n    elements.emptyState.classList.toggle('is-hidden', hasOffenses);\r\n  }\r\n\r\n  \/\/ === Row Builder ===\r\n  \/\/ SECURITY FIX: Build DOM elements instead of using innerHTML with user data\r\n  function createOffenseRow(offense, index) {\r\n    const row = document.createElement('div');\r\n    row.className = 'zic2__row';\r\n    row.dataset.index = String(index);\r\n\r\n    const showMaxPenalty = !offense.isLifeSentence && !offense.isFine;\r\n\r\n    \/\/ Build the row header\r\n    const rowHeader = document.createElement('div');\r\n    rowHeader.className = 'zic2__rowHeader';\r\n\r\n    const rowTag = document.createElement('span');\r\n    rowTag.className = 'zic2__rowTag';\r\n\r\n    const rowBadge = document.createElement('span');\r\n    rowBadge.className = 'zic2__rowBadge';\r\n    rowBadge.textContent = String(index + 1);\r\n    rowTag.appendChild(rowBadge);\r\n    rowTag.appendChild(document.createTextNode(' Infractiunea #' + (index + 1)));\r\n    rowHeader.appendChild(rowTag);\r\n\r\n    if (index > 0) {\r\n      const deleteBtn = document.createElement('button');\r\n      deleteBtn.type = 'button';\r\n      deleteBtn.className = 'zic2__btn zic2__btn--danger';\r\n      deleteBtn.dataset.action = 'deleteOffense';\r\n      deleteBtn.textContent = 'Sterge';\r\n      rowHeader.appendChild(deleteBtn);\r\n    }\r\n    row.appendChild(rowHeader);\r\n\r\n    \/\/ Offense name field\r\n    const nameField = document.createElement('div');\r\n    nameField.className = 'zic2__field';\r\n    nameField.style.marginBottom = '10px';\r\n\r\n    const nameLabel = document.createElement('label');\r\n    nameLabel.className = 'zic2__label';\r\n    nameLabel.textContent = 'Denumire infractiune';\r\n    nameField.appendChild(nameLabel);\r\n\r\n    const nameInput = document.createElement('input');\r\n    nameInput.className = 'zic2__input';\r\n    nameInput.type = 'text';\r\n    nameInput.placeholder = 'Ex: Inselaciune art. 244 CP';\r\n    nameInput.value = offense.name || ''; \/\/ Input values are automatically escaped by the browser\r\n    nameInput.dataset.field = 'name';\r\n    nameInput.autocomplete = 'off';\r\n    nameInput.maxLength = 200; \/\/ SECURITY: Limit input length\r\n    nameField.appendChild(nameInput);\r\n    row.appendChild(nameField);\r\n\r\n    \/\/ Pills for sentence type\r\n    const pills = document.createElement('div');\r\n    pills.className = 'zic2__pills';\r\n\r\n    \/\/ Life sentence pill\r\n    const lifePill = document.createElement('label');\r\n    lifePill.className = 'zic2__pill' + (offense.isLifeSentence ? ' is-active' : '');\r\n    const lifeCheckbox = document.createElement('input');\r\n    lifeCheckbox.type = 'checkbox';\r\n    lifeCheckbox.checked = !!offense.isLifeSentence;\r\n    lifeCheckbox.dataset.field = 'isLifeSentence';\r\n    lifePill.appendChild(lifeCheckbox);\r\n    const lifeSpan = document.createElement('span');\r\n    lifeSpan.textContent = 'Detentiune pe viata';\r\n    lifePill.appendChild(lifeSpan);\r\n    pills.appendChild(lifePill);\r\n\r\n    \/\/ Fine pill\r\n    const finePill = document.createElement('label');\r\n    finePill.className = 'zic2__pill' + (offense.isFine ? ' is-active' : '');\r\n    const fineCheckbox = document.createElement('input');\r\n    fineCheckbox.type = 'checkbox';\r\n    fineCheckbox.checked = !!offense.isFine;\r\n    fineCheckbox.dataset.field = 'isFine';\r\n    finePill.appendChild(fineCheckbox);\r\n    const fineSpan = document.createElement('span');\r\n    fineSpan.textContent = 'Amenda (unica pedeapsa)';\r\n    finePill.appendChild(fineSpan);\r\n    pills.appendChild(finePill);\r\n\r\n    row.appendChild(pills);\r\n\r\n    \/\/ Max penalty field (conditional)\r\n    if (showMaxPenalty) {\r\n      const maxField = document.createElement('div');\r\n      maxField.className = 'zic2__field';\r\n      maxField.style.marginBottom = '10px';\r\n\r\n      const maxLabel = document.createElement('label');\r\n      maxLabel.className = 'zic2__label';\r\n      maxLabel.textContent = 'Maximum special al pedepsei (ani)';\r\n      maxField.appendChild(maxLabel);\r\n\r\n      const maxInput = document.createElement('input');\r\n      maxInput.className = 'zic2__input';\r\n      maxInput.type = 'number';\r\n      maxInput.min = '0';\r\n      maxInput.max = '100'; \/\/ SECURITY: Reasonable max limit\r\n      maxInput.step = '1';\r\n      maxInput.placeholder = 'Ex: 5';\r\n      maxInput.value = offense.maxPenalty || '';\r\n      maxInput.dataset.field = 'maxPenalty';\r\n      maxInput.inputMode = 'numeric';\r\n      maxInput.autocomplete = 'off';\r\n      maxField.appendChild(maxInput);\r\n\r\n      row.appendChild(maxField);\r\n    }\r\n\r\n    \/\/ Date fields grid\r\n    const dateGrid = document.createElement('div');\r\n    dateGrid.className = 'zic2__rowGrid2';\r\n\r\n    \/\/ Consumption date\r\n    const consumeField = document.createElement('div');\r\n    consumeField.className = 'zic2__field';\r\n    const consumeLabel = document.createElement('label');\r\n    consumeLabel.className = 'zic2__label';\r\n    consumeLabel.textContent = 'Data consumarii';\r\n    consumeField.appendChild(consumeLabel);\r\n    const consumeInput = document.createElement('input');\r\n    consumeInput.className = 'zic2__input';\r\n    consumeInput.type = 'date';\r\n    consumeInput.value = offense.consumptionDate || '';\r\n    consumeInput.dataset.field = 'consumptionDate';\r\n    consumeInput.min = '1900-01-01'; \/\/ SECURITY: Reasonable date limits\r\n    consumeInput.max = '2100-12-31';\r\n    consumeField.appendChild(consumeInput);\r\n    dateGrid.appendChild(consumeField);\r\n\r\n    \/\/ Exhaustion date\r\n    const exhaustField = document.createElement('div');\r\n    exhaustField.className = 'zic2__field';\r\n    const exhaustLabel = document.createElement('label');\r\n    exhaustLabel.className = 'zic2__label';\r\n    exhaustLabel.textContent = 'Data epuizarii (optional)';\r\n    exhaustField.appendChild(exhaustLabel);\r\n    const exhaustInput = document.createElement('input');\r\n    exhaustInput.className = 'zic2__input';\r\n    exhaustInput.type = 'date';\r\n    exhaustInput.value = offense.exhaustionDate || '';\r\n    exhaustInput.dataset.field = 'exhaustionDate';\r\n    exhaustInput.min = '1900-01-01'; \/\/ SECURITY: Reasonable date limits\r\n    exhaustInput.max = '2100-12-31';\r\n    exhaustField.appendChild(exhaustInput);\r\n    dateGrid.appendChild(exhaustField);\r\n\r\n    row.appendChild(dateGrid);\r\n\r\n    return row;\r\n  }\r\n\r\n  function renderOffenses() {\r\n    \/\/ Clear all child elements properly to avoid memory leaks\r\n    while (elements.offenses.firstChild) {\r\n      elements.offenses.removeChild(elements.offenses.firstChild);\r\n    }\r\n    state.offenses.forEach(function(offense, idx) {\r\n      elements.offenses.appendChild(createOffenseRow(offense, idx));\r\n    });\r\n    updateEmptyState();\r\n  }\r\n\r\n  function addOffense() {\r\n    \/\/ SECURITY: Limit number of offenses to prevent DoS\r\n    if (state.offenses.length >= 50) {\r\n      showErrors(['Numarul maxim de infractiuni este 50.']);\r\n      return;\r\n    }\r\n    state.offenses.push({\r\n      name: '',\r\n      consumptionDate: '',\r\n      exhaustionDate: '',\r\n      maxPenalty: '',\r\n      isLifeSentence: false,\r\n      isFine: false\r\n    });\r\n    renderOffenses();\r\n  }\r\n\r\n  function deleteOffense(index) {\r\n    if (state.offenses.length <= 1) return;\r\n    \/\/ SECURITY: Validate index\r\n    if (index < 0 || index >= state.offenses.length) return;\r\n    state.offenses.splice(index, 1);\r\n    renderOffenses();\r\n  }\r\n\r\n  function updateOffenseField(index, field, value) {\r\n    \/\/ SECURITY: Validate index\r\n    if (index < 0 || index >= state.offenses.length) return;\r\n    const offense = state.offenses[index];\r\n    if (!offense) return;\r\n\r\n    \/\/ SECURITY: Whitelist allowed fields\r\n    const allowedFields = ['name', 'consumptionDate', 'exhaustionDate', 'maxPenalty', 'isLifeSentence', 'isFine'];\r\n    if (allowedFields.indexOf(field) === -1) return;\r\n\r\n    if (field === 'isLifeSentence') {\r\n      offense.isLifeSentence = !!value;\r\n      if (offense.isLifeSentence) {\r\n        offense.isFine = false;\r\n        offense.maxPenalty = '';\r\n      }\r\n      renderOffenses();\r\n      return;\r\n    }\r\n    if (field === 'isFine') {\r\n      offense.isFine = !!value;\r\n      if (offense.isFine) {\r\n        offense.isLifeSentence = false;\r\n        offense.maxPenalty = '';\r\n      }\r\n      renderOffenses();\r\n      return;\r\n    }\r\n\r\n    \/\/ SECURITY: Sanitize name field\r\n    if (field === 'name') {\r\n      offense[field] = sanitizeOffenseName(value);\r\n    } else if (field === 'maxPenalty') {\r\n      \/\/ SECURITY: Validate numeric input - allow empty string for clearing\r\n      var strValue = String(value || '').trim();\r\n      if (strValue === '') {\r\n        offense[field] = '';\r\n      } else {\r\n        var validated = validateNumericInput(strValue, 0, 100);\r\n        offense[field] = validated !== null ? String(validated) : offense[field]; \/\/ Keep old value if invalid\r\n      }\r\n    } else if (field === 'consumptionDate' || field === 'exhaustionDate') {\r\n      \/\/ SECURITY: Validate date format - allow empty string for clearing\r\n      var dateValue = String(value || '').trim();\r\n      if (dateValue === '') {\r\n        offense[field] = '';\r\n      } else {\r\n        offense[field] = isValidDateFormat(dateValue) ? dateValue : offense[field]; \/\/ Keep old value if invalid\r\n      }\r\n    } else {\r\n      offense[field] = String(value || '').substring(0, 200);\r\n    }\r\n  }\r\n\r\n  \/\/ === Calculate ===\r\n  function calculate() {\r\n    hideErrors();\r\n\r\n    const regime = elements.favorableLaw.value || '';\r\n    const includePandemic = !!elements.includePandemic.checked;\r\n\r\n    \/\/ SECURITY: Validate regime value\r\n    const validRegimes = ['pre-2018', '2018-2022', 'post-2022'];\r\n    const errors = [];\r\n    if (!regime || validRegimes.indexOf(regime) === -1) {\r\n      errors.push('Selectati perioada (legea penala mai favorabila).');\r\n    }\r\n\r\n    const pandemicStart = parseISOToDay('2020-03-16');\r\n    const pandemicEnd = parseISOToDay('2020-05-14');\r\n\r\n    const results = [];\r\n\r\n    state.offenses.forEach(function(offense, idx) {\r\n      const label = 'Infractiunea #' + (idx + 1);\r\n\r\n      \/\/ SECURITY: Sanitize and validate name\r\n      const sanitizedName = sanitizeOffenseName(offense.name);\r\n      if (!sanitizedName) {\r\n        errors.push(label + ': introduceti denumirea infractiunii.');\r\n        return;\r\n      }\r\n\r\n      const termYears = calculatePrescriptionTermYears(offense);\r\n      if (termYears === null) {\r\n        errors.push(label + ': introduceti maximul special (ani) sau selectati \"detentiune pe viata\" \/ \"amenda\".');\r\n        return;\r\n      }\r\n\r\n      const startISO = offense.exhaustionDate || offense.consumptionDate;\r\n      const startDay = parseISOToDay(startISO);\r\n\r\n      if (startDay === null) {\r\n        errors.push(label + ': introduceti cel putin o data (consumare sau epuizare).');\r\n        return;\r\n      }\r\n\r\n      const generalBase = addYears(startDay, termYears) - 1;\r\n      var generalWith = null;\r\n      if (includePandemic) {\r\n        generalWith = applySuspension(generalBase, startDay, pandemicStart, pandemicEnd);\r\n      }\r\n\r\n      const canInterrupt = interruptionAllowedByRegime(regime);\r\n\r\n      var specialWithout = null;\r\n      var specialWith = null;\r\n\r\n      if (canInterrupt) {\r\n        const specialBase = addYears(startDay, termYears * 2) - 1;\r\n        specialWithout = specialBase;\r\n        if (includePandemic) {\r\n          specialWith = applySuspension(specialBase, startDay, pandemicStart, pandemicEnd);\r\n        }\r\n      }\r\n\r\n      results.push({\r\n        name: sanitizedName, \/\/ SECURITY: Use sanitized name\r\n        termYears: termYears,\r\n        canInterrupt: canInterrupt,\r\n        generalWithout: generalBase,\r\n        generalWith: generalWith,\r\n        specialWithout: specialWithout,\r\n        specialWith: specialWith\r\n      });\r\n    });\r\n\r\n    if (errors.length) {\r\n      showErrors(errors);\r\n      elements.resultCard.classList.add('is-hidden');\r\n      return;\r\n    }\r\n\r\n    state.lastResult = { results: results, includePandemic: includePandemic, regime: regime };\r\n    renderResults(results, includePandemic);\r\n  }\r\n\r\n  \/\/ SECURITY FIX: Build results using DOM methods instead of innerHTML\r\n  function renderResults(results, includePandemic) {\r\n    \/\/ Clear result content properly to avoid memory leaks\r\n    while (elements.resultContent.firstChild) {\r\n      elements.resultContent.removeChild(elements.resultContent.firstChild);\r\n    }\r\n\r\n    \/\/ Pandemic note\r\n    if (includePandemic) {\r\n      elements.pandemicNote.classList.remove('is-hidden');\r\n    } else {\r\n      elements.pandemicNote.classList.add('is-hidden');\r\n    }\r\n\r\n    \/\/ Mobile view container\r\n    const mobileDiv = document.createElement('div');\r\n    mobileDiv.className = 'zic2__mobileResult';\r\n\r\n    results.forEach(function(r) {\r\n      const miniCard = document.createElement('div');\r\n      miniCard.className = 'zic2__miniCard';\r\n\r\n      const miniTitle = document.createElement('div');\r\n      miniTitle.className = 'zic2__miniTitle';\r\n      miniTitle.textContent = r.name; \/\/ SECURITY: textContent escapes HTML\r\n      miniCard.appendChild(miniTitle);\r\n\r\n      const miniGrid = document.createElement('div');\r\n      miniGrid.className = 'zic2__miniGrid';\r\n\r\n      \/\/ Term row\r\n      const termDiv = document.createElement('div');\r\n      const termLabel = document.createElement('div');\r\n      termLabel.className = 'zic2__klabel';\r\n      termLabel.textContent = 'Termen general';\r\n      termDiv.appendChild(termLabel);\r\n      const termValue = document.createElement('div');\r\n      termValue.className = 'zic2__kvalue';\r\n      termValue.textContent = r.termYears + ' ani';\r\n      termDiv.appendChild(termValue);\r\n      miniGrid.appendChild(termDiv);\r\n\r\n      \/\/ Date row\r\n      const dateDiv = document.createElement('div');\r\n      const dateLabel = document.createElement('div');\r\n      dateLabel.className = 'zic2__klabel';\r\n      dateLabel.textContent = 'Data implinirii';\r\n      dateDiv.appendChild(dateLabel);\r\n      const dateValue = document.createElement('div');\r\n      dateValue.className = 'zic2__kvalue';\r\n      dateValue.textContent = formatDay(r.generalWithout);\r\n      dateDiv.appendChild(dateValue);\r\n      if (r.generalWith !== null && r.generalWith !== r.generalWithout) {\r\n        const subdate = document.createElement('div');\r\n        subdate.className = 'zic2__subdate';\r\n        subdate.textContent = formatDay(r.generalWith);\r\n        dateDiv.appendChild(subdate);\r\n      }\r\n      miniGrid.appendChild(dateDiv);\r\n\r\n      \/\/ Interruption row\r\n      const intDiv = document.createElement('div');\r\n      const intLabel = document.createElement('div');\r\n      intLabel.className = 'zic2__klabel';\r\n      intLabel.textContent = 'Intrerupere';\r\n      intDiv.appendChild(intLabel);\r\n      const intValue = document.createElement('div');\r\n      intValue.className = 'zic2__kvalue ' + (r.canInterrupt ? 'zic2__kvalue--yes' : 'zic2__kvalue--no');\r\n      intValue.textContent = r.canInterrupt ? 'Da' : 'Nu';\r\n      intDiv.appendChild(intValue);\r\n      miniGrid.appendChild(intDiv);\r\n\r\n      \/\/ Special term row\r\n      const specDiv = document.createElement('div');\r\n      const specLabel = document.createElement('div');\r\n      specLabel.className = 'zic2__klabel';\r\n      specLabel.textContent = 'Termen special';\r\n      specDiv.appendChild(specLabel);\r\n      const specValue = document.createElement('div');\r\n      specValue.className = 'zic2__kvalue';\r\n      specValue.textContent = r.canInterrupt ? (r.termYears * 2) + ' ani' : '-';\r\n      specDiv.appendChild(specValue);\r\n      miniGrid.appendChild(specDiv);\r\n\r\n      if (r.canInterrupt) {\r\n        const specDateDiv = document.createElement('div');\r\n        specDateDiv.style.gridColumn = '1 \/ -1';\r\n        const specDateLabel = document.createElement('div');\r\n        specDateLabel.className = 'zic2__klabel';\r\n        specDateLabel.textContent = 'Data termen special';\r\n        specDateDiv.appendChild(specDateLabel);\r\n        const specDateValue = document.createElement('div');\r\n        specDateValue.className = 'zic2__kvalue';\r\n        specDateValue.textContent = formatDay(r.specialWithout);\r\n        specDateDiv.appendChild(specDateValue);\r\n        if (r.specialWith !== null && r.specialWith !== r.specialWithout) {\r\n          const specSubdate = document.createElement('div');\r\n          specSubdate.className = 'zic2__subdate';\r\n          specSubdate.textContent = formatDay(r.specialWith);\r\n          specDateDiv.appendChild(specSubdate);\r\n        }\r\n        miniGrid.appendChild(specDateDiv);\r\n      }\r\n\r\n      miniCard.appendChild(miniGrid);\r\n      mobileDiv.appendChild(miniCard);\r\n    });\r\n\r\n    elements.resultContent.appendChild(mobileDiv);\r\n\r\n    \/\/ Desktop view - table\r\n    const desktopDiv = document.createElement('div');\r\n    desktopDiv.className = 'zic2__desktopResult';\r\n\r\n    const tableWrap = document.createElement('div');\r\n    tableWrap.className = 'zic2__tableWrap';\r\n\r\n    const table = document.createElement('table');\r\n    const thead = document.createElement('thead');\r\n    const headerRow = document.createElement('tr');\r\n\r\n    var headers = ['Infractiune', 'Termen', 'Data implinirii', 'Intrerupere', 'T. special', 'Data t. special'];\r\n    headers.forEach(function(h) {\r\n      const th = document.createElement('th');\r\n      th.textContent = h;\r\n      headerRow.appendChild(th);\r\n    });\r\n    thead.appendChild(headerRow);\r\n    table.appendChild(thead);\r\n\r\n    const tbody = document.createElement('tbody');\r\n    results.forEach(function(r) {\r\n      const tr = document.createElement('tr');\r\n\r\n      \/\/ Name cell\r\n      const nameTd = document.createElement('td');\r\n      nameTd.style.fontWeight = '700';\r\n      nameTd.style.color = 'var(--zic-ink)';\r\n      nameTd.textContent = r.name; \/\/ SECURITY: textContent escapes HTML\r\n      tr.appendChild(nameTd);\r\n\r\n      \/\/ Term cell\r\n      const termTd = document.createElement('td');\r\n      termTd.textContent = r.termYears + ' ani';\r\n      tr.appendChild(termTd);\r\n\r\n      \/\/ General date cell\r\n      const dateTd = document.createElement('td');\r\n      dateTd.textContent = formatDay(r.generalWithout);\r\n      if (r.generalWith !== null && r.generalWith !== r.generalWithout) {\r\n        const subdate = document.createElement('div');\r\n        subdate.className = 'zic2__subdate';\r\n        subdate.textContent = formatDay(r.generalWith);\r\n        dateTd.appendChild(subdate);\r\n      }\r\n      tr.appendChild(dateTd);\r\n\r\n      \/\/ Interruption cell\r\n      const intTd = document.createElement('td');\r\n      const chip = document.createElement('span');\r\n      chip.className = 'zic2__chip ' + (r.canInterrupt ? 'zic2__chip--yes' : 'zic2__chip--no');\r\n      chip.textContent = r.canInterrupt ? 'Da' : 'Nu';\r\n      intTd.appendChild(chip);\r\n      tr.appendChild(intTd);\r\n\r\n      \/\/ Special term cell\r\n      const specTd = document.createElement('td');\r\n      specTd.textContent = r.canInterrupt ? (r.termYears * 2) + ' ani' : '-';\r\n      tr.appendChild(specTd);\r\n\r\n      \/\/ Special date cell\r\n      const specDateTd = document.createElement('td');\r\n      if (r.canInterrupt) {\r\n        specDateTd.textContent = formatDay(r.specialWithout);\r\n        if (r.specialWith !== null && r.specialWith !== r.specialWithout) {\r\n          const specSubdate = document.createElement('div');\r\n          specSubdate.className = 'zic2__subdate';\r\n          specSubdate.textContent = formatDay(r.specialWith);\r\n          specDateTd.appendChild(specSubdate);\r\n        }\r\n      } else {\r\n        specDateTd.textContent = '-';\r\n      }\r\n      tr.appendChild(specDateTd);\r\n\r\n      tbody.appendChild(tr);\r\n    });\r\n    table.appendChild(tbody);\r\n    tableWrap.appendChild(table);\r\n    desktopDiv.appendChild(tableWrap);\r\n    elements.resultContent.appendChild(desktopDiv);\r\n\r\n    elements.resultCard.classList.remove('is-hidden');\r\n    setTimeout(function() {\r\n      elements.resultCard.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n    }, 100);\r\n  }\r\n\r\n  function reset() {\r\n    state.offenses = [{ name: '', consumptionDate: '', exhaustionDate: '', maxPenalty: '', isLifeSentence: false, isFine: false }];\r\n    state.lastResult = null;\r\n    elements.favorableLaw.value = '';\r\n    elements.includePandemic.checked = false;\r\n    hideErrors();\r\n    elements.resultCard.classList.add('is-hidden');\r\n    \/\/ Clear result content properly\r\n    while (elements.resultContent.firstChild) {\r\n      elements.resultContent.removeChild(elements.resultContent.firstChild);\r\n    }\r\n    renderOffenses();\r\n  }\r\n\r\n  function loadExample() {\r\n    state.offenses = [\r\n      { name: 'Inselaciune - art. 244 CP', consumptionDate: '2022-03-15', exhaustionDate: '', maxPenalty: '5', isLifeSentence: false, isFine: false },\r\n      { name: 'Fals in inscrisuri - art. 322 CP', consumptionDate: '2022-03-15', exhaustionDate: '', maxPenalty: '3', isLifeSentence: false, isFine: false }\r\n    ];\r\n    elements.favorableLaw.value = 'post-2022';\r\n    elements.includePandemic.checked = false;\r\n    hideErrors();\r\n    elements.resultCard.classList.add('is-hidden');\r\n    renderOffenses();\r\n  }\r\n\r\n  \/\/ SECURITY FIX: Build PDF content using DOM methods and proper escaping\r\n  function exportPDF() {\r\n    if (!state.lastResult || !state.lastResult.results.length) {\r\n      alert('Calculeaza mai intai rezultatul pentru a genera PDF-ul.');\r\n      return;\r\n    }\r\n\r\n    var printWindow = window.open('', '_blank');\r\n    if (!printWindow) {\r\n      alert('Permite pop-up-urile pentru a genera PDF-ul.');\r\n      return;\r\n    }\r\n\r\n    var results = state.lastResult.results;\r\n    var includePandemic = state.lastResult.includePandemic;\r\n    var regime = state.lastResult.regime;\r\n\r\n    var dateStr = new Date().toLocaleDateString('ro-RO', {\r\n      year: 'numeric', month: 'long', day: 'numeric'\r\n    });\r\n\r\n    var regimeLabels = {\r\n      'pre-2018': 'Anterioara datei de 25.06.2018',\r\n      '2018-2022': 'Perioada 25.06.2018 - 30.05.2022',\r\n      'post-2022': 'Ulterioara datei de 30.05.2022'\r\n    };\r\n\r\n    \/\/ Build content using document methods for security\r\n    var doc = printWindow.document;\r\n    doc.open();\r\n\r\n    \/\/ Write the doctype and basic structure\r\n    doc.write('<!DOCTYPE html><html lang=\"ro\"><head><meta charset=\"UTF-8\"><title>Raport Calculator Prescriptie - ZIC Legal<\/title>');\r\n    doc.write('<style>');\r\n    doc.write('* { box-sizing: border-box; margin: 0; padding: 0; }');\r\n    doc.write('body { font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; max-width: 700px; margin: 0 auto; padding: 40px 30px; color: #1F2937; line-height: 1.6; }');\r\n    doc.write('.header { border-bottom: 3px solid #8A88FF; padding-bottom: 20px; margin-bottom: 30px; }');\r\n    doc.write('.header h1 { color: #6F6CFF; font-size: 24px; margin-bottom: 5px; }');\r\n    doc.write('.header p { color: #6B7280; font-size: 14px; }');\r\n    doc.write('.info { background: #F9FAFB; border-radius: 8px; padding: 15px; margin-bottom: 20px; font-size: 14px; }');\r\n    doc.write('.info strong { color: #374151; }');\r\n    doc.write('table { width: 100%; border-collapse: collapse; margin-bottom: 20px; font-size: 13px; }');\r\n    doc.write('th { background: #F3F4F6; text-align: left; padding: 10px 12px; border-bottom: 2px solid #E5E7EB; font-size: 11px; text-transform: uppercase; color: #6B7280; }');\r\n    doc.write('td { padding: 10px 12px; border-bottom: 1px solid #E5E7EB; vertical-align: top; }');\r\n    doc.write('.name { font-weight: 700; color: #1F2937; }');\r\n    doc.write('.yes { color: #10B981; font-weight: 600; }');\r\n    doc.write('.no { color: #EF4444; font-weight: 600; }');\r\n    doc.write('.subdate { font-size: 12px; color: #6F6CFF; margin-top: 4px; }');\r\n    doc.write('.note { background: #FEF3C7; border: 1px solid #FCD34D; border-radius: 8px; padding: 12px 15px; margin-bottom: 20px; font-size: 13px; color: #92400E; }');\r\n    doc.write('.footer { margin-top: 40px; padding-top: 20px; border-top: 1px solid #E5E7EB; text-align: center; color: #6B7280; font-size: 12px; }');\r\n    doc.write('.footer a { color: #6F6CFF; text-decoration: none; }');\r\n    doc.write('.disclaimer { margin-top: 30px; padding: 15px; background: #F3F4F6; border-radius: 8px; font-size: 11px; color: #6B7280; }');\r\n    doc.write('@media print { body { padding: 20px; } }');\r\n    doc.write('<\/style><\/head><body>');\r\n    doc.close();\r\n\r\n    \/\/ Now build the body content using DOM methods for security\r\n    var body = doc.body;\r\n\r\n    \/\/ Header\r\n    var header = doc.createElement('div');\r\n    header.className = 'header';\r\n    var h1 = doc.createElement('h1');\r\n    h1.textContent = 'Calculator Prescriptie';\r\n    header.appendChild(h1);\r\n    var datePara = doc.createElement('p');\r\n    datePara.textContent = 'Raport generat la ' + dateStr;\r\n    header.appendChild(datePara);\r\n    body.appendChild(header);\r\n\r\n    \/\/ Info section\r\n    var info = doc.createElement('div');\r\n    info.className = 'info';\r\n    var lawStrong = doc.createElement('strong');\r\n    lawStrong.textContent = 'Legea aplicabila: ';\r\n    info.appendChild(lawStrong);\r\n    info.appendChild(doc.createTextNode((regimeLabels[regime] || regime)));\r\n    info.appendChild(doc.createElement('br'));\r\n    var suspStrong = doc.createElement('strong');\r\n    suspStrong.textContent = 'Suspendare pandemie: ';\r\n    info.appendChild(suspStrong);\r\n    info.appendChild(doc.createTextNode(includePandemic ? 'Da' : 'Nu'));\r\n    body.appendChild(info);\r\n\r\n    \/\/ Pandemic note if needed\r\n    if (includePandemic) {\r\n      var note = doc.createElement('div');\r\n      note.className = 'note';\r\n      note.textContent = 'Prima data = fara suspendare. A doua (daca apare) = cu suspendarea pe perioada starii de urgenta.';\r\n      body.appendChild(note);\r\n    }\r\n\r\n    \/\/ Results table\r\n    var table = doc.createElement('table');\r\n    var thead = doc.createElement('thead');\r\n    var headerRow = doc.createElement('tr');\r\n    ['Infractiune', 'Termen', 'Data implinirii', 'Intrerupere', 'T. special', 'Data t. special'].forEach(function(text) {\r\n      var th = doc.createElement('th');\r\n      th.textContent = text;\r\n      headerRow.appendChild(th);\r\n    });\r\n    thead.appendChild(headerRow);\r\n    table.appendChild(thead);\r\n\r\n    var tbody = doc.createElement('tbody');\r\n    results.forEach(function(r) {\r\n      var tr = doc.createElement('tr');\r\n\r\n      \/\/ Name - SECURITY: Using textContent escapes any HTML\r\n      var nameTd = doc.createElement('td');\r\n      nameTd.className = 'name';\r\n      nameTd.textContent = r.name;\r\n      tr.appendChild(nameTd);\r\n\r\n      \/\/ Term\r\n      var termTd = doc.createElement('td');\r\n      termTd.textContent = r.termYears + ' ani';\r\n      tr.appendChild(termTd);\r\n\r\n      \/\/ General date\r\n      var dateTd = doc.createElement('td');\r\n      dateTd.textContent = formatDay(r.generalWithout);\r\n      if (r.generalWith !== null && r.generalWith !== r.generalWithout) {\r\n        var subdate = doc.createElement('div');\r\n        subdate.className = 'subdate';\r\n        subdate.textContent = formatDay(r.generalWith);\r\n        dateTd.appendChild(subdate);\r\n      }\r\n      tr.appendChild(dateTd);\r\n\r\n      \/\/ Interruption\r\n      var intTd = doc.createElement('td');\r\n      intTd.className = r.canInterrupt ? 'yes' : 'no';\r\n      intTd.textContent = r.canInterrupt ? 'Da' : 'Nu';\r\n      tr.appendChild(intTd);\r\n\r\n      \/\/ Special term\r\n      var specTd = doc.createElement('td');\r\n      specTd.textContent = r.canInterrupt ? (r.termYears * 2) + ' ani' : '-';\r\n      tr.appendChild(specTd);\r\n\r\n      \/\/ Special date\r\n      var specDateTd = doc.createElement('td');\r\n      if (r.canInterrupt) {\r\n        specDateTd.textContent = formatDay(r.specialWithout);\r\n        if (r.specialWith !== null && r.specialWith !== r.specialWithout) {\r\n          var specSubdate = doc.createElement('div');\r\n          specSubdate.className = 'subdate';\r\n          specSubdate.textContent = formatDay(r.specialWith);\r\n          specDateTd.appendChild(specSubdate);\r\n        }\r\n      } else {\r\n        specDateTd.textContent = '-';\r\n      }\r\n      tr.appendChild(specDateTd);\r\n\r\n      tbody.appendChild(tr);\r\n    });\r\n    table.appendChild(tbody);\r\n    body.appendChild(table);\r\n\r\n    \/\/ Disclaimer\r\n    var disclaimer = doc.createElement('div');\r\n    disclaimer.className = 'disclaimer';\r\n    var discStrong = doc.createElement('strong');\r\n    discStrong.textContent = 'Disclaimer: ';\r\n    disclaimer.appendChild(discStrong);\r\n    disclaimer.appendChild(doc.createTextNode('Acest raport este oferit exclusiv in scop informativ si educativ. Rezultatele generate nu constituie consultanta juridica si nu pot inlocui sfatul unui avocat specializat.'));\r\n    body.appendChild(disclaimer);\r\n\r\n    \/\/ Footer\r\n    var footer = doc.createElement('div');\r\n    footer.className = 'footer';\r\n    var footerP1 = doc.createElement('p');\r\n    footerP1.textContent = 'Generat cu Calculator Prescriptie';\r\n    footer.appendChild(footerP1);\r\n    var footerP2 = doc.createElement('p');\r\n    var footerLink = doc.createElement('a');\r\n    footerLink.href = 'https:\/\/zic.legal';\r\n    footerLink.textContent = 'ZIC Legal';\r\n    footerLink.rel = 'noopener noreferrer';\r\n    footerP2.appendChild(footerLink);\r\n    footer.appendChild(footerP2);\r\n    body.appendChild(footer);\r\n\r\n    printWindow.focus();\r\n\r\n    setTimeout(function() {\r\n      printWindow.print();\r\n    }, 300);\r\n  }\r\n\r\n  \/\/ === Event Handlers ===\r\n  function handleClick(e) {\r\n    var button = e.target.closest('[data-action]');\r\n    if (!button) return;\r\n\r\n    var action = button.dataset.action;\r\n    var row = button.closest('[data-index]');\r\n    var index = row ? parseInt(row.dataset.index, 10) : -1;\r\n\r\n    \/\/ SECURITY: Validate index\r\n    if (row && (isNaN(index) || index < 0)) return;\r\n\r\n    switch (action) {\r\n      case 'addOffense':\r\n        addOffense();\r\n        break;\r\n      case 'deleteOffense':\r\n        deleteOffense(index);\r\n        break;\r\n      case 'calculate':\r\n        calculate();\r\n        break;\r\n      case 'reset':\r\n        reset();\r\n        break;\r\n      case 'example':\r\n        loadExample();\r\n        break;\r\n      case 'export-pdf':\r\n        exportPDF();\r\n        break;\r\n    }\r\n  }\r\n\r\n  function handleChange(e) {\r\n    var target = e.target;\r\n    var field = target.dataset.field;\r\n    if (!field) return;\r\n\r\n    var row = target.closest('[data-index]');\r\n    if (row) {\r\n      var index = parseInt(row.dataset.index, 10);\r\n      \/\/ SECURITY: Validate index\r\n      if (isNaN(index) || index < 0) return;\r\n      var value = target.type === 'checkbox' ? target.checked : target.value;\r\n      updateOffenseField(index, field, value);\r\n    }\r\n  }\r\n\r\n  \/\/ === SECURITY: Validate input on keydown to prevent invalid characters ===\r\n  function handleKeydown(e) {\r\n    var input = e.target;\r\n    if (!input.matches('.zic2__input[type=\"number\"]')) return;\r\n\r\n    \/\/ Allow: backspace, delete, tab, escape, enter, arrows\r\n    var allowedKeys = ['Backspace', 'Delete', 'Tab', 'Escape', 'Enter', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];\r\n    if (allowedKeys.indexOf(e.key) !== -1) return;\r\n\r\n    \/\/ Allow Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X\r\n    if ((e.ctrlKey || e.metaKey) && ['a', 'c', 'v', 'x'].indexOf(e.key.toLowerCase()) !== -1) return;\r\n\r\n    \/\/ Block non-numeric characters (including dot, minus, etc.)\r\n    if (!\/^[0-9]$\/.test(e.key)) {\r\n      e.preventDefault();\r\n    }\r\n  }\r\n\r\n  \/\/ === SECURITY: Sanitize pasted content ===\r\n  function handlePaste(e) {\r\n    var input = e.target;\r\n    if (!input.matches('.zic2__input[type=\"number\"]')) return;\r\n\r\n    var pastedData = (e.clipboardData || window.clipboardData).getData('text');\r\n    \/\/ Only allow if pasted data contains only digits\r\n    if (!\/^\\d*$\/.test(pastedData)) {\r\n      e.preventDefault();\r\n      \/\/ Extract only digits from pasted content\r\n      var digitsOnly = pastedData.replace(\/\\D\/g, '');\r\n      if (digitsOnly) {\r\n        \/\/ Insert cleaned data at cursor position\r\n        var start = input.selectionStart;\r\n        var end = input.selectionEnd;\r\n        var currentValue = input.value;\r\n        input.value = currentValue.substring(0, start) + digitsOnly + currentValue.substring(end);\r\n        input.setSelectionRange(start + digitsOnly.length, start + digitsOnly.length);\r\n        \/\/ Trigger change event to update state\r\n        input.dispatchEvent(new Event('change', { bubbles: true }));\r\n      }\r\n    }\r\n  }\r\n\r\n  \/\/ === Initialize ===\r\n  function init() {\r\n    root.addEventListener('click', handleClick);\r\n    root.addEventListener('change', handleChange);\r\n    \/\/ Also listen for 'input' events for real-time text field updates\r\n    root.addEventListener('input', handleChange);\r\n    \/\/ SECURITY: Add input validation handlers\r\n    root.addEventListener('keydown', handleKeydown, true);\r\n    root.addEventListener('paste', handlePaste, true);\r\n\r\n    \/\/ Add initial offense\r\n    state.offenses.push({ name: '', consumptionDate: '', exhaustionDate: '', maxPenalty: '', isLifeSentence: false, isFine: false });\r\n    renderOffenses();\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', init);\r\n  } else {\r\n    init();\r\n  }\r\n})();\r\n<\/script>\r\n<\/div>\r\n\n\n\n\n<p><p>Prescrip\u021bia r\u0103spunderii penale \u00eenl\u0103tur\u0103 r\u0103spunderea pentru fapta comis\u0103 dup\u0103 trecerea unui anumit timp (\u201ctermenul general\u201d din art. 154 Cod penal) sau, \u00een anumite condi\u021bii, dup\u0103 dublul acestuia (\u201cprescrip\u021bia special\u0103\u201d, art. 155 alin. (4) Cod penal).<\/p>\n<p>\u00cen practic\u0103, conteaz\u0103 c\u00e2nd a fost s\u0103v\u00e2r\u0219it\u0103 fapta, ce pedeaps\u0103 prevede legea pentru acea infrac\u021biune, dac\u0103 au existat \u00eentreruperi ori suspend\u0103ri ale cursului prescrip\u021biei \u0219i ce \u201efereastr\u0103\u201d legislativ\u0103 se aplic\u0103 drept lege penal\u0103 mai favorabil\u0103 (lex mitior). Pentru toate acestea \u00ee\u021bi oferim un calculator pentru analiza prescrip\u021biei r\u0103spunderii penale \u00een cazul t\u0103u.<\/p>\n<p data-start=\"734\" data-end=\"780\">Termenii esen\u021biali pe scurt, \u00een limbaj firesc:<\/p>\n<ul data-start=\"781\" data-end=\"1603\">\n<li data-start=\"781\" data-end=\"984\">\n<p data-start=\"783\" data-end=\"984\"><strong data-start=\"783\" data-end=\"817\">Prescrip\u021bia r\u0103spunderii penale<\/strong> = cauz\u0103 care stinge dreptul statului de a trage la r\u0103spundere penal\u0103 dup\u0103 trecerea unui termen (art. 153 \u0219i art. 154 C. pen.).&nbsp;<\/p>\n<\/li>\n<li data-start=\"985\" data-end=\"1153\">\n<p data-start=\"987\" data-end=\"1153\"><strong data-start=\"987\" data-end=\"1003\">\u00centreruperea<\/strong> = resetarea termenului printr-un <strong data-start=\"1037\" data-end=\"1057\">act de procedur\u0103<\/strong> care, potrivit legii, <strong data-start=\"1080\" data-end=\"1101\">trebuie comunicat<\/strong> suspectului ori inculpatului (dup\u0103 30 mai 2022).<\/p>\n<\/li>\n<li data-start=\"1154\" data-end=\"1445\">\n<p data-start=\"1156\" data-end=\"1445\"><strong data-start=\"1156\" data-end=\"1171\">Suspendarea<\/strong> = pauz\u0103 \u00een curgerea termenului, de pild\u0103 c\u00e2t timp o dispozi\u021bie legal\u0103 \u00eempiedic\u0103 urm\u0103rirea\/judecata (ex.: <a href=\"http:\/\/legislatie.just.ro\/Public\/DetaliiDocument\/223831\" target=\"_blank\" rel=\"noopener\">starea de urgen\u021b\u0103 COVID\u201319<\/a> \u00eentre 16.03.2020 \u0219i 14.05.2020, dac\u0103 \u00een cauz\u0103 nu s-au putut face acte sau procesul a fost suspendat).<\/p>\n<\/li>\n<li data-start=\"1446\" data-end=\"1603\">\n<p data-start=\"1448\" data-end=\"1603\"><strong data-start=\"1448\" data-end=\"1462\">Lex mitior<\/strong> = aplici varianta legislativ\u0103 mai favorabil\u0103 privind \u00eentreruperea prescrip\u021biei (ICCJ, <a href=\"https:\/\/www.iccj.ro\/2022\/11\/29\/decizia-nr-67-din-25-octombrie-2022\/\" target=\"_blank\" rel=\"noopener\">HP nr. 67\/2022<\/a>).<\/p>\n<\/li>\n<\/ul>\n<h3 data-start=\"1605\" data-end=\"1632\">Pe scurt (6 idei-cheie)<\/h3>\n<ul data-start=\"1634\" data-end=\"2963\">\n<li data-start=\"1634\" data-end=\"1834\">\n<p data-start=\"1636\" data-end=\"1834\">Termenele generale (art. 154 C. pen.) sunt, \u00een func\u021bie de gravitatea pedepsei: <strong data-start=\"1715\" data-end=\"1734\">15\/10\/8\/5\/3 ani<\/strong>; pentru minori se <strong data-start=\"1753\" data-end=\"1774\">reduc la jum\u0103tate<\/strong> (art. 131 C. pen.).<\/p>\n<\/li>\n<li data-start=\"1835\" data-end=\"2072\">\n<p data-start=\"1837\" data-end=\"2072\"><strong data-start=\"1837\" data-end=\"1872\">Fereastra 25.06.2018\u201330.05.2022<\/strong>: nu a existat cauz\u0103 de <strong data-start=\"1896\" data-end=\"1911\">\u00eentrerupere<\/strong> valabil\u0103 (efect al <a href=\"https:\/\/legislatie.just.ro\/Public\/DetaliiDocumentAfis\/201821\" target=\"_blank\" rel=\"noopener\">DCCR nr. 297\/2018<\/a> \u0219i <a href=\"https:\/\/legislatie.just.ro\/Public\/DetaliiDocument\/256074\" target=\"_blank\" rel=\"noopener\">nr. 358\/2022<\/a>). \u00cen acest interval prescrip\u021bia a curs \u201enetulburat\u201d, cu impact de lex mitior.<\/p>\n<\/li>\n<li data-start=\"2073\" data-end=\"2225\">\n<p data-start=\"2075\" data-end=\"2225\">Dup\u0103 <strong data-start=\"2080\" data-end=\"2094\">30.05.2022<\/strong>, \u00eentreruperea e posibil\u0103 doar prin acte <strong data-start=\"2135\" data-end=\"2179\">care, potrivit legii, trebuie comunicate<\/strong> suspectului\/inculpatului (<a href=\"https:\/\/legislatie.just.ro\/Public\/DetaliiDocumentAfis\/255795\" target=\"_blank\" rel=\"noopener\">O.U.G. 71\/2022<\/a>). Aten\u021bie la prevederile speciale din <a href=\"https:\/\/legislatie.just.ro\/Public\/DetaliiDocumentAfis\/53158\" target=\"_blank\" rel=\"noopener\">Legea nr. 302\/2004<\/a> privind cooperarea judiciar\u0103 \u00een materie penal\u0103.<\/p>\n<\/li>\n<li data-start=\"2226\" data-end=\"2444\">\n<p data-start=\"2228\" data-end=\"2444\"><strong data-start=\"2228\" data-end=\"2252\">Suspendarea COVID\u201319<\/strong>: pe durata st\u0103rii de urgen\u021b\u0103 (16.03.2020\u201314.05.2020), dac\u0103 nu s-au f\u0103cut acte ori procesul a fost suspendat, <strong data-start=\"2362\" data-end=\"2391\">prescrip\u021bia s-a suspendat<\/strong> (nu a curs). Sub acest aspect, exist\u0103 controverse \u0219i practic\u0103 judiciar\u0103 neunitar\u0103 dac\u0103 <a href=\"https:\/\/legislatie.just.ro\/Public\/DetaliiDocument\/223831\" target=\"_blank\" rel=\"noopener\">Decretul nr. 195\/2020<\/a> privind instituirea st\u0103rii de urgen\u021b\u0103 pe teritoriul Rom\u00e2niei produce efecte \u00een dosarele penale.<\/p>\n<\/li>\n<li data-start=\"2445\" data-end=\"2671\">\n<p data-start=\"2447\" data-end=\"2671\"><strong data-start=\"2447\" data-end=\"2471\">Prescrip\u021bia special\u0103<\/strong>: odat\u0103 ce trec <strong data-start=\"2487\" data-end=\"2536\">termenul general + \u00eenc\u0103 o dat\u0103 acela\u0219i termen<\/strong>, r\u0103spunderea se stinge indiferent de c\u00e2te \u00eentreruperi au existat (art. 155 alin. (4) C. pen.).<\/p>\n<\/li>\n<li data-start=\"2672\" data-end=\"2963\">\n<p data-start=\"2674\" data-end=\"2963\">2025: \u00ceCCJ (<a href=\"https:\/\/www.iccj.ro\/2025\/12\/11\/decizia-nr-391-din-27-octombrie-2025-2\/\" target=\"_blank\" rel=\"noopener\">HP nr. 391\/2025<\/a>) a clarificat calculul prescrip\u021biei \u00een <strong data-start=\"2741\" data-end=\"2775\">redeschiderea procesului penal<\/strong> (intervalul dintre hot\u0103r\u00e2rea definitiv\u0103 veche \u0219i redeschidere nu se pune la socoteal\u0103; nu curge un nou termen general dac\u0103 acesta era deja \u00eemplinit).<\/p>\n<\/li>\n<\/ul><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ce ofer\u0103 acest calculator?<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Calculare automat\u0103 a termenelor conform art. 154-156 din Codul Penal<\/li>\n\n\n\n<li>Suport pentru toate tipurile de pedepse (\u00eenchisoare, deten\u021biune pe via\u021b\u0103, amend\u0103)<\/li>\n\n\n\n<li>Includerea perioadei de suspendare din timpul pandemiei (16.03.2020 &#8211; 14.05.2020), avut\u0103 \u00een vedere uneori de c\u0103tre instan\u021be<\/li>\n\n\n\n<li>Validare automat\u0103 pentru evitarea situa\u021biilor de lex tertia<\/li>\n\n\n\n<li>Posibilitatea de a calcula termene pentru infrac\u021biuni multiple<\/li>\n\n\n\n<li>Afi\u0219are diferen\u021biat\u0103 a termenelor cu \u0219i f\u0103r\u0103 perioada de suspendare din pandemie<\/li>\n\n\n\n<li>Calculul automat al termenului special de prescrip\u021bie<\/li>\n\n\n\n<li>Verificare automat\u0103 a posibilit\u0103\u021bii de \u00eentrerupere a prescrip\u021biei, \u00een func\u021bie de legea penal\u0103 mai favorabil\u0103<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Cum func\u021bioneaz\u0103 calculatorul pentru calcularea termenelor de prescrip\u021bie<\/h3>\n\n\n\n<p><p>Calculatorul permite introducerea datelor esen\u021biale despre infrac\u021biune (denumire, pedeaps\u0103 prev\u0103zut\u0103, date relevante) \u0219i calculeaz\u0103 automat termenele de prescrip\u021bie aplicabile. Se \u021bine cont de legea penal\u0103 mai favorabil\u0103 \u0219i se ofer\u0103 op\u021biunea de a include perioada de suspendare din timpul pandemiei \u00een calcul.<\/p>\n<h3 data-start=\"4199\" data-end=\"4258\">Cum alegi corect \u201efereastra legislativ\u0103\u201d (lex mitior)<\/h3>\n<h4 data-start=\"4260\" data-end=\"4313\">25 iunie 2018 \u2013 30 mai 2022: curs \u201enetulburat\u201d<\/h4>\n<ul data-start=\"4314\" data-end=\"5089\">\n<li data-start=\"4314\" data-end=\"4504\">\n<p data-start=\"4316\" data-end=\"4504\">CCR <strong data-start=\"4320\" data-end=\"4336\">nr. 297\/2018<\/strong> (M.Of. 518\/25.06.2018) a declarat neconstitu\u021bional\u0103 solu\u021bia \u201eoric\u0103rui act de procedur\u0103\u201d. Legiuitorul n-a corectat dispozi\u021bia. <span class=\"\" data-state=\"closed\"><span class=\"ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]\" data-testid=\"webpage-citation-pill\"><a class=\"flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!\" href=\"https:\/\/legislatie.just.ro\/Public\/DetaliiDocument\/201821\" target=\"_blank\" rel=\"noopener\"><span class=\"relative start-0 bottom-0 flex h-full w-full items-center\"><span class=\"flex h-4 w-full items-center justify-between overflow-hidden\"><span class=\"max-w-[15ch] grow truncate overflow-hidden text-center\">Portal Legislativ<\/span><\/span><\/span><\/a><\/span><\/span><\/p>\n<\/li>\n<li data-start=\"4505\" data-end=\"4797\">\n<p data-start=\"4507\" data-end=\"4797\">CCR <strong data-start=\"4511\" data-end=\"4527\">nr. 358\/2022<\/strong> a constatat din nou neconstitu\u021bionalitatea art. 155 alin. (1) (\u00een vechea formulare). Urgen\u021ba a fost remediat\u0103 legislativ prin <strong data-start=\"4654\" data-end=\"4672\">O.U.G. 71\/2022<\/strong> (M.Of. 531\/30.05.2022), care a introdus condi\u021bia actului <strong data-start=\"4730\" data-end=\"4754\">ce trebuie comunicat<\/strong>. <span class=\"\" data-state=\"closed\"><span class=\"ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]\" data-testid=\"webpage-citation-pill\"><a class=\"flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!\" href=\"https:\/\/legislatie.just.ro\/Public\/DetaliiDocumentAfis\/256074?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\"><span class=\"relative start-0 bottom-0 flex h-full w-full items-center\"><span class=\"flex h-4 w-full items-center justify-between overflow-hidden\"><span class=\"max-w-[15ch] grow truncate overflow-hidden text-center\">Portal Legislativ<\/span><\/span><\/span><\/a><\/span><\/span><\/p>\n<\/li>\n<li data-start=\"4798\" data-end=\"5089\">\n<p data-start=\"4800\" data-end=\"5089\">\u00ceCCJ, DCD <strong data-start=\"4810\" data-end=\"4825\">nr. 67\/2022<\/strong>: regulile despre \u00eentrerupere sunt <strong data-start=\"4860\" data-end=\"4884\">drept penal material<\/strong> \u0219i se aplic\u0103 <strong data-start=\"4898\" data-end=\"4929\">legea penal\u0103 mai favorabil\u0103<\/strong>. CJUE (Ordonan\u021b\u0103 2024) a re\u021binut aceea\u0219i cronologie: \u00eentre 25.06.2018 \u0219i 30.05.2022 <strong data-start=\"5014\" data-end=\"5027\">nu exista<\/strong> cauz\u0103 de \u00eentrerupere. <span class=\"\" data-state=\"closed\"><span class=\"ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]\" data-testid=\"webpage-citation-pill\"><a class=\"flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!\" href=\"https:\/\/www.iccj.ro\/2022\/11\/29\/decizia-nr-67-din-25-octombrie-2022\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\"><span class=\"relative start-0 bottom-0 flex h-full w-full items-center\"><span class=\"flex h-4 w-full items-center justify-between\"><span class=\"max-w-[15ch] grow truncate overflow-hidden text-center\">ICCJ<\/span><span class=\"-me-1 flex h-full items-center rounded-full px-1 text-[#8F8F8F]\">+1<\/span><\/span><\/span><\/a><\/span><\/span><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"5091\" data-end=\"5347\"><strong data-start=\"5091\" data-end=\"5114\">Consecin\u021b\u0103 practic\u0103<\/strong>: dac\u0103 infrac\u021biunea \u0219i actele din dosar cad \u00een acest interval, de regul\u0103 alegi aceast\u0103 fereastr\u0103 ca lex mitior \u2013 termenul general curge f\u0103r\u0103 \u00eentreruperi (r\u0103m\u00e2ne doar suspendarea, dac\u0103 e cazul). <span class=\"\" data-state=\"closed\"><span class=\"ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]\" data-testid=\"webpage-citation-pill\"><a class=\"flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!\" href=\"https:\/\/curia.europa.eu\/juris\/document\/document.jsf?cid=2861717&amp;dir=&amp;docid=281842&amp;doclang=ro&amp;mode=lst&amp;occ=first&amp;pageIndex=0&amp;part=1&amp;text=&amp;utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\"><span class=\"relative start-0 bottom-0 flex h-full w-full items-center\"><span class=\"flex h-4 w-full items-center justify-between overflow-hidden\"><span class=\"max-w-[15ch] grow truncate overflow-hidden text-center\">Curia<\/span><\/span><\/span><\/a><\/span><\/span><\/p>\n<h4 data-start=\"5349\" data-end=\"5415\">Dup\u0103 30 mai 2022: \u00eentrerupere doar prin acte \u201ecomunicabile\u201d<\/h4>\n<blockquote>\n<p data-start=\"5418\" data-end=\"5840\">Text actual: \u00eentreruperea se produce <strong data-start=\"5455\" data-end=\"5485\">prin \u00eendeplinirea unui act<\/strong> care, <strong data-start=\"5492\" data-end=\"5529\">potrivit legii, trebuie comunicat<\/strong> suspectului\/inculpatului (ex.: aducerea la cuno\u0219tin\u021b\u0103 a calit\u0103\u021bii de suspect \u0219i a acuza\u021biei, ordonan\u021ba de punere \u00een mi\u0219care a ac\u021biunii penale, rechizitoriul\/acte procesuale comunicate \u00een cursul judec\u0103\u021bii). Lista <strong data-start=\"5742\" data-end=\"5748\">nu<\/strong> este exhaustiv\u0103; criteriul este obliga\u021bia legal\u0103 de <strong data-start=\"5801\" data-end=\"5815\">comunicare<\/strong>, nu utilitatea actului.<\/p>\n<\/blockquote>\n<h4 data-start=\"6209\" data-end=\"6270\">Suspendarea \u00een perioada COVID\u201319: c\u00e2nd se adaug\u0103 zilele<\/h4>\n<ul data-start=\"6272\" data-end=\"6782\">\n<li data-start=\"6272\" data-end=\"6498\">\n<p data-start=\"6274\" data-end=\"6498\"><a href=\"https:\/\/legislatie.just.ro\/Public\/DetaliiDocument\/223831\" target=\"_blank\" rel=\"noopener\"><strong data-start=\"6274\" data-end=\"6295\">Decretul 195\/2020<\/strong><\/a> (16.03.2020\u201314.04.2020), art. 41: \u201eprescrip\u021biile \u0219i termenele (\u2026) nu \u00eencep s\u0103 curg\u0103, iar dac\u0103 au \u00eenceput s\u0103 curg\u0103, <strong data-start=\"6411\" data-end=\"6426\">se suspend\u0103<\/strong>\u201d pe durata st\u0103rii de urgen\u021b\u0103.<\/p>\n<\/li>\n<li data-start=\"6499\" data-end=\"6782\">\n<p data-start=\"6501\" data-end=\"6782\"><a href=\"https:\/\/legislatie.just.ro\/Public\/DetaliiDocument\/224849\" target=\"_blank\" rel=\"noopener\"><strong data-start=\"6501\" data-end=\"6522\">Decretul 240\/2020<\/strong><\/a> (14.04.2020\u201314.05.2020), cap. Justi\u021bie: \u00een cauzele <strong data-start=\"6574\" data-end=\"6607\">\u00een care nu se efectueaz\u0103 acte<\/strong> sau <strong data-start=\"6612\" data-end=\"6636\">procesul e suspendat<\/strong> potrivit decretului, <strong data-start=\"6658\" data-end=\"6704\">prescrip\u021bia r\u0103spunderii penale se suspend\u0103<\/strong>. Suspendarea opereaz\u0103 <strong data-start=\"6727\" data-end=\"6739\">de drept<\/strong>.<\/p>\n<\/li>\n<\/ul><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" data-start=\"11614\" data-end=\"11642\">\u00centreb\u0103ri frecvente (FAQ)<\/h3>\r\n<p data-start=\"11644\" data-end=\"12074\"><strong data-start=\"11644\" data-end=\"11725\">1. Ce \u00eenseamn\u0103 \u201eact care, potrivit legii, trebuie comunicat\u201d dup\u0103 30.05.2022?<\/strong><br data-start=\"11725\" data-end=\"11728\" \/>Sunt actele pentru care Codul de procedur\u0103 penal\u0103 prevede comunicarea c\u0103tre suspect\/inculpat (de pild\u0103, aducerea la cuno\u0219tin\u021b\u0103 a calit\u0103\u021bii \u0219i a acuza\u021biei, ordonan\u021ba de punere \u00een mi\u0219care, anumite \u00eencheieri, actele comunicate \u00een faza de judecat\u0103). Nu este o list\u0103 exhaustiv\u0103. Criteriul este <strong data-start=\"12017\" data-end=\"12051\">obliga\u021bia legal\u0103 de comunicare<\/strong>, nu eticheta actului.<\/p>\r\n<p data-start=\"12076\" data-end=\"12407\"><strong data-start=\"12076\" data-end=\"12141\">2. Calculatorul \u201emai adaug\u0103 automat 60 de zile\u201d pentru COVID?<\/strong><br data-start=\"12141\" data-end=\"12144\" \/>Doar dac\u0103 dosarul se afl\u0103 \u00een ipoteza decretelor: nu s-au putut face acte sau procesul a fost suspendat potrivit decretului. Altfel, nu se adaug\u0103. Suspendarea <strong data-start=\"12302\" data-end=\"12323\">opereaz\u0103 de drept<\/strong> \u00een ipotezele decretului, nu \u00een orice cauz\u0103.<\/p>\r\n<p data-start=\"12409\" data-end=\"12806\"><strong data-start=\"12409\" data-end=\"12472\">3. Cum aleg lex mitior dac\u0103 am acte din 2017, 2020 \u0219i 2023?<\/strong><br data-start=\"12472\" data-end=\"12475\" \/>Se compar\u0103 regimul \u00eentreruperii din fiecare epoc\u0103: \u00een 2017 \u00eentreruperea era valabil\u0103; \u00een 2020 (\u00een fereastra 2018\u20132022) <strong data-start=\"12594\" data-end=\"12600\">nu<\/strong>, iar dup\u0103 30.05.2022 doar pentru actele \u201ecomunicabile\u201d. \u00cen general, 2018\u20132022 e mai favorabil; dar alegerea final\u0103 depinde de succesiunea exact\u0103 a actelor din dosar.<\/p>\r\n<p data-start=\"12808\" data-end=\"13078\"><strong data-start=\"12808\" data-end=\"12860\">4. Prescrip\u021bia special\u0103 \u00eenseamn\u0103 \u201edublu\u201d oricum?<\/strong><br data-start=\"12860\" data-end=\"12863\" \/>Da: dac\u0103 termenul din art. 154 a fost dep\u0103\u0219it \u201ecu \u00eenc\u0103 o dat\u0103\u201d, prescrip\u021bia e socotit\u0103 \u00eemplinit\u0103 indiferent de \u00eentreruperi. Exemplu: termen general 8 ani \u2192 special\u0103 la 16 ani.<\/p>\r\n<p data-start=\"13080\" data-end=\"13434\"><strong data-start=\"13080\" data-end=\"13136\">5. Ce se \u00eent\u00e2mpl\u0103 \u00een cazul redeschiderii procesului?<\/strong><br data-start=\"13136\" data-end=\"13139\" \/>\u00ceCCJ (HP 391\/2025) a stabilit dou\u0103 reguli: (i) la calculul prescrip\u021biei <strong data-start=\"13211\" data-end=\"13217\">nu<\/strong> se include perioada dintre hot\u0103r\u00e2rea definitiv\u0103 ini\u021bial\u0103 \u0219i redeschidere; (ii) dup\u0103 redeschidere <strong data-start=\"13315\" data-end=\"13321\">nu<\/strong> \u00eencepe un nou termen general dac\u0103 acesta era deja \u00eemplinit (lex mitior). <span class=\"\" data-state=\"closed\"><span class=\"ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]\" data-testid=\"webpage-citation-pill\"><a class=\"flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!\" href=\"https:\/\/www.iccj.ro\/2025\/12\/11\/decizia-nr-391-din-27-octombrie-2025-2\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\"><span class=\"relative start-0 bottom-0 flex h-full w-full items-center\"><span class=\"flex h-4 w-full items-center justify-between overflow-hidden\"><span class=\"max-w-[15ch] grow truncate overflow-hidden text-center\">ICCJ<\/span><\/span><\/span><\/a><\/span><\/span><\/p>\r\n<p data-start=\"13436\" data-end=\"13689\"><strong data-start=\"13436\" data-end=\"13471\">6. Minorii au termene speciale?<\/strong><br data-start=\"13471\" data-end=\"13474\" \/>Da. Pentru cei care erau minori la data faptei, termenele din art. 154 se <strong data-start=\"13548\" data-end=\"13569\">reduc la jum\u0103tate<\/strong> (art. 131 C. pen.). Restul regulilor (\u00eentrerupere\/suspendare) se aplic\u0103 la fel.\u00a0<\/p>\r\n<p data-start=\"13691\" data-end=\"13951\"><strong data-start=\"13691\" data-end=\"13791\">7. De c\u00e2nd curge termenul la faptele cu mai multe modalit\u0103\u021bi normative (ex. luare\/dare de mit\u0103)?<\/strong><br data-start=\"13791\" data-end=\"13794\" \/>Potrivit <a href=\"https:\/\/legislatie.just.ro\/Public\/DetaliiDocument\/296577\" target=\"_blank\" rel=\"noopener\"><strong>recursului \u00een interesul legii<\/strong><strong data-start=\"13798\" data-end=\"13812\">nr. 1\/2025 al ICCJ <\/strong><\/a>prin data s\u0103v\u00e2r\u0219irii infrac\u021biunii \u0219i, implicit, data de la care \u00eencepe s\u0103 curg\u0103 termenul de prescrip\u021bie a r\u0103spunderii penale \u00een cazul infrac\u021biunilor unice prev\u0103zute de\u00a0art. 289-292 din Codul penal, \u00een ipoteza \u00een care sunt realizate, la date diferite, mai multe modalit\u0103\u021bi normative ale elementului material, se \u00een\u021belege data comiterii primei modalit\u0103\u021bi alternative independent de realizarea subsecvent\u0103, ulterioar\u0103, a mai multor modalit\u0103\u021bi alternative din con\u021binutul infrac\u021biunii \u0219i indiferent de intervalul de timp care se interpune \u00eentre data s\u0103v\u00e2r\u0219irii primei modalit\u0103\u021bi alternative \u0219i comiterea unei alte modalit\u0103\u021bi alternative ori \u00eentre actele care compun ac\u021biunea caracteristic\u0103 uneia din modalit\u0103\u021bile normative de s\u0103v\u00e2r\u0219ire a faptei, respectiv data comiterii primului act dintr-o succesiune de acte corespunz\u0103toare unei singure modalit\u0103\u021bi normative.<\/p>\r\n<p data-start=\"13953\" data-end=\"14270\"><strong data-start=\"13953\" data-end=\"14023\">8. Calculatorul \u00eemi spune c\u0103 \u201ee prescris\u201d. Gata, se \u201e\u00eenchide\u201d dosarul?<\/strong><br data-start=\"14023\" data-end=\"14026\" \/>Nu automat. Prescrip\u021bia se invoc\u0103 \u0219i se constat\u0103 <strong data-start=\"14075\" data-end=\"14087\">\u00een dosar<\/strong> de c\u0103tre organul judiciar competent, cu verificarea tuturor elementelor (acte, comunic\u0103ri, suspend\u0103ri). Calculatorul e un <strong data-start=\"14210\" data-end=\"14235\">instrument orientativ<\/strong>, nu \u021bine loc de solu\u021bie judiciar\u0103.<\/p>\r\n<h3 class=\"wp-block-heading\">Important de \u0219tiut<\/h3>\n\n\n\n<p><p>Acest material are un scop pur informativ \u0219i educa\u021bional, con\u021binutul acestuia neput\u00e2nd fi asimilat unei forme de consultan\u021b\u0103 juridic\u0103 \u00een materie penal\u0103. Pentru a \u00een\u021belege cu exactitate ce drepturi sau obliga\u021bii ai \u00eentr-o anumit\u0103 procedur\u0103 penal\u0103, este important s\u0103 consul\u021bi un avocat specializat \u00een dreptul penal.<\/p>\n<p>Calculatorul este un instrument de asisten\u021b\u0103 \u0219i nu \u00eenlocuie\u0219te analiza juridic\u0103 profesional\u0103. Rezultatele trebuie \u00eentotdeauna verificate \u0219i interpretate \u00eentotdeauna \u00een contextul specific al fiec\u0103rui dosar penal \u00een parte.<\/p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Informa\u021bii suplimentare<\/strong><\/h3>\n\n\n\n<p><a href=\"https:\/\/zic.legal\/ro\/team\/zlatigeorge\/\" target=\"_blank\" rel=\"noreferrer noopener\">George Zlati&nbsp;<\/a>este avocat \u0219i lector universitar. Acesta este titular al disciplinei&nbsp;<em>Criminalitate informatic\u0103&nbsp;<\/em>la nivel de masterat, av\u00e2nd de asemenea un doctorat pe criminalitate informatic\u0103. Specializarea acestuia este criminalitatea informatic\u0103 \u0219i tehnologia blockchain.<\/p>","protected":false},"excerpt":{"rendered":"<p>Prescrip\u021bia r\u0103spunderii penale \u00eenl\u0103tur\u0103 r\u0103spunderea pentru fapta comis\u0103 dup\u0103 trecerea unui anumit timp (\u201ctermenul general\u201d din art. 154 Cod penal) sau, \u00een anumite condi\u021bii, dup\u0103 dublul acestuia (\u201cprescrip\u021bia special\u0103\u201d, art. 155 alin. (4) Cod penal). \u00cen practic\u0103, conteaz\u0103 c\u00e2nd a fost s\u0103v\u00e2r\u0219it\u0103 fapta, ce pedeaps\u0103 prevede legea pentru acea infrac\u021biune, dac\u0103 au  [&#8230;]<\/p>","protected":false},"author":2,"featured_media":3956,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[2],"tags":[4],"class_list":["post-2560","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-diverse","tag-avocat-george-zlati"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Calculator online pentru prescrip\u021bia r\u0103spunderii penale | ZIC Legal<\/title>\n<meta name=\"description\" content=\"Calculator online gratuit pentru prescrip\u021bia r\u0103spunderii penale. Calculeaz\u0103 termene generale \u0219i speciale. Instrument juridic actualizat 2024.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zic.legal\/ro\/calculator-pentru-prescriptia-raspunderii-penale\/\" \/>\n<meta property=\"og:locale\" content=\"ro_RO\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Calculator online pentru prescrip\u021bia r\u0103spunderii penale | ZIC Legal\" \/>\n<meta property=\"og:description\" content=\"Calculator online gratuit pentru prescrip\u021bia r\u0103spunderii penale. Calculeaz\u0103 termene generale \u0219i speciale. Instrument juridic actualizat 2024.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zic.legal\/ro\/calculator-pentru-prescriptia-raspunderii-penale\/\" \/>\n<meta property=\"og:site_name\" content=\"ZIC Legal\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61573624655319\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-30T13:46:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-28T16:33:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"George Zlati\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scris de\" \/>\n\t<meta name=\"twitter:data1\" content=\"George Zlati\" \/>\n\t<meta name=\"twitter:label2\" content=\"Timp estimat pentru citire\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/\"},\"author\":{\"name\":\"George Zlati\",\"@id\":\"https:\/\/zic.legal\/#\/schema\/person\/cffc51a7df5926dd9954aeb3bbbcc303\"},\"headline\":\"Calculator online pentru prescrip\u021bia r\u0103spunderii penale\",\"datePublished\":\"2024-10-30T13:46:46+00:00\",\"dateModified\":\"2025-12-28T16:33:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/\"},\"wordCount\":1462,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/zic.legal\/#organization\"},\"image\":{\"@id\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp\",\"keywords\":[\"avocat George Zlati\"],\"articleSection\":[\"Diverse\"],\"inLanguage\":\"ro-RO\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/\",\"url\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/\",\"name\":\"Calculator online pentru prescrip\u021bia r\u0103spunderii penale | ZIC Legal\",\"isPartOf\":{\"@id\":\"https:\/\/zic.legal\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp\",\"datePublished\":\"2024-10-30T13:46:46+00:00\",\"dateModified\":\"2025-12-28T16:33:43+00:00\",\"description\":\"Calculator online gratuit pentru prescrip\u021bia r\u0103spunderii penale. Calculeaz\u0103 termene generale \u0219i speciale. Instrument juridic actualizat 2024.\",\"breadcrumb\":{\"@id\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#breadcrumb\"},\"inLanguage\":\"ro-RO\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ro-RO\",\"@id\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#primaryimage\",\"url\":\"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp\",\"contentUrl\":\"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zic.legal\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calculator online pentru prescrip\u021bia r\u0103spunderii penale\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zic.legal\/#website\",\"url\":\"https:\/\/zic.legal\/\",\"name\":\"Zlati Ionescu Chiperi SCA\",\"description\":\"Not another brick in the law\",\"publisher\":{\"@id\":\"https:\/\/zic.legal\/#organization\"},\"alternateName\":\"Zlati Ionescu Chiperi - SCA\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zic.legal\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ro-RO\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/zic.legal\/#organization\",\"name\":\"Zlati Ionescu Chiperi SCA\",\"url\":\"https:\/\/zic.legal\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ro-RO\",\"@id\":\"https:\/\/zic.legal\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/zic.legal\/wp-content\/uploads\/2025\/02\/Logo-Color-RGB@0.5x.png\",\"contentUrl\":\"https:\/\/zic.legal\/wp-content\/uploads\/2025\/02\/Logo-Color-RGB@0.5x.png\",\"width\":306,\"height\":306,\"caption\":\"Zlati Ionescu Chiperi SCA\"},\"image\":{\"@id\":\"https:\/\/zic.legal\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/profile.php?id=61573624655319\",\"https:\/\/www.linkedin.com\/company\/zic-legal\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/zic.legal\/#\/schema\/person\/cffc51a7df5926dd9954aeb3bbbcc303\",\"name\":\"George Zlati\",\"url\":\"https:\/\/zic.legal\/ro\/author\/zlatigeorge\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Calculator online pentru prescrip\u021bia r\u0103spunderii penale | ZIC Legal","description":"Calculator online gratuit pentru prescrip\u021bia r\u0103spunderii penale. Calculeaz\u0103 termene generale \u0219i speciale. Instrument juridic actualizat 2024.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zic.legal\/ro\/calculator-pentru-prescriptia-raspunderii-penale\/","og_locale":"ro_RO","og_type":"article","og_title":"Calculator online pentru prescrip\u021bia r\u0103spunderii penale | ZIC Legal","og_description":"Calculator online gratuit pentru prescrip\u021bia r\u0103spunderii penale. Calculeaz\u0103 termene generale \u0219i speciale. Instrument juridic actualizat 2024.","og_url":"https:\/\/zic.legal\/ro\/calculator-pentru-prescriptia-raspunderii-penale\/","og_site_name":"ZIC Legal","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61573624655319","article_published_time":"2024-10-30T13:46:46+00:00","article_modified_time":"2025-12-28T16:33:43+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp","type":"image\/webp"}],"author":"George Zlati","twitter_card":"summary_large_image","twitter_misc":{"Scris de":"George Zlati","Timp estimat pentru citire":"2 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#article","isPartOf":{"@id":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/"},"author":{"name":"George Zlati","@id":"https:\/\/zic.legal\/#\/schema\/person\/cffc51a7df5926dd9954aeb3bbbcc303"},"headline":"Calculator online pentru prescrip\u021bia r\u0103spunderii penale","datePublished":"2024-10-30T13:46:46+00:00","dateModified":"2025-12-28T16:33:43+00:00","mainEntityOfPage":{"@id":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/"},"wordCount":1462,"commentCount":0,"publisher":{"@id":"https:\/\/zic.legal\/#organization"},"image":{"@id":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#primaryimage"},"thumbnailUrl":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp","keywords":["avocat George Zlati"],"articleSection":["Diverse"],"inLanguage":"ro-RO","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/","url":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/","name":"Calculator online pentru prescrip\u021bia r\u0103spunderii penale | ZIC Legal","isPartOf":{"@id":"https:\/\/zic.legal\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#primaryimage"},"image":{"@id":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#primaryimage"},"thumbnailUrl":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp","datePublished":"2024-10-30T13:46:46+00:00","dateModified":"2025-12-28T16:33:43+00:00","description":"Calculator online gratuit pentru prescrip\u021bia r\u0103spunderii penale. Calculeaz\u0103 termene generale \u0219i speciale. Instrument juridic actualizat 2024.","breadcrumb":{"@id":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#breadcrumb"},"inLanguage":"ro-RO","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/"]}]},{"@type":"ImageObject","inLanguage":"ro-RO","@id":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#primaryimage","url":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp","contentUrl":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/zic.legal\/calculator-pentru-prescriptia-raspunderii-penale\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zic.legal\/"},{"@type":"ListItem","position":2,"name":"Calculator online pentru prescrip\u021bia r\u0103spunderii penale"}]},{"@type":"WebSite","@id":"https:\/\/zic.legal\/#website","url":"https:\/\/zic.legal\/","name":"Zlati Ionescu Chiperi SCA","description":"Not another brick in the law","publisher":{"@id":"https:\/\/zic.legal\/#organization"},"alternateName":"Zlati Ionescu Chiperi - SCA","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zic.legal\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ro-RO"},{"@type":"Organization","@id":"https:\/\/zic.legal\/#organization","name":"Zlati Ionescu Chiperi SCA","url":"https:\/\/zic.legal\/","logo":{"@type":"ImageObject","inLanguage":"ro-RO","@id":"https:\/\/zic.legal\/#\/schema\/logo\/image\/","url":"https:\/\/zic.legal\/wp-content\/uploads\/2025\/02\/Logo-Color-RGB@0.5x.png","contentUrl":"https:\/\/zic.legal\/wp-content\/uploads\/2025\/02\/Logo-Color-RGB@0.5x.png","width":306,"height":306,"caption":"Zlati Ionescu Chiperi SCA"},"image":{"@id":"https:\/\/zic.legal\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61573624655319","https:\/\/www.linkedin.com\/company\/zic-legal\/"]},{"@type":"Person","@id":"https:\/\/zic.legal\/#\/schema\/person\/cffc51a7df5926dd9954aeb3bbbcc303","name":"George Zlati","url":"https:\/\/zic.legal\/ro\/author\/zlatigeorge\/"}]}},"jetpack_featured_media_url":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/10\/tools7.webp","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/posts\/2560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/comments?post=2560"}],"version-history":[{"count":32,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/posts\/2560\/revisions"}],"predecessor-version":[{"id":4091,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/posts\/2560\/revisions\/4091"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/media\/3956"}],"wp:attachment":[{"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/media?parent=2560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/categories?post=2560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/tags?post=2560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}