{"record":{"id":"ab3ffbe5a8795efb","repo":"RubyMoney/money","slug":"need-at-least-one-part","errorCode":null,"errorMessage":"need at least one part","messagePattern":"need at least one part","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"lib/money/money/allocation.rb","lineNumber":34,"sourceCode":"    # @param decimal_cutoff [Boolean, Integer] Controls per-split precision:\n    #   - When true, splits are truncated to whole amounts.\n    #   - When an Integer N, splits are rounded to N decimal places.\n    #   - When false or nil, no rounding/truncation is applied.\n    #   Defaults to true (whole amounts).\n    #\n    # @return [Array<Numeric>] An array containing the allocated amounts.\n    # @raise [ArgumentError] If parts is empty or not provided.\n    def self.generate(amount, parts, decimal_cutoff = true)\n      parts =\n        if parts.is_a?(Numeric)\n          Array.new(parts, 1)\n        elsif parts.all?(&:zero?)\n          Array.new(parts.count, 1)\n        else\n          parts.dup\n        end\n\n      raise ArgumentError, \"need at least one part\" if parts.empty?\n\n      if [amount, *parts].any? { |i| i.is_a?(BigDecimal) || i.is_a?(Float) || i.is_a?(Rational) }\n        amount = convert_to_big_decimal(amount)\n        parts.map! { |p| convert_to_big_decimal(p) }\n      end\n\n      result = []\n      remaining_amount = amount\n      round_to_whole = decimal_cutoff.is_a?(TrueClass)\n      round_to_precision = decimal_cutoff.is_a?(Integer)\n\n      parts_sum = parts.sum\n\n      until parts.empty?\n        part = parts.pop\n\n        current_split = 0\n        if parts_sum > 0","sourceCodeStart":16,"sourceCodeEnd":52,"githubUrl":"https://github.com/RubyMoney/money/blob/26e2829c34f165847040a5a40d4d2daa5eb72927/lib/money/money/allocation.rb#L16-L52","documentation":"Error \"need at least one part\" thrown in RubyMoney/money.","triggerScenarios":"Thrown at lib/money/money/allocation.rb:34 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"26e2829c34f165847040a5a40d4d2daa5eb72927","analyzedAt":"2026-08-23T17:41:07.306Z","schemaVersion":2},"datasetVersion":"2026-08-23T21:17:23.414Z"}