v3.26.1
Revenues, Trade Accounts Receivable, Contract Assets and Contract Liabilities (Tables)
6 Months Ended
Jun. 30, 2026
Schedule of Disaggregation by Revenue

The Company disaggregates its sales with customers by revenue recognition method for its only segment, as the Company believes these factors affect nature, amount, timing and uncertainty of the Company’s revenue and cash flows.

 

   2026   2025   2026   2025 
   Three months ended   Six months ended 
   June 30,   June 30, 
   2026   2025   2026   2025 
Fixed price contracts  $79,645   $61,228   $155,753   $114,202 
Product sales   215,646    194,318    388,550    363,632 
Total Revenues  $295,291   $255,546   $544,303   $477,834 
Schedule of Revenues Distribution By End Market

The following table presents revenues broken down by market:

 

   2026   2025   2026   2025 
   Three months ended
June 30,
   Six months ended
June 30,
 
   2026   2025   2026   2025 
Residential  $126,499   $109,598   $214,969   $198,527 
Commercial   168,792    145,948    329,334    279,307 
Total Revenues  $295,291   $255,546   $544,303   $477,834 
Schedule of Trade Accounts Receivable

Trade accounts receivable consists of the following:

 

 

   June 30,
2026
   December 31,
2025
 
Short-term trade accounts receivable  $292,134   $243,768 
Less: Allowance for credit losses   (4,668)   (4,320)
Total short-term trade accounts receivable   287,466    239,448 
Long term trade accounts   1,887    1,730 
Total trade accounts receivable  $289,353   $241,178 
Schedule of Changes in Allowance for Doubtful Accounts Receivable

The changes in the allowance for credit losses for the six months ended June 30, 2026, are:

 

 

   Six months ended
June 30, 2026
 
Balance at beginning of period  $4,320 
Provisions for credit losses   1,322 
Deductions and write-offs, net of foreign currency adjustment   (974)
Balance at end of period  $4,668 
Schedule of Contract Assets and Liabilities

The table below presents the components of net contract assets (liabilities):

 

   June 30,
2026
   December 31,
2025
 
Contract assets — current  $29,701   $31,809 
Contract assets — non-current   28,414    20,506 
Contract liabilities — current   (173,825)   (149,442)
Contract liabilities — non-current   (1,045)   (1,988)
Net contract liability  $(116,755)  $(99,115)
Contract Assets [Member]  
Schedule of Contract Assets and Liabilities

The components of contract assets are presented in the table below:

 

 

   June 30,
2026
   December 31,
2025
 
Unbilled contract receivables, gross  $6,421   $9,084 
Retainage   51,694    43,231 
Total contract assets   58,115    52,315 
Less: current portion   29,701    31,809 
Contract Assets – non-current  $28,414   $20,506 
Contract Liabilities [Member]  
Schedule of Contract Assets and Liabilities

The components of contract liabilities are presented in the table below:

 

   June 30,
2026
   December 31,
2025
 
Billings in excess of costs  $122,407   $104,376 
Advances from customers on uncompleted contracts   52,463    47,054 
Total contract liabilities   174,780    151,430 
Less: current portion   173,825    149,442 
Contract liabilities – non-current  $1,045   $1,988 
Reportable Segment, Aggregation before Other Operating Segment [Member]  
Schedule of Geographic Information

The following table presents revenues broken down by geographical location:

 

   2026   2025   2026   2025 
   Three months ended
June 30,
   Six months ended
June 30,
 
   2026   2025   2026   2025 
Colombia  $6,154   $6,621   $13,673   $13,035 
United States   286,242    242,347    523,382    454,801 
Other   2,895    6,578    7,248    9,998 
Total Revenues  $295,291   $255,546   $544,303   $477,834