otvorenesudy/otvorenesudy-api

View on GitHub
app/mappers/obcan_justice_sk/decree_mapper.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
98%
module ObcanJusticeSk
  class DecreeMapper
    FORM_CODE_MAP = {
      'Čiastočný rozsudok' => 'X',
      'Dopĺňací rozsudok' => 'D',
      'Dopĺňacie uznesenie' => 'R',
      'Európsky platobný rozkaz' => 'E',
      'Medzitýmny rozsudok' => 'X',
      'Opatrenie bez poučenia' => 'X',
      'Opatrenie' => 'X',
      'Opravné uznesenie' => 'R',
      'Osvedčenie' => 'B',
      'Platobný rozkaz' => 'P',
      'Príkaz' => 'X',
      'Rozhodnutie' => 'A',
      'Rozkaz na plnenie' => 'L',
      'Rozsudok bez odôvodnenia' => 'F',
      'Rozsudok pre uznanie' => 'U',
      'Rozsudok pre vzdanie' => 'X',
      'Rozsudok pre zmeškanie' => 'K',
      'Rozsudok' => 'A',
      'Šekový platobný rozkaz' => 'S',
      'Trestný rozkaz' => 'T',
      'Uznesenie bez odôvodnenia' => 'C',
      'Uznesenie' => 'N',
      'Výzva' => 'X',
      'Zmenkový platobný rozkaz' => 'M'
    }

    attr :decree, :data

    def initialize(decree)
      @decree = decree
      @data = decree.data.deep_symbolize_keys
    end

    def source
      'JusticeGovSk'
    end

    def source_class
      decree.class.name
    end

    def source_class_id
      decree.id
    end

    def uri
      "https://www.justice.gov.sk/sudy-a-rozhodnutia/sudy/rozhodnutia/#{data[:guid]}"
    end

    def ecli
      data[:ecli].presence
    end

    def court
      name = data[:sud][:nazov]

      ObcanJusticeSk::Normalizer.normalize_court_name(name)
    end

    def judges
      return [] unless data[:sudca] && data[:sudca][:meno]

      name = data[:sudca][:meno]

      [ObcanJusticeSk::Normalizer.normalize_person_name(name)]
    end

    def date
      Time.parse(data[:datumVydania]) if data[:datumVydania].present?
    end

    def file_number
      data[:identifikacneCislo].presence
    end

    def case_number
      data[:spisovaZnacka].presence
    end

    def form
      data[:formaRozhodnutia].presence
    end

    def form_code
      FORM_CODE_MAP[form] if form
    end

    def natures
      Array.wrap(data[:povaha].presence)
    end

    def legislation_areas
      Array.wrap(data[:oblast].presence)
    end

    def legislation_subareas
      Array.wrap(data[:podOblast].presence)
    end

    def legislations
      Array
        .wrap(data[:odkazovanePredpisy].presence)
        .map do |value|
          ObcanJusticeSk::Normalizer.partition_legislation(value[:nazov]).merge(value_unprocessed: value[:nazov])
        end
    end

    def pages
      @pages ||=
        begin
          pages = PdfExtractor.extract_text_from_url(pdf_uri, preserve_pages: true)

          if !pages || pages[0].blank?
            raise ArgumentError.new("Failed to extract text from PDF for #{source_class}:#{source_class_id}")
          end

          pages
        rescue StandardError => e
          Sentry.capture_exception(e)

          []
        end
    end

    def pdf_uri
      data[:dokument][:url]
    end
  end
end