v3.26.1
Note 4 - Revenue Recognition (Tables)
6 Months Ended
Jul. 31, 2026
Notes Tables  
Disaggregation of Revenue [Table Text Block]
  

Three Months Ended July 31,

  

Six Months Ended July 31,

 
  

2026

  

2025

  

2026

  

2025

 
  

Sales

  

% of Total

  

Sales

  

% of Total

  

Sales

  

% of Total

  

Sales

  

% of Total

 

Products

 $3,794   6% $3,451   7% $6,876   6% $7,091   8%
                                 

Specialty Piping Systems and Coating

                                

Revenue recognized under input method

  18,206   31%  12,965   27%  32,588   30%  25,025   26%

Revenue recognized under output method

  37,567   63%  31,486   66%  70,367   64%  62,532   66%

Total

 $59,567   100% $47,902   100% $109,831   100% $94,648   100%
Schedule of Assumptions for Long-Duration Contracts by Product and Guarantee [Table Text Block]
  

July 31, 2026

  

January 31, 2026

 

Costs incurred on uncompleted contracts

 $21,501  $17,562 

Estimated earnings

  16,817   12,721 

Earned revenue

  38,318   30,283 

Less billings to date

  32,600   27,784 

Costs in excess of billings, net

 $5,718  $2,499 

Balance sheet classification

        

Contract assets: Costs and estimated earnings in excess of billings on uncompleted contracts

 $6,332  $4,652 

Contract liabilities: Billings in excess of costs and estimated earnings on uncompleted contracts

  (614)  (2,153)

Costs in excess of billings, net

 $5,718  $2,499