Organization record
CDT Environmental Technology Investment Holdings Limited
All evidence-backed facts for this organization, identity resolved across official registers.
Facts on record
Newest first; every row links to its evidence page.
| Fact | Value | Period | Source |
|---|---|---|---|
| accounts_payable | {"amount": 39221439, "concept": "us-gaap:AccountsPayableCurrent", "currency": "USD"} | 2025-12-31 | sec_edgar |
| accounts_payable | {"amount": 36347893, "concept": "us-gaap:AccountsPayableCurrent", "currency": "USD"} | 2024-12-31 | sec_edgar |
| accounts_payable | {"amount": 23784781, "concept": "us-gaap:AccountsPayableCurrent", "currency": "USD"} | 2023-12-31 | sec_edgar |
| accounts_payable | {"amount": 14862676, "concept": "us-gaap:AccountsPayableCurrent", "currency": "USD"} | 2022-12-31 | sec_edgar |
| accounts_receivable | {"amount": 44128933, "concept": "us-gaap:AccountsReceivableNetCurrent", "currency": "USD"} | 2025-12-31 | sec_edgar |
| accounts_receivable | {"amount": 45188231, "concept": "us-gaap:AccountsReceivableNetCurrent", "currency": "USD"} | 2024-12-31 | sec_edgar |
| accounts_receivable | {"amount": 29076549, "concept": "us-gaap:AccountsReceivableNetCurrent", "currency": "USD"} | 2023-12-31 | sec_edgar |
| accounts_receivable | {"amount": 20090775, "concept": "us-gaap:AccountsReceivableNetCurrent", "currency": "USD"} | 2022-12-31 | sec_edgar |
| capex | {"amount": 2233, "concept": "us-gaap:PaymentsToAcquirePropertyPlantAndEquipment", "currenc | 2025-12-31 | sec_edgar |
| capex | {"amount": 3893, "concept": "us-gaap:PaymentsToAcquirePropertyPlantAndEquipment", "currenc | 2024-12-31 | sec_edgar |
| capex | {"amount": 21550, "concept": "us-gaap:PaymentsToAcquirePropertyPlantAndEquipment", "curren | 2023-12-31 | sec_edgar |
| capex | {"amount": 53187, "concept": "us-gaap:PaymentsToAcquirePropertyPlantAndEquipment", "curren | 2022-12-31 | sec_edgar |
| capex | {"amount": 101279, "concept": "us-gaap:PaymentsToAcquirePropertyPlantAndEquipment", "curre | 2021-12-31 | sec_edgar |
| cash_and_equivalents | {"amount": 66686, "concept": "us-gaap:CashAndCashEquivalentsAtCarryingValue", "currency": | 2025-12-31 | sec_edgar |
| cash_and_equivalents | {"amount": 124379, "concept": "us-gaap:CashAndCashEquivalentsAtCarryingValue", "currency": | 2024-12-31 | sec_edgar |
| cash_and_equivalents | {"amount": 268102, "concept": "us-gaap:CashAndCashEquivalentsAtCarryingValue", "currency": | 2023-12-31 | sec_edgar |
| cash_and_restricted_cash | {"amount": 66686, "concept": "us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEq | 2025-12-31 | sec_edgar |
| cash_and_restricted_cash | {"amount": 124379, "concept": "us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashE | 2024-12-31 | sec_edgar |
| cash_and_restricted_cash | {"amount": 268102, "concept": "us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashE | 2023-12-31 | sec_edgar |
| cash_and_restricted_cash | {"amount": 199864, "concept": "us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashE | 2022-12-31 | sec_edgar |
| cash_and_restricted_cash | {"amount": 1134962, "concept": "us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCash | 2021-12-31 | sec_edgar |
| cash_and_restricted_cash | {"amount": 363696, "concept": "us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashE | 2020-12-31 | sec_edgar |
| cashflow_financing | {"amount": 1398302, "concept": "us-gaap:NetCashProvidedByUsedInFinancingActivities", "curr | 2025-12-31 | sec_edgar |
| cashflow_financing | {"amount": 1018726, "concept": "us-gaap:NetCashProvidedByUsedInFinancingActivities", "curr | 2024-12-31 | sec_edgar |
| cashflow_financing | {"amount": 2990160, "concept": "us-gaap:NetCashProvidedByUsedInFinancingActivities", "curr | 2023-12-31 | sec_edgar |
| cashflow_financing | {"amount": 3732742, "concept": "us-gaap:NetCashProvidedByUsedInFinancingActivities", "curr | 2022-12-31 | sec_edgar |
| cashflow_financing | {"amount": -927826, "concept": "us-gaap:NetCashProvidedByUsedInFinancingActivities", "curr | 2021-12-31 | sec_edgar |
| cashflow_investing | {"amount": 1067, "concept": "us-gaap:NetCashProvidedByUsedInInvestingActivities", "currenc | 2025-12-31 | sec_edgar |
| cashflow_investing | {"amount": 545167, "concept": "us-gaap:NetCashProvidedByUsedInInvestingActivities", "curre | 2024-12-31 | sec_edgar |
| cashflow_investing | {"amount": 243586, "concept": "us-gaap:NetCashProvidedByUsedInInvestingActivities", "curre | 2023-12-31 | sec_edgar |
| cashflow_investing | {"amount": -94452, "concept": "us-gaap:NetCashProvidedByUsedInInvestingActivities", "curre | 2022-12-31 | sec_edgar |
| cashflow_investing | {"amount": 1832837, "concept": "us-gaap:NetCashProvidedByUsedInInvestingActivities", "curr | 2021-12-31 | sec_edgar |
| cashflow_operating | {"amount": -1490957, "concept": "us-gaap:NetCashProvidedByUsedInOperatingActivities", "cur | 2025-12-31 | sec_edgar |
| cashflow_operating | {"amount": -1987028, "concept": "us-gaap:NetCashProvidedByUsedInOperatingActivities", "cur | 2024-12-31 | sec_edgar |
| cashflow_operating | {"amount": -3132666, "concept": "us-gaap:NetCashProvidedByUsedInOperatingActivities", "cur | 2023-12-31 | sec_edgar |
| cashflow_operating | {"amount": -4472780, "concept": "us-gaap:NetCashProvidedByUsedInOperatingActivities", "cur | 2022-12-31 | sec_edgar |
| cashflow_operating | {"amount": -129639, "concept": "us-gaap:NetCashProvidedByUsedInOperatingActivities", "curr | 2021-12-31 | sec_edgar |
| common_shares_issued | {"unit": "shares", "value": 10825000, "concept": "us-gaap:CommonStockSharesIssued"} | 2024-12-31 | sec_edgar |
| common_shares_issued | {"unit": "shares", "value": 9200000, "concept": "us-gaap:CommonStockSharesIssued"} | 2023-12-31 | sec_edgar |
| common_shares_outstanding | {"unit": "shares", "value": 13525000, "concept": "dei:EntityCommonStockSharesOutstanding"} | 2025-12-31 | sec_edgar |
| common_shares_outstanding | {"unit": "shares", "value": 10825000, "concept": "us-gaap:CommonStockSharesOutstanding"} | 2024-12-31 | sec_edgar |
| common_shares_outstanding | {"unit": "shares", "value": 9200000, "concept": "us-gaap:CommonStockSharesOutstanding"} | 2023-12-31 | sec_edgar |
| common_shares_outstanding | {"unit": "shares", "value": 9200000, "concept": "us-gaap:CommonStockSharesOutstanding"} | 2022-12-31 | sec_edgar |
| cost_of_revenue | {"amount": 10666862, "concept": "us-gaap:CostOfRevenue", "currency": "USD"} | 2025-12-31 | sec_edgar |
| cost_of_revenue | {"amount": 18518728, "concept": "us-gaap:CostOfRevenue", "currency": "USD"} | 2024-12-31 | sec_edgar |
| cost_of_revenue | {"amount": 22825033, "concept": "us-gaap:CostOfRevenue", "currency": "USD"} | 2023-12-31 | sec_edgar |
| cost_of_revenue | {"amount": 18596207, "concept": "us-gaap:CostOfRevenue", "currency": "USD"} | 2022-12-31 | sec_edgar |
| cost_of_revenue | {"amount": 15062490, "concept": "us-gaap:CostOfRevenue", "currency": "USD"} | 2021-12-31 | sec_edgar |
| current_assets | {"amount": 84317347, "concept": "us-gaap:AssetsCurrent", "currency": "USD"} | 2025-12-31 | sec_edgar |
| current_assets | {"amount": 77704451, "concept": "us-gaap:AssetsCurrent", "currency": "USD"} | 2024-12-31 | sec_edgar |
| current_assets | {"amount": 64741493, "concept": "us-gaap:AssetsCurrent", "currency": "USD"} | 2023-12-31 | sec_edgar |
| current_assets | {"amount": 40968099, "concept": "us-gaap:AssetsCurrent", "currency": "USD"} | 2022-12-31 | sec_edgar |
| current_liabilities | {"amount": 57906667, "concept": "us-gaap:LiabilitiesCurrent", "currency": "USD"} | 2025-12-31 | sec_edgar |
| current_liabilities | {"amount": 51708562, "concept": "us-gaap:LiabilitiesCurrent", "currency": "USD"} | 2024-12-31 | sec_edgar |
| current_liabilities | {"amount": 40519875, "concept": "us-gaap:LiabilitiesCurrent", "currency": "USD"} | 2023-12-31 | sec_edgar |
| current_liabilities | {"amount": 28069459, "concept": "us-gaap:LiabilitiesCurrent", "currency": "USD"} | 2022-12-31 | sec_edgar |
| dei:EntityCommonStockSharesOutstanding | {"unit": "shares", "value": 13525000} | 2025-12-31 | sec_edgar |
| dei:EntityCommonStockSharesOutstanding | {"unit": "shares", "value": 10825000} | 2024-12-31 | sec_edgar |
| dei:EntityCommonStockSharesOutstanding | {"unit": "shares", "value": 9200000} | 2023-12-31 | sec_edgar |
| eps_basic | {"per": "shares", "amount": -0.84, "concept": "us-gaap:EarningsPerShareBasic", "currency": | 2025-12-31 | sec_edgar |
| eps_basic | {"per": "shares", "amount": 0.14, "concept": "us-gaap:EarningsPerShareBasic", "currency": | 2024-12-31 | sec_edgar |
| eps_basic | {"per": "shares", "amount": 0.81, "concept": "us-gaap:EarningsPerShareBasic", "currency": | 2023-12-31 | sec_edgar |
| eps_basic | {"per": "shares", "amount": 0.63, "concept": "us-gaap:EarningsPerShareBasic", "currency": | 2022-12-31 | sec_edgar |
| eps_basic | {"per": "shares", "amount": 0.74, "concept": "us-gaap:EarningsPerShareBasic", "currency": | 2021-12-31 | sec_edgar |
| eps_diluted | {"per": "shares", "amount": -0.84, "concept": "us-gaap:EarningsPerShareDiluted", "currency | 2025-12-31 | sec_edgar |
| eps_diluted | {"per": "shares", "amount": 0.14, "concept": "us-gaap:EarningsPerShareDiluted", "currency" | 2024-12-31 | sec_edgar |
| eps_diluted | {"per": "shares", "amount": 0.81, "concept": "us-gaap:EarningsPerShareDiluted", "currency" | 2023-12-31 | sec_edgar |
| eps_diluted | {"per": "shares", "amount": 0.63, "concept": "us-gaap:EarningsPerShareDiluted", "currency" | 2022-12-31 | sec_edgar |
| eps_diluted | {"per": "shares", "amount": 0.74, "concept": "us-gaap:EarningsPerShareDiluted", "currency" | 2021-12-31 | sec_edgar |
| gross_profit | {"amount": 7558957, "concept": "us-gaap:GrossProfit", "currency": "USD"} | 2025-12-31 | sec_edgar |
| gross_profit | {"amount": 11246477, "concept": "us-gaap:GrossProfit", "currency": "USD"} | 2024-12-31 | sec_edgar |
| gross_profit | {"amount": 11384886, "concept": "us-gaap:GrossProfit", "currency": "USD"} | 2023-12-31 | sec_edgar |
| gross_profit | {"amount": 10253155, "concept": "us-gaap:GrossProfit", "currency": "USD"} | 2022-12-31 | sec_edgar |
| gross_profit | {"amount": 8494330, "concept": "us-gaap:GrossProfit", "currency": "USD"} | 2021-12-31 | sec_edgar |
| income_tax_expense | {"amount": -1266021, "concept": "us-gaap:IncomeTaxExpenseBenefit", "currency": "USD"} | 2025-12-31 | sec_edgar |
| income_tax_expense | {"amount": 462043, "concept": "us-gaap:IncomeTaxExpenseBenefit", "currency": "USD"} | 2024-12-31 | sec_edgar |
| income_tax_expense | {"amount": 1403880, "concept": "us-gaap:IncomeTaxExpenseBenefit", "currency": "USD"} | 2023-12-31 | sec_edgar |
| income_tax_expense | {"amount": 1152963, "concept": "us-gaap:IncomeTaxExpenseBenefit", "currency": "USD"} | 2022-12-31 | sec_edgar |
| income_tax_expense | {"amount": 1207810, "concept": "us-gaap:IncomeTaxExpenseBenefit", "currency": "USD"} | 2021-12-31 | sec_edgar |
| industry_sic | {"code": "4950", "scheme": "SIC", "description": "Sanitary Services"} | sec_edgar | |
| intangible_assets | {"amount": 5628, "concept": "us-gaap:FiniteLivedIntangibleAssetsNet", "currency": "USD"} | 2024-12-31 | sec_edgar |
| intangible_assets | {"amount": 16397, "concept": "us-gaap:FiniteLivedIntangibleAssetsNet", "currency": "USD"} | 2023-12-31 | sec_edgar |
| intangible_assets | {"amount": 28164, "concept": "us-gaap:FiniteLivedIntangibleAssetsNet", "currency": "USD"} | 2022-12-31 | sec_edgar |
| interest_expense | {"amount": 91446, "concept": "us-gaap:InterestExpense", "currency": "USD"} | 2025-12-31 | sec_edgar |
| interest_expense | {"amount": 136757, "concept": "us-gaap:InterestExpense", "currency": "USD"} | 2024-12-31 | sec_edgar |
| interest_expense | {"amount": 106130, "concept": "us-gaap:InterestExpense", "currency": "USD"} | 2023-12-31 | sec_edgar |
| interest_expense | {"amount": 64658, "concept": "us-gaap:InterestExpense", "currency": "USD"} | 2022-12-31 | sec_edgar |
| interest_expense | {"amount": 68656, "concept": "us-gaap:InterestExpense", "currency": "USD"} | 2021-12-31 | sec_edgar |
| net_income | {"amount": -10197242, "concept": "us-gaap:NetIncomeLoss", "currency": "USD"} | 2025-12-31 | sec_edgar |
| net_income | {"amount": 1453191, "concept": "us-gaap:NetIncomeLoss", "currency": "USD"} | 2024-12-31 | sec_edgar |
| net_income | {"amount": 7417706, "concept": "us-gaap:NetIncomeLoss", "currency": "USD"} | 2023-12-31 | sec_edgar |
| net_income | {"amount": 5782018, "concept": "us-gaap:NetIncomeLoss", "currency": "USD"} | 2022-12-31 | sec_edgar |
| net_income | {"amount": 6775739, "concept": "us-gaap:NetIncomeLoss", "currency": "USD"} | 2021-12-31 | sec_edgar |
| noncurrent_liabilities | {"amount": 357495, "concept": "us-gaap:LiabilitiesNoncurrent", "currency": "USD"} | 2025-12-31 | sec_edgar |
| noncurrent_liabilities | {"amount": 213969, "concept": "us-gaap:LiabilitiesNoncurrent", "currency": "USD"} | 2024-12-31 | sec_edgar |
| noncurrent_liabilities | {"amount": 185443, "concept": "us-gaap:LiabilitiesNoncurrent", "currency": "USD"} | 2023-12-31 | sec_edgar |
| noncurrent_liabilities | {"amount": 281357, "concept": "us-gaap:LiabilitiesNoncurrent", "currency": "USD"} | 2022-12-31 | sec_edgar |
| operating_expenses | {"amount": 19210361, "concept": "us-gaap:OperatingExpenses", "currency": "USD"} | 2025-12-31 | sec_edgar |
| operating_expenses | {"amount": 9248370, "concept": "us-gaap:OperatingExpenses", "currency": "USD"} | 2024-12-31 | sec_edgar |
| operating_expenses | {"amount": 2773393, "concept": "us-gaap:OperatingExpenses", "currency": "USD"} | 2023-12-31 | sec_edgar |
| operating_expenses | {"amount": 3899217, "concept": "us-gaap:OperatingExpenses", "currency": "USD"} | 2022-12-31 | sec_edgar |
| operating_expenses | {"amount": 848533, "concept": "us-gaap:OperatingExpenses", "currency": "USD"} | 2021-12-31 | sec_edgar |
| operating_income | {"amount": -11651404, "concept": "us-gaap:OperatingIncomeLoss", "currency": "USD"} | 2025-12-31 | sec_edgar |
| operating_income | {"amount": 1998107, "concept": "us-gaap:OperatingIncomeLoss", "currency": "USD"} | 2024-12-31 | sec_edgar |
| operating_income | {"amount": 8611493, "concept": "us-gaap:OperatingIncomeLoss", "currency": "USD"} | 2023-12-31 | sec_edgar |
| operating_income | {"amount": 6353938, "concept": "us-gaap:OperatingIncomeLoss", "currency": "USD"} | 2022-12-31 | sec_edgar |
| operating_income | {"amount": 7645797, "concept": "us-gaap:OperatingIncomeLoss", "currency": "USD"} | 2021-12-31 | sec_edgar |
| operating_lease_liability | {"amount": 224813, "concept": "us-gaap:OperatingLeaseLiability", "currency": "USD"} | 2023-12-31 | sec_edgar |
| operating_lease_liability | {"amount": 201180, "concept": "us-gaap:OperatingLeaseLiability", "currency": "USD"} | 2022-01-02 | sec_edgar |
| ppe_net | {"amount": 1087057, "concept": "us-gaap:PropertyPlantAndEquipmentNet", "currency": "USD"} | 2025-12-31 | sec_edgar |
| ppe_net | {"amount": 1291322, "concept": "us-gaap:PropertyPlantAndEquipmentNet", "currency": "USD"} | 2024-12-31 | sec_edgar |
| ppe_net | {"amount": 1695348, "concept": "us-gaap:PropertyPlantAndEquipmentNet", "currency": "USD"} | 2023-12-31 | sec_edgar |
| ppe_net | {"amount": 2196836, "concept": "us-gaap:PropertyPlantAndEquipmentNet", "currency": "USD"} | 2022-12-31 | sec_edgar |
| pretax_income | {"amount": -11632108, "concept": "us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTa | 2025-12-31 | sec_edgar |
| pretax_income | {"amount": 1868325, "concept": "us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxe | 2024-12-31 | sec_edgar |
| pretax_income | {"amount": 8427934, "concept": "us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxe | 2023-12-31 | sec_edgar |
| pretax_income | {"amount": 6395752, "concept": "us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxe | 2022-12-31 | sec_edgar |
| pretax_income | {"amount": 7786070, "concept": "us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxe | 2021-12-31 | sec_edgar |
| profit_loss | {"amount": -10366087, "concept": "us-gaap:ProfitLoss", "currency": "USD"} | 2025-12-31 | sec_edgar |
| profit_loss | {"amount": 1406282, "concept": "us-gaap:ProfitLoss", "currency": "USD"} | 2024-12-31 | sec_edgar |
| profit_loss | {"amount": 7024054, "concept": "us-gaap:ProfitLoss", "currency": "USD"} | 2023-12-31 | sec_edgar |
| profit_loss | {"amount": 5242789, "concept": "us-gaap:ProfitLoss", "currency": "USD"} | 2022-12-31 | sec_edgar |
| profit_loss | {"amount": 6578260, "concept": "us-gaap:ProfitLoss", "currency": "USD"} | 2021-12-31 | sec_edgar |
| retained_earnings | {"amount": 14258161, "concept": "us-gaap:RetainedEarningsAccumulatedDeficit", "currency": | 2025-12-31 | sec_edgar |
| retained_earnings | {"amount": 24455403, "concept": "us-gaap:RetainedEarningsAccumulatedDeficit", "currency": | 2024-12-31 | sec_edgar |
| retained_earnings | {"amount": 23242946, "concept": "us-gaap:RetainedEarningsAccumulatedDeficit", "currency": | 2023-12-31 | sec_edgar |
| retained_earnings | {"amount": 16621556, "concept": "us-gaap:RetainedEarningsAccumulatedDeficit", "currency": | 2022-12-31 | sec_edgar |
| revenue | {"amount": 18225819, "concept": "us-gaap:Revenues", "currency": "USD"} | 2025-12-31 | sec_edgar |
| revenue | {"amount": 29765205, "concept": "us-gaap:Revenues", "currency": "USD"} | 2024-12-31 | sec_edgar |
| revenue | {"amount": 34209919, "concept": "us-gaap:Revenues", "currency": "USD"} | 2023-12-31 | sec_edgar |
| revenue | {"amount": 28849362, "concept": "us-gaap:Revenues", "currency": "USD"} | 2022-12-31 | sec_edgar |
| revenue | {"amount": 23556820, "concept": "us-gaap:Revenues", "currency": "USD"} | 2021-12-31 | sec_edgar |
| rnd_expense | {"amount": 47602, "concept": "us-gaap:ResearchAndDevelopmentExpense", "currency": "USD"} | 2025-12-31 | sec_edgar |
| rnd_expense | {"amount": 61786, "concept": "us-gaap:ResearchAndDevelopmentExpense", "currency": "USD"} | 2024-12-31 | sec_edgar |
| rnd_expense | {"amount": 80948, "concept": "us-gaap:ResearchAndDevelopmentExpense", "currency": "USD"} | 2023-12-31 | sec_edgar |
| rnd_expense | {"amount": 112668, "concept": "us-gaap:ResearchAndDevelopmentExpense", "currency": "USD"} | 2022-12-31 | sec_edgar |
| rnd_expense | {"amount": 136690, "concept": "us-gaap:ResearchAndDevelopmentExpense", "currency": "USD"} | 2021-12-31 | sec_edgar |
| sga_expense | {"amount": 2160434, "concept": "us-gaap:GeneralAndAdministrativeExpense", "currency": "USD | 2025-12-31 | sec_edgar |
| sga_expense | {"amount": 2164457, "concept": "us-gaap:GeneralAndAdministrativeExpense", "currency": "USD | 2024-12-31 | sec_edgar |
| sga_expense | {"amount": 2674519, "concept": "us-gaap:GeneralAndAdministrativeExpense", "currency": "USD | 2023-12-31 | sec_edgar |
| sga_expense | {"amount": 3150512, "concept": "us-gaap:GeneralAndAdministrativeExpense", "currency": "USD | 2022-12-31 | sec_edgar |
| sga_expense | {"amount": 2400318, "concept": "us-gaap:GeneralAndAdministrativeExpense", "currency": "USD | 2021-12-31 | sec_edgar |
| share_based_compensation | {"amount": 2145000, "concept": "us-gaap:ShareBasedCompensation", "currency": "USD"} | 2025-12-31 | sec_edgar |
| share_based_compensation | {"amount": 454250, "concept": "us-gaap:ShareBasedCompensation", "currency": "USD"} | 2024-12-31 | sec_edgar |
| shares_wavg_basic | {"unit": "shares", "value": 12141807, "concept": "us-gaap:WeightedAverageNumberOfSharesOut | 2025-12-31 | sec_edgar |
| shares_wavg_basic | {"unit": "shares", "value": 10320628, "concept": "us-gaap:WeightedAverageNumberOfSharesOut | 2024-12-31 | sec_edgar |
| shares_wavg_basic | {"unit": "shares", "value": 9200000, "concept": "us-gaap:WeightedAverageNumberOfSharesOuts | 2023-12-31 | sec_edgar |
| shares_wavg_basic | {"unit": "shares", "value": 9200000, "concept": "us-gaap:WeightedAverageNumberOfSharesOuts | 2022-12-31 | sec_edgar |
| shares_wavg_basic | {"unit": "shares", "value": 9200000, "concept": "us-gaap:WeightedAverageNumberOfSharesOuts | 2021-12-31 | sec_edgar |
| shares_wavg_diluted | {"unit": "shares", "value": 12141807, "concept": "us-gaap:WeightedAverageNumberOfDilutedSh | 2025-12-31 | sec_edgar |
| shares_wavg_diluted | {"unit": "shares", "value": 10320628, "concept": "us-gaap:WeightedAverageNumberOfDilutedSh | 2024-12-31 | sec_edgar |
| shares_wavg_diluted | {"unit": "shares", "value": 9200000, "concept": "us-gaap:WeightedAverageNumberOfDilutedSha | 2023-12-31 | sec_edgar |
| shares_wavg_diluted | {"unit": "shares", "value": 9200000, "concept": "us-gaap:WeightedAverageNumberOfDilutedSha | 2022-12-31 | sec_edgar |
| shares_wavg_diluted | {"unit": "shares", "value": 9200000, "concept": "us-gaap:WeightedAverageNumberOfDilutedSha | 2021-12-31 | sec_edgar |
| stockholders_equity | {"amount": 30612713, "concept": "us-gaap:StockholdersEquity", "currency": "USD"} | 2025-12-31 | sec_edgar |
| stockholders_equity | {"amount": 37283779, "concept": "us-gaap:StockholdersEquity", "currency": "USD"} | 2024-12-31 | sec_edgar |
| stockholders_equity | {"amount": 31902645, "concept": "us-gaap:StockholdersEquity", "currency": "USD"} | 2023-12-31 | sec_edgar |
| stockholders_equity | {"amount": 25003739, "concept": "us-gaap:StockholdersEquity", "currency": "USD"} | 2022-12-31 | sec_edgar |
| total_assets | {"amount": 88904053, "concept": "us-gaap:Assets", "currency": "USD"} | 2025-12-31 | sec_edgar |
| total_assets | {"amount": 89360588, "concept": "us-gaap:Assets", "currency": "USD"} | 2024-12-31 | sec_edgar |
| total_assets | {"amount": 72791561, "concept": "us-gaap:Assets", "currency": "USD"} | 2023-12-31 | sec_edgar |
| total_assets | {"amount": 53910727, "concept": "us-gaap:Assets", "currency": "USD"} | 2022-12-31 | sec_edgar |
| total_equity | {"amount": 30639891, "concept": "us-gaap:StockholdersEquityIncludingPortionAttributableToN | 2025-12-31 | sec_edgar |
| total_equity | {"amount": 37438057, "concept": "us-gaap:StockholdersEquityIncludingPortionAttributableToN | 2024-12-31 | sec_edgar |
| total_equity | {"amount": 32086243, "concept": "us-gaap:StockholdersEquityIncludingPortionAttributableToN | 2023-12-31 | sec_edgar |
| total_equity | {"amount": 25559911, "concept": "us-gaap:StockholdersEquityIncludingPortionAttributableToN | 2022-12-31 | sec_edgar |
| total_equity | {"amount": 22392234, "concept": "us-gaap:StockholdersEquityIncludingPortionAttributableToN | 2021-12-31 | sec_edgar |
| total_equity | {"amount": 15385778, "concept": "us-gaap:StockholdersEquityIncludingPortionAttributableToN | 2020-12-31 | sec_edgar |
| total_liabilities | {"amount": 58264162, "concept": "us-gaap:Liabilities", "currency": "USD"} | 2025-12-31 | sec_edgar |
| total_liabilities | {"amount": 51922531, "concept": "us-gaap:Liabilities", "currency": "USD"} | 2024-12-31 | sec_edgar |
| total_liabilities | {"amount": 40705318, "concept": "us-gaap:Liabilities", "currency": "USD"} | 2023-12-31 | sec_edgar |
| total_liabilities | {"amount": 28350816, "concept": "us-gaap:Liabilities", "currency": "USD"} | 2022-12-31 | sec_edgar |
| total_liabilities_and_equity | {"amount": 88904053, "concept": "us-gaap:LiabilitiesAndStockholdersEquity", "currency": "U | 2025-12-31 | sec_edgar |
| total_liabilities_and_equity | {"amount": 89360588, "concept": "us-gaap:LiabilitiesAndStockholdersEquity", "currency": "U | 2024-12-31 | sec_edgar |
| total_liabilities_and_equity | {"amount": 72791561, "concept": "us-gaap:LiabilitiesAndStockholdersEquity", "currency": "U | 2023-12-31 | sec_edgar |
| total_liabilities_and_equity | {"amount": 53910727, "concept": "us-gaap:LiabilitiesAndStockholdersEquity", "currency": "U | 2022-12-31 | sec_edgar |
| xbrl:AccountsPayableAndOtherAccruedLiabilitiesCurrent | {"amount": 2298833, "currency": "USD"} | 2025-12-31 | sec_edgar |
| xbrl:AccountsPayableAndOtherAccruedLiabilitiesCurrent | {"amount": 2220896, "currency": "USD"} | 2024-12-31 | sec_edgar |
| xbrl:AccountsPayableAndOtherAccruedLiabilitiesCurrent | {"amount": 2466501, "currency": "USD"} | 2023-12-31 | sec_edgar |
| xbrl:AccountsPayableAndOtherAccruedLiabilitiesCurrent | {"amount": 2426520, "currency": "USD"} | 2022-12-31 | sec_edgar |
| xbrl:AccountsPayableCurrent | {"amount": 39221439, "currency": "USD"} | 2025-12-31 | sec_edgar |
| xbrl:AccountsPayableCurrent | {"amount": 36347893, "currency": "USD"} | 2024-12-31 | sec_edgar |
| xbrl:AccountsPayableCurrent | {"amount": 23784781, "currency": "USD"} | 2023-12-31 | sec_edgar |
| xbrl:AccountsPayableCurrent | {"amount": 14862676, "currency": "USD"} | 2022-12-31 | sec_edgar |
| xbrl:AccountsReceivableGross | {"amount": 68385857, "currency": "USD"} | 2025-12-31 | sec_edgar |
| xbrl:AccountsReceivableGross | {"amount": 54456082, "currency": "USD"} | 2024-12-31 | sec_edgar |
| xbrl:AccountsReceivableGross | {"amount": 32085912, "currency": "USD"} | 2023-12-31 | sec_edgar |
| xbrl:AccountsReceivableGross | {"amount": 23280417, "currency": "USD"} | 2022-12-31 | sec_edgar |
| xbrl:AccountsReceivableNet | {"amount": 44128933, "currency": "USD"} | 2025-12-31 | sec_edgar |
| xbrl:AccountsReceivableNet | {"amount": 45188231, "currency": "USD"} | 2024-12-31 | sec_edgar |
| xbrl:AccountsReceivableNet | {"amount": 29076549, "currency": "USD"} | 2023-12-31 | sec_edgar |
| xbrl:AccountsReceivableNet | {"amount": 20090775, "currency": "USD"} | 2022-12-31 | sec_edgar |
| xbrl:AccountsReceivableNetCurrent | {"amount": 44128933, "currency": "USD"} | 2025-12-31 | sec_edgar |
| xbrl:AccountsReceivableNetCurrent | {"amount": 45188231, "currency": "USD"} | 2024-12-31 | sec_edgar |
| xbrl:AccountsReceivableNetCurrent | {"amount": 29076549, "currency": "USD"} | 2023-12-31 | sec_edgar |
| xbrl:AccountsReceivableNetCurrent | {"amount": 20090775, "currency": "USD"} | 2022-12-31 | sec_edgar |
| xbrl:AccrualForTaxesOtherThanIncomeTaxesCurrentAndNoncurrent | {"amount": 4106, "currency": "USD"} | 2024-12-31 | sec_edgar |
| xbrl:AccrualForTaxesOtherThanIncomeTaxesCurrentAndNoncurrent | {"amount": 14648, "currency": "USD"} | 2023-12-31 | sec_edgar |
| xbrl:AccrualForTaxesOtherThanIncomeTaxesCurrentAndNoncurrent | {"amount": 52845, "currency": "USD"} | 2022-12-31 | sec_edgar |
| xbrl:AccruedIncomeTaxes | {"amount": 7106291, "currency": "USD"} | 2025-12-31 | sec_edgar |