diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d033604038..ac39d29cf6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,14 +2,14 @@ ##### Global Protection Rule ###### ################################### # NOTE: This rule is overriden by the more specific rules below. This is the catch-all rule for all files not covered by the more specific rules below. -* @hashgraph/developer-advocates +* @hashgraph/envision-blockchain-hedera ############################ ##### Project Files ###### ############################ -*/src/** @hashgraph/developer-advocates @hashgraph/envision-blockchain-hedera -*/tests/** @hashgraph/developer-advocates @hashgraph/envision-blockchain-hedera +*/src/** @hashgraph/guardian-committers @hashgraph/guardian-maintainers +*/tests/** @hashgraph/guardian-committers @hashgraph/guardian-maintainers ######################### @@ -20,12 +20,12 @@ # Protection Rules for Github Configuration Files and Actions Workflows /.github/ @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/release-engineering-managers -/.github/workflows/ @hashgraph/devops-ci @hashgraph/devops-ci-committers +/.github/workflows/ @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/guardian-committers # NodeJS project files -package.json @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/developer-advocates -package-lock.json @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/developer-advocates -jest.config.mjs @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/developer-advocates +package.json @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/developer-advocates @hashgraph/guardian-committers +package-lock.json @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/developer-advocates @hashgraph/guardian-committers +jest.config.mjs @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/developer-advocates @hashgraph/guardian-committers # Codacy Tool Configurations /config/ @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/developer-advocates @@ -38,8 +38,8 @@ jest.config.mjs @hashgraph/devops-ci @hashgraph/ /CODEOWNERS @hashgraph/release-engineering-managers # Protect the repository root files -/README.md @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/release-engineering-managers -**/LICENSE @hashgraph/release-engineering-managers +/README.md @hashgraph/devops-ci @hashgraph/devops-ci-committers @hashgraph/release-engineering-managers @hashgraph/guardian-maintainers +**/LICENSE @hashgraph/release-engineering-managers @hashgraph/guardian-maintainers # CodeCov configuration **/codecov.yml @hashgraph/devops-ci @hashgraph/devops-ci-committers diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 245ec0a42c..505b589b20 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,11 +3,14 @@ updates: - package-ecosystem: "github-actions" directory: "/" schedule: - interval: "daily" + interval: weekly open-pull-requests-limit: 10 + target-branch: "develop" + - package-ecosystem: npm directory: "/" schedule: interval: weekly open-pull-requests-limit: 15 target-branch: "develop" + versioning-strategy: increase-if-necessary diff --git a/.github/workflows/add-documentation-to-repo.yaml b/.github/workflows/add-documentation-to-repo.yaml index 176d9fc069..328dbf4fbb 100644 --- a/.github/workflows/add-documentation-to-repo.yaml +++ b/.github/workflows/add-documentation-to-repo.yaml @@ -13,7 +13,7 @@ jobs: runs-on: guardian-linux-medium strategy: matrix: - node-version: [ 20.x ] + node-version: [ 20.18.1 ] mongodb-version: [ 7.0.5 ] steps: - name: Harden Runner diff --git a/.github/workflows/api-manual.yml b/.github/workflows/api-manual.yml index 04ea48ba3a..7375d70659 100644 --- a/.github/workflows/api-manual.yml +++ b/.github/workflows/api-manual.yml @@ -23,7 +23,7 @@ jobs: - 6379:6379 strategy: matrix: - node-version: [ 20.x ] + node-version: [ 20.18.1 ] mongodb-version: [ 7.0.5 ] steps: - name: Harden Runner diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 623b894730..8b0b53aec5 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -20,7 +20,7 @@ jobs: - 6379:6379 strategy: matrix: - node-version: [ 20.x ] + node-version: [ 20.18.1 ] mongodb-version: [ 7.0.5 ] steps: - name: Harden Runner diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 98c33cddb2..b7dcbf66fc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,7 +11,7 @@ jobs: runs-on: guardian-linux-medium strategy: matrix: - node-version: [ 20.10.0 ] + node-version: [ 20.18.1 ] steps: - name: Harden Runner uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 diff --git a/.gitignore b/.gitignore index 568ca7bf89..0a3354c945 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,5 @@ runtime-data/ .idea logs/ -**/logs/ \ No newline at end of file +**/logs/ +/.run/ diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/ACM0007 Schema Design with Sample Data.xlsx b/Methodology Library/American Carbon Registry/ACR Landfill/ACM0007 Schema Design with Sample Data.xlsx new file mode 100644 index 0000000000..6e4fbf955d Binary files /dev/null and b/Methodology Library/American Carbon Registry/ACR Landfill/ACM0007 Schema Design with Sample Data.xlsx differ diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/ACR Landfill Policy Schemas.xlsx b/Methodology Library/American Carbon Registry/ACR Landfill/ACR Landfill Policy Schemas.xlsx new file mode 100644 index 0000000000..18968e4c31 Binary files /dev/null and b/Methodology Library/American Carbon Registry/ACR Landfill/ACR Landfill Policy Schemas.xlsx differ diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/ACR Landfill Policy.policy b/Methodology Library/American Carbon Registry/ACR Landfill/ACR Landfill Policy.policy new file mode 100644 index 0000000000..d70df34026 Binary files /dev/null and b/Methodology Library/American Carbon Registry/ACR Landfill/ACR Landfill Policy.policy differ diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Emission Reductions Data Sample 1.txt b/Methodology Library/American Carbon Registry/ACR Landfill/Emission Reductions Data Sample 1.txt new file mode 100644 index 0000000000..7dc5b6767a --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Emission Reductions Data Sample 1.txt @@ -0,0 +1,358 @@ +var _pp = { + "G6": 25, + "G7": { + "G6": 676723706.17, + "G7": 0.7, + "G8": 0.7, + "G9": 0.1, + "G10": "Option 3", + "G12": "Yes", + "G69": 0, + "G71": "Yes", + "G13": { + "G6": [ + { + "G5": 2014, + "G7": 1995, + "G8": 2014, + "G9": 0.067, + "G10": 0.038, + "G11": [ + { + "G5": 453590, + "G6": 1995 + }, + { + "G5": 453590, + "G6": 1996 + }, + { + "G5": 453590, + "G6": 1997 + }, + { + "G5": 453590, + "G6": 1998 + }, + { + "G5": 453590, + "G6": 1999 + }, + { + "G5": 453590, + "G6": 2000 + }, + { + "G5": 453590, + "G6": 2001 + }, + { + "G5": 453590, + "G6": 2002 + }, + { + "G5": 453590, + "G6": 2003 + }, + { + "G5": 453590, + "G6": 2004 + }, + { + "G5": 453590, + "G6": 2005 + }, + { + "G5": 453590, + "G6": 2006 + }, + { + "G5": 453590, + "G6": 2007 + }, + { + "G5": 453590, + "G6": 2008 + }, + { + "G5": 453590, + "G6": 2009 + }, + { + "G5": 453590, + "G6": 2010 + }, + { + "G5": 453590, + "G6": 2011 + }, + { + "G5": 453590, + "G6": 2012 + }, + { + "G5": 453590, + "G6": 2013 + }, + { + "G5": 453590, + "G6": 2014 + } + ] + }, + { + "G5": 2015, + "G7": 1995, + "G8": 2015, + "G9": 0.067, + "G10": 0.038, + "G11": [ + { + "G5": 453590, + "G6": 1995 + }, + { + "G5": 453590, + "G6": 1996 + }, + { + "G5": 453590, + "G6": 1997 + }, + { + "G5": 453590, + "G6": 1998 + }, + { + "G5": 453590, + "G6": 1999 + }, + { + "G5": 453590, + "G6": 2000 + }, + { + "G5": 453590, + "G6": 2001 + }, + { + "G5": 453590, + "G6": 2002 + }, + { + "G5": 453590, + "G6": 2003 + }, + { + "G5": 453590, + "G6": 2004 + }, + { + "G5": 453590, + "G6": 2005 + }, + { + "G5": 453590, + "G6": 2006 + }, + { + "G5": 453590, + "G6": 2007 + }, + { + "G5": 453590, + "G6": 2008 + }, + { + "G5": 453590, + "G6": 2009 + }, + { + "G5": 453590, + "G6": 2010 + }, + { + "G5": 453590, + "G6": 2011 + }, + { + "G5": 453590, + "G6": 2012 + }, + { + "G5": 453590, + "G6": 2013 + }, + { + "G5": 453590, + "G6": 2014 + }, + { + "G5": 453590, + "G6": 2015 + } + ] + }, + { + "G5": 2016, + "G7": 1995, + "G8": 2016, + "G9": 0.067, + "G10": 0.038, + "G11": [ + { + "G5": 453590, + "G6": 1995 + }, + { + "G5": 453590, + "G6": 1996 + }, + { + "G5": 453590, + "G6": 1997 + }, + { + "G5": 453590, + "G6": 1998 + }, + { + "G5": 453590, + "G6": 1999 + }, + { + "G5": 453590, + "G6": 2000 + }, + { + "G5": 453590, + "G6": 2001 + }, + { + "G5": 453590, + "G6": 2002 + }, + { + "G5": 453590, + "G6": 2003 + }, + { + "G5": 453590, + "G6": 2004 + }, + { + "G5": 453590, + "G6": 2005 + }, + { + "G5": 453590, + "G6": 2006 + }, + { + "G5": 453590, + "G6": 2007 + }, + { + "G5": 453590, + "G6": 2008 + }, + { + "G5": 453590, + "G6": 2009 + }, + { + "G5": 453590, + "G6": 2010 + }, + { + "G5": 453590, + "G6": 2011 + }, + { + "G5": 453590, + "G6": 2012 + }, + { + "G5": 453590, + "G6": 2013 + }, + { + "G5": 453590, + "G6": 2014 + }, + { + "G5": 453590, + "G6": 2015 + }, + { + "G5": 453590, + "G6": 2016 + } + ] + } + ], + "G17": [ + { + "G5": 2014, + "G7": 1050000000, + "G8": 0.52 + }, + { + "G5": 2015, + "G7": 1080000000, + "G8": 0.52 + }, + { + "G5": 2016, + "G7": 1077999990, + "G8": 0.52 + } + ], + "G26": [ + { + "G5": 2014, + "G10": 25000, + "G12": 100000, + "G14": 135000, + "G16": 140000 + }, + { + "G5": 2015, + "G10": 25000, + "G12": 100000, + "G14": 135000, + "G16": 140000 + }, + { + "G5": 2016, + "G10": 25000, + "G12": 100000, + "G14": 135000, + "G16": 140000 + } + ], + "G50": 5000, + "G51": 110000, + "G52": 145000, + "G53": 140000, + "G56": 2014 + } + }, + "G77": { + "G6": "Yes", + "G13": "Yes", + "G7": [ + { + "G5": "Natural Gas", + "G7": 25000, + "G8": 0.05 + } + ], + "G14": { + "G6": 25000, + "G7": 0.9 + } + }, + "projectId": "923" +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Environmental Assessment Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/Environmental Assessment Data.txt new file mode 100644 index 0000000000..0df1b11868 --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Environmental Assessment Data.txt @@ -0,0 +1,54 @@ +var _pp = { + "G6": "2023-07-01", + "G7": "Prairie Ridge Waste Management Facility", + "G8": "923", + "G9": "The Project Activity is the operation of an active landfill gas collection and flare destruction system at the Prairie Ridge Waste Management Facility, which reduces emissions of methane to the atmosphere.", + "G10": [ + { + "type": "Point", + "coordinates": [ + -95.639, + 41.02214 + ] + } + ], + "G11": "The GHG Project's relevant stakeholders include the following: Iowa Waste Services LLC, the owner and operators of Prairie Ridge Waste Management Facility; Green Controls, the contracted operator; waste haulers that use the site; farmers in the vicinity; and residents living in the vicinity", + "G14": "Neutral", + "G15": "The Project does not change the terrestrial or marine biodiversity and ecosystem.", + "G18": "Neutral", + "G19": "The project has no positive or negative impact", + "G22": "Neutral", + "G23": "The project has no positive or negative impact", + "G26": "Neutral", + "G27": "The project has no positive or negative impact.", + "G30": "Neutral", + "G31": "The Project has no impact on water consumption", + "G35": "Positive", + "G36": "The Project substantially reduces landfill gas emissions to the atmosphere, there by increasing the air qulaity.", + "G39": "Positive", + "G40": "The Project substantially reduces landfill gas emissions to the atmosphere and thereby reduces potential impacts to water that may be in the vicinity of the landfill. The Project has mechanical equipment that generates noise and vibrates but no noise and vibrations are detectable at the property line. ", + "G43": "Neutral", + "G44": "The Project does not generate waste or release hazardous materials, chemical pesticides and fertilizers.", + "G48": "Positive", + "G49": "The Project substantially reduces landfill gas emissions to the atmosphere and thereby reduces potential impacts to the working conditions in terms of safety and improves health working conditions for employees in and around the landfill. ", + "G52": "Neutral", + "G53": "The Project has no positive or negative impact.", + "G56": "Neutral", + "G57": "The Project has no positive or negative impact.", + "G61": "Neutral", + "G62": "The Project has no positive or negative impact.", + "G66": "Neutral", + "G67": "The Project has no positive or negative impact.", + "G70": "Neutral", + "G71": "The Project has no positive or negative impact.", + "G74": "Neutral", + "G75": "The Project is consistent with meeting local stakeholders' views of protecting the environment and recovering resources that would otherwise be wasted", + "G79": "Neutral", + "G80": "Project participants that perform are involved regardless of their particular gender.", + "G83": "Neutral", + "G84": "The project has no positive or negative impact.", + "G87": "Neutral", + "G88": "Project participants are paid competitive living wages based on their individual performance and contribution. ", + "G92": "No" +} +Object.values(__request).forEach(r=>r.preset(_pp)); diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Monitoring Report Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/Monitoring Report Data.txt new file mode 100644 index 0000000000..0b678e6323 --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Monitoring Report Data.txt @@ -0,0 +1,133 @@ +var _pp = { + "G6": "2024-07-15", + "G7": "Alex Carter", + "G8": "Project Developer", + "G9": "Green Controls", + "G10": [ + "555-123-4567" + ], + "G11": "example.email@domain.com", + "G13": "Prairie Ridge Waste Management Facility", + "G14": "923", + "G15": "Green Controls", + "G16": "Green Controls", + "G17": "2021-04-01", + "G18": "2023-09-30", + "G19": "2021-04-01", + "G20": "2021-04-01", + "G21": "2031-03-31", + "G22": "8.0", + "G23": "N/A", + "G24": "Methodology for the Quantification Monitoring, Reporting and Verification of Greenhouse Gas Emissions Reductions and Removals from Landfill Gas Destruction and Beneficial Use Projects, Version 2.0, dated April 2021 and its associated Errata & Clarifications, dated February 20, 2024 ", + "G25": "N/A", + "G27": "The Project Activity is the operation of an active landfill gas collection and flare destruction system at the Loess Hills Regional Sanitary Landfill, which reduces emissions of methane to the atmosphere. Total GHG Emissions Reductions achieved are 228,571 metric tons of CO2-equivalents. ", + "G28": "No", + "G30": "ACR has approved of three deviation requests. The deviation request submitted on October 19, 2023 allowed for the use of the minimum methane concentation measurement during periods in which continuous methane concentration measurements were unavailable. Using the minimum methane concentration measurement when other data is not available was conservative. The deviation request submitted on February 09, 2024 allowed for LoCI to use automated calibration proceedure of the methane sensor. The data collected by the sensor was conservative. The other deviation request submitted on February 11, 2024 allowed for LoCI to use the data from a GEM5000 even though the interval of calibration exceeded the manufacturer's recommendation. Despite the calibration interval exceeding the recommendation, when the device was calibrated, it was found to be accurately reading, therefore data collected was conservative. ", + "G31": "SDG #7 Affordable and Clean Energy, Target 7.a – The Project creates reliable, high-quality gas that is currently destroyed to reduce fugitive emissions. Maintaining a stable LFG resource encourages development of downstream renewable energy. SDG #9 Industry, Innovation, and Infrastructure, Target 9.4 – The Project has been enhanced by the addition of the Green automated monitoring and control system. Green Energy Solutions provides an automated gas control system that is an innovative technology supporting environmental infrastructure for the landfill industry. The system increases the frequency of monitoring gas characteristics and adjusts vacuum control as needed, sometimes hourly, compared to the monthly manual monitoring required by regulations. The system also alerts for irregularities, allowing quick corrections to prevent methane leakage. SDG #11 Sustainable Cities and Communities, Target 11.6 – Communities produce waste; the Project increases the sustainability of waste disposal by enabling greater resource capture for reuse. Collecting this gas improves air quality in surrounding communities and reduces fugitive emissions, which would otherwise escape from the landfill surface. Enhanced gas collection lowers greenhouse gas emissions and other minor constituents, including hazardous air pollutants, and mitigates odor migration. SDG #12 Sustainable Consumption and Production, Targets 12.4 & 12.6 – The Project adopts sustainable consumption and production patterns where feasible. It uses solar rechargeable lithium-powered equipment, with batteries sustainably disposed of at the end of their life cycle. Calibration gas canisters used for equipment calibration are returned to the supplier for reuse once depleted. SDG #13 Climate Action, Target 13.2 – The Project supports sustainable development in the U.S. by increasing landfill gas collection for renewable energy projects. As industry members and partners, Green Energy Solutions and Iowa Environmental Services LLC contribute to the U.S. climate action goals by reducing greenhouse gas emissions and promoting renewable energy initiatives.", + "G33": "Not applicable. ", + "G34": [ + { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + ], + "G37": "Not applicable. ", + "G38": "Not applicable. ", + "G40": "Not applicable. ", + "G41": "Not applicable. ", + "G43": "Not applicable. ", + "G44": "Not applicable. ", + "G46": "Not applicable. ", + "G47": [], + "G51": "Not applicable. ", + "G54": [ + { + "G5": " LFGcaptured ", + "G6": "SCF", + "G7": "4.1 Baseline Emissions ", + "G8": "Landfill gas quantity combusted by the flare", + "G9": "1", + "G10": "Flow meter/data acquisition device ", + "G11": "Continuous (data point measured every 15 minutes or less). " + }, + { + "G5": "Methane content", + "G6": "Percent by volume", + "G7": "Methane content in LFGcaptured ", + "G8": "4.1 Baseline Emissions ", + "G9": "1", + "G10": "Methane meter/data acquisition device ", + "G11": "Continuous (data point measured every 15 minutes or less). " + }, + { + "G5": "Methane content ", + "G6": "Percent by volume ", + "G7": "Methane content in LFGcaptured ", + "G8": "4.1 Baseline Emissions ", + "G9": "1", + "G10": "Methane meter/data acquisition device", + "G11": "Periodic (data point measured at least monthly basis from April 2021 to October 2022, then at least weekly basis from November 2022 through May 2023.) " + }, + { + "G5": "Flare Temperature", + "G6": "Degrees Fahrenheit ", + "G7": "Monitoring of operational activity of destruction device to ensure destruction of landfill gas. ", + "G8": "5.2.4 Destruction Device Operating Hours ", + "G9": "1", + "G10": "Thermocouple/data acquisition device ", + "G11": "Continuous (data point measured every 15 minutes or less). " + }, + { + "G5": "Total grid connected electricity consumption ", + "G6": "Megawatt hours (MWh)", + "G7": "Total grid connected electricity consumption", + "G8": "4.2 Project Emissions", + "G9": "14", + "G10": "Utility records ", + "G11": "Monthly " + }, + { + "G5": "Propane ", + "G6": "Gallons ", + "G7": " Propane consumed to light flare", + "G8": "4.2 Project Emissions ", + "G9": "14", + "G10": "Tank fill receipt from propane supplier and tank pressure mete readings ", + "G11": "Per delivery of propane to Iowa Waste Service LLC. " + } + ], + "G62": "Organization Name: Green Controls, Inc. Contact Person: Jordan Smith, Director of Environmental Attributes Address: 14 Kendrick Road, Suite 2, Wareham, MA 02571 Telephone: (360) 801-0899 Email: jordan.smith@greencontrols.com Role and Responsibilities: Owner and operator of the Project Activity. Responsible for operations, data aggregation, calibrations, and recordkeeping to support methane quantification, utilization, and destruction. Maintains the offset title and gas rights. Organization Name: Iowa Waste Services, LLC, a subsidiary of Waste Connections Contact Person: Taylor Johnson, Central Region Engineer Address: 59722 290th Street, Malvern, IA 51551 Telephone: (405) 435-7788 Email: taylor.johnson@wasteconnections.com Role and Responsibilities: Owner and operator of the landfill and its gas collection and flare destruction system. Initially owned the environmental attributes conveyed to Green Controls. Responsible for monitoring operations, data, and recordkeeping for landfill activities. Provides waste totals, landfill cover type changes, and gas collection area adjustments. GHG Management System Overview Location and Recordkeeping Requirements: Iowa Waste Services maintains all operational records, including methane measurements and landfill volumetrics, in Excel format at both on-site and corporate offices. Relevant records are shared monthly with Green Controls. From June 1, 2023, Green Controls transitioned to telemetering all data to secure cloud storage. Data is also stored at their headquarters and managed by the Project Manager. Methods for Accurate and Transparent Data Generation Flow Measurements: Instrument: Thermal Mass Flow Meter, Model TIC-9500PI (Serial: 202161). Accuracy: ±0.5% full scale. Certified to meet relevant international standards. Methane Measurements: April 1, 2021 – May 31, 2023: Portable Gas Analyzer GEM5000 (Serial: G500324). June 1, 2023 – September 30, 2023: Green Controls Methane Analyzer Model-H (Serial: EM7082). Data Transfer and Quality Control Procedures Data Transfer Methods: April 1, 2021 – May 31, 2023: Data transferred manually via Excel. June 1, 2023 – September 30, 2023: Automated telemetry to Green Controls' cloud and local storage. Quality Control: Weekly audits via DataWatcher® Platform ensure data integrity, flagging anomalies for review. Monthly integrity checks are performed per applicable methodology to validate calculations and address data discrepancies.", + "G65": "228,638 metric tons CO2e ", + "G66": "66 metric tons CO2e ", + "G67": "Not Applicable", + "G68": "228,571 metric tons CO2e ", + "G69": "Not Applicable ", + "G70": "Not Applicable ", + "G71": "Provided below", + "G72": [ + { + "G5": 2021, + "G6": 63180 + }, + { + "G5": 2022, + "G6": 83971 + }, + { + "G5": 2023, + "G6": 81421 + } + ], + "G80": "No", + "G83": "None", + "G85": "The Project underwent its first full verification including a field audit on 11/16/2023. Eco-farm verified the Project on 2/29/2024 for the associated Reporting Period of 04/01/2021 - 09/30/2023. The Validation/Verification Body for this Reporting Period is Eco-Farm Innivations. The Validation/Verification Body has not performed a verification for the Project prior to this Reporting Period. ", + "G88": "Yes", + "G95": "Alex Carter", + "G96": "Project Developer", + "G97": "Green Controls", + "G98": "Project Developer" +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Project Developer Account Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/Project Developer Account Data.txt new file mode 100644 index 0000000000..0c481fc908 --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Project Developer Account Data.txt @@ -0,0 +1,29 @@ +var _pp = { + "G6": "Project Developer", + "G7": "Yes", + "G8": "No", + "G10": [ + "Green Controls" + ], + "G11": "Malvern, IA", + "G12": "N/A", + "G13": "Malvern", + "G14": "US", + "G15": "Iowa", + "G16": "51551", + "G17": "555-123-4567", + "G18": "N/A", + "G19": "example.email@domain.com", + "G20": "https://example.com", + "G22": "Project Developer", + "G23": "Alex Carter", + "G24": "Malvern, IA", + "G25": "N/A", + "G26": "Malvern", + "G27": "US", + "G28": "Iowa", + "G29": "51551", + "G30": "555-123-4567", + "G31": "example.email@domain.com" +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Project Listing Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/Project Listing Data.txt new file mode 100644 index 0000000000..06b414ed75 --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Project Listing Data.txt @@ -0,0 +1,40 @@ +var _pp = { + "G6": "2023-09-26", + "G7": "Prairie Ridge Waste Management Facility", + "G8": "923", + "G9": "The Project reduces methane emissions as a result of combustion in a flare of non-regulated landfill gas collected from the landfill.", + "G10": [ + { + "type": "Point", + "coordinates": [ + -95.5867, + 41.0111 + ] + } + ], + "G11": "8.0", + "G12": "Landfill Gas Destruction and Beneficial Use Projects, 2.0", + "G13": "04/01/2021", + "G14": "The Landfill owner/operator installed a new gas collection and flare destruction system that became operational on April 1, 2021. The Landfill owner/operator is continuing to expand the landfill gas collection system into new areas of waste.", + "G15": "03/12/2024", + "G16": "See Methodology Deviation Request Determination", + "G17": "04/01/2021-03/31/2031", + "G18": "04/01/2021-09/30/2023", + "G19": "No", + "G21": "No", + "G22": "No", + "G23": "N/A", + "G24": "No", + "G25": "Prairie Ridge Waste Management Facility, the landfill gas collection and flare system, and the gas rights are owned and operated by Waste Connections. Waste Connections has conveyed the emission reduction rights to Green Controls.", + "G26": "Yes", + "G27": "Yes", + "G28": "Yes", + "G30": "Green Controls", + "G31": "N/A", + "G32": "Unified Resource Solutions, Inc.", + "G33": "N/A", + "G37": "Jordan Matthews", + "G38": "CEO", + "G39": "Green Controls" +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Project Plan Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/Project Plan Data.txt new file mode 100644 index 0000000000..f13ccef88e --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Project Plan Data.txt @@ -0,0 +1,126 @@ +var _pp = { + "G5": "Green Controls", + "G7": "Prairie Ridge Waste Management Facility", + "G8": "Landfill Methane ", + "G9": "The Project reduces methane emissions as a result of combustion, in a flare, of non-regulated landfill gas collected from the Prairie Ridge Waste Management Facility. The Project was enhanced by the addition of the Green Controls automated collection system.", + "G10": "The facility has been used for solid waste disposal since 1973. It had approximately 4 million tons of waste in place as of April 1, 2021, disposed of over approximately 68 acres of permitted lined landfill footprint. Prior to April 1, 2021, the facility had no collection or destruction of landfill gas. Landfill gas generated from 1973 through April 1, 2021, was emitted to the atmosphere. Description of how the project will achieve GHG reductions and/or removal enhancements: The Project achieves greenhouse gas emissions reductions through the initial installation and continued expansion of a landfill gas collection system into areas of waste disposed of in the facility, the active collection of landfill gas through the system, and the destruction of landfill gas by combustion in a flare. Prairie Ridge Waste Management commenced operation of the initial landfill gas collection (LFGCS) and flare destruction system on April 1, 2021. Prairie Ridge Waste Management expanded and will continue to expand the LFGCS into new waste areas. As of June 2023, Green Controls added automated measurement and control to the LFGCS to increase the efficiency of collection and provide consistently high-quality gas. The facility and the methane it generates would exist with or without the Project. Carbon dioxide and methane emissions not collected by the landfill gas collection system are considered biogenic and would occur in the absence of the Project. Although the Project was implemented to collect GHG emissions generated by the facility for subsequent reduction, removal, or destruction through the flare, the Project itself indirectly generates a small quantity of greenhouse gas emissions through the electricity used to operate the flare and blower station.", + "G11": "The Project activity or the Project is the installation of a landfill gas collection and flare destruction system. The Project complies with the requirements of the American Carbon Registry (“ACR”) Standard, Version 8.0, dated July 2023, and the Methodology for the Quantification, Monitoring, Reporting, and Verification of Greenhouse Gas Emissions Reductions and Removals from Landfill Gas Destruction and Beneficial Use Projects, Version 2.0, dated April 2021, and its associated Errata & Clarifications, dated February 20, 2024 (the Methodology). In accordance with the Project Eligibility Requirements of the American Carbon Registry Standard, the Project Proponent, Green Controls, Inc. (herein “Green Controls”), finds the following: Start Date: The project start date is April 1, 2021, which is the date that the Project became operational. The start date eligibility criteria were met as the Project was validated within 6 months from the ACR Methodology Deviation Request Approval Date of September 12, 2023. This Project is not transferring to ACR from another GHG program. Minimum Project Term: The Project type, with no risk of reversal after crediting, has no required Minimum Project Term, consistent with this Project. Credit Period: The crediting period shall be 10 years, consistent with the application of the Methodology, from April 1, 2021, through March 31, 2031. Real: The Project activity will yield quantifiable and verifiable GHG emissions reductions conducted in accordance with the Methodology for the Quantification, Monitoring, Reporting, and Verification of Greenhouse Gas Emissions Reductions and Removals from Landfill Gas Destruction and Beneficial Use Projects, Version 2.0, dated April 2021. Green Controls shall claim GHG emissions reductions after they have occurred. No claim for future GHG emission reductions shall be made. Emission or Removal Origin: Green Controls shall own and have control over the GHG sources from which the emission reduction originates. The Project Proponent documents that no other entity may claim or make ownership claims to GHG emissions reductions or removals from the Project Activity. Offset Title: Green Controls owns the title to all GHG emissions reductions attributed to the Project Activity. Additional: The installation of the GCCS is additional based on the 3-Prong Additionality Test, and the installation of the ACS is additional based on the ACR-approved performance standard and the regulatory surplus test. Permanent: The GHG emissions reductions from the Project Activity shall be permanent because the collected methane will be destroyed through flare or utilized by the renewable natural gas plant. No risk of reversal is possible. Net of Leakage: No leakage is identified in the Methodology for the Quantification, Monitoring, Reporting, and Verification of Greenhouse Gas Emissions Reductions and Removals from Landfill Gas Destruction and Beneficial Use Projects", + "G12": [ + { + "type": "Point", + "coordinates": [ + -95.6442, + 41.02845 + ] + } + ], + "G13": "By federal law, the U.S. Environmental Protection Agency governs the requirements of the Prairie Ridge Waste Management Facility in accordance with 40 CFR 62 Subpart OOO when applicable, which became effective June 21, 2021. EPA 40 CFR 62, Subpart OOO did not require the operation of a landfill gas collection and control system at Prairie Ridge Waste Management Facility until March 18, 2024. By State law, the Iowa Department of Natural Resources governs the requirements of Prairie Ridge Waste Management Facility in accordance with Iowa Administrative Rules Chapter 567-113: Sanitary Landfills for Municipal Solid Waste, which regulations do not require landfill gas collection and control systems at the Facility. Administrative reporting to the EPA and Department of Natural Resources satisfied the compliance obligations of the Facility. The Green Controls system shares all data and insights to increase GHG capture and limit emissions beyond what would be achieved by minimum regulatory requirements. Green Controls shall comply with all applicable regulatory requirements for the Project Activity.", + "G14": "Organization Name Green Controls, Inc. Contact person Alex Carter, Director of Environmental Attributes Address 25 Woodland Drive, Suite 4 Newton, MA 02458 Telephone (321) 555-0198 Email taylor.rivers@greencontrols.com Role and Responsibilities Owner and operator of the Project Activity. Responsible for operations of Project Activity and aggregation of all data, calibrations, and records to support methane quantities and utilization and destruction. Maintains the offset title and gas rights. Organization Name Prairie Ridge Waste Management LLC Subsidiary of Environmental Solutions Group Contact person Jordan Blake, Regional Operations Engineer Address 59812 285th Street Malvern, IA 51551 Telephone (515) 555-0477 Email jordan.blake@envirogroup.com Role and Responsibilities Owner and operator of the Landfill and the landfill gas collection and flare destruction system and original owner of the environmental attributes that were conveyed to Green Controls. Responsible for operations and monitoring, data, and records management for the Landfill. Provides landfilled waste totals and changes to landfill cover type and gas collection areas. Also responsible for operations and monitoring, data, and records management for landfill gas collection and flare destruction system.", + "G15": "N/A", + "G17": "ACR approved Methodology for the Quantification Monitoring, Reporting and Verification of Greenhouse Gas Emissions Reductions and Removals from Landfill Gas Destruction and Beneficial Use Projects, Version 2.0, dated April 2021 including the Errata & Clarification to the Methodology dated February 20, 2024 (the Methodology). ", + "G18": "The Methodology includes the following four applicability conditions: 1. the project must reduce methane emissions through one of the allowed project activities, 2. the project is in the United States, 3. the project is not located at a bioreactor landfill per the EPA’s definition1 ; and 4. the project is not required by any regulatory agency. According to the Methodology, projects that reduce methane emissions because of the combustion or beneficial use of landfill gas in any of the following activities are considered a “project activity” under the Methodology: 1. The destruction of landfill gas in an open or enclosed flare; 2. The conversion of landfill gas in a turbine, boiler or generator to energy; 3. The enhancement of landfill gas for injection into a natural gas pipeline; and 4. The enhancement of landfill gas for use in fleet vehicles, trucks and cars. 5. The installation of an automated collection system that increases landfill gas collection efficiency above that obtained with standard collection methods with methane destruction, conversion, or enhancement occurring in any of the above “project activities”. To qualify as an automated collection system that increases landfill gas collection efficiency, the system must deploy automated control and measurement devices which result in an incremental increase in the aggregate methane volume that is captured, and which is shown to be attributable to the automated collection system as determined by Equations 2-16 set forth below. An automated collection system must include equipment installed on individual collection wells as part of the gas collection system that can measure, at minimum, O2, CH4, and CO2 concentrations in the landfill gas being collected, pressure applied to the wellhead, and include an actuated valve where the valve can be operated remotely with automation. The Project Activity complies with Item #1 and Item #5 above in accordance with the Methodology as the validated project activity consists of a gas collection and control system (GCCS) to a flare, supported by an advanced GCCS. The Project Activity reduces methane emissions, is in the United States, is not located at a bioreactor landfill per EPA’s definition and is not required by any regulatory agency. Therefore, all applicability requirements of the Methodology are met. ", + "G19": "The geographic boundary for the Project Activity is the Prairie Ridge Waste Management Facility, located at 59812 285th Street, Town of Malvern, Mills County, Iowa. The Landfill and its gas collection and flare destruction system are situated on 170 acres and are owned and operated by Prairie Ridge Waste Management LLC, a wholly owned subsidiary of Environmental Solutions Group. The GPS coordinates for the site are Latitude: 41.026N and Longitude: 95.632W.", + "G20": "The Project activity involves various emissions sources and processes related to landfill gas (LFG). Waste Generation & Collection involves emissions from the generation and hauling of waste to the landfill, with CO2, CH4, and N2O excluded from the emissions calculation as these emissions should be equivalent in both the Project Activity and baseline scenarios. Waste Decomposition refers to emissions from the decomposition of waste at the landfill, where CO2 and N2O are excluded, but CH4 is included as it is the primary greenhouse gas (GHG) affected by the Project Activity. Gas Collection & Control accounts for emissions from the energy consumed to collect and process LFG. In this case, CO2 is included as emissions from grid-based electricity used to collect the landfill gas through blowers, while CH4 and N2O are excluded. Supplemental Fuel is used in the combustion of fossil fuels to supplement the destruction or use of LFG. CO2 and CH4 emissions from propane used to light the flare are included, though emissions are assumed to be de minimis, while N2O is excluded. Landfill Gas Combustion is the combustion of LFG in an eligible destruction device, where CO2 and N2O are excluded, but CH4 is included, with emissions resulting from incomplete combustion assumed to be de minimis. Pipeline Injection refers to enhancing LFG to be injected into a natural gas pipeline, but this is not applicable to the Project Activity, so all GHGs (CO2, CH4, and N2O) are excluded. Similarly, CNG/LNG Upgrade involves enhancing LFG to be used in fleet vehicles, trucks, or cars, which is also not applicable to the Project Activity, and all GHGs are excluded.", + "G21": "The Methodology requires that the Baseline Scenario shall be consistent with the pre-Project Activity prior to the Start Date. The Baseline Scenario is the Landfill and the generation of landfill gas that was not collected, controlled by flare destruction prior to the Start Date of April 1, 2021. Specifically, prior to April 1, 2021, all landfill gas generated and not oxidized through landfill cover was emitted to the atmosphere uncontrolled as fugitive emissions. Therefore, the Baseline Scenario is all landfill gas generated and not oxidized through landfill cover is emitted to the atmosphere uncontrolled as fugitive emissions.", + "G22": "The project scenario includes the operation of the ACS and the active LFGCS to collect and destroy methane. ", + "G23": "The Project Activity reduces GHG emissions by collecting, utilizing beneficially and otherwise destroying the landfill gas captured in the existing flare. The GHG emissions reductions are calculated in accordance with Methodology Equations under Section 4 – Quantification of GHG Emission Reductions including: 1. The Baseline emissions are calculated using Methodology Equations under Section 4.1 – Baseline Emissions Equations 1, 11 and 12; 2. Project Emissions are calculated using Methodology Equations under Section 4.2 – Project Emissions Equations 13, 14, and 15; and 3. Emission Reductions are calculated using Methodology Equations under Section 4.4 – Emission Reductions Equation 16.", + "G24": "GHG reductions of incremental collection and combustion of methane through the Project Activity are not reversible once they occur. Combustion converts methane to carbon dioxide and is emitted through flares to the atmosphere. ", + "G26": "The baseline is all landfill gas generated and not oxidized through landfill cover is emitted to the atmosphere uncontrolled as fugitive emissions. ", + "G27": "The Methodology provides a practice-based performance standard through the installation and operation of an ACS, which is not common industry practice. Additionally, the Project involves installation and operation of a landfill gas collection and flare destruction which meets the threepronged additionality test as the Project Activity demonstrates regulatory additionality, is not common practice, and overcomes financial barriers to be implemented. ", + "G28": "The installation and operation of the ACS is additional to regulatory requirements imposed on the Landfill for the entire Credit Period. Implementation of landfill gas collection and destruction system is additional to regulatory requirements imposed on the Landfill through March 17, 2024, as the Landfill was not required to install and operate a landfill gas collection and destruction system until such date. As documented in the SCS Engineers letter to US EPA Region 7, the Loess Hills Regional Landfill is subject to the U.S. Environmental Protection Agency’s (EPA’s) Federal Plan Requirements 40 CFR 62 Subpart OOO (FPR Subpart OOO) which requires the installation and operation of a landfill gas collection and control system within 30-months from September 17, 2021, the date of the SCS Engineers letter to US EPA Region 7. Specifically, FPR Subpart OOO required Iowa Waste Services, LLC to submit an Initial Design Capacity Report and a NMOC report to the US EPA Region 7 by September 20, 2021, to determine the applicability of the Landfill under the regulations. On behalf of Iowa Waste Services, LLC, SCS Engineers submitted this information to EPA on September 17, 2021. The NMOC report conducted using Tier 2 methodology triggered the Landfill being subject to the meeting the requirements of FPR Subpart OOO 30 months after the September 17, 2021, letter submittal. Additionally, under FPR Subpart OOO, the Landfill is subject to the National Emissions Standards for Hazardous Air Pollutants (NESHAP) Municipal Solid Waste Landfills (40 CFR 63, Subpart AAAA), requiring the Landfill to install and operate a gas collection and control system in active areas of the Landfill in which solid waste has been in place for 5 or more years. Furthermore, the Project goes beyond applicable state regulations (Iowa Administrative Rules Chapter 567-112: Sanitary Landfills for Municipal Solid Waste) by installing and operating the Project voluntarily prior to the March 17, 2024 regulatory requirement date. Review of the USEPA and Iowa database does not show any notice of violations of regulatory and permit requirements. Neither the state of Iowa’s Department of Natural Resources nor the EPA ECHO Database indicate significant noncompliance issues. For all the above reasons, the deployment of the Project Activity is considered additional or surplus to regulatory requirements and therefore creates emission reductions achieved in excess of regulatory requirements. ", + "G29": "The common practice test requires the Applicant to demonstrate if there is widespread deployment of this project type, technology, or practice within the relevant geographic area. A result of “No” passes the common practice test. The Loess Hills Sanitary Landfill has been open and operating since 1973 and did not start operating a landfill gas collection and flare destruction system until 48 years later during 2021. The landfill gas collection and destruction system were installed and operated after all that time. Therefore, even within the life of the landfill thus far the Project is not common. The database from the EPA Landfill Methane Outreach Program (LMOP) lists forty-seven (47) landfills located within Iowa, 40 of which are operational. Of the 47 landfills, seven landfills other than Loess Hills Sanitary Landfill have gas collection and flare destruction operating. Of the seven landfills with LFG collection and flares, five of the landfills appear to be large enough to be required by NSPS to have gas collection and control. Therefore, most landfills in Iowa do not have gas collection and control and emit generated landfill gas that is not oxidized through the landfill covers to the atmosphere as fugitive emissions. For all the above reasons, the deployment of the Project Activity is considered to not be common practice with the relevant geographic area, and therefore the Project passes the common practice test. ", + "G30": "The implementation barrier test required by the Project meets the financial test, which requires the applicant to determine if the GHG Project faces capital constraints that carbon revenues could address; or if carbon funding is reasonably expected to incentivize the Project’s implementation; or if carbon revenues are a key element to maintaining the project action’s ongoing economic viability after its implementation. The result of “Yes” passes the financial implementation barrier test. The Project passes the financial implementation barrier because carbon funding incentivized the project’s implementation, and carbon revenues are a key element to maintaining the project’s ongoing economic viability. The Project has not generated any revenues required to fund or otherwise offset the initial investment or to maintain and continue improving the system over time. Prairie Ridge Waste Management Facility identified to Green Controls their capital constraints to fund expansion of the landfill gas collection system, continued operation of the landfill gas collection and flare destruction system, and adding an automated monitoring and control system. Green Controls agreed to fully fund the installation and operation of the automated monitoring and control system as well as provide compensation to Prairie Ridge Waste Management Facility for ongoing operations and system expansion based on creation and sales of carbon credits. Prairie Ridge Waste Management Facility conveyed the carbon credits title and ownership to Green Controls for Green Controls to create the funds from the creation and sale of carbon credits to incentivize the Project’s continued implementation and operations. The Project to date has cost approximately $3.4 million in capital and $100,000 per year in operating costs. The costs of the Green Controls automated monitoring and control system have not been included in the above Project costs. Green Controls has fully funded the automated monitoring and control system to enhance the performance of the Project by creating reliable, high-quality gas. No revenues have been obtained from the Project to fund or offset the capital and operating costs. The creation and sale of carbon credits from this Project will offset some portion of the capital cost. If the $3.4 million is viewed as a sunk cost without investment recovery, the creation and sale of carbon credits will fund the expansion and operations of the landfill gas collection system and Green Controls automated monitoring and control system. Without the carbon credits, the Green Controls automated monitoring and control system’s capital and operating costs alone would not be economically feasible. Therefore, monetization of carbon credits overcomes the financial constraints necessary to fund the continued Project. For all the above reasons, the deployment of the Project Activity is considered to overcome the financial implementation barrier, and therefore the Project passes the financial implementation barrier test.", + "G31": [ + { + "G5": "LFGcaptured", + "G6": "SCF", + "G7": "Landfill gas quantity combusted by the flare. ", + "G8": "Flow meter/data acquisition device", + "G9": "Thermal Instrument Company Thermal Mass Flow Probe. Model Number: 62-9/9500PI, Serial Number: 202161. The above instrument is a thermal mass flow meter that is inserted directly into the flow stream to measure the flow rate at standard conditions as determined by factory calibration. The instrument measures velocity of landfill gas in the duct by correlating heat loss of a heated inserted probe to velocity of gas. The flow is calculated using the velocity and cross-sectional area of the duct and is corrected to standard conditions using measured temperature of landfill gas at the insertion probe. ", + "G10": "+/- 1% instrument readout accuracy per manufacturer specification. ", + "G11": "Continuous (data point measured every 15 minutes or less). ", + "G12": "Flow data is recorded in standard cubic feet per minute (scfm) and standard cubic feet (scf) totals over 15 minute, daily and monthly periods in data acquisition system. Flow data is reported at the temperature of 60o and F and 1 atmosphere or pressure and is corrected to standard conditions of temperature (68ºF) and pressure (14.7psi). The 15- minute flow data is aggregated to obtain daily and monthly flow quantity totals", + "G13": "From the Start Date, factory calibrations are conducted once every year in accordance with manufacturer recommendations. The thermal mass flow meter removed from service shall be returned to factory for calibration in accordance with or more frequently than manufacturer recommendations. The site coordinates for an annual factory calibration and has a replacement installed while obtaining factory calibration. For Thermal Instrument Model Number: 62-9/9500PI, Serial Number: 202161 the factory calibrations include Calibration certifications dated June 23, 2020, December 2, 2021, December 16, 2022. Temporary meter calibrations including Meter Serial # L14028 dated November 15, 2021, Meter Serial # L14105 dated November 22, 2022 ", + "G14": "Thermal Instrument Flow meter was used to measure landfill gas flow rates April 1, 2021, the Start Date, through September 30, 2023 and continues through the present. " + }, + { + "G5": "Methane Content", + "G6": "Percent by volume", + "G7": "Methane content in the LFGcaptured. ", + "G8": "Methane meter/data acquisition device", + "G9": "Green Controls Model - Centry-H, Serial Number: EM7082. Non-dispersive infrared optical analyzer", + "G10": "+/- 0.5% (vol) instrument accuracy per manufacturer specification", + "G11": "Continuous (data point measured every 15 minutes or less)", + "G12": "Methane content is recorded in percent methane volume basis in Green watcher 2.0 Platform data acquisition system. Data is aggregated from every 15 minute to hourly, daily and monthly periods.", + "G13": "Field Confirmation. Perform field confirmation of methane analyzer once per month or more frequently. Field confirmation is performed using a calibration gas to confirm accuracy of measurement. Field calibration is automatic using calibration gases. No instrument return to manufacturer for factory calibration is required.", + "G14": "Green Controls Model - Centry-H, Serial Number: EM7082 continuously measured methane content in the total landfill gas methane content starting June 1, 2023 through September 30, 2023 and continues through the present. " + }, + { + "G5": "Methane Content", + "G6": "Percent by volume", + "G7": "Methane content in the LFGcaptured. ", + "G8": "Flow meter/data acquisition device", + "G9": "QED Landtec Gas Analyzer, Model GEM5000, Serial Number G500324, a handheld instrument that measures methane content manually on a periodic basis. Dual wavelength infrared cell with reference channel.", + "G10": "+/- 0.5% (vol) instrument accuracy per manufacturer specification", + "G11": "Periodic (data point measured at least monthly basis from April 2021 to October 2022, then at least weekly basis from November 2022 through May 2023.)", + "G12": "Methane content is recorded in percent methane volume basis in Microsoft Excel Spreadsheet. Data is aggregated from data point to weekly and monthly periods.", + "G13": "Field Confirmation. Perform field confirmation of methane analyzer prior to each periodic measurement. Field confirmation is performed using a calibration gas to confirm accuracy of measurement. From the Start Date, factory calibrations are conducted once every year in accordance with manufacturer recommendations. The Landtec GEM5000 is returned to factory for calibration in accordance with or more frequently than manufacturer recommendations. The site coordinates for an annual factory calibration and has a replacement for use while obtaining factory calibration. Landtec Model GEM5000, Serial Number G500324, the factory calibrations include Calibration certifications dated November 5, 2020, January 6, 2022, and January 26, 2023.", + "G14": "The Landtec GEM5000 was used to measure methane content in the total landfill gas flow from April 1, 2021, the Start Date, through May 31 2023. The use of the methane data in calculations for methane emissions reductions was determined and approved by ACR in the ACR Methodology Deviation Request." + }, + { + "G5": "Flare Temperature", + "G6": "Degrees Fahrenheit", + "G7": "Monitoring of operational activity of destruction device to ensure destruction of landfill gas. ", + "G8": "Thermocouple/data acquisition device", + "G9": "Thermocouple measures flame temperature.", + "G10": "+/- 0.5% (vol) instrument accuracy per manufacturer specification", + "G11": "Continuous (data point measured every 15 minutes or less)", + "G12": "Temperature is recorded in data acquisition system. ", + "G13": "Thermocouple is inspected annually. ", + "G14": "The parameter identifies both hours of flare operation and whether the flame is at a temperature that ensures gas destruction. No emission reductions are claimed for thermocouple readings less than 500 degrees F while the flare is operating. Additionally, the flare has an automatic shutoff valve that shuts flow to the flare if the flame temperature is less than 500 degrees F. " + }, + { + "G5": "Electricity Consumption", + "G6": "Megawatt-hours (MWhr)", + "G7": "Electricity consumed by Project", + "G8": "Utility data - Mid-American Energy", + "G9": "Electricity meter", + "G10": "<0.5%", + "G11": "Real time", + "G12": "Electricity is measured by Utility and reported to Iowa Waste Services, LLC", + "G13": "Utility inspection, periodic calibration, and certification ", + "G14": "N/A" + }, + { + "G5": "Propane", + "G6": "Gallons", + "G7": "Propane consumed to light the flare ", + "G8": "Propane supplier", + "G9": "Propane supplier meter", + "G10": "<1%", + "G11": "Per delivery of propane to Iowa Waste Services LLC", + "G12": "Temperature is recorded in data acquisition system. ", + "G13": "By Propane Supplier", + "G14": "N/A" + } + ], + "G43": "The GHG quantification methodology and calculation for determining the quantity of methane destroyed by the Project is conducted in accordance with the Methodology Section 4.1 Baseline Emissions Equations 1 and 11.", + "G44": "N/A", + "G45": "All potential emissions include the use of grid electricity and fossil fuel use.", + "G46": "None ", + "G47": "The accuracy and precision of measurement equipment including the flow meter and methane analyzer are defined and the uncertainties associated with measurements from these instruments are low. Continuous (at least every 15-minute) measurements of gas flow rate and methane concentration provide reliable and accurate data to determine the total actual emission reductions in each period. Periodic measurement confirmations and calibrations maintain the accuracy of these continuous instruments. During periods when weekly readings of methane data are relied upon for use in emission reduction calculations, a discount factor of 10% is applied to account for uncertainty and variation in the methane concentration between weekly readings (see Equation 1). ACR approved a deviation for methane concentration where continuous methane concentration was not available for the period of April 1, 2021 through May 31st, 2023, based on results of a statistical analysis and has determined a fixed minimum concentration measurement be used for the period. ", + "G48": "Reference Appendix A, Data Collection and Management Responsibilities. ", + "G49": "The GHG quantification methodology and calculation for determining the GHG reductions because of the Project Activity is conducted in accordance with the Methodology Section 4.4, Emissions Reductions. Emissions Reductions as shown below for the Loess Hills Landfill for the first reporting period April 1, 2021, through September 30, 2023, which are also detailed in the first Monitoring Report submitted to ACR contemporaneously. ", + "G50": "Total of 542883 metric tons of CO2e", + "G51": "From April 1, 2021 through September 30, 2023, the quantity of GHG emissions reductions are actual based on measured methane quantities and calculations using ACR Methodology. From October 1, 2023 through March 17, 2024, estimates are based upon proportioning actual 2023 data. From March 18th, 2024 through March 31, 2031, are based in assumption of non-regulated methane capture in early action, before regulated gas capture cells. ", + "G53": "Reference Environmental and Social Impact VC.", + "G54": "The Project Activity supports several important United Nations Sustainable Development Goals (SDGs), including: SDG #7 Affordable and Clean Energy, Target 7.a – The Project creates reliable, high-quality gas that is currently destroyed to reduce fugitive emissions. Maintaining a stable LFG resource encourages development of downstream renewable energy. SDG #9 Industry, Innovation and Infrastructure, Target 9.4 – The Project has been enhanced by the addition of the Green Controls automated monitoring and control system. Green Controls provides an automated gas control system that is an innovative technology supporting environmental infrastructure for the landfill industry. The automated gas control system improves existing infrastructure by increasing the data frequency of monitoring gas characteristics and adjusting control of vacuum as needed, sometimes hourly, where the regulated monitoring is performed manually only once per month. The system also alerts for irregularities, so that deficiencies are identified and corrected quickly, preventing methane leakage. SDG #11 Sustainable Cities and Communities, Target 11.6 – Communities generate waste. The Project increases the sustainability of waste disposal by allowing increased resource capture for reuse. The extra gas collected would otherwise be emitted into the air; collecting this gas directly improves air quality for the surrounding community. A higher collection efficiency obtained through the Project Activity would reduce landfill gas emissions that would otherwise be released through fugitive release from the landfill surface into the surrounding environment. Increased collection of landfill gas reduces greenhouse gas emissions and emissions of other minor constituents, including hazardous air pollutants, and reduces the potential for odor migration. SDG #12 Sustainable Consumption and Production, Target 12.4 & 12.6 – The Project implements sustainable consumption and production patterns where feasible. The Project uses equipment powered by solar rechargeable lithium batteries. These batteries are sustainably disposed of at the end of their usable life. The Project also uses calibration gas to calibrate measurement equipment. These calibration gas canisters are returned to the supplier to be reused once depleted. SDG #13 Climate Action, Target 13.2 – The Project Activity supports sustainable development in the United States by collecting additional LFG to be used in a renewable energy project. As industry members and partners, Green Controls and Prairie Ridge Waste Management Facility support the United States Environmental Protection Agency Landfill Methane Outreach Program (LMOP), which is a voluntary program that works cooperatively with industry stakeholders and waste officials to reduce or avoid methane emissions from landfills. LMOP encourages the recovery and beneficial use of biogas generated from organic municipal solid waste. The Landfill and project components are listed on LMOP, and the participants report the performance of the Project annually. The Project helps LMOP achieve its stated goals to reduce greenhouse gas emissions, reduce air pollution by offsetting the use of non-renewable resources, create health and safety benefits, and benefit the community and economy. SDG #3 Health and Wellbeing, Target 3.9 – The Project Activity supports improved air quality by reducing harmful air emissions from the Landfill, which include trace volatile non-methane organic compounds that can have negative health implications. SDG #8 Economic Growth, Target 8.4 – The Project is operated by full-time employees of the company, which practices inclusive hiring practices, with annual diversity goals.", + "G55": "The Project is not community-based, and no public comments were received. Green Controls has consulted with Prairie Ridge Waste Management Facility and ESI, both of which are supportive of the collection of LFG from the Loess Hills Landfill, the reduction in GHG gases and other constituents, and the future production of renewable natural gas. Green Controls will provide periodic performance updates to the stakeholders. Additionally, Green Controls supports Prairie Ridge Waste Management Facility and ESI in communications to stakeholders outside of the Project area, as needed. The Project substantially reduces landfill gas emissions to the atmosphere, thereby reducing potential impacts that may be felt in the vicinity of the landfill.", + "G57": "Prairie Ridge Waste Management Facility owns the Loess Hills Landfill and the landfill gas collection and flare destruction system. Prairie Ridge Waste Management Facility retained the title and ownership of gas rights for the methane gas produced by the landfill. Prairie Ridge Waste Management Facility then deeded those rights to Green Controls in the Voluntary Carbon Credit Compensation Agreement dated March 7, 2023, the Mutual Benefit Agreement dated March 7, 2023, and an amendment to the start date of the rights deeded, signed October 2, 2023.", + "G58": "Offsets for this crediting period have not been bought or sold previously. If Green Controls enters into a forward contract for this Project Activity, documentation to establish chain of custody will be created. Examples of appropriate documents may include: Delivery of Confirmation Notice; Emission Reduction Purchase Agreement; Signed Attestation of Ownership; and/or", + "G59": "Green Controls and any other party have not applied for GHG emission reduction or removal credits for this project through any other GHG emissions trading system or program.", + "G61": "2021-04-01", + "G62": "The timeline for the Project Activity includes: Initiation of project activities: April 1, 2021 Project term: Not applicable Crediting period: 10 Years Frequency of monitoring, reporting, and verification: Quarterly, Semi-annual, or annually Relevant project activities in each step of the GHG project cycle include: Expansion of the Loess Hills Landfill and its associated gas collection and destruction system. Expansion of the Green Controls automated collection system as the Landfill expands its gas collection system to new areas of waste.", + "projectId": "923" +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Readme.md b/Methodology Library/American Carbon Registry/ACR Landfill/Readme.md new file mode 100644 index 0000000000..7a85557785 --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Readme.md @@ -0,0 +1,458 @@ +## Table of Contents + + +- Introduction +- Need and Use +- US Landfills and Methane Collection Benefits +- Monitoring and Quantification Approach +- Project Eligibility and Additionality +- Demo Video +- Policy Workflow +- Policy Import +- Available Roles + - Project Proponent + - Verifier (s) + - Standard Registry +- Important Schemas +- Token (Emisison Reduction Ton) +- Step-by-Step + + + +## Introduction + +This document outlines the Guardian policy created I accordance to the ACR Landfill Gas Methodology v2.0, titled “Methodology for the Quantification, Monitoring, Reporting, and Verification of Greenhouse Gas Emissions Reductions and Removals from Landfill Gas Destruction and Beneficial Use Projects.” Developed by the American Carbon Registry (ACR), this methodology offers a comprehensive framework for quantifying emissions reductions through the destruction or utilization of landfill gas (LFG). By converting methane, a potent greenhouse gas, into energy or other beneficial uses, this methodology provides a robust pathway for generating high-quality carbon offset credits. + +## Need and Use + +This methodology supports project developers aiming to reduce methane emissions from municipal solid waste landfills by capturing and converting LFG. It establishes clear protocols for baseline emissions, additionality, monitoring, and verification, ensuring accurate accounting and credit generation. It also provides flexibility for the inclusion of innovative technologies, such as automated gas collection systems, to enhance collection efficiency. + +The framework enables projects to: + +a. Quantify methane destruction and beneficial uses. + +b. Generate credible and tradable carbon offset credits. + +c. Encourage environmentally sustainable and economically viable landfill management practices. + +## U.S. Landfills and Methane Collection Benefits + +Landfills in the United States are a significant source of methane emissions, a potent greenhouse gas with a global warming potential 28 to 36 times greater than carbon dioxide over 100 years. According to the U.S. Environmental Protection Agency (EPA), municipal solid waste landfills are the third-largest source of human-related methane emissions in the country. Capturing and utilizing landfill gas (LFG), which consists primarily of methane and carbon dioxide, offers substantial environmental and economic benefits. Methane collection systems reduce greenhouse gas emissions, improve local air quality, and mitigate odor issues. Additionally, captured methane can be converted into renewable energy or processed for injection into natural gas pipelines, providing a sustainable energy source while reducing reliance on fossil fuels. These practices not only contribute to climate change mitigation but also support a circular economy by turning waste into valuable resources. + +## Monitoring and Quantification Approach + +Key components of the monitoring and quantification process include: + +1. LFG Collection and Destruction: Continuous monitoring of gas flow and methane content using calibrated devices. + +2. Baseline Emissions: Determined using modeled or measured methane generation and collection efficiency data. + +3. Emission Reductions: Quantified by subtracting project emissions (e.g., from fossil fuel combustion or electricity use) from baseline emissions. + +4. Leakage: Leakage emissions are deemed negligible under this methodology. + +The methodology provides default factors and customizable parameters, ensuring flexibility while maintaining data accuracy and transparency. + +## Project Eligibility and Additionality + +Eligible projects under this methodology include: + +- Destruction of LFG using open or enclosed flares. + +- Conversion of LFG to energy in turbines, boilers, or engines. + +- Injection of processed LFG into natural gas pipelines. + +- Use of automated gas collection systems to enhance collection efficiency. + +Additionality must be demonstrated using one of the following approaches: + +- A performance-based standard combined with a regulatory surplus test. + +- ACR’s three-prong additionality test, addressing regulatory surplus, common practice, and financial barriers. + +## Demo Video + +[Youtube](https://www.youtube.com/watch?v=fDTobFguBJE&list=PLnld0e1pwLho3M7uAzcbyzyJobn-X9wG_&index=2) + +## Policy Workflow + +![image](https://github.com/user-attachments/assets/13bbbfd4-396e-4a6d-b70c-ef6ca33f1df5) + +## Policy Import + +This policy is published to Hedera network and can either be imported via Github (.policy file) or IPSF timestamp. + +## Available Roles + +**1. Project Proponent** + +The Project Proponent is responsible for the overall management and execution of the project. Key responsibilities include: + +- Submitting project submission reports and documentation to the Standard Registry and assigning Verifiers. + +- Ensuring compliance with relevant methodologies and standards. + +- Coordinating with stakeholders to facilitate project activities and reporting. + +**2. Verifier(s)** + +Verifiers are independent entities tasked with assessing the accuracy and validity of the project’s emissions reductions claims. Their key responsibilities include: + +- Conducting thorough reviews of project documentation and emissions data. + +- Performing on-site inspections and audits as necessary. + +- Providing verification reports to the Project Proponent and Standard Registry. + +- Ensuring adherence to the agreed-upon methodologies and standards. + +**3. Standard Registry** + +The Standard Registry serves as the authoritative body for maintaining project records. Responsibilities include: + +- Managing the registration and tracking of approved projects. + +- Overseeing compliance with established protocols and procedures. + +## Important Schemas + +**Project Proponent:** The Project Proponent is the individual or organization responsible for initiating and managing the emission reduction project. Their profile includes company information, such as legal name, registration details, and project-specific contacts, as well as personal information of key personnel involved in the project. + +**Verifier:** The Verifier is an independent third-party entity tasked with assessing the emission reduction project’s claims. Their form collects detailed information about the verifying organization, including its credentials, contact details, and the qualifications of the personnel conducting the verification. + +**Project Listing Form:** The Project Listing Form is a formal document that Project Proponents complete to outline the details of their emission reduction project. It typically includes project objectives, baseline emissions, methodologies to be used, and information on stakeholder consultations, serving as a foundational tool for project approval and registration. + +**Project Plan:** The Project Plan schema outlines the foundational details of a project, including its scope, objectives, implementation strategy, and monitoring framework. It serves as a comprehensive blueprint for the quantification, monitoring, and reporting of greenhouse gas (GHG) emissions reductions. Key components include: + +- Project location and boundary. +- Description of technology and methodology used. +- Baseline emissions determination. +- Data monitoring, collection, and reporting procedures. + +**Project Specific Conflict of Interest:** The Conflict of Interest (COI) Form schema ensures transparency and impartiality in the project validation and verification processes. It captures declarations from relevant stakeholders, particularly validators and verifiers, to identify and mitigate any potential conflicts of interest. Key fields include: + +- Declaration of relationships with the project developer or related entities. +- Financial or professional interests in the project’s outcomes. +- Past involvement in the project’s development or consultation. + +**Validation Report:** The Project Validation Report provides a comprehensive assessment of the emission reduction project after a validation process. It details the findings of the verifier, including compliance with methodologies, the accuracy of reported emission reductions, and any identified discrepancies or recommendations for improvement. + +**Validation Opinion:** The Validation Opinion schema documents the independent evaluation of a project’s design, ensuring it adheres to the applicable methodology, standards, and guidelines. + +**Monitoring Report:** The Monitoring Report is a periodic document prepared by the Project Proponent that tracks the project’s performance and emission reductions over time. It includes data on actual emissions, project activities, and compliance with monitoring requirements, ensuring that stakeholders are informed about ongoing progress and results. + +**Environmental and Social Impact Assessment:** The Environmental and Social Impact Assessment schema provides a structured framework to evaluate the potential environmental and social implications of a project. It ensures that project activities are sustainable and do not cause undue harm to local ecosystems or communities. Key sections include: + +- **Environmental Impacts:** Assessment of potential effects on air quality, water resources, soil, biodiversity, and climate, with proposed mitigation measures for negative impacts. +- **Social Impacts:** Evaluation of the project’s influence on local communities, including health, safety, livelihoods, cultural heritage, and public engagement. +- **Regulatory Compliance:** Confirmation of adherence to local and international environmental and social regulations and standards. +- **Monitoring and Mitigation Plan:** Detailed strategies to mitigate identified risks and monitor ongoing impacts throughout the project lifecycle. + +**Emission Reductions:** The Emission Reductions schema captures all data necessary for calculating greenhouse gas (GHG) emission reductions in line with the outlined policy and methodology. It integrates seamlessly with the Guardian platform, where all calculations are automated based on the defined policy workflow. This schema ensures accuracy and transparency while minimizing manual effort. Key components include: + +- **Baseline Emissions Data:** + + - Baseline emission factors. + - Activity data, such as energy usage, waste quantities, or fuel consumption. + - Assumptions and default values used in baseline scenarios. + +- **Project Emissions Data:** + + - Monitoring inputs for project-related emissions, including energy use, fuel consumption, and electricity usage. + - Parameters like methane content, gas flow rates, and collection system efficiency. + - Calibration details for monitoring equipment. + +- **Emission Reduction Calculations:** + + - Quantification details based on policy-defined equations. + - Automated integration with Guardian to process and validate all inputs (ensures that all inputs adhere to the specified data type requirements, such as numerical values, string values, enumerated values, and others). + +**Verification Report:** The Verification Report is a formal document summarizing the verification of the emission reductions claimed by the Project Proponent. It outlines the verification process, findings, conclusions, and recommendations, providing stakeholders with confidence in the integrity and accuracy of the reported emission reductions. + +**Verification Opinion:** The Verification Opinion schema provides a detailed account of the project’s performance during a specific reporting period. It assesses whether the claimed GHG emissions reductions or removals align with the project’s design and monitoring plan. + +## Token (Emission Reduction Ton) + +Emission Reduction Ton (ERT), which represents a verified reduction of one metric ton of carbon dioxide equivalent. + +### Step By Step + +1. Import the policy using IPFS or Policy File. Once imported, you will be redirected to the policy configurator. + +![image](https://github.com/user-attachments/assets/afe75636-92a4-4f6c-946d-97417f83724b) + +![image](https://github.com/user-attachments/assets/54f5d229-09f7-433b-b5db-22c420787189) + +![image](https://github.com/user-attachments/assets/bc25c873-dbe2-4611-b83f-25b844deb19c) + +![image](https://github.com/user-attachments/assets/b8383f2f-d08b-443d-b2e4-594b526fc9af) + +2. Set the policy to Dry Run or Publish it using the dropdown. Then select “Go” or “Register”. + +![image](https://github.com/user-attachments/assets/188cce22-1eeb-4c0e-a023-5948f07622e5) + +![image](https://github.com/user-attachments/assets/6af0502c-970c-40dd-b16d-79129b9c5c51) + +3. Create a new user account and assign it to the Project Proponent. Ensure that the Project Proponent registration form is complete, then select ‘Submit’. + +![image](https://github.com/user-attachments/assets/e817d4bf-a216-4be3-b33e-f27b2f676398) + +![image](https://github.com/user-attachments/assets/9a168769-0a83-4cb3-b7a3-15bc66a1a5e7) + +![image](https://github.com/user-attachments/assets/232372c3-5be1-4dad-bb6e-7824e6134ef8) + +![image](https://github.com/user-attachments/assets/7f1e1f4f-0540-4ffa-931a-1c6237e1ac9c) + +4. Log in to the administrator account to review and approve the Project Proponent registration form. The administrator will have access to the submitted registration forms for each user and can choose to approve or reject them. + +![image](https://github.com/user-attachments/assets/fa42843d-5753-46cb-9aab-0c1e0772663d) + +5. The Project Proponent can click 'Create' to submit the Project Listing Form. + +![image](https://github.com/user-attachments/assets/6f6ce2a0-cf38-42e5-91e8-606c0c735955) + +![image](https://github.com/user-attachments/assets/3968573e-d566-4955-b539-40a7bbd89a3f) + +![image](https://github.com/user-attachments/assets/76ac8560-82df-47f7-a1a6-7a0afe3ee449) + +6. Log in to the administrator account to review and approve the Project Listing Form. + +![image](https://github.com/user-attachments/assets/f7bb278a-470a-4d68-b41e-03f458a3601e) + +7. Create a new user account and assign it to the Verifier. Ensure that the Verifier registration form is complete, then select ‘Submit’. + +![image](https://github.com/user-attachments/assets/3d8d7ef3-b26b-4a57-ab87-53b7aaec3a7e) + +![image](https://github.com/user-attachments/assets/f59ac87b-1e4a-4f12-bd2f-a2cf99327ae0) + +![image](https://github.com/user-attachments/assets/2720ea98-d1ce-4106-96bb-dba5d3e2c0ec) + +8. Log in to the administrator account to review and approve the Verifier registration form. The administrator will have access to the submitted registration forms for each user and can choose to approve or reject them. + +![image](https://github.com/user-attachments/assets/fa037eb0-508c-4784-abe4-29a1693f7b39) + +9. Navigate back to the Verifier account and submit a Project Specific Conflict of Interest (COI) form. + +![image](https://github.com/user-attachments/assets/e70146c2-88ff-4364-9c50-345660375013) + +10. Log in to the administrator account to review and approve the COI form. + +![image](https://github.com/user-attachments/assets/81ebe43d-9658-44e0-ba16-86bf10f1cd35) + +11. Log in to the Project Proponent account and assign the Project to the approved Verifier. Once assigned, submit a Project Plan and assign the Project Plan to the Verifier. + +![image](https://github.com/user-attachments/assets/f420a822-0bb4-409b-83d5-c0aa31200e36) + +![image](https://github.com/user-attachments/assets/8c4e5420-bba0-4d5b-8438-c8effb6534e6) + +![image](https://github.com/user-attachments/assets/923b4f0f-757f-4f8d-b3be-3f7b17d14a8a) + +![image](https://github.com/user-attachments/assets/efcc0014-625a-4b85-a8ec-a6e1ca02fac1) + +![image](https://github.com/user-attachments/assets/e349513e-8aac-447d-bc30-c188d3eded30) + +12. Log in as the Verifier to review the Project documents and the Project Plan. You will see no ‘Approve’ or ‘Reject’ buttons for the Project form as it is view only. + +![image](https://github.com/user-attachments/assets/1d8d5478-ce2f-414c-8387-7638ac641be0) + +![image](https://github.com/user-attachments/assets/f805c6f0-7a75-4133-bd0e-c0f51bc4f88f) + +13. The Administrator will now be able to approve or reject the Project Plan. + +![image](https://github.com/user-attachments/assets/df397206-d066-4c91-8ce9-7f06a5ad9553) + +14. The Verifier can now submit a Validation Report and the Validation Opinion. Make sure to assign the Project Proponent once each form is submitted. + +![image](https://github.com/user-attachments/assets/e730b68f-04a0-4d19-9b33-d1f4d908e560) + +![image](https://github.com/user-attachments/assets/8d40ab90-d6e1-4fd8-a0e2-9dced5b8f0a4) + +![image](https://github.com/user-attachments/assets/aa38f486-1581-4840-b83c-c12b81ae2aa4) + +![image](https://github.com/user-attachments/assets/3ef19bcb-26f3-4a3b-8b4d-79c2b261de91) + +![image](https://github.com/user-attachments/assets/c16e1843-54f5-4597-ad78-4749551fdfb7) + +![image](https://github.com/user-attachments/assets/89f40d30-6866-4ef2-9162-b0db21f30bc6) + +15. Return to the Project Proponent’s account to review the Validation Report and Opinion before approving it for review from the Administrator. + +![image](https://github.com/user-attachments/assets/4dbdded5-3032-477a-9c93-0b9a7421842b) + +![image](https://github.com/user-attachments/assets/714fbaf1-4fd9-41a9-9349-6ff0519bcbac) + +16. Once the Validation Report and Opinion are approved by the Project Proponent, the Administrator will gain access to review and either approve or reject them. + +![image](https://github.com/user-attachments/assets/67a7c6f4-d76e-4588-95ac-768946168b5c) + +![image](https://github.com/user-attachments/assets/a17ac29e-c6b7-4cde-94b1-80cd9a67e5ba) + +17. The Project Proponent can now submit the Emission Reductions Form, Monitoring Report, and Environmental and Social Assessment. Ensure that a Verifier is assigned for the verification process. + +![image](https://github.com/user-attachments/assets/3630fc37-f47a-4466-9f5e-fb93bdcf9481) + +![image](https://github.com/user-attachments/assets/172c9141-c604-4e24-92b6-4fdf3876fd58) + +![image](https://github.com/user-attachments/assets/fa5fb0d1-b510-479e-ba3a-9eb76d3b7614) + +![image](https://github.com/user-attachments/assets/1883ef78-3ba5-411e-a836-2417fe3b5792) + +![image](https://github.com/user-attachments/assets/b1f158dc-a5ce-4a87-9eba-3bf63fb06c50) + +![image](https://github.com/user-attachments/assets/7eca4d27-aece-4438-b448-0ef3e68face6) + +![image](https://github.com/user-attachments/assets/acc6ddf8-5b2e-444a-823c-971e5a683feb) + +![image](https://github.com/user-attachments/assets/abefd5ae-512e-4b9b-a687-ab0fdf4f6d43) + +![image](https://github.com/user-attachments/assets/e8c4e20c-1d8b-4842-8980-af14b07cbc52) + +18. Once submitted and assigned, the Verifier can review each document, provide a Verification Report and Opinion, and assign them to the Project Proponent as view-only documents. + +![image](https://github.com/user-attachments/assets/76cca040-8db5-4ace-bca0-cc7cf1a5c155) + +![image](https://github.com/user-attachments/assets/9e142d97-61d6-411e-9c31-1058cc3d36d7) + +![image](https://github.com/user-attachments/assets/3be2ef21-c880-4b61-9810-f991ab0f8b71) + +![image](https://github.com/user-attachments/assets/1f4d00e1-4080-4d63-9d36-80c26a717834) + +![image](https://github.com/user-attachments/assets/9b413763-8855-4e23-875a-dfd9e7cd00bb) + +![image](https://github.com/user-attachments/assets/2c3389e3-332d-41c7-ae99-a768c3e7bf8b) + +![image](https://github.com/user-attachments/assets/3c77282a-00ca-49b5-b5b0-c70e5ce8fbb8) + +![image](https://github.com/user-attachments/assets/49a043d9-1769-4cb8-97f2-3d046fac8e8f) + +![image](https://github.com/user-attachments/assets/fc29fabc-da9b-4b54-8ade-59f042a480d7) + +19. The Project Proponent can view these documents; however, they will be sent to the Administrator for final approval. + +![image](https://github.com/user-attachments/assets/6f172c5b-151c-4a27-8fa3-c606dfff4b79) + +![image](https://github.com/user-attachments/assets/0831d493-ae1a-4ed9-b706-e1f3bc01fbb0) + +20. The Administrator can review the Verification Report and approve or reject it. + +![image](https://github.com/user-attachments/assets/2a8507f1-e589-454f-8c96-69223245c106) + +21. The Administrator can review the Verification Opinion. The actions available for this document differ from the previous ones, as it is the document we will mint credits against. You’ll see three buttons: Mint, Close, and Reject. The Mint button allows you to select the Vintage for which you would like to mint credits. The Close button should be used once all applicable Vintages have been used for minting credits. The Reject button can be used if the Verification Opinion is not acceptable. Below, we will display an example to showcase what happens when we select ‘Mint’ and define a Vintage (e.g., 2021). + +![image](https://github.com/user-attachments/assets/61a7c7a3-6dc0-45d7-bb40-6e207d886d76) + +![image](https://github.com/user-attachments/assets/0b689a17-2796-49e1-97de-d3bf2492b5cb) + +In the image displayed below, you can see that the VC (document) for the Verification Opinion shows how many Emission Reductions or Removals (ERRs) have been approved and verified for that specific vintage. + +![image](https://github.com/user-attachments/assets/c43923e4-f5ef-44e3-9ee9-9e393845a2e5) + +![image](https://github.com/user-attachments/assets/b8d0dc67-8591-44e1-9d37-d404d2169e79) + +![image](https://github.com/user-attachments/assets/afa12397-1065-44f7-8c83-8c9715842209) + +![image](https://github.com/user-attachments/assets/d73c3e21-62ce-4b2d-a276-a492560b791d) + +The VC file for the Verification Opinion in the Trust Chain will display the selected vintage and the number of credits associated with that vintage. + +![image](https://github.com/user-attachments/assets/5d013c7f-4d93-4618-ba99-df844e5a40c3) + +![image](https://github.com/user-attachments/assets/6cc94b6e-b92c-4361-83f5-dfc7487ace18) + +22. In this next example, we will mint again, but the Vintage will be 2022. You’ll be able to see a new Verifiable Presentation (VP) for this issuance and a new Trust Chain. + +![image](https://github.com/user-attachments/assets/5d2cc6ac-cc9e-4cd9-97e1-11f1a834f72b) + +![image](https://github.com/user-attachments/assets/c81cd29e-782e-4c1d-9b04-882131c88ef8) + +![image](https://github.com/user-attachments/assets/089bee57-0b47-450b-9e4a-135521ac8b1f) + +![image](https://github.com/user-attachments/assets/dd06390c-d24a-461b-89de-1f27d9c59f18) + +![image](https://github.com/user-attachments/assets/5cf26631-5344-4771-89e7-82212b08a3b1) + +23. The final step is to select Close once all the vintages have been used to mint credits. + +![image](https://github.com/user-attachments/assets/df93ebcb-0729-4172-8e49-ba9bd800da8c) + +![image](https://github.com/user-attachments/assets/b93ab51a-3d00-41f5-a4aa-981ffd0185bc) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/VVB 1 Account Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/VVB 1 Account Data.txt new file mode 100644 index 0000000000..2962c85efd --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/VVB 1 Account Data.txt @@ -0,0 +1,32 @@ +var _pp = { + "G6": "Project VVB", + "G7": [ + "Landfill Gas Destruction and Beneficial Use Projects", + "Capturing and Destroying Methane from Coal and Trona Mines in North America", + "Advanced Refrigeration Systems" + ], + "G10": [ + "EcoFarm Innovations, LLC." + ], + "G11": "123 Greenfield Road", + "G12": "N/A", + "G13": "Springfield", + "G14": "US", + "G15": "IL", + "G16": "62701", + "G17": "555-987-6543", + "G18": "N/A", + "G19": "support@ecofarm.com", + "G20": "https://example.com", + "G22": "Lead Validator/ Verifier", + "G23": "Taylor Brooks", + "G24": "456 Oakwood Drive", + "G25": "N/A", + "G26": "Bloomington", + "G27": "US", + "G28": "IL", + "G29": "61701", + "G30": "555-987-6585", + "G31": "tbrooks@ecofarm.com" +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/VVB 1 COI Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/VVB 1 COI Data.txt new file mode 100644 index 0000000000..be1298c2c9 --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/VVB 1 COI Data.txt @@ -0,0 +1,49 @@ +var _pp = { + "G6": "2023-09-27", + "G7": "EcoFarm Innovations, LLC", + "G8": "Yes", + "G9": "Yes", + "G10": [ + "Yes" + ], + "G12": "Prairie Ridge Waste Management Facility", + "G13": "923", + "G14": "Landfill Gas Destruction and Beneficial Use Projects, 2.0", + "G15": "Alex Carter", + "G16": "N/A", + "G17": "2021-04-01", + "G18": "2031-03-31", + "G19": "2024-03-12", + "G20": "See Methodology Deviation Request Determination", + "G21": "2024-12-03", + "G22": "2024-12-03", + "G23": "2024-12-03", + "G24": "N/A", + "G25": "02/12/2024", + "G26": "2024-02-12", + "G27": "2024-03-26", + "G28": "Malvern, IA, USA", + "G32": "Taylor Brooks", + "G33": "Samantha Davis and Ethan Carter", + "G34": "Olivia Martinez", + "G35": "Liam Thompson", + "G36": "N/A", + "G37": "No prior relationships", + "G38": "N/A", + "G39": "ndependent Review Board: The VVB has an independent review board that oversees all assessments to ensure impartiality. Members of the board are selected based on their expertise and are required to disclose any potential conflicts of interest prior to engagement. Conflict of Interest Policy: A strict conflict of interest policy is enforced, which mandates all staff, auditors, and contractors to declare any personal, financial, or professional relationships that may influence their judgment or impartiality. This declaration is reviewed regularly. Segregation of Duties: The VVB ensures the segregation of duties across different phases of the project to prevent any overlap that could lead to a conflict of interest. For example, project assessment teams are distinct from those involved in decision-making or approval processes. Ongoing Training: Regular training is provided to all staff on conflict of interest awareness and the procedures to follow in case of a potential conflict. This ensures all team members are aligned with the VVB’s commitment to transparency and fairness. Whistleblower Mechanism: A confidential whistleblower mechanism is in place, allowing individuals to report any concerns regarding conflicts of interest without fear of retaliation. All reports are thoroughly investigated by a dedicated ethics committee. Third-Party Audits: Regular third-party audits are conducted to ensure compliance with internal conflict of interest policies. These audits help maintain objectivity and transparency in the VVB’s operations.", + "G40": "After thorough review and consideration, it is determined that there are no potential or actual conflicts of interest that would impact the VVB’s ability to provide impartial validation and verification services for the GHG Project. The VVB has no financial interests, previous relationships, or personal ties to the project developer or any associated parties that would influence the outcome of the validation or verification process. Additionally, the VVB is not providing any advisory or consulting services to the project, ensuring complete independence in the validation and verification activities. All staff and auditors involved in the project have declared no conflicts of interest, and appropriate segregation of duties is maintained throughout the process. The VVB’s strict conflict of interest policy ensures that the validation and verification process is conducted with the highest level of impartiality and transparency. Therefore, the VVB can confirm that there are no conflicts of interest that would affect the integrity of the GHG Project validation and verification services.", + "G42": "The VVB has verified the project for a total of 3 consecutive years of reporting, including the initial and renewed Crediting Periods. These verifications have been conducted in accordance with the established methodologies and reporting periods for the GHG project. For projects developed under a methodology that dictates a single reporting period, the VVB has validated and verified the following five single reporting period ACR projects for the Project Proponent: Project Name – Validation/Verification Date: January 2022 Project Name – Validation/Verification Date: June 2022 Project Name – Validation/Verification Date: November 2022 Project Name – Validation/Verification Date: April 2023 Project Name – Validation/Verification Date: September 2023 These verifications were carried out in line with the approved methodologies, ensuring consistency and accuracy across all reporting periods for the Project Proponent.", + "G43": [ + "In the case of project types with only one Reporting Period that have occurred at the same facility, the VVB has performed 7 of the last 9 verifications for projects developed at this facility. These verifications were carried out in accordance with the relevant methodologies and have ensured the accuracy and integrity of the emissions reductions reported for each project. Each verification was conducted independently and thoroughly to maintain the highest standards of transparency and compliance with applicable regulations." + ], + "G45": "N/A", + "G46": "N/A", + "G47": "N/A", + "G48": "N/A", + "G49": "N/A", + "G50": "N/A", + "G56": "Taylor Brooks", + "G57": "Lead Validator/ Verifier", + "G58": "EcoFarm Innovations, LLC." +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Validation Opinion Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/Validation Opinion Data.txt new file mode 100644 index 0000000000..f7b654f2e9 --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Validation Opinion Data.txt @@ -0,0 +1,49 @@ +var _pp = { + "G6": "2023-10-20", + "G7": "Eco-Farm Innovations, LLC", + "G8": "123 Greenfield Road Springfield, IL 62701", + "G9": "N/A", + "G10": [ + "support@ecofarm.com" + ], + "G11": [ + "555-987-6543" + ], + "G13": " Prairie Ridge Waste Management Facility", + "G14": "923", + "G15": "Green Controls", + "G16": "N/A", + "G18": "2019", + "G19": "N/A", + "G20": "July 2023 v8.0", + "G21": "N/A", + "G22": "May 2018 v1.1", + "G23": "LANDFILL GAS DESTRUCTION AND BENEFICIAL USE PROJECTS 2.0", + "G24": "Errata & Clarifications v2.0, 2024-02-20", + "G26": "Yes", + "G36": "No", + "G49": [ + { + "G5": 0, + "G6": 0 + } + ], + "G57": "Taylor Brooks", + "G58": "Lead VVB", + "G59": "EcoFarm Innovations", + "G60": "Jake Ross", + "G61": "Independent Reviewer", + "G62": "Green Check", + "G27": [ + "2021-04-01" + ], + "G28": [ + "2031-03-31" + ], + "G29": "N/A - submitted through Guardian portal", + "G30": "2024-07-15", + "G31": "The GHG Project Plan and its contents are the responsibility of: Green Controls", + "G32": "Yes", + "G33": "Positive" +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Validation Report Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/Validation Report Data.txt new file mode 100644 index 0000000000..ed3764a632 --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Validation Report Data.txt @@ -0,0 +1,60 @@ +var _pp = { + "G5": "923", + "G6": "Prairie Ridge Waste Management Facility", + "G7": "Eco-Farm Innovations, LLC", + "G8": " Here is the revised paragraph with the previous names: The purpose of this validation and verification (v/v) is to provide a third-party evaluation of the Prairie Ridge Waste Management Facility GHG Project Plan against the ACR Methodology titled \"Methodology for the Quantification, Monitoring, Reporting, and Validation of Greenhouse Gas Emissions Reductions and Removal from Landfill Gas Destruction and Beneficial Use Projects\" (Methodology) Version 2.0, April 2021, along with the Errata & Clarifications to the Methodology dated February 20, 2024. The v/v team assessed the eligibility and likelihood that the project will result in developing GHG credits. The objectives include ensuring the project conforms to the following: Conformance with the ACR Standard GHG emissions reduction project planning information and documentation in accordance with the applicable ACR-approved methodology, including project description, baseline, eligibility criteria, monitoring and reporting procedures, and quality assurance/quality control procedures. Reported GHG baseline, ex ante estimated project emissions and emission reduction/removal enhancements, leakage assessment, and impermanence risk assessment and mitigation. Provide a third-party evaluation of the greenhouse gas offset credits that were asserted by the Project Proponent and Facility Owner for a landfill gas collection and destruction project located near Malvern, IA. The reporting period for this verification is 4/1/2021-9/30/2023. The Prairie Ridge Waste Management Facility is a gas collection and destruction facility. The gas collection system captures methane and destroys it in an open flare.", + "G9": "N/A", + "G11": "N/A", + "G12": "Methane (CH4) and Carbon Dioxide (CO2) are the only greenhouse gases considered.", + "G13": [ + { + "G5": "2021-04-01", + "G6": "2023-09-30" + } + ], + "G16": "The data frequency of measurement and recording for the Prairie Ridge Waste Management Facility includes various parameters related to landfill gas monitoring. The landfill gas flow to the flare is measured continuously using a thermal mass flow probe (Model Number: 62-9/9500PI) with a company thermal instrument, and the data is recorded using a datalogger. Methane content analysis is conducted periodically, with data points measured at least on a monthly basis from April 2021 to October 2022, and then at least on a weekly basis from November 2022 through May 2023, following a deviation approved on 10/19/2023. This analysis is performed with the Landtec Handheld Gas Analyzer (GEM5000) and recorded in a CSV file. Methane content analysis has been continuous since June 2023 using the Green Controls Model-Centry with a datalogger. Destruction device operating hours are recorded continuously with a thermocouple and a datalogger. Before and after results of field checks are recorded annually at the end of the reporting period with automatic calibrations and handwritten notes.", + "G18": "The verification is based on the ACR Landfill Gas Destruction and Beneficial Use Projects (v2.0) and Errata and Clarifications, as well as ISO 14066, ISO 14065, 14064-3:2019, IAF MD6 and ANAB requirements, policies, and procedures. The criteria also include the ACR Validation and Verification Standard (v1.1) and ACR Standard (v8.0). AWT will provide an opinion on whether the GHG offset project meets eligibility requirements and will likely result in the asserted GHG offsets. This is a reasonable assurance engagement meaning that AWT will provide a reasonable, but not absolute, level of assurance that the GHG offset assertion is materially correct. The materiality threshold is set at 5%. This is in agreement with the guidelines established by the American Carbon Registry.", + "G19": "EFI follows a standardized approach to performing the required tasks during an offset validation.", + "G20": "Validation ISO 14064-3:2019 EFI will provide an opinion on whether the GHG offset project meets eligibility requirements and will likely result in the asserted GHG offsets. ", + "G21": "Based on the full context within which the information is presented, Ecofarm Innovations will assess any errors, omissions and/or misrepresentations and make requests to Green Controls, Inc. for additional information, clarifications or corrective actions. Any discrepancy resulting in a material error will result in a corrective action request. The required materiality shall be established based on the requirements of the GHG program or, in the absence of GHG program requirements, best professional judgment considering objectives, level of assurance (if applicable), criteria and scope. Based on the American Carbon Registry’s methodology to determine the materiality threshold, the following will apply: The materiality threshold is 5%.", + "G23": "Ecofarm Innovations follows a consistent methodology for all American Carbon Registry’s Landfill Gas validation/verifications. Participant selects validator/verifier. V/V director performs pre-engagement review and assigns team leader based on sector and documents these activities in the internal project description document. The contract can be drafted at this point but cannot be fully executed until the COI evaluation has been approved by ACR. Team leader sends contract to client for signature. Team leader forms validation/verification team and negotiates/executes subcontractor contracts (if applicable). Team Leader and COI Auditor prepare Internal Conflict of Interest and Impartiality documents and obtain signatures from all team members. The Team Leader prepares or supervises the preparation of the ACR specific COI form and submits to the COI Auditor for completion. COI Auditor determines if there are issues with COI and completes ACR specific COI form. Team leader reviews the ACR specific COI form, signs the form and submits it to ACR. Upon receipt of approval of the COI evaluation from ACR, the team leader executes the contract. It should be noted that steps 4-8 are all occurring somewhat simultaneously. Team leader reviews or supervises the review of preliminary documentation and any results of previous assessments (if applicable) from the project proponent and discusses goals and constraints.", + "G24": "Submitted separately and approved", + "G25": "The following individuals participated in the site audit: John Smith Ecofarm Innovations Emma Johnson Ecofarm Innovations Michael Davis Green Controls Sophia Brown Green Controls", + "G26": "Strategic Analysis Completed", + "G27": "Kickoff Meeting 11/14/2023", + "G28": "Ecofarm Innovations incorporated the following strategy in the implementation of this Evidence Gathering Plan: Landfill gas flow to destruction devices – 100% of the data was checked in terms of the aggregation of the flow to the destruction devices. Landfill gas methane concentration – 100% of the data was checked in terms of the aggregation of the methane quality to the destruction devices. Emission reduction calculations – This calculation was independently calculated by the verification team to ensure the calculations are correct. Review of QA/QC information – 100% of the calibrations and field checks were reviewed along with OEM equipment manuals. Review of compliance, permitting, and ownership of credits – 100% of this documentation was reviewed. Default values – 100% of any default values were compared against the methodology. Review of data checking mechanisms – The operating effectiveness of the controls and project proponent’s data checking processes were reviewed. Review of Data Checking Mechanisms – The operating effectiveness of the controls and project developer’s data checking process were reviewed, to ensure low risk of control errors. Crosscheck of Data Aggregation for Data Substitution – The data aggregations and emission reduction calculations were crosschecked against the raw data files to identify any instances of data substitution. These instances are included in the verification report, if applicable.", + "G29": "Ecofarm Innovations incorporated the following strategy in the implementation of this Evidence Gathering Plan: Landfill gas flow to destruction devices – 100% of the data was checked in terms of the aggregation of the flow to the destruction devices. Landfill gas methane concentration – 100% of the data was checked in terms of the aggregation of the methane quality to the destruction devices. Emission reduction calculations – This calculation was independently calculated by the verification team to ensure the calculations are correct. Review of QA/QC information – 100% of the calibrations and field checks were reviewed along with OEM equipment manuals. Review of compliance, permitting, and ownership of credits – 100% of this documentation was reviewed. Default values – 100% of any default values were compared against the methodology. Review of data checking mechanisms – The operating effectiveness of the controls and project proponent’s data checking processes were reviewed. Review of Data Checking Mechanisms – The operating effectiveness of the controls and project developer’s data checking process were reviewed, to ensure low risk of control errors. Crosscheck of Data Aggregation for Data Substitution – The data aggregations and emission reduction calculations were crosschecked against the raw data files to identify any instances of data substitution. These instances are included in the verification report, if applicable.", + "G30": "Validation/Verification Site Visit Date 11/16/2023", + "G31": "N/A", + "G32": "N/A", + "G33": "Independent Reviewer by Jake Ross", + "G34": "N/A", + "G36": "N/A", + "G37": "N/A", + "G38": "N/A", + "G39": "N/A", + "G40": "N/A", + "G41": "N/A", + "G42": "N/A", + "G43": "N/A", + "G44": "N/A", + "G45": "N/A", + "G46": "N/A", + "G47": [], + "G55": "N/A", + "G56": [], + "G65": "N/A", + "G66": [], + "G69": "N/A", + "G70": [ + { + "G5": "N/A", + "G6": "N/A", + "G7": "N/A" + } + ], + "G74": "N/A", + "G75": "N/A", + "G76": {} +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Verfication Report Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/Verfication Report Data.txt new file mode 100644 index 0000000000..ed3764a632 --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Verfication Report Data.txt @@ -0,0 +1,60 @@ +var _pp = { + "G5": "923", + "G6": "Prairie Ridge Waste Management Facility", + "G7": "Eco-Farm Innovations, LLC", + "G8": " Here is the revised paragraph with the previous names: The purpose of this validation and verification (v/v) is to provide a third-party evaluation of the Prairie Ridge Waste Management Facility GHG Project Plan against the ACR Methodology titled \"Methodology for the Quantification, Monitoring, Reporting, and Validation of Greenhouse Gas Emissions Reductions and Removal from Landfill Gas Destruction and Beneficial Use Projects\" (Methodology) Version 2.0, April 2021, along with the Errata & Clarifications to the Methodology dated February 20, 2024. The v/v team assessed the eligibility and likelihood that the project will result in developing GHG credits. The objectives include ensuring the project conforms to the following: Conformance with the ACR Standard GHG emissions reduction project planning information and documentation in accordance with the applicable ACR-approved methodology, including project description, baseline, eligibility criteria, monitoring and reporting procedures, and quality assurance/quality control procedures. Reported GHG baseline, ex ante estimated project emissions and emission reduction/removal enhancements, leakage assessment, and impermanence risk assessment and mitigation. Provide a third-party evaluation of the greenhouse gas offset credits that were asserted by the Project Proponent and Facility Owner for a landfill gas collection and destruction project located near Malvern, IA. The reporting period for this verification is 4/1/2021-9/30/2023. The Prairie Ridge Waste Management Facility is a gas collection and destruction facility. The gas collection system captures methane and destroys it in an open flare.", + "G9": "N/A", + "G11": "N/A", + "G12": "Methane (CH4) and Carbon Dioxide (CO2) are the only greenhouse gases considered.", + "G13": [ + { + "G5": "2021-04-01", + "G6": "2023-09-30" + } + ], + "G16": "The data frequency of measurement and recording for the Prairie Ridge Waste Management Facility includes various parameters related to landfill gas monitoring. The landfill gas flow to the flare is measured continuously using a thermal mass flow probe (Model Number: 62-9/9500PI) with a company thermal instrument, and the data is recorded using a datalogger. Methane content analysis is conducted periodically, with data points measured at least on a monthly basis from April 2021 to October 2022, and then at least on a weekly basis from November 2022 through May 2023, following a deviation approved on 10/19/2023. This analysis is performed with the Landtec Handheld Gas Analyzer (GEM5000) and recorded in a CSV file. Methane content analysis has been continuous since June 2023 using the Green Controls Model-Centry with a datalogger. Destruction device operating hours are recorded continuously with a thermocouple and a datalogger. Before and after results of field checks are recorded annually at the end of the reporting period with automatic calibrations and handwritten notes.", + "G18": "The verification is based on the ACR Landfill Gas Destruction and Beneficial Use Projects (v2.0) and Errata and Clarifications, as well as ISO 14066, ISO 14065, 14064-3:2019, IAF MD6 and ANAB requirements, policies, and procedures. The criteria also include the ACR Validation and Verification Standard (v1.1) and ACR Standard (v8.0). AWT will provide an opinion on whether the GHG offset project meets eligibility requirements and will likely result in the asserted GHG offsets. This is a reasonable assurance engagement meaning that AWT will provide a reasonable, but not absolute, level of assurance that the GHG offset assertion is materially correct. The materiality threshold is set at 5%. This is in agreement with the guidelines established by the American Carbon Registry.", + "G19": "EFI follows a standardized approach to performing the required tasks during an offset validation.", + "G20": "Validation ISO 14064-3:2019 EFI will provide an opinion on whether the GHG offset project meets eligibility requirements and will likely result in the asserted GHG offsets. ", + "G21": "Based on the full context within which the information is presented, Ecofarm Innovations will assess any errors, omissions and/or misrepresentations and make requests to Green Controls, Inc. for additional information, clarifications or corrective actions. Any discrepancy resulting in a material error will result in a corrective action request. The required materiality shall be established based on the requirements of the GHG program or, in the absence of GHG program requirements, best professional judgment considering objectives, level of assurance (if applicable), criteria and scope. Based on the American Carbon Registry’s methodology to determine the materiality threshold, the following will apply: The materiality threshold is 5%.", + "G23": "Ecofarm Innovations follows a consistent methodology for all American Carbon Registry’s Landfill Gas validation/verifications. Participant selects validator/verifier. V/V director performs pre-engagement review and assigns team leader based on sector and documents these activities in the internal project description document. The contract can be drafted at this point but cannot be fully executed until the COI evaluation has been approved by ACR. Team leader sends contract to client for signature. Team leader forms validation/verification team and negotiates/executes subcontractor contracts (if applicable). Team Leader and COI Auditor prepare Internal Conflict of Interest and Impartiality documents and obtain signatures from all team members. The Team Leader prepares or supervises the preparation of the ACR specific COI form and submits to the COI Auditor for completion. COI Auditor determines if there are issues with COI and completes ACR specific COI form. Team leader reviews the ACR specific COI form, signs the form and submits it to ACR. Upon receipt of approval of the COI evaluation from ACR, the team leader executes the contract. It should be noted that steps 4-8 are all occurring somewhat simultaneously. Team leader reviews or supervises the review of preliminary documentation and any results of previous assessments (if applicable) from the project proponent and discusses goals and constraints.", + "G24": "Submitted separately and approved", + "G25": "The following individuals participated in the site audit: John Smith Ecofarm Innovations Emma Johnson Ecofarm Innovations Michael Davis Green Controls Sophia Brown Green Controls", + "G26": "Strategic Analysis Completed", + "G27": "Kickoff Meeting 11/14/2023", + "G28": "Ecofarm Innovations incorporated the following strategy in the implementation of this Evidence Gathering Plan: Landfill gas flow to destruction devices – 100% of the data was checked in terms of the aggregation of the flow to the destruction devices. Landfill gas methane concentration – 100% of the data was checked in terms of the aggregation of the methane quality to the destruction devices. Emission reduction calculations – This calculation was independently calculated by the verification team to ensure the calculations are correct. Review of QA/QC information – 100% of the calibrations and field checks were reviewed along with OEM equipment manuals. Review of compliance, permitting, and ownership of credits – 100% of this documentation was reviewed. Default values – 100% of any default values were compared against the methodology. Review of data checking mechanisms – The operating effectiveness of the controls and project proponent’s data checking processes were reviewed. Review of Data Checking Mechanisms – The operating effectiveness of the controls and project developer’s data checking process were reviewed, to ensure low risk of control errors. Crosscheck of Data Aggregation for Data Substitution – The data aggregations and emission reduction calculations were crosschecked against the raw data files to identify any instances of data substitution. These instances are included in the verification report, if applicable.", + "G29": "Ecofarm Innovations incorporated the following strategy in the implementation of this Evidence Gathering Plan: Landfill gas flow to destruction devices – 100% of the data was checked in terms of the aggregation of the flow to the destruction devices. Landfill gas methane concentration – 100% of the data was checked in terms of the aggregation of the methane quality to the destruction devices. Emission reduction calculations – This calculation was independently calculated by the verification team to ensure the calculations are correct. Review of QA/QC information – 100% of the calibrations and field checks were reviewed along with OEM equipment manuals. Review of compliance, permitting, and ownership of credits – 100% of this documentation was reviewed. Default values – 100% of any default values were compared against the methodology. Review of data checking mechanisms – The operating effectiveness of the controls and project proponent’s data checking processes were reviewed. Review of Data Checking Mechanisms – The operating effectiveness of the controls and project developer’s data checking process were reviewed, to ensure low risk of control errors. Crosscheck of Data Aggregation for Data Substitution – The data aggregations and emission reduction calculations were crosschecked against the raw data files to identify any instances of data substitution. These instances are included in the verification report, if applicable.", + "G30": "Validation/Verification Site Visit Date 11/16/2023", + "G31": "N/A", + "G32": "N/A", + "G33": "Independent Reviewer by Jake Ross", + "G34": "N/A", + "G36": "N/A", + "G37": "N/A", + "G38": "N/A", + "G39": "N/A", + "G40": "N/A", + "G41": "N/A", + "G42": "N/A", + "G43": "N/A", + "G44": "N/A", + "G45": "N/A", + "G46": "N/A", + "G47": [], + "G55": "N/A", + "G56": [], + "G65": "N/A", + "G66": [], + "G69": "N/A", + "G70": [ + { + "G5": "N/A", + "G6": "N/A", + "G7": "N/A" + } + ], + "G74": "N/A", + "G75": "N/A", + "G76": {} +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/American Carbon Registry/ACR Landfill/Verification Opinion Data.txt b/Methodology Library/American Carbon Registry/ACR Landfill/Verification Opinion Data.txt new file mode 100644 index 0000000000..671e67a23b --- /dev/null +++ b/Methodology Library/American Carbon Registry/ACR Landfill/Verification Opinion Data.txt @@ -0,0 +1,57 @@ +var _pp = { + "G6": "2023-10-20", + "G7": "Eco-Farm Innovations, LLC", + "G8": "123 Greenfield Road Springfield, IL 62701", + "G9": "N/A", + "G10": [ + "support@ecofarm.com" + ], + "G11": [ + "555-987-6543" + ], + "G13": " Prairie Ridge Waste Management Facility", + "G14": "923", + "G15": "Green Controls", + "G16": "N/A", + "G18": "2019", + "G19": "N/A", + "G20": "July 2023 v8.0", + "G21": "N/A", + "G22": "May 2018 v1.1", + "G23": "LANDFILL GAS DESTRUCTION AND BENEFICIAL USE PROJECTS 2.0", + "G24": "Errata & Clarifications v2.0, 2024-02-20", + "G26": "Yes", + "G36": "No", + "G49": [ + { + "G5": 2021, + "G6": 63180 + }, + { + "G5": 2022, + "G6": 83971 + }, + { + "G5": 2023, + "G6": 81421 + } + ], + "G57": "Taylor Brooks", + "G58": "Lead VVB", + "G59": "EcoFarm Innovations", + "G60": "Jake Ross", + "G61": "Independent Reviewer", + "G62": "Green Check", + "G27": [ + "2021-04-01" + ], + "G28": [ + "2031-03-31" + ], + "G29": "N/A - submitted through Guardian portal", + "G30": "2024-07-15", + "G31": "The GHG Project Plan and its contents are the responsibility of: Green Controls", + "G32": "Yes", + "G33": "Positive" +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/CDM/CDM AMS-III.BB/AMS-III.BB.policy b/Methodology Library/CDM/CDM AMS-III.BB/AMS-III.BB.policy index 8e151a91ae..3fa4b5b347 100644 Binary files a/Methodology Library/CDM/CDM AMS-III.BB/AMS-III.BB.policy and b/Methodology Library/CDM/CDM AMS-III.BB/AMS-III.BB.policy differ diff --git a/Methodology Library/Climate Action Reserve/US Landfill/Attestation of Regulatory Compliance.txt b/Methodology Library/Climate Action Reserve/US Landfill/Attestation of Regulatory Compliance.txt new file mode 100644 index 0000000000..f6007395b1 --- /dev/null +++ b/Methodology Library/Climate Action Reserve/US Landfill/Attestation of Regulatory Compliance.txt @@ -0,0 +1,18 @@ +var _pp = { + "G6": "2024-05-20", + "G8": "Jane Smith", + "G9": "Director", + "G10": "Environmental Waste Management Facility", + "G11": "Environmental Waste Management Facility (EWMF) Landfill Gas Project", + "G12": "CAR001", + "G13": [ + "2011-01-01" + ], + "G14": [ + "2024-11-07" + ], + "G15": [ + "2024-03-20" + ] +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/Climate Action Reserve/US Landfill/Attestation of Title.txt b/Methodology Library/Climate Action Reserve/US Landfill/Attestation of Title.txt new file mode 100644 index 0000000000..00e5c01175 --- /dev/null +++ b/Methodology Library/Climate Action Reserve/US Landfill/Attestation of Title.txt @@ -0,0 +1,21 @@ +var _pp = { + "G6": "2024-05-20", + "G8": "Jane Smith", + "G9": "Director", + "G10": "Environmental Waste Management Facility", + "G11": "Environmental Waste Management Facility (EWMF) Landfill Gas Project", + "G12": "CAR001", + "G13": [ + "ipfs://672cef9f4e8d236241e0fd81" + ], + "G14": [ + "2024-11-07" + ], + "G15": [ + "2024-03-20" + ], + "G16": [ + "2024-05-20" + ] +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/Climate Action Reserve/US Landfill/Attestation of Voluntary Implementation.txt b/Methodology Library/Climate Action Reserve/US Landfill/Attestation of Voluntary Implementation.txt new file mode 100644 index 0000000000..00e5c01175 --- /dev/null +++ b/Methodology Library/Climate Action Reserve/US Landfill/Attestation of Voluntary Implementation.txt @@ -0,0 +1,21 @@ +var _pp = { + "G6": "2024-05-20", + "G8": "Jane Smith", + "G9": "Director", + "G10": "Environmental Waste Management Facility", + "G11": "Environmental Waste Management Facility (EWMF) Landfill Gas Project", + "G12": "CAR001", + "G13": [ + "ipfs://672cef9f4e8d236241e0fd81" + ], + "G14": [ + "2024-11-07" + ], + "G15": [ + "2024-03-20" + ], + "G16": [ + "2024-05-20" + ] +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/Climate Action Reserve/US Landfill/Emission Reductions.txt b/Methodology Library/Climate Action Reserve/US Landfill/Emission Reductions.txt new file mode 100644 index 0000000000..01aa2c01ea --- /dev/null +++ b/Methodology Library/Climate Action Reserve/US Landfill/Emission Reductions.txt @@ -0,0 +1,106 @@ +var _pp = { + "G6": { + "G9": 28, + "G10": 0.1, + "G11": 0, + "G13": [ + { + "G5": "Device 1", + "G8": [ + { + "G5": "monthly", + "G6": "No", + "G14": 0.5, + "G9": 272460000 + } + ], + "G19": 0.8 + } + ], + "G30": "Yes, methane was collected and destroyed at some point prior to the project.", + "G32": "Yes, the system was removed or dormant.", + "G34": "No, the system has been consistently active.", + "G35": "Yes, I will aggregate Destbase weekly or more frequently.", + "G36": "Yes, the aggregation period is consistent.", + "G39": "Yes, the project is a flare project at a closed landfill.", + "G87": "Yes, there is a non-qualifying combustion device.", + "G135": "Yes, a new destruction device is being used.", + "G43": [ + { + "G5": 0.567, + "G6": 48 + }, + { + "G5": 0.553, + "G6": 75 + }, + { + "G5": 0.581, + "G6": 21 + } + ], + "G91": [ + { + "G5": 0.567, + "G6": 48 + }, + { + "G5": 0.553, + "G6": 75 + }, + { + "G5": 0.581, + "G6": 21 + } + ], + "G138": [ + { + "G5": 2005, + "G6": "hourly", + "G7": 900, + "G8": 1000, + "G9": 0, + "G10": 1 + }, + { + "G5": 2005, + "G6": "hourly", + "G7": 900, + "G8": 1000, + "G9": 0, + "G10": 1 + } + ] + }, + "G148": { + "G7": [ + { + "G5": "diesel", + "G6": 32500025, + "G7": 0.78 + }, + { + "G5": "coal", + "G6": 215000, + "G7": 0.98 + } + ], + "G12": 65200, + "G13": 0.8, + "G15": [ + { + "G5": "Device 1", + "G6": 20, + "G7": 0.8 + }, + { + "G5": "Device 2", + "G6": 30, + "G7": 0.8 + } + ], + "G19": 0.5, + "G20": 28 + } +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/Climate Action Reserve/US Landfill/NOVA COI.txt b/Methodology Library/Climate Action Reserve/US Landfill/NOVA COI.txt new file mode 100644 index 0000000000..17e5121709 --- /dev/null +++ b/Methodology Library/Climate Action Reserve/US Landfill/NOVA COI.txt @@ -0,0 +1,169 @@ +var _pp = { + "G7": "John Smith", + "G8": "+1 (555) 123-4567", + "G9": "johnsmith@environmentfirst.com", + "G10": "EWMF Landfill Gas Destruction Project", + "G11": "CAR001", + "G12": "N/A", + "G13": { + "G5": "2023-06-01", + "G6": "2024-05-31" + }, + "G16": "U.S. Landfill Protocol Version 6.0", + "G18": "Yes", + "G19": "Yes", + "G21": [ + { + "G5": "Jane Smith", + "G6": "Director", + "G7": "+1 (555) 987-6543", + "G8": "janesmith@ewmf.com", + "G9": "123 Maple Street Rodman, NY 13682" + } + ], + "G27": [ + { + "G5": "Jane Smith", + "G6": "Director", + "G7": "+1 (555) 987-6543", + "G8": "janesmith@ewmf.com", + "G9": "123 Maple Street Rodman, NY 13682" + } + ], + "G33": [ + { + "G5": "John Doe", + "G6": "Facility Owner", + "G7": "+1 (555) 658-6985", + "G8": "johndoe@ewmf.com", + "G9": "123 Maple Street Rodman, NY 13682" + } + ], + "G39": [ + { + "G5": "N/A", + "G6": "N/A", + "G7": "N/A", + "G8": "N/A", + "G9": "N/A" + } + ], + "G45": [ + { + "G5": "Samantha James", + "G6": "SustainGuard", + "G7": "281 598-5682", + "G8": "sjames@sustainguard.com", + "G9": "123 Green Street Rodman, NY 13682" + } + ], + "G51": [ + { + "G5": "N/A", + "G6": "N/A", + "G7": "N/A", + "G8": "N/A", + "G9": "N/A" + } + ], + "G58": "05/10/2023", + "G59": "05/11/2023, 05/21/2023", + "G60": "06/20/2024", + "G61": "First verification done by your organization for this specific ", + "G63": [ + { + "G5": "Environmental Waste Management Facility", + "G6": "123 Maple Street Rodman, NY 13682" + } + ], + "G66": "No", + "G68": "Yes", + "G69": "The verification activities for this project will include a comprehensive review of all key operational and environmental data to ensure compliance with the project requirements and accurate emissions reduction reporting. Key activities planned are as follows: Staff Interviews: We will conduct interviews with project managers, operations supervisors, and data management staff to understand the procedures and practices related to emissions data collection and processing. Document and Record Review: Review facility maintenance logs and operational records to confirm equipment uptime and efficiency. Examine emissions reduction data, including flow meter readings and methane concentration measurements, to validate recorded reductions. Cross-check calibration records for continuous monitoring equipment to ensure equipment accuracy and maintenance. Emissions Reductions Calculation Review: Verify that emissions reductions are calculated following the CAR Protocol methodology. Recalculate emissions reductions for select reporting intervals to confirm consistency with documented data and methodology. On-Site Inspection and Equipment Verification: Inspect destruction devices (e.g., thermal oxidizers and engines) to verify operational status and proper function. Confirm that installed flow meters and gas analyzers match documentation and meet required calibration frequencies. This planned approach ensures a thorough evaluation of operational practices, data integrity, and emissions reduction calculations to provide an accurate and complete verification report.", + "G70": "N/A", + "G71": "N/A", + "G72": "CAR001", + "G73": "CAR001", + "G74": [ + "ipfs://672cecea4e8d236241e0fd7e" + ], + "G76": "No", + "G77": [], + "G86": "No", + "G87": "No", + "G88": "No", + "G89": "No", + "G90": "No", + "G91": "No", + "G92": "No", + "G94": [], + "G103": { + "G5": "John Smith", + "G6": "555-854-2525", + "G7": "johnsmith@environmentfirst.com", + "G8": "NY USA", + "G9": "N/A", + "G10": "03/20/2024-05/20/2024", + "G11": "Environment First" + }, + "G111": { + "G5": "Sam Green", + "G6": "555-625-3265", + "G7": "samgreen@environmentfirst.com", + "G8": "NY USA", + "G9": "N/A", + "G10": "03/20/2024-05/20/2024", + "G11": "Environment First" + }, + "G119": [ + { + "G5": "N/A", + "G6": "N/A", + "G7": "N/A", + "G8": "N/A", + "G9": "N/A", + "G10": "N/A", + "G11": "N/A" + } + ], + "G128": "$25,000", + "G129": "$100,000", + "G130": "$75,000", + "G131": "$50,000 / $45,000", + "G132": "10%", + "G133": "5%", + "G135": [ + { + "G5": "Not applicable", + "G6": { + "G5": "2023-06-01", + "G6": "2024-05-31" + }, + "G9": "03/20/2024-05/20/2024", + "G10": "$15,000", + "G11": "3%", + "G12": "Technical consultation on GHG methods" + } + ], + "G144": [ + { + "G5": "N/A", + "G6": "N/A", + "G7": "N/A", + "G8": "N/A", + "G9": "N/A" + } + ], + "G150": [ + { + "G5": "N/A", + "G6": "N/A", + "G7": "N/A", + "G8": "N/A", + "G9": "N/A" + } + ], + "G157": "Low", + "G161": [], + "G167": [] +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/Climate Action Reserve/US Landfill/Project Data Report.txt b/Methodology Library/Climate Action Reserve/US Landfill/Project Data Report.txt new file mode 100644 index 0000000000..47478be6b3 --- /dev/null +++ b/Methodology Library/Climate Action Reserve/US Landfill/Project Data Report.txt @@ -0,0 +1,60 @@ +var _pp = { + "G6": "Environmental Waste Management Facility", + "G7": "CAR001", + "G8": "N/A", + "G9": "06/01/2023 - 05/31/2024", + "G10": "U.S. Landfill Protocol Version 6.0", + "G11": "2023 - 880 CRTs", + "G12": "This project is located at Johnson County Landfill in Rodman, New York. The baseline scenario involves uncontrolled methane emissions from landfill gas. The project activity includes capturing and destroying methane emissions via utility flares.", + "G13": "This is a new landfill methane capture project utilizing an enclosed flare with a site-specific destruction efficiency value of 99%. All landfill gas is destroyed onsite.", + "G14": "EWMF LLC holds legal control over the project boundary through an agreement with EWMF, Inc.", + "G15": { + "G5": "123 Main St, Rodman, NY 13682", + "G6": "2023-06-01", + "G7": { + "G5": "2023-06-01", + "G6": "2024-05-31" + }, + "G10": { + "G5": "Installation of a landfill gas collection and a new qualifying destruction device at an eligible landfill where landfill gas has never been collected and destroyed prior to the start date.", + "G6": "The project meets the standard test under Section 3.4.1 by reducing methane emissions from the landfill.", + "G7": "Not applicable.", + "G8": "The project activities are not legally mandated, and the landfill is not subject to NMOC emissions regulations." + }, + "G15": "The project complies with all local labor and safety laws.", + "G16": "The project is in compliance with all environmental laws and is designed to prevent pollutant releases.", + "G17": "New York Department of Environmental Conservation oversees project compliance. There were no non-compliance issues during the reporting period." + }, + "G29": { + "G6": [ + { + "G6": "2023", + "G7": "1,200 tons", + "G8": "10%", + "G9": "0.9", + "G10": "1,080 tons CO₂e" + } + ], + "G14": "Testing conducted by New York Environmental Services on April 10, 2023, achieving a 99% destruction efficiency.", + "G15": [ + { + "G6": "2023", + "G7": "100 tons CO₂e", + "G8": "80 tons CO₂e", + "G9": "20 tons CO₂e", + "G10": "200 tons CO₂e" + } + ], + "G22": [ + { + "G6": "2023", + "G7": "1,080 tons CO₂e", + "G8": "200 tons CO₂e", + "G9": "880 CRTs" + } + ] + }, + "G54": "All monitoring and QA/QC requirements have been met.", + "G55": "Field checks and calibrations were completed by a third-party on May 15, 2023." +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/Climate Action Reserve/US Landfill/Project Submittal.txt b/Methodology Library/Climate Action Reserve/US Landfill/Project Submittal.txt new file mode 100644 index 0000000000..b944e71395 --- /dev/null +++ b/Methodology Library/Climate Action Reserve/US Landfill/Project Submittal.txt @@ -0,0 +1,48 @@ +var _pp = { + "G6": "Environmental Waste Management Facility (EWMF)", + "G7": [ + "EWMF Landfill Gas Destruction Project" + ], + "G8": "CAR001", + "G9": "Version 6.0", + "G10": "First crediting period", + "G11": "Green Solutions Consulting", + "G12": "Local Environmental Authority, Municipality of Johnson County", + "G13": "Environmental Waste Management Facility (EWMF)", + "G14": "Phone: (555) 123-4567 Email: info@ewmf-usa.com", + "G15": "2024-08-15", + "G17": "2023-06-01", + "G24": "Johnson County Landfill", + "G25": "1234 Landfill Road, Johnson County, USA", + "G26": "The EWMF Landfill Gas Destruction Project captures and destroys methane gas generated at Johnson County Landfill. The project involves the installation of a gas collection and control system (GCCS) to capture landfill gas (LFG) and a high-temperature flare for methane destruction. This system is expected to reduce greenhouse gas (GHG) emissions by converting methane into CO2, a less potent GHG. This project aims to contribute to the local government’s environmental sustainability goals while generating carbon credits. The landfill is designed to accommodate municipal solid waste (MSW) and is projected to remain operational until 2030. EWMF's project is in line with regulatory requirements and adheres to best practices for landfill gas management.", + "G27": "Environmental Waste Management Facility (EWMF)", + "G28": "Environmental Waste Management Facility (EWMF)", + "G29": "Municipal Solid Waste (MSW) and limited construction debris", + "G30": "5 million cubic meters", + "G31": "05/10/2022", + "G32": "2005", + "G33": "Estimated to close in 2030", + "G34": { + "G5": "Yes", + "G6": "Passive flares were installed in response to local odor complaints but did not meet criteria for effective GHG destruction.", + "G7": "Yes", + "G8": "A high-efficiency candlestick flare with a destruction efficiency of 98% was installed to meet GHG reduction standards." + }, + "G39": { + "G5": "No", + "G7": "No", + "G9": "Yes", + "G10": "07/20/2023", + "G11": "28 Mg/year", + "G12": "Expected in 2025", + "G13": "No", + "G15": "Yes", + "G17": "Yes" + }, + "G53": "The project is part of EWMF's commitment to environmental responsibility and local community engagement. Regular monitoring reports will be submitted to ensure transparency and compliance with GHG reduction protocols.", + "G18": { + "G5": "2023-06-01", + "G6": "2024-05-31" + } +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/Climate Action Reserve/US Landfill/U.S. Landfill Protocol Import Ready.xlsx b/Methodology Library/Climate Action Reserve/US Landfill/U.S. Landfill Protocol Import Ready.xlsx new file mode 100644 index 0000000000..eab6ff703e Binary files /dev/null and b/Methodology Library/Climate Action Reserve/US Landfill/U.S. Landfill Protocol Import Ready.xlsx differ diff --git a/Methodology Library/Climate Action Reserve/US Landfill/U.S. Landfill Protocol.policy b/Methodology Library/Climate Action Reserve/US Landfill/U.S. Landfill Protocol.policy new file mode 100644 index 0000000000..a7b5147c64 Binary files /dev/null and b/Methodology Library/Climate Action Reserve/US Landfill/U.S. Landfill Protocol.policy differ diff --git a/Methodology Library/Climate Action Reserve/US Landfill/Verification Report.txt b/Methodology Library/Climate Action Reserve/US Landfill/Verification Report.txt new file mode 100644 index 0000000000..cdd3a1cf11 --- /dev/null +++ b/Methodology Library/Climate Action Reserve/US Landfill/Verification Report.txt @@ -0,0 +1,95 @@ +var _pp = { + "G5": "CAR001", + "G6": "Environmental Waste Management Facility (EWMF) Landfill Gas Project", + "G7": "Environment First", + "G8": "This report is provided to the Project Developer as a deliverable of the Climate Action Reserve (CAR) project verification process. This report covers the verification of the Landfill Gas Destruction Project – CAR001 (the Project) for the periods of January 1, 2021 through December 31, 2021. During the verification process, the Project advisor acted as the Project Developer's representative. Both the Project Developer and advisor are the responsible parties for the GHG statement under verification. Environment First is responsible for expressing the opinion below on the GHG statement based on the outcome of the verification process.", + "G9": "The purpose of this verification was, through review of appropriate evidence, to establish that: • the Project conforms to the requirements of the verification criteria, including all eligibility requirements, discussed in Section 4 of this report; and • the data reported are accurate, complete, consistent, transparent, and free of material error or omission. Verification objectives also included reaching a conclusion about the accuracy of the GHG statement and the conformity of the statement with criteria.", + "G11": "New York", + "G12": "Emissions reductions (expressed in units of Carbon Dioxide equivalents (CO2e)) resulting from methane destruction; Project emissions of CO2 from fossil fuel combustion and purchased electricity.", + "G13": [ + { + "G5": "2023-06-01", + "G6": "2024-05-31" + } + ], + "G16": "Metered Data and Emissions Reduction Calculations", + "G18": "• Climate Action Reserve U.S. Landfill Protocol, Version 6.0, June 8, 2022 (CAR Protocol) • Reserve Offset Program Manual (April 2024, v9.2) • U.S. Landfill Project Protocol Version 6.0 Errata and Clarifications, April 13, 2023 • Applicable Climate Action Reserve Policy Memos", + "G19": "• Section 8 of the CAR Protocol, Version 6.0 • Climate Action Reserve Verification Program Manual, February 3, 2021 • ISO 14064-3: Specification with guidance for the verification and validation of greenhouse gas statements, 2019", + "G20": "Reasonable Level of Assurance", + "G21": "• Misstatements greater than one percent of the Project’s emission reductions assertion are considered material. • Qualitative non-conformities with the CAR Protocol are also considered material.", + "G23": "The verification process was utilized to gain an understanding of the Project’s emission sources and reductions and to evaluate and verify the collection and handling of data, the calculations that lead to the results, and the means for reporting the associated data and results. The following verification process was used: • conflict of interest review; • selection of Audit Team; • verification preparations; • initial interaction and kickoff meeting with DANC and B&L; • development of the verification and evidence gathering plan; • execution; • site visit; • assessment of raw data and calculations for period under review; • follow-up interaction with the project developer and B&L for corrective action, clarification, or supplemental data as needed; • Independent review; and • final opinion and report submittal.", + "G24": "Prior to beginning any verification project, First Environment conducts an evaluation to identify any potential conflicts of interest associated with the Project. No potential conflicts were found for this Project. First Environment also received authorization to proceed with verification activities for the Project developer from CAR in a notification dated August 30, 2022.", + "G25": "Environment First’s Verification Team consisted of the following individuals, who were selected based on their verification experience and familiarity with landfill operations: • Lead Verifier – John Smith • Verifier – Alex Johnson • Senior Internal Reviewer – Sam Green", + "G26": "Environment First performed pre-engagement activities to confirm the type of engagement, level of assurance, materiality thresholds, the objectives, criteria, and scope for verification activities. Environment First also performed a strategic analysis to understand the activities and complexity of the project and to determine the nature and extent of the verification activities required. The strategic analysis was also used to develop sufficient understanding of the GHG-related activity and its relevant sector information to plan and conduct the verification.", + "G27": "The verification was initiated with a kick-off meeting on September 8, 2022. The meeting focused on confirming the scope, schedule, and data required for verification.", + "G28": "The Audit Team formally documented its verification plan and determined the evidence-gathering plan. The verification plan was developed based on the discussion of key elements of the project verification process during the kick-off meeting. The project developer was afforded the opportunity to comment on the key elements of the verification plan. Based on items discussed and agreed upon with the project developer, the plan identified the Environment First project team members, project level of assurance, materiality threshold, and standards of evaluation and reporting for the verification. It also provided an outline of the verification process, established project deliverables, and presented a data-evidence gathering plan designed to review all project elements in areas of potentially high risk of inaccuracy or non-conformance.", + "G29": "The Audit Team executed the evidence-gathering activities. The verification was conducted according to the verification plan and the evidence-gathering activities according to the evidence-gathering plan.", + "G30": "Mr. John Smith conducted a site visit on October 13, 2022 to assess the Project’s data management systems and interview personnel relevant to the Project as part of the verification process.", + "G31": "This assessment used information and insights gained during the previous steps to evaluate the collected data and the reported emissions reduction quantities and identify if either contained material or immaterial misstatements.", + "G32": "The team issued corrective action and clarification requests during the verification process. The Project Developer provided sufficient responses to all of the corrective action and clarification requests. ", + "G33": "Before verification reporting is released to the client, a Environment First lead verifier, who has not participated in the verification activities, conducts an independent review to confirm that all verification activities have been completed and provide the agreed upon level of assurance.", + "G34": "Verification reporting, represented by this report, documents the verification process and identifies its findings and results. Verification reporting consists of this report, a verification opinion, and a list of findings, all to be submitted to the Climate Action Reserve.", + "G36": "The Authority operates the Environmental Waste Management Facility (EWMF) located in Rodman, New York. The landfill opened in 1992 and currently receives municipal solid waste. The Project involves the voluntary collection and destruction of landfill gas. Landfill gas is destroyed in the EWMF’s open flare or at the energy facility operated by EcoEnergy Solutions. The energy facility destroys landfill gas in multiple engine gensets, a thermal oxidizer (enclosed flare), and an open flare. Emission reduction credits are not being claimed for gas destroyed by the EWMF’s open flare and the energy facility’s open flare. The Project destroys landfill gas that would otherwise be released into the atmosphere, resulting in a net reduction of CO2-equivalents. No combustion devices were present on-site prior to the Project activity. The baseline scenario is defined as the total release of landfill gas into the atmosphere.", + "G37": "The Project meets the eligibility requirements set forth in the CAR Protocol as described below.", + "G38": "On March 1, 2008, a landfill gas-to-energy development and gas assignment agreement was entered into between Renewable Energy Solutions, Inc. (now EcoEnergy Solutions), and the Authority for a term of twenty years. The agreement specifies that methane destruction and the associated carbon credits are excluded and remain the sole title of the Authority. The agreement also states that it shall be binding and benefit the parties and their respective successors (i.e., EcoEnergy Solutions). Therefore, Environment First concluded that the Authority is correctly identified as the Project Developer and retains title to the associated carbon credits generated by the Project activity. Additionally, Environment First relied on the Attestation of Title completed by the Authority for the current reporting period. The Attestation is on file with CAR and was reviewed to confirm it was completed correctly.", + "G39": "Environment First confirmed that the Project meets CAR’s start date requirements. The Project start date is March 28, 2001, which was previously confirmed by Environment First during the Project’s initial reporting period and was re-confirmed during the current verification. The start date was confirmed through review of flare start-up and commissioning records. The Project is currently within its third crediting period, which spans from March 28, 2021, through March 27, 2031.", + "G40": "The Project passes both the Performance Standard Test and the Legal Requirements Test, as described below.", + "G41": "The Project consists of the installation of a landfill gas collection and control system and therefore exceeds the performance standard defined by the CAR protocol, specifically Scenario 1 from the list provided in Section 3.4.1 of the CAR Protocol, because no collection or control system existed prior to the Project start date. The baseline scenario was confirmed through site visit interviews with Project personnel. It was also confirmed during the site visit that the landfill is not a bioreactor.", + "G42": "The project is not claiming any other credits or incentives for methane destruction activities and is not a participant in the Regional Greenhouse Gas Initiative (RGGI) program. The project activity generates Renewable Energy Certificates (RECs). However, carbon dioxide emission reductions associated with displacement or offsetting of fossil generated electricity are excluded from the GHG assessment boundaries of the Protocol, and therefore there is no stacking of credits relevant to REC generation.", + "G43": "The landfill has a permitted capacity above the 2.5 million cubic meter threshold of municipal solid waste that triggers New Source Performance Standard (NSPS) requirements. As such, the most recent non-methane organic compounds (NMOC) emissions rate testing occurred on August 3, 2021. The landfill was modified by a permitted expansion after July 17, 2014; therefore, the most recent emissions rate report dated January 30, 2023, was prepared in accordance with 40CFR63, Subpart XXX. The report indicates that the NMOC emission rate is estimated to be 11.55 Megagrams (Mg) per year in 2021, and 11.73 Mg per year in 2022, both below the 34 Mg per year threshold established by the NSPS regulation. Environment First reviewed the facility’s solid waste operating permit and Title V permits to confirm that no other requirements for an active landfill gas collection and control system existed. This review of permits, laws, and regulations indicated the voluntary nature of the Project. Additionally, Environment First relied on the Attestation of Voluntary Implementation completed by the Authority for the current reporting period. The Attestation is on file with CAR and was reviewed to confirm it was completed correctly.", + "G44": "Stormwater Permit and the energy plant’s Title V permit compliance reports were generated on October 4, 2023, from the Environmental Protection Agency’s (EPA) Enforcement and Compliance History Online (ECHO) database. The ECHO database searches did not identify any issues during the current reporting period for either the landfill or the energy facility. Additionally, Environment First relied on the Attestation of Regulatory Compliance completed by the Authority for the current reporting period. The Attestation is on file with CAR and was reviewed to confirm it was completed correctly.", + "G45": "The Project was implemented in conformity with the CAR Protocol. The Authority developed and implemented a Monitoring Plan to track relevant Project parameters and data sources. The Monitoring Plan, including the Project Diagram, was reviewed to determine compliance with the protocol requirements. Based on observations made during the site visit and review of relevant Project documentation, Environment First found the Monitoring Plan and Project Diagram to meet the requirements set forth by the CAR Protocol and the Project to be implemented in accordance with the Monitoring Plan, except where noted below.", + "G46": "Landfill gas flow to each destruction device is continuously monitored with flow meters. All flow data is transmitted to a SCADA system data logger that electronically archives the data. Flow data are automatically corrected from ambient conditions to a standard temperature and pressure set in each flow meter's operating parameters. The flow data is exported to Microsoft Excel for review and quantification. See Table 1 below for details of each flow meter. The methane concentration of the landfill gas is continuously measured with a Siemens Ultramat 23 continuous gas analyzer and transmitted to a SCADA system data logger that electronically archives all methane concentration data for export to Microsoft Excel for review and quantification. Both gas flow rates and methane concentration are measured on the same relative moisture basis. Flare temperature is continuously monitored by thermocouples and recorded by the SCADA data logger. Engine operability (kWh production) is monitored and recorded hourly. The data are also exported to Microsoft Excel for review and quantification. Table 1 summarizes the Project monitoring system parameters and monitoring equipment employed by the Project. As discussed in section 6.1 above, and because emission reduction credits are not being claimed for gas destroyed by the SWMF’s open flare and the engine facility's open flare, the flow meters associated with these two flares and the portable gas analyzers used at the SWMF’s flare skid are not identified in the table below.", + "G47": [ + { + "G5": "Landfill gas flow", + "G6": "FCI ST-98 Flow Meter (s/n 418655)", + "G7": "Thermal Oxidizer (Enclosed Flare)", + "G8": "60°F / 1 Atm", + "G9": "Continuous", + "G10": "1 minute", + "G11": "SCADA data logger" + } + ], + "G55": "EWMF’s instrument quality assurance/quality control (QA/QC) plan for the Project’s monitoring equipment complies with CAR Protocol’s requirements, except where noted below: The Project utilizes a total of four meters for the thermal oxidizer and engines (two meters for each destruction device) to facilitate routine calibrations and to ensure there is always a spare meter available for use. Flow meter cleanings/inspections and third-party field calibration accuracy checks within two months of the end of both reporting periods were not documented for all flow meters. As a result, EWMF requested a variance from the Climate Action Reserve to address these issues. The manufacturer of the FCI-ST98 flow meters recommends calibration every eighteen months. All flow meters were used within their recommended calibration frequency, with the exception of engine meter s/n 259577, which was in use past its recommended calibration frequency. As a result, EWMF requested a variance from the Climate Action Reserve to address this issue. All flow meters were calibrated to the range of conditions expected at the site, as confirmed through a review of manufacturer calibration certificates.", + "G56": [ + { + "G5": "FCI ST-98 Flow Meter (s/n 418655)", + "G6": "Thermal Oxidizer (Enclosed Flare)", + "G7": { + "G5": "2023-07-01", + "G6": "2024-08-17" + }, + "G10": "See Variance Section", + "G11": "See Variance Section", + "G12": "5/10/2021 & 6/13/2023" + } + ], + "G65": "Project emissions sources and the associated monitoring methodology are summarized below.", + "G66": [ + { + "G5": "Consumption of Purchased Electricity ", + "G6": "Utility Invoices" + } + ], + "G69": "The emission reduction calculations were reviewed to ensure accuracy in the formulas used and the raw data employed as inputs. The formulas were tested for consistency with the calculation methodology described in the CAR Protocol. Total landfill gas flow is computed by multiplying the average landfill gas flow rate in a given interval by the length of that interval. Flow totals are aggregated on a daily basis. Metered gas flow volumes are recorded at standard conditions. All recorded landfill gas flow was adjusted as needed in the emission reduction calculations to standard conditions of one atmosphere of pressure and a temperature of 60°F. The total volume of methane destroyed by the Project was computed in daily intervals by multiplying the daily gas flow to the destruction devices by the daily average of methane concentration measurements and converting it to a mass flow using the density of methane at 60°F and one atmosphere of pressure. The total quantity of methane destroyed by the Project is summed over the reporting period to obtain the total baseline emissions. Because one flow meter monitors flow to all four engines, it was confirmed through the review of raw flow data that during any intervals when one or more engines were not operational, the remaining engines had the available capacity to destroy all of the available landfill gas, and that engine output corresponded to the flow of the gas. Additionally, it was confirmed during the site visit that the engines are designed so that it is physically impossible for gas to pass through while the engine(s) are non-operational; that each engine is equipped with an automatic safety shut-off valve; and that each engine has identical destruction efficiency.", + "G70": [ + { + "G5": "LFGi,t", + "G6": "Total quantity of landfill gas sent to the destruction devices ", + "G7": "Summed daily from metered data; Engine flow is corrected to reference conditions of 60ºF and one atmosphere of pressure in calculations. Thermal Oxidizer flow is metered at reference conditions of 60ºF " + } + ], + "G74": "As discussed in above, EWMF requested a variance from the CAR Protocol for the current reporting periods to address the following issues: • Missing cleaning/inspections of the flow meters and continuous gas analyzer, • Missing field accuracy checks of the flow meters within two months of the end of each reporting period, and • Use of engine meter s/n 259577 past its recommended calibration frequency. The variance request was approved by CAR on May 23, 2024, for the period of January 1, 2021, through December 31, 2022. The verifier confirms that the 2021 and 2022 calibrations for all four flow meters, as indicated above, that occurred prior to installation had ‘as left’ conditions within the ±5% accuracy threshold. Calibration Confirmation: Environment First confirmed that all of the meters and calibration dates identified in the Variance Determination had \"as left\" drift conditions that were within the 5% accuracy threshold. The verifier confirms that the following calibrations have “as found” conditions within the ±5% accuracy threshold: 6/12/2023 (S/N 502730): as found = -2.01% 11/13/2023 (S/N 503587): as found = -2.13% In the absence of the “as-found” readings for the 3/15/2022 calibration of flow meter S/N 259577, EWMF shall apply a discount to data from 9/17/2020-10/28/2021 equal to the maximum drift from the “as found” conditions available from the calibrations for the flow meter. A discount has been applied for the time period this meter was used prior to the March 15, 2022 calibration. The discount is applied from the beginning of the reporting period through the date it was removed from service (7/1/2021 - 10/28/2021). The discount applied is 1.66%, based on the maximum drift from the \"as found\" conditions from the November 13, 2023 calibration. The verifier confirms that the hypothetical drift and scaling for flow meter S/N 259577 is applied appropriately. Environment First confirmed that the hypothetical drift was applied correctly. No drift is applied for data prior to the 6/14/2023 calibration for flow meter S/N 418655 due to underreporting flow. Environment First confirmed that no drift adjustment was applied for data prior to the June 14, 2023 calibration of the thermal oxidizer meter S/N 418655. The verifier confirms that the monitoring plan specifies the appropriate cleaning and inspection and field check schedules to ensure that future reporting periods will meet the protocol QA/QC requirements. Environment First confirmed that Table 3 of the Monitoring Plan contains sufficient detail and description of the type and frequency of meter maintenance activities consistent with Protocol requirements. The verifier confirms that all other QA/QC requirements have been met. Environment First confirmed that all other conditions have been met.", + "G75": "Based on the historical evidence collected and the assessments performed, Environment First concludes that the Project’s GHG emissions reductions achieved through the collection and combustion of landfill gas for the periods of June 01, 2023 through May 31, 2024 can be considered with a reasonable level of assurance: • in conformance with the verification criteria, and • without material discrepancy.", + "G76": { + "G5": { + "G5": "2023-06-01", + "G6": "2024-05-31" + }, + "G8": 1080, + "G9": 200, + "G10": 880 + } +} +Object.values(__request).forEach(r=>r.preset(_pp)); \ No newline at end of file diff --git a/Methodology Library/Climate Action Reserve/US Landfill/readme.md b/Methodology Library/Climate Action Reserve/US Landfill/readme.md new file mode 100644 index 0000000000..578c717f5c --- /dev/null +++ b/Methodology Library/Climate Action Reserve/US Landfill/readme.md @@ -0,0 +1,241 @@ +## Climate Action Reserve’s U.S. Landfill Protocol Version 6.0 + +## Table of Contents + + +- Introduction +- Need and Use +- Monitoring and Quantification Approach +- Project Eligibility and Additionality +- Project Type +- Demo Video +- Policy Workflow +- Policy Import +- Available Roles +- Important Schemas +- Token (Climate Reserved Tonnes - CRTs) +- Step-by-Step + + + +## Introduction + +The U.S. Landfill Protocol, developed by the Climate Action Reserve, is a standardized framework for quantifying, reporting, and verifying greenhouse gas (GHG) emission reductions from methane capture and destruction projects at U.S. landfills. Approved by the Integrity Council for the Voluntary Carbon Market (ICVCM), this protocol ensures that emission reductions meet high standards of environmental integrity, credibility, and transparency. This ICVCM approval reinforces the protocol’s alignment with global best practices and its credibility in voluntary carbon markets. + +## Need and Use + +The U.S. Landfill Protocol supports project developers in creating projects that effectively reduce emissions from landfill sites. It includes a framework for calculating and verifying emission reductions generated by capturing methane, a potent greenhouse gas, from landfills and using or destroying it. This protocol helps landfill operators and project developers earn credits that can be used to offset emissions in compliance and voluntary carbon markets. + +## Monitoring and Quantification Approach + +The U.S. Landfill Protocol specifies detailed requirements for calculating baseline and project emissions to assess net GHG emission reductions. Key components include: + +**Methane Capture and Destruction:** Continuous monitoring of landfill gas (LFG) collection and destruction is required, using calibrated equipment to measure LFG flow and methane concentration, ensuring accurate quantification of emissions destroyed. + +**Baseline Emissions:** Baseline emissions are calculated based on the methane emissions that would have occurred without the project, minus any methane oxidized by soil bacteria or destroyed by any existing destruction devices. These calculations use specific discount factors for oxidation and other adjustments according to landfill characteristics and monitoring frequency. + +**Project Emissions:** Project emissions include any emissions from the energy used to operate the landfill gas collection and destruction systems, as well as emissions from fossil fuels or supplemental energy sources. + +**Emission Reductions:** Net emission reductions are calculated by subtracting project emissions from baseline emissions, providing a clear assessment of GHG reductions achieved through methane destruction. + +This structured approach allows for consistent, transparent, and conservative reporting of GHG emission reductions in line with the Climate Action Reserve's requirements. + +## Project Eligibility and Additionality + +Projects must meet specific eligibility requirements to qualify under this protocol: + +- **Location:** Projects must be located at landfills in the U.S., including tribal lands and territories. + +- **Project Start Date:** The project start date should be defined by the first instance of landfill gas destruction, with project submission required within 12 months of this date. + +- Additionality is demonstrated through the performance standard test (based on baseline conditions) and the legal requirement test (ensuring no regulatory mandates already require methane destruction). Only landfill projects that collect and destroy methane beyond regulatory requirements qualify for additionality, ensuring that GHG reductions are surplus to business-as-usual scenarios. + +## Project Type + +This protocol applies to projects that aim to reduce methane emissions from U.S. landfills by capturing and utilizing or destroying methane gas. Only projects that meet the Climate Action Reserve’s eligibility criteria and have not issued credits under other GHG programs are eligible. + +## Demo Video + +[Youtube](https://www.youtube.com/watch?v=fDTobFguBJE) + +## Policy Workflow + +The policy workflow replicates the procedural steps required for landfill gas projects, covering project registration, additionality demonstration, and the submission of monitoring reports to claim carbon credits. + +![image](https://github.com/user-attachments/assets/dbdb7733-e474-45d4-b15c-35413a1a0980) + +## Policy Import + +This policy is available for import via GitHub or IPFS timestamp. + +IPFS Timestamp: 1732046103.613084486 + +## Available Roles + +**Project Developer:** Responsible for overall project management, documentation submission, and coordination with verification bodies. + +**Verifier(s):** Independent third-party verifiers who assess project data and ensure compliance with protocol requirements. + +**Standard Registry:** The governing body that maintains project records, manages reporting, and approves credit issuance. + +## Important Schemas + +**Project Submission Form:** This form provides a comprehensive overview of the project, including landfill site details, baseline emissions, monitoring plans, and stakeholder consultations. It serves as the foundational document for project registration with the Climate Action Reserve. + +**Verification Report:** Submitted by an independent third-party verifier, this report evaluates the accuracy of the emissions reductions claimed by the project. It includes findings on project compliance, monitoring data, and any identified discrepancies or recommendations for improvement. + +**Emission Reductions Report:** This document provides a summary of the emission reductions accomplished by the project. It details the methodologies used, calculations used, and calculation results. + +**Attestation of Title Form:** Signed by the Project Developer, this form certifies ownership of the project’s GHG reductions. Clear ownership documentation ensures that CRTs are issued only to entities with verified rights to claim these reductions. + +**Attestation of Voluntary Implementation:** This attestation is signed by the Project Developer to confirm that the project’s landfill gas collection and destruction activities go beyond any regulatory requirements. It is submitted prior to verification, ensuring that GHG reductions are genuinely additional to what would have occurred under existing legal mandates. + +**Attestation of Regulatory Compliance:** This attestation confirms that the project complies with all applicable federal, state, and local laws and regulations (e.g., environmental, safety). The Project Developer must disclose any instances of non-compliance to the verifier, who assesses the impact on credit issuance. + +**Environmental Safeguards:** This schema ensures that project activities align with environmental best practices, minimizing unintended impacts on local ecosystems, air, water, and soil quality. The Project Developer must document steps taken to prevent adverse environmental effects, such as controlling potential pollutants, managing resource use, and protecting nearby habitats. This schema may also include periodic environmental impact assessments as part of ongoing compliance and verification. + +## Token (Climate Reserve Tonnes - CRTs) + +Each CRT represents one metric tonne of carbon dioxide equivalent (tCO₂e) reduced or avoided through the approved project activities. + +### Step By Step + +1. Import the policy using IPFS or Policy File. Once imported, you will be redirected to the policy configurator. + +![image](https://github.com/user-attachments/assets/8c5ab2a7-dc64-481d-9664-e4908c0d3d8c) + +![image](https://github.com/user-attachments/assets/636333c0-b93e-4cc4-aaed-5bb2c51201d9) + +![image](https://github.com/user-attachments/assets/6b0f9fba-5e35-423f-b671-c6a83b3850bc) + +2. Set the policy to Dry Run or Publish it using the dropdown. Then select “Go” or “Register”. + +![image](https://github.com/user-attachments/assets/8dc8d7fa-46a4-4326-bd6e-60d67ec027d4) + +![image](https://github.com/user-attachments/assets/2169c25d-4211-4fdc-a660-6041fdf22787) + +3. Create a new user account and assign their role as the Project Developer. + +![image](https://github.com/user-attachments/assets/2e4ae3d1-bb43-4d48-934d-bbeefd953e81) + +![image](https://github.com/user-attachments/assets/8a9b790e-8e62-4640-9db0-2730a1dd21f5) + +![image](https://github.com/user-attachments/assets/853b683d-359d-4499-a997-dc1461db418a) + +![image](https://github.com/user-attachments/assets/05c26582-aeb2-4910-baca-a932eb85e5a5) + +4. Log in to the administrator account to review and approve the Project Developer account. + +![image](https://github.com/user-attachments/assets/4d63751b-67e3-4d70-b528-f38604673bfd) + +5. The Project Developer can click 'Create Project' to submit the Project Submission Form. + +![image](https://github.com/user-attachments/assets/2c92b4ad-490e-487c-983a-a90e4182654c) + +![image](https://github.com/user-attachments/assets/7c7f9dd4-a90e-4907-a53d-f446b467083e) + +6. The Project Developer can also submit a Project Diagram. + +![image](https://github.com/user-attachments/assets/02f83792-764d-437a-a849-f023a2565bdc) + +![image](https://github.com/user-attachments/assets/e61af0df-2468-4a1d-9b1a-ffbef4595753) + +7. Return to the administrator account to review the Project Submission Form and the Project Diagram for completeness and approve both submissions. + +![image](https://github.com/user-attachments/assets/8a70923d-23cd-46cc-816d-247e420c2da4) + +![image](https://github.com/user-attachments/assets/edbef16e-64c4-4fe7-9a87-3fa3152b16e6) + +8. Now, we will create a new user to add a verifier account. + +![image](https://github.com/user-attachments/assets/7d31c1cb-8ab7-4fc6-a568-814ff46b1062) + +![image](https://github.com/user-attachments/assets/a69046a5-90de-49ff-94d3-9fcd0e126cbe) + +![image](https://github.com/user-attachments/assets/7528cfcf-8e77-40d8-9f91-0596dbb8b291) + +![image](https://github.com/user-attachments/assets/28511d2f-5c52-4cb9-992c-ae205d757d8b) + +9. Log in to the Administrator account to review and approve the Verifier account. + +![image](https://github.com/user-attachments/assets/a9d6c8d5-3e36-4f18-a0b4-7d40d50d4ae3) + +10. The Verifier must complete a NOVA/COI form and submit it to the Administrator. + +![image](https://github.com/user-attachments/assets/4e95a8c8-1d24-4f3a-a087-321a1c9325d2) + +11. Log in to the Administrator account and approve the NOVA/COI form. This policy also allows the Administrator to identify a conflict of interest (COI) as outlined in the workflow above. + +![image](https://github.com/user-attachments/assets/e9af5f27-9fa0-430f-ae3f-d241a22d7268) + +12. Once the NOVA/COI form has been approved with no COIs identified you can log in to the Project Developer account and assign a Verifier to the project. This will allow the verifier to see the project submission form. + +![image](https://github.com/user-attachments/assets/bd5d59ab-72e4-4ca2-8476-119ae4ae739c) + +![image](https://github.com/user-attachments/assets/1e3f4919-2997-4f83-9bf3-4bca973cc42a) + +![image](https://github.com/user-attachments/assets/d02fc0ae-3e0c-4229-b8d9-4efc5bf84be1) + +13. The Project Developer can submit all the forms outlined in the project documents tab, assigning the third-party verifier to each form. + +![image](https://github.com/user-attachments/assets/9efe0f93-49af-49d8-ab4c-fe9f11f23230) + +![image](https://github.com/user-attachments/assets/24fec958-78d0-498a-9cac-4e6e548ae13c) + +14. Using the assigned Verifier account, they can now review and approve all the project documents. Once approved they can complete and submit the Verification Report. + +![image](https://github.com/user-attachments/assets/e8bdfa99-286f-43a5-8a3d-a4cec9fea895) + +![image](https://github.com/user-attachments/assets/dfbb9b30-c859-4fc7-ac42-6a1efa057014) + +![image](https://github.com/user-attachments/assets/afcca1de-bc44-4e37-a24e-4718a86e0b94) + +15. The Administrator must review the report for completeness and choose to approve or reject. + +![image](https://github.com/user-attachments/assets/fb49e085-837a-4bba-a176-c917ae0b3de1) + +16. The final step before issuing credits would be to approve the Emission Reductions from the Administrators account. + +![image](https://github.com/user-attachments/assets/993e0b2d-1550-46a8-bab5-99eeb1f064bb) + +17. The project owner and administrator will have access to the Verifiable Presentation (VP) and Trust Chain. + +![image](https://github.com/user-attachments/assets/99fcdceb-ae8f-46e7-9074-7326e5c875e5) + +![image](https://github.com/user-attachments/assets/83eb74d0-1d99-4599-941e-b6399113b646) + +![image](https://github.com/user-attachments/assets/aca752ff-aaae-4d12-8b47-a37d3708a8ff) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Methodology Library/Climate Action Reserve/readme.md b/Methodology Library/Climate Action Reserve/readme.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/Methodology Library/Climate Action Reserve/readme.md @@ -0,0 +1 @@ + diff --git a/Methodology Library/GHG Methodology/GHGP Policy/GHGP Policy 2.policy b/Methodology Library/GHG Methodology/GHGP Policy/GHGP Policy 2.policy new file mode 100644 index 0000000000..5705041fe0 Binary files /dev/null and b/Methodology Library/GHG Methodology/GHGP Policy/GHGP Policy 2.policy differ diff --git a/Methodology Library/GHG Methodology/GHGP Policy/readMe.md b/Methodology Library/GHG Methodology/GHGP Policy/readMe.md index e461eebe19..7e51ece557 100644 --- a/Methodology Library/GHG Methodology/GHGP Policy/readMe.md +++ b/Methodology Library/GHG Methodology/GHGP Policy/readMe.md @@ -48,7 +48,7 @@ Coming Soon This policy is published to Hedera network and can either be imported via Github (.policy file) or IPFS timestamp. -Latest Version - 1707206253.006698003 +Latest Version - 1732046664.657263946 ### Available Roles diff --git a/Methodology Library/Gold Standard/Metered Energy Cooking/MECD 431_V1.2.policy b/Methodology Library/Gold Standard/Metered Energy Cooking/MECD 431_V1.2.policy new file mode 100644 index 0000000000..131f5c0f7f Binary files /dev/null and b/Methodology Library/Gold Standard/Metered Energy Cooking/MECD 431_V1.2.policy differ diff --git a/Methodology Library/Gold Standard/Metered Energy Cooking/policy_1681746158210.policy b/Methodology Library/Gold Standard/Metered Energy Cooking/policy_1681746158210.policy deleted file mode 100644 index c21adae287..0000000000 Binary files a/Methodology Library/Gold Standard/Metered Energy Cooking/policy_1681746158210.policy and /dev/null differ diff --git a/Methodology Library/Gold Standard/Metered Energy Cooking/readme.md b/Methodology Library/Gold Standard/Metered Energy Cooking/readme.md index 256996f49f..08adf08c15 100644 --- a/Methodology Library/Gold Standard/Metered Energy Cooking/readme.md +++ b/Methodology Library/Gold Standard/Metered Energy Cooking/readme.md @@ -4,7 +4,6 @@ - [Table of content](#table-of-content) - [Introduction](#introduction) - [Why ME\&ED(Metered and Measured Energy) Methodology?](#why-meedmetered-and-measured-energy-methodology) -- [Demo Video](#demo-video) - [Policy Workflow](#policy-workflow) - [Policy Guide](#policy-guide) - [Available Roles](#available-roles) @@ -19,7 +18,6 @@ - [Existing Cookstove Policy Comparison](#existing-cookstove-policy-comparison) - ## Introduction According to [Gold Standard](https://www.goldstandard.org/our-story/sector-community-based-energy-efficiency) more than 3 billion people lack access to clean cooking solutions leading to over 4 million premature deaths each year. This doesn't attribute the havoc GHG emissions from wood or fossil fuel based cookstoves are going to cause in the future. @@ -45,9 +43,6 @@ According to a new [research](https://assets.researchsquare.com/files/rs-2606020 This approach is more precise than traditional methodologies, which rely on more generalized assumptions or estimates to calculate emissions reductions. It also places a strong emphasis on stakeholder engagement and the inclusion of local communities in the project development and monitoring process. This approach promotes greater transparency and accountability and helps to ensure that the environmental and social benefits of the project are maximized. This Guardian policy, is a reflection of same methodology according to the [Gold standard's typical project lifecycle](https://academy.sustain-cert.com/wp-content/uploads/sites/3/2021/10/GS-Project-Cycle_15042021_Annyta.pdf). -## Demo Video - -[Youtube](https://youtu.be/nOQpLmbW0hA) ## Policy Workflow diff --git a/Methodology Library/GoldStandard/Metered Energy Cooking/policy_1680447518952.policy b/Methodology Library/GoldStandard/Metered Energy Cooking/policy_1680447518952.policy deleted file mode 100644 index 6ac6076a98..0000000000 Binary files a/Methodology Library/GoldStandard/Metered Energy Cooking/policy_1680447518952.policy and /dev/null differ diff --git a/Methodology Library/GoldStandard/Metered Energy Cooking/readme.md b/Methodology Library/GoldStandard/Metered Energy Cooking/readme.md deleted file mode 100644 index b238416d5a..0000000000 --- a/Methodology Library/GoldStandard/Metered Energy Cooking/readme.md +++ /dev/null @@ -1,196 +0,0 @@ -## Table of content - - -- [Table of content](#table-of-content) -- [Introduction](#introduction) -- [Why ME\&ED(Metered and Measured Energy) Methodology?](#why-meedmetered-and-measured-energy-methodology) -- [Policy Workflow](#policy-workflow) -- [Policy Guide](#policy-guide) - - [Available Roles](#available-roles) - - [Important Documents \& Schemas](#important-documents--schemas) - - [Token(Carbon credit)](#tokencarbon-credit) - - [Step By Step](#step-by-step) - - [Registry(Gold Standard) Flow](#registrygold-standard-flow) - - [Project Proponent Flow](#project-proponent-flow) - - [VVB Flow](#vvb-flow) -- [Futureproofing(Automated credit issuance)](#futureproofingautomated-credit-issuance) -- [Existing Cookstove Policy Comparison](#existing-cookstove-policy-comparison) - - - -## Introduction - -According to [Gold Standard](https://www.goldstandard.org/our-story/sector-community-based-energy-efficiency) more than 3 billion people lack access to clean cooking solutions leading to over 4 million premature deaths each year. This doesn't attribute the havoc GHG emissions from wood or fossil fuel based cookstoves are going to cause in the future. - -According to the 2021 State of the Voluntary Carbon Markets report by Ecosystem Marketplace, improved cookstoves were the second most popular project type in the voluntary carbon market in 2020, accounting for 13% of all carbon offsets transacted. In 2020, cookstove projects generated over 13 million carbon offsets, with an estimated value of $48.6 million USD. The report notes that cookstove projects continue to be popular due to their multiple co-benefits, including improved health outcomes, reduced fuel consumption, and reduced deforestation. - -This Guardian Policy tokenizes the VER(verified emission reduction) after verifying emissions reductions from improved cookstove projects according to Gold standard's methodology for Metered & Measured Energy Cooking Devices (ME&ED). The methodology is based on the use of energy meters and temperature sensors to collect data on the energy consumption and thermal efficiency of cookstoves, which is then used to calculate the emissions reductions achieved. - -## Why ME&ED(Metered and Measured Energy) Methodology? - -Carbon offsets from improved cookstove projects help advance Sustainable Development Goals 13 (climate), 7 (energy), 5 (gender), and 3 (health). However, for the carbon offsets generated from these projects to be considered legitimate, methodologies must provide accurate or conservative measurements of the climate impact of these projects. - -Recently, a striking [report](https://www.theguardian.com/environment/2023/jan/18/revealed-forest-carbon-offsets-biggest-provider-worthless-verra-aoe) by The Guardian (media group) exposed the flaws in Verra's REDD+ scheme leading them to [phase out](https://www.theguardian.com/environment/2023/mar/10/biggest-carbon-credit-certifier-replace-rainforest-offsets-scheme-verra-aoe) their methodologies. Such exposures dwindle the stakeholder's sentiment in the carbon markets and hence it is extremely important to build and choose right methodology for carbon projects. - -There are a bunch of improved cookstove methodologies to choose from - -- [GS-TPDDTEC](https://globalgoals.goldstandard.org/407-ee-ics-technologies-and-practices-to-displace-decentrilized-thermal-energy-tpddtec-consumption/) -- [GS-Simplified](https://globalgoals.goldstandard.org/408-ee-ics-simplified-methodology-for-efficient-cookstoves/) -- [CDM-AMS-II-G](https://cdm.unfccc.int/methodologies/DB/GNFWB3Y6GM4WPXFRR2SXKS9XR908IO) -- [CDM-AMS-I-E](https://cdm.unfccc.int/methodologies/DB/JB9J7XDIJ3298CLGZ1279ZMB2Y4NPQ) -- [GS-Metered-Energy](https://globalgoals.goldstandard.org/news-methodology-for-metered-measured-energy-cooking-devices/) - -According to a new [research](https://assets.researchsquare.com/files/rs-2606020/v1/c2e6a772-b013-49f9-9fc4-8d7d82d4bebc.pdf?c=1678869691) from scholars of University of California, Berkeley - Gold Standard’s Metered and Measured methodology, which directly monitors fuel use, is most aligned with the estimates (only 1.3 times over-credited) and is best suited for fuel switching projects which provide the most abatement potential and health benefit. - -This approach is more precise than traditional methodologies, which rely on more generalized assumptions or estimates to calculate emissions reductions. It also places a strong emphasis on stakeholder engagement and the inclusion of local communities in the project development and monitoring process. This approach promotes greater transparency and accountability and helps to ensure that the environmental and social benefits of the project are maximized. This Guardian policy, is a reflection of same methodology according to the [Gold standard's typical project lifecycle](https://academy.sustain-cert.com/wp-content/uploads/sites/3/2021/10/GS-Project-Cycle_15042021_Annyta.pdf). - -## Policy Workflow - - image - -## Policy Guide - -This policy is published to Hedera network and can either be imported via Github(.policy file) or IPFS timestamp. - -image - - -### Available Roles - - - Project Proponent - Project developer who proposes and executes cookstove project and receives credits(VER) - - VVB(Validation & Verification Body) - Independent third party who audits project's critical documentation and monitoring reports - - Gold Standard(GS) - GS is the trusted registry overseeing the entire project cycle and issuing the credits(VER) - -### Important Documents & Schemas - - 1. Registry Account Application(RAA) - Account applications to become a project proponent, VVB with registry - 2. Project Inception Document (PID) - Preliminary design of project highlighting eligibility, additionality and methodology criteria along with stakeholder consultation report - 3. Project Design Document (PDD) - Submitted after PID is approved, detailed report on project execution, emissions calculations and sustainable development goals. - 4. Monitoring Report (MR) - Monitoring report contains analysis on cookstove usages on the sample group and estimates carbon avoided/reduced - 5. VER Credit Request(VCR) - Requesting specified number of credits into Hedera account - 6. Measuring Device - Registering a stove usage IOT device alongside the cookstove for automatic MRs - 7. VER Auto Credit Request(VACR) - Requesting automated issuance of credits based on data sent by a measuring device - -### Token(Carbon credit) - Verified Emission Reduction(VER) equivalent to 1 ton of CO2 offset - -### Step By Step - -#### Registry(Gold Standard) Flow - -Registry is allowed to publish and edit policy config, schemas, tokens and all the workflow logic associated with it. They are responsible for approving projects, project proponents, VVBs, and credit issue requests. - -1. Login into the service using registry credentials - - image - -2. Feel free to play around with policy config by clicking on edit icon and understanding the differnt schemas used by policy - - edit policy - - Schemas - - Policy edit shot - -3. Registry can review account applications by clicking manage accounts - - Screenshot 2023-04-01 at 5 04 16 PM - -4. Registry can review project inception documents allowing the listing of projects on standard website and trigger project execution on ground. - - image - -5. Once PDD and MR are approved by VVB, project proponents can submit credit issue requests(VER) which registries have to take decisions on. - - Screenshot 2023-04-01 at 6 29 07 PM - -6. Once VER issue request is approved, an end-to-end trust chain can be viewed by administrator. Since everything is happening transparently on public ledger(Hedera), anyone can trace the source of credits and each step that happened in the process. - - ![trustchain](https://user-images.githubusercontent.com/9518151/229289672-6e33a6b4-af1d-427a-b742-ba68a6a9e162.png) - - -#### Project Proponent Flow - -1. Complete the sign up form(RAA) to become a project proponent - - Screenshot 2023-04-01 at 5 03 05 PM - - Screenshot 2023-03-26 at 9 04 01 PM - -2. Wait till the application is approved by the registry admin. Once approved, proponents will be able to submit project inception documents. This includes stakeholder consultation report as well. - - image - - image - -3. Once project is approved by registry, a detailed PDD(project design document) needs to be submitted. This is the most important document highlighting the technical details of project. It includes calculations around baseline, project and leakage scenarios for accurate calculation of avoided emissions. - - image - - image - -4. After PDD approval, project proponent will execute the project on ground and submit regular monitoring reports(MR) - - image - -5. Once a monitoring report is approved by VVB, project proponent can request corresponding carbon credits(VER in this case) to be credited in their account. It would need a VC document ID for both monitoring report and it's approved review by VVB. - - image - - image - -6. Once registry reviews and approves the credit request, they'll be credited into the hedera account provided by project proponent. This is represented by successful minted status. - - image - - -#### VVB Flow - -VVB is the external independent third party responsible for reviewing Project Design Documents and Monitoring reports submitted by proponents. They can comment and reject/request changes as well. - -1. After logging in as VVB, they can view review requests related to project documents. First step is to review PDDs submitted by project proponents. - - Screenshot 2023-04-01 at 6 20 50 PM - - Screenshot 2023-04-01 at 6 21 49 PM - - Screenshot 2023-04-01 at 6 22 34 PM - -2. After PDD approval, proponents will be able to send monitoring reports for review. Once approved, project proponents will be able to claim corresponding VERs. - - Screenshot 2023-04-01 at 6 24 00 PM - - -## Futureproofing(Automated credit issuance) - -This workflow includes a bonus flow which is a major distinction from other existing policies. Building monitoring reports for cookstove projects is a very manual and error-prone process due to distributed nature of project. Often, a sample group of households are selected to be monitored and results are extrapolated for all the households(in thousands) leading to overcrediting. Since this methodology focuses on having direct measurement devices associated with a stove, an automated way of monitoring is possible. - -image - -1. Project proponent can register a measuring device associated a given cookstove - - image - -2. Device can be approved/rejected by the VVB - - image - -3. Once approved, project developer can raise on-demand credit issuance associated with approved devices. These requests would contain stove fuel usage and temperature data collected automatically by the device - - image - - image - -4. After an approval from VVB for the automated monitoring report, VER mint will be initiated in owner account. This will help in faster crediting cycles along with a transparent process for tracking all the intermediate steps. It'll be a huge boost to scaling up the supply of credits in VCM(Voluntary carbon markets). - -## Existing Cookstove Policy Comparison - -Latest version of Guardian provides a policy for [improved cookstoves](https://docs.hedera.com/guardian/guardian/demo-guide/carbon-offsets/improved-cookstove). This new Guardian policy builds on top of it to make it more robust, aligned and future-proof. - -| **Features** | **ME&ED** | **Improved Cookstove** | -|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|------------------------| -| Follows VCM industry project cycle and terminologies(Verra, Gold Standard) | Yes(GS) | No | -| Substantial overcrediting possible | No | Yes | -| Critical metrics tracked directly in VC document - Additionality criteria \| Baseline emissions calculation \| Project emissions calculation \| Leakage emissions | Yes \| Yes \| Yes \| Yes | No \| No \| No \| No | -| IOT based monitoring & automated credit issuance | Yes | No | -| Scalable according to future credits demand | Yes | No | -| Exhaustive documentation | Yes | No(incomplete) | diff --git a/Methodology Library/Verra/Verra Redd/VM0003/README.md b/Methodology Library/Verra/Verra Redd/VM0003/README.md index 4a5d455175..107956d379 100644 --- a/Methodology Library/Verra/Verra Redd/VM0003/README.md +++ b/Methodology Library/Verra/Verra Redd/VM0003/README.md @@ -13,7 +13,6 @@ Verra VM0003 is a carbon offset methodology titled "Improved Forest Management ( ![Workflow Diagram](https://github.com/user-attachments/assets/f3bd6e89-1381-476e-881a-9f908522bbe3) - 1. **Project Proponent Submission**: The project proponent begins by submitting the Project Design (PD) to Verra. This document includes ex-ante estimates of monitoring parameters and detailed project information demonstrating compliance with VCS program requirements specific to VM0003. 2. **Verra's Initial Review**: Verra reviews the submitted Project Design and adds the project to the Project Pipeline. 3. **Validation by VVB**: A Validation and Verification Body (VVB) assesses the PD, focusing on the alignment with VCS requirements, and provides a Validation Report. @@ -24,6 +23,10 @@ Verra VM0003 is a carbon offset methodology titled "Improved Forest Management ( 8. **Continuous Monitoring**: Continuously monitor the project's impact according to the established methodology and guidelines, updating the project documentation and reporting to Verra as required. 9. **Ongoing Validation and Verification**: Engage with a VVB for periodic validation and verification as per Verra’s requirements and the project's monitoring plan to ensure ongoing compliance and to validate the emission reductions achieved over time. +## Demo Video + +[Demonstration Video (YouTube Link)](https://youtu.be/-BjsMIABkVs) + ## Policy Guide This policy can be imported via Github (.policy file) or IPFS timestamp. diff --git a/Methodology Library/Verra/Work In Progress/VM0033/VM0033.policy b/Methodology Library/Verra/Work In Progress/VM0033/VM0033.policy index 66ac14fbca..3002b6a9f1 100644 Binary files a/Methodology Library/Verra/Work In Progress/VM0033/VM0033.policy and b/Methodology Library/Verra/Work In Progress/VM0033/VM0033.policy differ diff --git a/Methodology Library/Verra/Work In Progress/VM0033/VM0033_policy_schemas_1728474580421.xlsx b/Methodology Library/Verra/Work In Progress/VM0033/policy_1729228338183.xlsx similarity index 92% rename from Methodology Library/Verra/Work In Progress/VM0033/VM0033_policy_schemas_1728474580421.xlsx rename to Methodology Library/Verra/Work In Progress/VM0033/policy_1729228338183.xlsx index e47a401e34..bf8296063a 100644 Binary files a/Methodology Library/Verra/Work In Progress/VM0033/VM0033_policy_schemas_1728474580421.xlsx and b/Methodology Library/Verra/Work In Progress/VM0033/policy_1729228338183.xlsx differ diff --git a/Methodology Library/Verra/Work In Progress/VM0033/readme.md b/Methodology Library/Verra/Work In Progress/VM0033/readme.md index 55f81b2535..958750ffd1 100644 --- a/Methodology Library/Verra/Work In Progress/VM0033/readme.md +++ b/Methodology Library/Verra/Work In Progress/VM0033/readme.md @@ -59,13 +59,12 @@ VM0033 on Guardian platform is set to become a powerful tool for scaling up tida ## Policy Workflow -Coming Soon ## Policy Guide First version of this policy is published to the Hedera network and can be imported via Github (.policy file) or IPFS timestamp. -IPFS Timestamp of 0.0.1 - 1728312926.986578213 +IPSF Timestamp of 0.0.2 - 1729153016.931600601 ### Available Roles @@ -111,4 +110,4 @@ Verified Carbon Units (VCUs), each equivalent to one tonne of CO2 equivalent emi 10. The issued VCUs are recorded on the Hedera ledger, ensuring transparency and traceability. -[TODO: Detailed steps with screenshots to be added] +[TODO: Detailed steps with screenshots to be added] \ No newline at end of file diff --git a/Methodology Library/readme.md b/Methodology Library/readme.md index e30ca0ca71..772cde4f36 100644 --- a/Methodology Library/readme.md +++ b/Methodology Library/readme.md @@ -63,9 +63,10 @@ This folder contains sub folders for each Methodology and their authors (with ma 3. GHG Scope II - Atma 4. GHG Scope 3 - Atma 5. GHGP Corporate Standard - Envision -6. GHGP Product Standard - Avery Dennison (Coming soon) -7. E-Mission (Coming soon) -8. EPA CFR 40 p75 - Serapis (Coming soon) +6. Climate Action Reserve’s U.S. Landfill Protocol Version 6.0 - Envision +7. GHGP Product Standard - Avery Dennison (Coming soon) +8. E-Mission (Coming soon) +9. EPA CFR 40 p75 - Serapis (Coming soon) ### Hackathon Policies (Under Testing) diff --git a/README.md b/README.md index b187ffaa87..28c680d92d 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,7 @@ To let the Multi-environment transition happen in a transparent way the `GUARDIA - As a second example: to test the new release change the HEDERA_NET to "testnet". This is the complete configuration: - Set the name of the Guardian platform to whatever descripting name in the `.env` file + Set the name of the Guardian platform to whatever description name in the `.env` file ```shell GUARDIAN_ENV="testupgrading" diff --git a/ai-service/.gitignore b/ai-service/.gitignore index e1597c74f3..82f0c3ac6d 100644 --- a/ai-service/.gitignore +++ b/ai-service/.gitignore @@ -1,2 +1 @@ -/faiss-vector/ /data/ diff --git a/ai-service/faiss-vector/faiss.index b/ai-service/faiss-vector/faiss.index new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api-gateway/src/api/service/contract.ts b/api-gateway/src/api/service/contract.ts index f5824c87bf..b408e86912 100644 --- a/api-gateway/src/api/service/contract.ts +++ b/api-gateway/src/api/service/contract.ts @@ -1,10 +1,10 @@ import { ContractType, Permissions } from '@guardian/interfaces'; import { IAuthUser, PinoLogger } from '@guardian/common'; import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Post, Query, Req, Response } from '@nestjs/common'; -import { ApiInternalServerErrorResponse, ApiOkResponse, ApiCreatedResponse, ApiOperation, ApiExtraModels, ApiTags, ApiBody, ApiQuery, ApiParam, } from '@nestjs/swagger'; -import { ContractConfigDTO, ContractDTO, RetirePoolDTO, RetirePoolTokenDTO, RetireRequestDTO, RetireRequestTokenDTO, WiperRequestDTO, InternalServerErrorDTO, pageHeader } from '#middlewares'; -import { AuthUser, Auth } from '#auth'; -import { Guardians, UseCache, InternalException, EntityOwner, CacheService, getCacheKey } from '#helpers'; +import { ApiBody, ApiCreatedResponse, ApiExtraModels, ApiInternalServerErrorResponse, ApiOkResponse, ApiOperation, ApiParam, ApiQuery, ApiTags, } from '@nestjs/swagger'; +import { ContractConfigDTO, ContractDTO, InternalServerErrorDTO, pageHeader, RetirePoolDTO, RetirePoolTokenDTO, RetireRequestDTO, RetireRequestTokenDTO, TransactionDTO, WiperRequestDTO } from '#middlewares'; +import { Auth, AuthUser } from '#auth'; +import { CacheService, EntityOwner, getCacheKey, Guardians, InternalException, UseCache } from '#helpers'; /** * Contracts api @@ -179,6 +179,52 @@ export class ContractsApi { } } + /** + * Return all transactions for schema + * @param user + * @param contractId + */ + @Get('/:contractId/transactions') + @Auth( + Permissions.CONTRACTS_CONTRACT_READ, + // UserRole.STANDARD_REGISTRY, + // UserRole.AUDITOR ?, + // UserRole.USER ? + ) + @ApiOperation({ + summary: 'Return all transactions for contract.', + description: 'Return all transactions for contract.', + }) + @ApiParam({ + name: 'contractId', + type: String, + description: 'Contract identifier', + required: true + }) + @ApiOkResponse({ + description: 'Successful operation.', + isArray: true, + type: TransactionDTO + }) + @ApiInternalServerErrorResponse({ + description: 'Internal server error.', + type: InternalServerErrorDTO + }) + @ApiExtraModels(TransactionDTO, InternalServerErrorDTO) + @HttpCode(HttpStatus.OK) + async getSchemaTransactions( + @AuthUser() user: IAuthUser, + @Param('contractId') contractId: string, + ): Promise { + try { + const guardians = new Guardians(); + const owner = new EntityOwner(user); + return await guardians.getTransactions(contractId, 'contract', owner); + } catch (error) { + await InternalException(error, this.logger); + } + } + /** * Get contract permissions */ diff --git a/api-gateway/src/api/service/policy.ts b/api-gateway/src/api/service/policy.ts index 99e09bee06..4d8d9adfe8 100644 --- a/api-gateway/src/api/service/policy.ts +++ b/api-gateway/src/api/service/policy.ts @@ -3,8 +3,8 @@ import { IAuthUser, PinoLogger, RunFunctionAsync } from '@guardian/common'; import { DocumentType, Permissions, PolicyHelper, TaskAction, UserRole } from '@guardian/interfaces'; import { Body, Controller, Delete, Get, HttpCode, HttpException, HttpStatus, Param, Post, Put, Query, Req, Response, UseInterceptors, Version } from '@nestjs/common'; import { ApiAcceptedResponse, ApiBody, ApiConsumes, ApiExtraModels, ApiInternalServerErrorResponse, ApiOkResponse, ApiOperation, ApiParam, ApiQuery, ApiServiceUnavailableResponse, ApiTags } from '@nestjs/swagger'; -import { BlockDTO, Examples, ExportMessageDTO, ImportMessageDTO, InternalServerErrorDTO, MigrationConfigDTO, pageHeader, PoliciesValidationDTO, PolicyCategoryDTO, PolicyDTO, PolicyPreviewDTO, PolicyTestDTO, PolicyValidationDTO, RunningDetailsDTO, ServiceUnavailableErrorDTO, TaskDTO } from '#middlewares'; -import { AnyFilesInterceptor, CacheService, EntityOwner, getCacheKey, InternalException, ONLY_SR, PolicyEngine, ProjectService, ServiceError, TaskManager, UploadedFiles, UseCache } from '#helpers'; +import { BlockDTO, Examples, ExportMessageDTO, ImportMessageDTO, InternalServerErrorDTO, MigrationConfigDTO, pageHeader, PoliciesValidationDTO, PolicyCategoryDTO, PolicyDTO, PolicyPreviewDTO, PolicyTestDTO, PolicyValidationDTO, RunningDetailsDTO, ServiceUnavailableErrorDTO, TaskDTO, TransactionDTO } from '#middlewares'; +import { AnyFilesInterceptor, CacheService, EntityOwner, getCacheKey, Guardians, InternalException, ONLY_SR, PolicyEngine, ProjectService, ServiceError, TaskManager, UploadedFiles, UseCache } from '#helpers'; import { CACHE, POLICY_REQUIRED_PROPS, PREFIXES } from '#constants'; async function getOldResult(user: IAuthUser): Promise { @@ -398,6 +398,52 @@ export class PolicyApi { return task; } + /** + * Return all transactions for schema + * @param user + * @param policyId + */ + @Get('/:policyId/transactions') + @Auth( + Permissions.POLICIES_POLICY_REVIEW, + // UserRole.STANDARD_REGISTRY, + // UserRole.AUDITOR ?, + // UserRole.USER ? + ) + @ApiOperation({ + summary: 'Return all transactions for policy.', + description: 'Return all transactions for policy.', + }) + @ApiParam({ + name: 'policyId', + type: String, + description: 'Policy identifier', + required: true + }) + @ApiOkResponse({ + description: 'Successful operation.', + isArray: true, + type: TransactionDTO + }) + @ApiInternalServerErrorResponse({ + description: 'Internal server error.', + type: InternalServerErrorDTO + }) + @ApiExtraModels(TransactionDTO, InternalServerErrorDTO) + @HttpCode(HttpStatus.OK) + async getSchemaTransactions( + @AuthUser() user: IAuthUser, + @Param('policyId') policyId: string, + ): Promise { + try { + const guardians = new Guardians(); + const owner = new EntityOwner(user); + return await guardians.getTransactions(policyId, 'policy', owner); + } catch (error) { + await InternalException(error, this.logger); + } + } + /** * Delete policy */ diff --git a/api-gateway/src/api/service/profile.ts b/api-gateway/src/api/service/profile.ts index 82eab4bfda..55d2127c8a 100644 --- a/api-gateway/src/api/service/profile.ts +++ b/api-gateway/src/api/service/profile.ts @@ -5,7 +5,7 @@ import { ApiBody, ApiExtraModels, ApiInternalServerErrorResponse, ApiOkResponse, import { CredentialsDTO, DidDocumentDTO, DidDocumentStatusDTO, DidDocumentWithKeyDTO, DidKeyStatusDTO, InternalServerErrorDTO, ProfileDTO, TaskDTO } from '#middlewares'; import { Auth, AuthUser } from '#auth'; import { CacheService, getCacheKey, Guardians, InternalException, ServiceError, TaskManager, UseCache } from '#helpers'; -import { CACHE } from '#constants'; +import {CACHE, PREFIXES} from '#constants'; @Controller('profiles') @ApiTags('profiles') @@ -158,7 +158,10 @@ export class ProfileApi { } catch (error) { throw new HttpException(error.message, HttpStatus.UNAUTHORIZED); } - await this.cacheService.invalidate(getCacheKey([req.url], req.user)) + + const invalidedCacheTags = [`/${PREFIXES.PROFILES}/${username}`]; + + await this.cacheService.invalidate(getCacheKey([req.url, ...invalidedCacheTags], user)) } /** @@ -199,17 +202,23 @@ export class ProfileApi { @HttpCode(HttpStatus.ACCEPTED) async setUserProfileAsync( @AuthUser() user: IAuthUser, - @Body() profile: any + @Body() profile: any, + @Req() req ): Promise { const taskManager = new TaskManager(); const task = taskManager.start(TaskAction.CONNECT_USER, user.id); const username: string = user.username; + const invalidedCacheTags = [`/${PREFIXES.PROFILES}/${username}`]; RunFunctionAsync(async () => { const guardians = new Guardians(); await guardians.createUserProfileCommonAsync(username, profile, task); + + await this.cacheService.invalidate(getCacheKey([req.url, ...invalidedCacheTags], user)) }, async (error) => { await this.logger.error(error, ['API_GATEWAY']); taskManager.addError(task.taskId, { code: error.code || 500, message: error.message }); + + await this.cacheService.invalidate(getCacheKey([req.url, ...invalidedCacheTags], user)) }); return task; } @@ -298,17 +307,24 @@ export class ProfileApi { @HttpCode(HttpStatus.ACCEPTED) async restoreUserProfile( @AuthUser() user: IAuthUser, - @Body() profile: any + @Body() profile: any, + @Req() req ): Promise { const taskManager = new TaskManager(); const task = taskManager.start(TaskAction.RESTORE_USER_PROFILE, user.id); const username: string = user.username; + + const invalidedCacheTags = [`/${PREFIXES.PROFILES}/${username}`]; RunFunctionAsync(async () => { const guardians = new Guardians(); await guardians.restoreUserProfileCommonAsync(username, profile, task); + + await this.cacheService.invalidate(getCacheKey([req.url, ...invalidedCacheTags], user)) }, async (error) => { await this.logger.error(error, ['API_GATEWAY']); taskManager.addError(task.taskId, { code: error.code || 500, message: error.message }); + + await this.cacheService.invalidate(getCacheKey([req.url, ...invalidedCacheTags], user)) }); return task; } @@ -349,17 +365,24 @@ export class ProfileApi { @HttpCode(HttpStatus.ACCEPTED) async restoreTopic( @AuthUser() user: IAuthUser, - @Body() profile: any + @Body() profile: any, + @Req() req ): Promise { const taskManager = new TaskManager(); const task = taskManager.start(TaskAction.GET_USER_TOPICS, user.id); const username: string = user.username; + + const invalidedCacheTags = [`/${PREFIXES.PROFILES}/${username}`]; RunFunctionAsync(async () => { const guardians = new Guardians(); await guardians.getAllUserTopicsAsync(username, profile, task); + + await this.cacheService.invalidate(getCacheKey([req.url, ...invalidedCacheTags], user)) }, async (error) => { await this.logger.error(error, ['API_GATEWAY']); taskManager.addError(task.taskId, { code: error.code || 500, message: error.message }); + + await this.cacheService.invalidate(getCacheKey([req.url, ...invalidedCacheTags], user)) }); return task; } diff --git a/api-gateway/src/api/service/project.ts b/api-gateway/src/api/service/project.ts index 6ae0b12651..cd743423d6 100644 --- a/api-gateway/src/api/service/project.ts +++ b/api-gateway/src/api/service/project.ts @@ -198,38 +198,30 @@ export class ProjectsAPI { throw new HttpException('Invalid parameters', HttpStatus.UNPROCESSABLE_ENTITY); } - const idLvl = 0; - const eventsLvl = 0; - const propLvl = 2; - const childrenLvl = 0; - const user = null; - + const rowDocuments = await guardians.getVcDocuments({ id: ids }); let samePolicy: boolean = true; - const _data = await guardians.getVcDocuments({ id: ids }); - for (let index = 1; index < _data.length; index++) { - if (_data[index - 1].policyId !== _data[index].policyId) { + const policyIds: string[] = []; + for (const id of ids) { + const doc = rowDocuments.find((e) => e.id === id); + if (doc) { + policyIds.push(doc.policyId); + } else { + policyIds.push(null); + } + if (policyIds.length > 1 && policyIds[policyIds.length - 2] !== policyIds[policyIds.length - 1]) { samePolicy = false; - break; } } - const policyIds = _data.map((p: any) => p.policyId); - + const idLvl = 0; + const eventsLvl = 0; + const propLvl = 2; + const childrenLvl = 0; + const user = null; const refLvl = samePolicy ? 'Revert' : 'Merge'; const keyLvl = samePolicy ? 'Default' : 'Property'; try { - const comparationVpArray = await guardians.compareVPDocuments( - user, - null, - policyIds, - '1', - '2', - '2', - '0', - 0, - 'Direct' - ); const comparationVc = await guardians.compareDocuments( user, null, @@ -241,6 +233,17 @@ export class ProjectsAPI { keyLvl, refLvl ); + const comparationVpArray = await guardians.compareVPDocuments( + user, + null, + policyIds, + '1', + '2', + '2', + '0', + 0, + 'Direct' + ); return { projects: comparationVc, presentations: comparationVpArray diff --git a/api-gateway/src/api/service/schema.ts b/api-gateway/src/api/service/schema.ts index 8e51ecba27..2f496f5819 100644 --- a/api-gateway/src/api/service/schema.ts +++ b/api-gateway/src/api/service/schema.ts @@ -4,7 +4,7 @@ import { ApiBody, ApiExtraModels, ApiInternalServerErrorResponse, ApiOkResponse, import { Body, Controller, Delete, Get, HttpCode, HttpException, HttpStatus, Param, Post, Put, Query, Req, Response, Version } from '@nestjs/common'; import { Auth, AuthUser } from '#auth'; import { Client, ClientProxy, Transport } from '@nestjs/microservices'; -import { Examples, ExportSchemaDTO, InternalServerErrorDTO, MessageSchemaDTO, pageHeader, SchemaDTO, SystemSchemaDTO, TaskDTO, VersionSchemaDTO } from '#middlewares'; +import { Examples, ExportSchemaDTO, InternalServerErrorDTO, MessageSchemaDTO, pageHeader, SchemaDTO, SystemSchemaDTO, TaskDTO, TransactionDTO, VersionSchemaDTO } from '#middlewares'; import { CACHE, PREFIXES, SCHEMA_REQUIRED_PROPS } from '#constants'; import { CacheService, EntityOwner, getCacheKey, Guardians, InternalException, ONLY_SR, SchemaUtils, ServiceError, TaskManager, UseCache } from '#helpers'; import process from 'process'; @@ -66,6 +66,52 @@ export class SingleSchemaApi { } } + /** + * Return all transactions for schema + * @param user + * @param schemaId + */ + @Get('/:schemaId/transactions') + @Auth( + Permissions.SCHEMAS_SCHEMA_READ, + // UserRole.STANDARD_REGISTRY, + // UserRole.AUDITOR ?, + // UserRole.USER ? + ) + @ApiOperation({ + summary: 'Return all transactions for schema.', + description: 'Return all transactions for schema.', + }) + @ApiParam({ + name: 'schemaId', + type: String, + description: 'Schema identifier', + required: true + }) + @ApiOkResponse({ + description: 'Successful operation.', + isArray: true, + type: TransactionDTO + }) + @ApiInternalServerErrorResponse({ + description: 'Internal server error.', + type: InternalServerErrorDTO + }) + @ApiExtraModels(TransactionDTO, InternalServerErrorDTO) + @HttpCode(HttpStatus.OK) + async getSchemaTransactions( + @AuthUser() user: IAuthUser, + @Param('schemaId') schemaId: string, + ): Promise { + try { + const guardians = new Guardians(); + const owner = new EntityOwner(user); + return await guardians.getTransactions(schemaId, 'schema', owner); + } catch (error) { + await InternalException(error, this.logger); + } + } + /** * Returns all parent schemas. */ @@ -1720,7 +1766,7 @@ export class SchemaApi { */ @Get('/:schemaId/export/message') @Auth( - Permissions.SCHEMAS_SCHEMA_CREATE, + Permissions.SCHEMAS_SCHEMA_READ, // UserRole.STANDARD_REGISTRY, ) @ApiOperation({ @@ -1774,7 +1820,7 @@ export class SchemaApi { */ @Get('/:schemaId/export/file') @Auth( - Permissions.SCHEMAS_SCHEMA_CREATE, + Permissions.SCHEMAS_SCHEMA_READ, // UserRole.STANDARD_REGISTRY, ) @ApiOperation({ @@ -2266,7 +2312,7 @@ export class SchemaApi { */ @Get('/:schemaId/export/xlsx') @Auth( - Permissions.SCHEMAS_SCHEMA_CREATE, + Permissions.SCHEMAS_SCHEMA_READ, // UserRole.STANDARD_REGISTRY, ) @ApiOperation({ @@ -2489,7 +2535,7 @@ export class SchemaApi { */ @Get('/export/template') @Auth( - Permissions.SCHEMAS_SCHEMA_CREATE, + Permissions.SCHEMAS_SCHEMA_READ, // UserRole.STANDARD_REGISTRY, ) @ApiOperation({ diff --git a/api-gateway/src/api/service/tokens.ts b/api-gateway/src/api/service/tokens.ts index aac89bc65b..e181c7f485 100644 --- a/api-gateway/src/api/service/tokens.ts +++ b/api-gateway/src/api/service/tokens.ts @@ -1,10 +1,10 @@ -import { Guardians, PolicyEngine, TaskManager, ServiceError, InternalException, ONLY_SR, parseInteger, EntityOwner, getCacheKey, CacheService } from '#helpers'; +import { CacheService, EntityOwner, getCacheKey, Guardians, InternalException, ONLY_SR, parseInteger, PolicyEngine, ServiceError, TaskManager } from '#helpers'; import { IOwner, IToken, Permissions, TaskAction, UserPermissions } from '@guardian/interfaces'; import { IAuthUser, PinoLogger, RunFunctionAsync } from '@guardian/common'; import { Body, Controller, Delete, Get, HttpCode, HttpException, HttpStatus, Param, Post, Put, Query, Req, Response, Version } from '@nestjs/common'; -import { AuthUser, Auth } from '#auth'; -import { ApiInternalServerErrorResponse, ApiOkResponse, ApiOperation, ApiExtraModels, ApiTags, ApiParam, ApiBody, ApiQuery } from '@nestjs/swagger'; -import { Examples, InternalServerErrorDTO, TaskDTO, TokenDTO, TokenInfoDTO, pageHeader } from '#middlewares'; +import { Auth, AuthUser } from '#auth'; +import { ApiBody, ApiExtraModels, ApiInternalServerErrorResponse, ApiOkResponse, ApiOperation, ApiParam, ApiQuery, ApiTags } from '@nestjs/swagger'; +import { Examples, InternalServerErrorDTO, pageHeader, TaskDTO, TokenDTO, TokenInfoDTO, TransactionDTO } from '#middlewares'; import { TOKEN_REQUIRED_PROPS } from '#constants'; /** @@ -306,6 +306,52 @@ export class TokensApi { } } + /** + * Return all transactions for token + * @param user + * @param tokenId + */ + @Get('/:tokenId/transactions') + @Auth( + Permissions.POLICIES_POLICY_REVIEW, + // UserRole.STANDARD_REGISTRY, + // UserRole.AUDITOR ?, + // UserRole.USER ? + ) + @ApiOperation({ + summary: 'Return all transactions for policy.', + description: 'Return all transactions for policy.', + }) + @ApiParam({ + name: 'tokenId', + type: String, + description: 'Policy identifier', + required: true + }) + @ApiOkResponse({ + description: 'Successful operation.', + isArray: true, + type: TransactionDTO + }) + @ApiInternalServerErrorResponse({ + description: 'Internal server error.', + type: InternalServerErrorDTO + }) + @ApiExtraModels(TransactionDTO, InternalServerErrorDTO) + @HttpCode(HttpStatus.OK) + async getSchemaTransactions( + @AuthUser() user: IAuthUser, + @Param('tokenId') tokenId: string, + ): Promise { + try { + const guardians = new Guardians(); + const owner = new EntityOwner(user); + return await guardians.getTransactions(tokenId, 'token', owner); + } catch (error) { + await InternalException(error, this.logger); + } + } + /** * Creates a new token */ diff --git a/api-gateway/src/api/service/tool.ts b/api-gateway/src/api/service/tool.ts index 5919093acc..b6c1fa718c 100644 --- a/api-gateway/src/api/service/tool.ts +++ b/api-gateway/src/api/service/tool.ts @@ -550,7 +550,7 @@ export class ToolsApi { */ @Get('/:id/export/file') @Auth( - Permissions.TOOLS_TOOL_CREATE, + Permissions.TOOLS_TOOL_READ, // UserRole.STANDARD_REGISTRY, ) @ApiOperation({ @@ -597,7 +597,7 @@ export class ToolsApi { */ @Get('/:id/export/message') @Auth( - Permissions.TOOLS_TOOL_CREATE, + Permissions.TOOLS_TOOL_READ, // UserRole.STANDARD_REGISTRY, ) @ApiOperation({ diff --git a/api-gateway/src/constants/routes.ts b/api-gateway/src/constants/routes.ts index 154caf2002..a3b4aca2a4 100644 --- a/api-gateway/src/constants/routes.ts +++ b/api-gateway/src/constants/routes.ts @@ -9,4 +9,5 @@ export const PREFIXES = { CONTRACTS: '/contracts/', TAGS: '/tags/', IPFS: 'ipfs', -}; \ No newline at end of file + PROFILES: 'profiles' +}; diff --git a/api-gateway/src/helpers/guardians.ts b/api-gateway/src/helpers/guardians.ts index f9e074354d..1c0235f37f 100644 --- a/api-gateway/src/helpers/guardians.ts +++ b/api-gateway/src/helpers/guardians.ts @@ -27,22 +27,9 @@ import { SchemaNode, SuggestionsOrderPriority } from '@guardian/interfaces'; -import { IAuthUser, NatsService } from '@guardian/common'; +import { IAuthUser, IMetadataItem, NatsService } from '@guardian/common'; import { NewTask } from './task-manager.js'; -import { - ModuleDTO, - TagDTO, - ThemeDTO, - TokenDTO, - ToolDTO, - StatisticDefinitionDTO, - StatisticAssessmentDTO, - StatisticAssessmentRelationshipsDTO, - StatisticDefinitionRelationshipsDTO, - SchemaRuleDTO, - SchemaRuleRelationshipsDTO, - SchemaRuleDataDTO -} from '#middlewares'; +import { ModuleDTO, SchemaRuleDataDTO, SchemaRuleDTO, SchemaRuleRelationshipsDTO, StatisticAssessmentDTO, StatisticAssessmentRelationshipsDTO, StatisticDefinitionDTO, StatisticDefinitionRelationshipsDTO, TagDTO, ThemeDTO, TokenDTO, ToolDTO } from '#middlewares'; /** * Filters type @@ -620,6 +607,17 @@ export class Guardians extends NatsService { return await this.sendMessage(MessageAPI.GET_SCHEMA_PARENTS, { id, owner }); } + /** + * Get schema transactions + * @param id Schema identifier + * @param type + * @param owner + * @returns Schemas + */ + public async getTransactions(id: string, type: string, owner: IOwner): Promise { + return await this.sendMessage(MessageAPI.GET_TRANSACTIONS, {id, owner, type}); + } + /** * Get schema tree * @param id Id diff --git a/api-gateway/src/helpers/interceptors/cache.ts b/api-gateway/src/helpers/interceptors/cache.ts index f9f3c5d106..0edd6180e0 100644 --- a/api-gateway/src/helpers/interceptors/cache.ts +++ b/api-gateway/src/helpers/interceptors/cache.ts @@ -29,12 +29,12 @@ export class CacheInterceptor implements NestInterceptor { const isFastify = Reflect.getMetadata(META_DATA.FASTIFY, context.getHandler()); const token = request.headers.authorization?.split(' ')[1]; - let user = {}; + let user = null; if (token) { const users: Users = new Users(); try { - user = await users.getUserByToken(token); + user = await users.getUserByToken(token) ?? null; } catch (error) { throw new HttpException(error.message, HttpStatus.UNAUTHORIZED); } @@ -99,4 +99,4 @@ export class CacheInterceptor implements NestInterceptor { }), ); } -} \ No newline at end of file +} diff --git a/api-gateway/src/helpers/interceptors/utils/cache.ts b/api-gateway/src/helpers/interceptors/utils/cache.ts index f7ad5ba9e1..494e78df25 100644 --- a/api-gateway/src/helpers/interceptors/utils/cache.ts +++ b/api-gateway/src/helpers/interceptors/utils/cache.ts @@ -7,7 +7,7 @@ import { IAuthUser } from '@guardian/common'; //constants import { CACHE_PREFIXES } from '../../../constants/index.js'; -export function getCacheKey(routes: string[], user: IAuthUser | {}, prefix: string = CACHE_PREFIXES.TAG): string[] { +export function getCacheKey(routes: string[], user: IAuthUser | null, prefix: string = CACHE_PREFIXES.TAG): string[] { const hashUser: string = getHash(user) return routes.map(route => `${prefix}${route}:${hashUser}`); -} \ No newline at end of file +} diff --git a/api-gateway/src/helpers/interceptors/utils/hash.ts b/api-gateway/src/helpers/interceptors/utils/hash.ts index 85f3e55e7c..637911ee6a 100644 --- a/api-gateway/src/helpers/interceptors/utils/hash.ts +++ b/api-gateway/src/helpers/interceptors/utils/hash.ts @@ -1,8 +1,8 @@ import crypto from 'crypto'; //types and interfaces -import { IAuthUser } from '@guardian/common'; +import {IAuthUser} from '@guardian/common'; -export function getHash(user: IAuthUser | {}): string { - return crypto.createHash('md5').update(JSON.stringify(user)).digest('hex'); -} \ No newline at end of file +export function getHash(user: IAuthUser | null): string { + return crypto.createHash('md5').update(JSON.stringify(user?.id ?? 'anonymous')).digest('hex'); +} diff --git a/api-gateway/src/middlewares/validation/schemas/schemas.dto.ts b/api-gateway/src/middlewares/validation/schemas/schemas.dto.ts index 8bb84303f7..5bdc5f21e3 100644 --- a/api-gateway/src/middlewares/validation/schemas/schemas.dto.ts +++ b/api-gateway/src/middlewares/validation/schemas/schemas.dto.ts @@ -3,6 +3,21 @@ import { IsIn, IsNotEmpty, IsObject, IsOptional, IsString } from 'class-validato import { SchemaCategory, SchemaEntity, SchemaStatus, UserRole } from '@guardian/interfaces'; import { Examples } from '../examples.js'; +export class TransactionDTO{ + @ApiProperty({ + type: 'string', + }) + @IsString() + type: string; + + // @ApiProperty({ + // type: 'object', + // }) + // @IsOptional() + // @IsString() + [key: string]: any; +} + export class SchemaDTO { @ApiProperty({ type: 'string', @@ -228,4 +243,4 @@ export class MessageSchemaDTO { @IsString() @IsNotEmpty() messageId: string; -} \ No newline at end of file +} diff --git a/common/src/database-modules/database-server.ts b/common/src/database-modules/database-server.ts index d711484851..e10f67c9ae 100644 --- a/common/src/database-modules/database-server.ts +++ b/common/src/database-modules/database-server.ts @@ -2,7 +2,9 @@ import { AggregateVC, ApprovalDocument as ApprovalDocumentCollection, Artifact as ArtifactCollection, + Artifact, ArtifactChunk as ArtifactChunkCollection, + AssignEntity, BlockCache, BlockState, Contract as ContractCollection, @@ -17,12 +19,19 @@ import { MultiPolicy, MultiPolicyTransaction, Policy, + PolicyCache, + PolicyCacheData, PolicyCategory, PolicyInvitations, PolicyModule, PolicyRoles as PolicyRolesCollection, + PolicyStatistic, + PolicyStatisticDocument, + PolicyTest, Record, + RetirePool, Schema as SchemaCollection, + SchemaRule, SplitDocuments, SuggestionsConfig, Tag, @@ -31,29 +40,10 @@ import { Topic as TopicCollection, VcDocument as VcDocumentCollection, VpDocument, - VpDocument as VpDocumentCollection, - PolicyCache, - PolicyCacheData, - RetirePool, - AssignEntity, - PolicyTest, - Artifact, - PolicyStatistic, - PolicyStatisticDocument, - SchemaRule + VpDocument as VpDocumentCollection } from '../entity/index.js'; import { Binary } from 'bson'; -import { - AssignedEntityType, - GenerateUUIDv4, - IVC, - MintTransactionStatus, - PolicyTestStatus, - PolicyType, - SchemaEntity, - TokenType, - TopicType, -} from '@guardian/interfaces'; +import { AssignedEntityType, GenerateUUIDv4, IVC, MintTransactionStatus, PolicyTestStatus, PolicyType, SchemaEntity, TokenType, TopicType, } from '@guardian/interfaces'; import { BaseEntity } from '../models/index.js'; import { DataBaseHelper, MAP_TRANSACTION_SERIALS_AGGREGATION_FILTERS } from '../helpers/index.js'; import { Theme } from '../entity/theme.js'; @@ -64,7 +54,7 @@ import { MongoDriver, ObjectId, PopulatePath } from '@mikro-orm/mongodb'; import { FilterObject, FilterQuery, FindAllOptions, MikroORM } from '@mikro-orm/core'; import { AbstractDatabaseServer, IAddDryRunIdItem, IAuthUser, IGetDocumentAggregationFilters } from '../interfaces/index.js'; import { TopicId } from '@hashgraph/sdk'; -import { Message } from '../hedera-modules/index.js' +import { IMetadata, Message } from '../hedera-modules/index.js' import type { FindOptions } from '@mikro-orm/core/drivers/IDatabaseDriver'; /** @@ -1863,12 +1853,12 @@ export class DatabaseServer extends AbstractDatabaseServer { } /** - * Create tag - * @param tag + * Get schemas + * @param filters + * @param options */ - public async createTag(tag: Tag): Promise { - const item = this.create(Tag, tag); - return await this.save(Tag, item); + public static async getSchema(filters?: FilterObject | string, options?: unknown): Promise { + return await new DataBaseHelper(SchemaCollection).findOne(filters, options); } /** @@ -2375,11 +2365,16 @@ export class DatabaseServer extends AbstractDatabaseServer { } /** - * Get schemas - * @param filters + * Create tag + * @param tag + * @param metadata */ - public static async getSchema(filters?: FilterObject | string): Promise { - return await new DataBaseHelper(SchemaCollection).findOne(filters); + public static async createTag(tag: FilterObject, metadata?: IMetadata): Promise { + const item = new DataBaseHelper(Tag).create(tag); + if (metadata) { + item.addMetadata(metadata) + } + return await new DataBaseHelper(Tag).save(item); } /** @@ -3335,9 +3330,12 @@ export class DatabaseServer extends AbstractDatabaseServer { * Create tag * @param tag */ - public static async createTag(tag: FilterObject): Promise { - const item = new DataBaseHelper(Tag).create(tag); - return await new DataBaseHelper(Tag).save(item); + public async createTag(tag: Tag, metadata?: IMetadata): Promise { + const item = this.create(Tag, tag); + if (metadata) { + item.addMetadata(metadata); + } + return await this.save(Tag, item); } /** diff --git a/common/src/entity/contract.ts b/common/src/entity/contract.ts index 7f5e1c618a..9f6d27b52a 100644 --- a/common/src/entity/contract.ts +++ b/common/src/entity/contract.ts @@ -1,12 +1,12 @@ import { Entity, Enum, Property } from '@mikro-orm/core'; -import { BaseEntity } from '../models/index.js'; +import { MetadataEntity } from '../models/index.js'; import { ContractType, IContract } from '@guardian/interfaces'; /** * Contract collection */ @Entity() -export class Contract extends BaseEntity implements IContract { +export class Contract extends MetadataEntity implements IContract{ /** * Hedera Contract Id */ diff --git a/common/src/entity/policy.ts b/common/src/entity/policy.ts index 3affa7d44e..8a5a31eeb2 100644 --- a/common/src/entity/policy.ts +++ b/common/src/entity/policy.ts @@ -1,4 +1,4 @@ -import { BaseEntity } from '../models/index.js'; +import { MetadataEntity } from '../models/index.js'; import { GenerateUUIDv4, PolicyCategoryExport, PolicyType } from '@guardian/interfaces'; import { AfterDelete, BeforeCreate, BeforeUpdate, Entity, OnLoad, Property, Unique } from '@mikro-orm/core'; import { DataBaseHelper } from '../helpers/index.js'; @@ -9,7 +9,7 @@ import { ObjectId } from '@mikro-orm/mongodb'; */ @Entity() @Unique({ properties: ['policyTag'], options: { partialFilterExpression: { policyTag: { $type: 'string' } } } }) -export class Policy extends BaseEntity { +export class Policy extends MetadataEntity{ /** * Policy UUID diff --git a/common/src/entity/schema.ts b/common/src/entity/schema.ts index be1df8013a..2ee2ab1419 100644 --- a/common/src/entity/schema.ts +++ b/common/src/entity/schema.ts @@ -1,29 +1,14 @@ -import { - ISchema, - ISchemaDocument, - SchemaCategory, - SchemaEntity, - SchemaStatus, - GenerateUUIDv4, -} from '@guardian/interfaces'; -import { - Entity, - Property, - Enum, - BeforeCreate, - OnLoad, - BeforeUpdate, - AfterDelete, -} from '@mikro-orm/core'; -import { BaseEntity } from '../models/index.js'; +import { GenerateUUIDv4, ISchema, ISchemaDocument, SchemaCategory, SchemaEntity, SchemaStatus, } from '@guardian/interfaces'; +import { AfterDelete, BeforeCreate, BeforeUpdate, Entity, Enum, OnLoad, Property, } from '@mikro-orm/core'; import { DataBaseHelper, SchemaConverterUtils } from '../helpers/index.js'; import { ObjectId } from '@mikro-orm/mongodb'; +import { MetadataEntity } from '../models/metadata-entity.js'; /** * Schema collection */ @Entity() -export class Schema extends BaseEntity implements ISchema { +export class Schema extends MetadataEntity implements ISchema{ /** * Schema uuid */ diff --git a/common/src/entity/tag.ts b/common/src/entity/tag.ts index 2294f1eb35..29c720f389 100644 --- a/common/src/entity/tag.ts +++ b/common/src/entity/tag.ts @@ -1,12 +1,12 @@ import { BeforeCreate, Entity, Property } from '@mikro-orm/core'; -import { BaseEntity } from '../models/index.js'; +import { MetadataEntity } from '../models/index.js'; import { GenerateUUIDv4 } from '@guardian/interfaces'; /** * Tags collection */ @Entity() -export class Tag extends BaseEntity { +export class Tag extends MetadataEntity{ /** * Tag id */ diff --git a/common/src/entity/token.ts b/common/src/entity/token.ts index 56eea9c13c..ae65e081d9 100644 --- a/common/src/entity/token.ts +++ b/common/src/entity/token.ts @@ -1,13 +1,13 @@ import { IToken, TokenType } from '@guardian/interfaces'; import { Entity, Property, Unique } from '@mikro-orm/core'; -import { BaseEntity } from '../models/index.js'; +import { MetadataEntity } from '../models/index.js'; /** * Tokens collection */ @Entity() @Unique({ properties: ['tokenId'], options: { partialFilterExpression: { tokenId: { $type: 'string' } } } }) -export class Token extends BaseEntity implements IToken { +export class Token extends MetadataEntity implements IToken{ /** * Token id */ diff --git a/common/src/entity/topic.ts b/common/src/entity/topic.ts index 30b781e8e6..04f5150f37 100644 --- a/common/src/entity/topic.ts +++ b/common/src/entity/topic.ts @@ -1,13 +1,13 @@ import { TopicType } from '@guardian/interfaces'; -import { Entity, Property, Enum, Unique } from '@mikro-orm/core'; -import { BaseEntity } from '../models/index.js'; +import { Entity, Enum, Property, Unique } from '@mikro-orm/core'; +import { MetadataEntity } from '../models/index.js'; /** * Topics collection */ @Entity() @Unique({ properties: ['topicId'], options: { partialFilterExpression: { topicId: { $type: 'string' } } } }) -export class Topic extends BaseEntity { +export class Topic extends MetadataEntity{ /** * Topic id */ diff --git a/common/src/hedera-modules/message/index.ts b/common/src/hedera-modules/message/index.ts index c1be0ca04e..2db6199dc4 100644 --- a/common/src/hedera-modules/message/index.ts +++ b/common/src/hedera-modules/message/index.ts @@ -20,4 +20,6 @@ export { ContractMessage } from './contract-message.js'; export { GuardianRoleMessage } from './guardian-role-message.js'; export { UserPermissionsMessage } from './user-permissions-message.js'; export { StatisticMessage } from './statistic-message.js'; -export { StatisticAssessmentMessage } from './statistic-assessment-message.js'; \ No newline at end of file +export { StatisticAssessmentMessage } from './statistic-assessment-message.js'; +export { IMetadataItem, IMetadata, TransactionTypes, IResultWithMetadata } from './message-metadata-type.js'; +export { MetadataClass } from './metadata-class.js'; diff --git a/common/src/hedera-modules/message/message-metadata-type.ts b/common/src/hedera-modules/message/message-metadata-type.ts new file mode 100644 index 0000000000..7b955814fb --- /dev/null +++ b/common/src/hedera-modules/message/message-metadata-type.ts @@ -0,0 +1,43 @@ +/** + * Metadata item type + */ +export enum TransactionTypes{ + Unknown = 'Unknown', + TopicMessageSubmitTransaction = 'TopicMessageSubmitTransaction', + TopicCreateTransaction = 'TopicCreateTransaction', + TokenCreateTransaction = 'TokenCreateTransaction', + TokenUpdateTransaction = 'TokenUpdateTransaction', + TokenDeleteTransaction = 'TokenDeleteTransaction', + TokenAssociateTransaction = 'TokenAssociateTransaction', + TokenDissociateTransaction = 'TokenDissociateTransaction', + TokenFreezeTransaction = 'TokenFreezeTransaction', + TokenUnfreezeTransaction = 'TokenUnfreezeTransaction', + TokenGrantKycTransaction = 'TokenGrantKycTransaction', + TokenRevokeKycTransaction = 'TokenRevokeKycTransaction', + TokenMintTransaction = 'TokenMintTransaction', + TokenMintNFTTransaction = 'TokenMintNFTTransaction', + TokenWipeTransaction = 'TokenWipeTransaction', + TransferTransaction = 'TransferTransaction', + NFTTransferTransaction = 'NFTTransferTransaction', + AccountCreateTransaction = 'AccountCreateTransaction', + ContractCreateTransaction = 'ContractCreateTransaction' +} + +/** + * Metadata item interface + */ +export interface IMetadataItem{ + type: TransactionTypes + + [key: string]: string | number | string[] | number[] | boolean | boolean[]; +} + +/** + * Metadata type + */ +export type IMetadata = IMetadataItem[]; + +export interface IResultWithMetadata{ + data: T; + metadata: IMetadataItem; +} diff --git a/common/src/hedera-modules/message/message-server.ts b/common/src/hedera-modules/message/message-server.ts index cdc40d90ba..ee06412740 100644 --- a/common/src/hedera-modules/message/message-server.ts +++ b/common/src/hedera-modules/message/message-server.ts @@ -417,7 +417,7 @@ export class MessageServer { message.setLang(MessageServer.lang); const time = await this.messageStartLog('Hedera'); const buffer = message.toMessage(); - const timestamp = await new Workers().addRetryableTask({ + const result = await new Workers().addRetryableTask({ type: WorkerTaskType.SEND_HEDERA, data: { topicId: this.topicId, @@ -433,8 +433,9 @@ export class MessageServer { } }, 10, 0, userId); await this.messageEndLog(time, 'Hedera'); - message.setId(timestamp); + message.setId(result.data); message.setTopicId(this.topicId); + message.setMetadata(result.metadata); return message; } diff --git a/common/src/hedera-modules/message/message.ts b/common/src/hedera-modules/message/message.ts index 6e2c9ae6c1..ab0a45b1e2 100644 --- a/common/src/hedera-modules/message/message.ts +++ b/common/src/hedera-modules/message/message.ts @@ -5,6 +5,7 @@ import { MessageType } from './message-type.js'; import { MessageBody } from './message-body.interface.js'; import { GenerateUUIDv4 } from '@guardian/interfaces'; import { Hashing } from '../hashing.js'; +import { MetadataClass } from './metadata-class.js'; /** * Message status @@ -27,7 +28,7 @@ export enum RevokeReason { /** * Message */ -export abstract class Message { +export abstract class Message extends MetadataClass{ /** * Id */ @@ -100,7 +101,8 @@ export abstract class Message { return this._responseType; } - constructor(action: MessageAction, type: MessageType) { + protected constructor(action: MessageAction, type: MessageType) { + super(); this.type = type; this.lang = 'en-US'; this._action = action; @@ -134,12 +136,13 @@ export abstract class Message { /** * Set URLs - * @param url + * @param iurls */ - public setUrls(url: IURL[]): void { - this.urls = url?.filter(u => { + public setUrls(iurls: IURL[]): void { + this.urls = iurls?.filter(u => { return !!u.cid }); + this.setMetadata({urls: this.urls.map(url => url.cid)}); } /** diff --git a/common/src/hedera-modules/message/metadata-class.ts b/common/src/hedera-modules/message/metadata-class.ts new file mode 100644 index 0000000000..dc957a2ba6 --- /dev/null +++ b/common/src/hedera-modules/message/metadata-class.ts @@ -0,0 +1,29 @@ +import { IMetadataItem, TransactionTypes } from './message-metadata-type.js'; + +/** + * Metadata class + */ +export abstract class MetadataClass{ + /** + * Message metadata + */ + private metadata: IMetadataItem; + + /** + * Add metadata + * @param metadata + */ + public setMetadata(metadata: Partial): void { + if (!this.metadata) { + this.metadata = {type: TransactionTypes.Unknown}; + } + this.metadata = Object.assign(this.metadata, metadata); + } + + /** + * Get metadata + */ + public getMetadata(): IMetadataItem { + return this.metadata; + } +} diff --git a/common/src/hedera-modules/topic-helper.ts b/common/src/hedera-modules/topic-helper.ts index 6dab37c0b7..c76c4aeb71 100644 --- a/common/src/hedera-modules/topic-helper.ts +++ b/common/src/hedera-modules/topic-helper.ts @@ -3,6 +3,14 @@ import { MessageAction, MessageServer, TopicConfig, TopicMessage } from './index import { TopicMemo } from './memo-mappings/topic-memo.js'; import { Workers } from '../helpers/index.js'; +/** + * Two way link result interface + */ +export interface ITwoWayLinkResultInterface{ + message1: TopicMessage; + message2?: TopicMessage; +} + /** * Topic Helper */ @@ -108,7 +116,7 @@ export class TopicHelper { } ): Promise { const workers = new Workers(); - const topicId = await workers.addRetryableTask({ + const result = await workers.addRetryableTask({ type: WorkerTaskType.NEW_TOPIC, data: { hederaAccountId: this.hederaAccountId, @@ -118,6 +126,7 @@ export class TopicHelper { keys } }, 10); + const topicId = result.data; let adminKey: any = null; let submitKey: any = null; if (keys) { @@ -131,7 +140,7 @@ export class TopicHelper { adminKey = this.hederaAccountKey; submitKey = this.hederaAccountKey; } - return new TopicConfig({ + const topicConfig = new TopicConfig({ topicId, name: config.name, description: config.description, @@ -142,6 +151,8 @@ export class TopicHelper { targetId: config.targetId, targetUUID: config.targetUUID, }, adminKey, submitKey); + topicConfig.setMetadata(result.metadata); + return topicConfig; } /** @@ -151,8 +162,7 @@ export class TopicHelper { * @param rationale * @param userId */ - // tslint:disable-next-line:completed-docs - public async oneWayLink(topic: TopicConfig, parent: TopicConfig, rationale: string, userId: string = null) { + public async oneWayLink(topic: TopicConfig, parent: TopicConfig, rationale: string, userId: string = null): Promise { const messageServer = new MessageServer(this.hederaAccountId, this.hederaAccountKey, this.signOptions, this.dryRun); const message1 = new TopicMessage(MessageAction.CreateTopic); @@ -166,7 +176,7 @@ export class TopicHelper { rationale }); - await messageServer + return await messageServer .setTopicObject(topic) .sendMessage(message1, true, null, userId); } @@ -178,9 +188,11 @@ export class TopicHelper { * @param rationale * @param userId */ - public async twoWayLink(topic: TopicConfig, parent: TopicConfig, rationale: string, userId?: string) { + public async twoWayLink(topic: TopicConfig, parent: TopicConfig, rationale: string, userId?: string): Promise { const messageServer = new MessageServer(this.hederaAccountId, this.hederaAccountKey, this.signOptions, this.dryRun); + const result: ITwoWayLinkResultInterface = {message1: undefined}; + const message1 = new TopicMessage(MessageAction.CreateTopic); message1.setDocument({ name: topic.name, @@ -191,7 +203,7 @@ export class TopicHelper { parentId: parent?.topicId, rationale }); - await messageServer + result.message1 = await messageServer .setTopicObject(topic) .sendMessage(message1, true, null, userId); @@ -206,9 +218,10 @@ export class TopicHelper { parentId: null, rationale }); - await messageServer + result.message1 = await messageServer .setTopicObject(parent) .sendMessage(message2); } + return result; } } diff --git a/common/src/hedera-modules/topic.ts b/common/src/hedera-modules/topic.ts index 23c14e8feb..9ada091f56 100644 --- a/common/src/hedera-modules/topic.ts +++ b/common/src/hedera-modules/topic.ts @@ -1,11 +1,12 @@ import { Topic } from '../entity/index.js'; import { TopicType } from '@guardian/interfaces'; import { KeyType, Wallet } from '../helpers/index.js'; +import { MetadataClass } from './message/index.js'; /** * Topic Config */ -export class TopicConfig { +export class TopicConfig extends MetadataClass{ /** * Topic ID */ @@ -93,6 +94,7 @@ export class TopicConfig { */ targetUUID?: string, }, adminKey?: string, submitKey?: string) { + super(); this.topicId = topic.topicId; this.name = topic.name; this.description = topic.description; @@ -143,6 +145,7 @@ export class TopicConfig { policyUUID: this.policyUUID, targetId: this.targetId, targetUUID: this.targetUUID, + metadata: [this.getMetadata()] } } diff --git a/common/src/helpers/db-helper.ts b/common/src/helpers/db-helper.ts index e225efb287..8306500188 100644 --- a/common/src/helpers/db-helper.ts +++ b/common/src/helpers/db-helper.ts @@ -481,20 +481,14 @@ export class DataBaseHelper extends AbstractDataBaseHelper $match: { sent: true, done: { $ne: true }, - }, - }, - { - $addFields: { - timeDifference: { - $subtract: ['$processedTime', '$createDate'], + $expr: { + $gt: [ + { $subtract: ['$processedTime', '$createDate'] }, + processTimeout + ] }, }, }, - { - $match: { - timeDifference: { $gt: processTimeout }, - }, - }, ], }; diff --git a/common/src/import-export/policy-statistic.ts b/common/src/import-export/policy-statistic.ts index 09ea98a90a..4c179f6043 100644 --- a/common/src/import-export/policy-statistic.ts +++ b/common/src/import-export/policy-statistic.ts @@ -1,6 +1,8 @@ import JSZip from 'jszip'; -import { PolicyStatistic } from '../entity/index.js'; -import { IFormulaData, IRuleData, IScoreData, IScoreOption, IStatisticConfig, IVariableData } from '@guardian/interfaces'; +import { Policy, PolicyStatistic, Schema as SchemaCollection } from '../entity/index.js'; +import { IFormulaData, IRuleData, IScoreData, IScoreOption, IStatisticConfig, IVariableData, Schema, SchemaEntity, SchemaStatus } from '@guardian/interfaces'; +import { DatabaseServer } from '../database-modules/index.js'; +import { PolicyImportExport } from './policy.js'; /** * PolicyStatistic components @@ -77,6 +79,71 @@ export class PolicyStatisticImportExport { return { definition }; } + /** + * Load policy schemas + * @param policy policy + * @returns policy schemas + */ + public static async getPolicySchemas(policy: Policy): Promise { + const { schemas, toolSchemas } = await PolicyImportExport.loadAllSchemas(policy); + const systemSchemas = await DatabaseServer.getSchemas({ + topicId: policy.topicId, + entity: { $in: [SchemaEntity.MINT_TOKEN, SchemaEntity.MINT_NFTOKEN] } + }); + + const all = [] + .concat(schemas, toolSchemas, systemSchemas) + .filter((s) => s.status === SchemaStatus.PUBLISHED && s.entity !== 'EVC'); + return all; + } + + /** + * Update schema uuid + * @param schemas policy schemas + * @param data config + * @returns new config + */ + public static updateSchemas(schemas: SchemaCollection[], data?: IStatisticConfig): IStatisticConfig | undefined { + if (!data) { + return; + } + + const fieldMap = new Map(); + const schemaObjects = schemas.map((s) => new Schema(s)); + for (const schema of schemaObjects) { + const allFields = schema.getFields(); + for (const field of allFields) { + const key = `${schema.name}|${field.path}|${field.description}|${field.type}|${field.isArray}|${field.isRef}`; + fieldMap.set(key, schema.iri); + } + } + + const schemaMap = new Map(); + const variables = data.variables; + const rules = data.rules; + + if (Array.isArray(variables)) { + for (const variable of variables) { + const key = `${variable.schemaName}|${variable.path}|${variable.fieldDescription}|${variable.fieldType}|${variable.fieldArray}|${variable.fieldRef}`; + schemaMap.set(variable.schemaId, fieldMap.get(key)); + } + } + + if (Array.isArray(variables)) { + for (const variable of variables) { + variable.schemaId = schemaMap.get(variable.schemaId); + } + } + + if (Array.isArray(rules)) { + for (const rule of rules) { + rule.schemaId = schemaMap.get(rule.schemaId); + } + } + + return data; + } + /** * Validate Config * diff --git a/common/src/import-export/policy.ts b/common/src/import-export/policy.ts index 5b503b5c50..1fa9506321 100644 --- a/common/src/import-export/policy.ts +++ b/common/src/import-export/policy.ts @@ -1,5 +1,5 @@ import JSZip from 'jszip'; -import { Artifact, Policy, PolicyCategory, PolicyTest, PolicyTool, Schema, Tag, Token } from '../entity/index.js'; +import { Artifact, Policy, PolicyCategory, PolicyTool, Schema, Tag, Token } from '../entity/index.js'; import { DatabaseServer } from '../database-modules/index.js'; import { ImportExportUtils } from './utils.js'; import { PolicyCategoryExport } from '@guardian/interfaces'; diff --git a/common/src/models/index.ts b/common/src/models/index.ts index 457733f1b4..f519f1bac9 100644 --- a/common/src/models/index.ts +++ b/common/src/models/index.ts @@ -1,2 +1,3 @@ export * from './base-entity.js'; export * from './message-response.js'; +export * from './metadata-entity.js' diff --git a/common/src/models/metadata-entity.ts b/common/src/models/metadata-entity.ts new file mode 100644 index 0000000000..8d327404d5 --- /dev/null +++ b/common/src/models/metadata-entity.ts @@ -0,0 +1,28 @@ +import { BaseEntity } from './base-entity.js'; +import { Property } from '@mikro-orm/core'; +import { IMetadata, IMetadataItem } from '../hedera-modules/index.js'; + +export abstract class MetadataEntity extends BaseEntity{ + /** + * Metadata + */ + @Property({nullable: true}) + metadata?: IMetadata; + + /** + * Add metadata item(s) + * @param metadata + */ + public addMetadata(metadata: IMetadataItem | IMetadataItem[]): void { + if (!this.metadata || !Array.isArray(this.metadata)) { + this.metadata = []; + } + if (Array.isArray(metadata)) { + for (const item of metadata) { + this.metadata.push(item); + } + } else { + this.metadata.push(metadata); + } + } +} diff --git a/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..9cb09d3045 Binary files /dev/null and b/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1) (1).png index 9cb09d3045..005f784fe9 100644 Binary files a/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1).png index 005f784fe9..2353a305a3 100644 Binary files a/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/0 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/0 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/0 (1) (1) (1) (1) (1).png index 2353a305a3..249147ab38 100644 Binary files a/docs/.gitbook/assets/0 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/0 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/0 (1) (1) (1) (1).png b/docs/.gitbook/assets/0 (1) (1) (1) (1).png index 249147ab38..330b81ffa8 100644 Binary files a/docs/.gitbook/assets/0 (1) (1) (1) (1).png and b/docs/.gitbook/assets/0 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/0 (1) (1) (1).png b/docs/.gitbook/assets/0 (1) (1) (1).png index 330b81ffa8..250acc4325 100644 Binary files a/docs/.gitbook/assets/0 (1) (1) (1).png and b/docs/.gitbook/assets/0 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/0 (1) (1).png b/docs/.gitbook/assets/0 (1) (1).png index 250acc4325..04acf34de2 100644 Binary files a/docs/.gitbook/assets/0 (1) (1).png and b/docs/.gitbook/assets/0 (1) (1).png differ diff --git a/docs/.gitbook/assets/0 (1).png b/docs/.gitbook/assets/0 (1).png index 04acf34de2..0657661083 100644 Binary files a/docs/.gitbook/assets/0 (1).png and b/docs/.gitbook/assets/0 (1).png differ diff --git a/docs/.gitbook/assets/0.png b/docs/.gitbook/assets/0.png index 0657661083..56f39c44ef 100644 Binary files a/docs/.gitbook/assets/0.png and b/docs/.gitbook/assets/0.png differ diff --git a/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..18283aeb35 Binary files /dev/null and b/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1) (1).png index 18283aeb35..be65027b29 100644 Binary files a/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1).png index be65027b29..08a491b680 100644 Binary files a/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1).png index 08a491b680..59f0b15164 100644 Binary files a/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/1 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/1 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/1 (1) (1) (1) (1) (1).png index 59f0b15164..50582760f7 100644 Binary files a/docs/.gitbook/assets/1 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/1 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/1 (1) (1) (1) (1).png b/docs/.gitbook/assets/1 (1) (1) (1) (1).png index 50582760f7..fb2e06318b 100644 Binary files a/docs/.gitbook/assets/1 (1) (1) (1) (1).png and b/docs/.gitbook/assets/1 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/1 (1) (1) (1).png b/docs/.gitbook/assets/1 (1) (1) (1).png index fb2e06318b..80f5045186 100644 Binary files a/docs/.gitbook/assets/1 (1) (1) (1).png and b/docs/.gitbook/assets/1 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/1 (1) (1).png b/docs/.gitbook/assets/1 (1) (1).png index 80f5045186..cecb71dd2b 100644 Binary files a/docs/.gitbook/assets/1 (1) (1).png and b/docs/.gitbook/assets/1 (1) (1).png differ diff --git a/docs/.gitbook/assets/1 (1).png b/docs/.gitbook/assets/1 (1).png index cecb71dd2b..09540be572 100644 Binary files a/docs/.gitbook/assets/1 (1).png and b/docs/.gitbook/assets/1 (1).png differ diff --git a/docs/.gitbook/assets/1.png b/docs/.gitbook/assets/1.png index 09540be572..e2dcb39be1 100644 Binary files a/docs/.gitbook/assets/1.png and b/docs/.gitbook/assets/1.png differ diff --git a/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..d9c27bdb1d Binary files /dev/null and b/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1) (1).png index d9c27bdb1d..d4e02013a3 100644 Binary files a/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1).png index d4e02013a3..d734e3e628 100644 Binary files a/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1).png index d734e3e628..e337d21f80 100644 Binary files a/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/10 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/10 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/10 (1) (1) (1) (1) (1).png index e337d21f80..324a23dc06 100644 Binary files a/docs/.gitbook/assets/10 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/10 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/10 (1) (1) (1) (1).png b/docs/.gitbook/assets/10 (1) (1) (1) (1).png index 324a23dc06..b68a9fb727 100644 Binary files a/docs/.gitbook/assets/10 (1) (1) (1) (1).png and b/docs/.gitbook/assets/10 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/10 (1) (1) (1).png b/docs/.gitbook/assets/10 (1) (1) (1).png index b68a9fb727..33901806d0 100644 Binary files a/docs/.gitbook/assets/10 (1) (1) (1).png and b/docs/.gitbook/assets/10 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/10 (1) (1).png b/docs/.gitbook/assets/10 (1) (1).png index 33901806d0..5ff589c843 100644 Binary files a/docs/.gitbook/assets/10 (1) (1).png and b/docs/.gitbook/assets/10 (1) (1).png differ diff --git a/docs/.gitbook/assets/10 (1).png b/docs/.gitbook/assets/10 (1).png index 5ff589c843..4ebc574c3c 100644 Binary files a/docs/.gitbook/assets/10 (1).png and b/docs/.gitbook/assets/10 (1).png differ diff --git a/docs/.gitbook/assets/10.png b/docs/.gitbook/assets/10.png index 4ebc574c3c..146f6735bd 100644 Binary files a/docs/.gitbook/assets/10.png and b/docs/.gitbook/assets/10.png differ diff --git a/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..f651cb0ab1 Binary files /dev/null and b/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1) (1).png index f651cb0ab1..dacdf053ca 100644 Binary files a/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1).png index dacdf053ca..6af2c82902 100644 Binary files a/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/11 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/11 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/11 (1) (1) (1) (1) (1).png index 6af2c82902..fc3bd900b8 100644 Binary files a/docs/.gitbook/assets/11 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/11 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/11 (1) (1) (1) (1).png b/docs/.gitbook/assets/11 (1) (1) (1) (1).png index fc3bd900b8..541e88da21 100644 Binary files a/docs/.gitbook/assets/11 (1) (1) (1) (1).png and b/docs/.gitbook/assets/11 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/11 (1) (1) (1).png b/docs/.gitbook/assets/11 (1) (1) (1).png index 541e88da21..a42cc784e1 100644 Binary files a/docs/.gitbook/assets/11 (1) (1) (1).png and b/docs/.gitbook/assets/11 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/11 (1) (1).png b/docs/.gitbook/assets/11 (1) (1).png index a42cc784e1..7c23e012ff 100644 Binary files a/docs/.gitbook/assets/11 (1) (1).png and b/docs/.gitbook/assets/11 (1) (1).png differ diff --git a/docs/.gitbook/assets/11 (1).png b/docs/.gitbook/assets/11 (1).png index 7c23e012ff..0c8f85af35 100644 Binary files a/docs/.gitbook/assets/11 (1).png and b/docs/.gitbook/assets/11 (1).png differ diff --git a/docs/.gitbook/assets/11.png b/docs/.gitbook/assets/11.png index 0c8f85af35..57f3ccec52 100644 Binary files a/docs/.gitbook/assets/11.png and b/docs/.gitbook/assets/11.png differ diff --git a/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..1a2951561d Binary files /dev/null and b/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1) (1).png index 1a2951561d..462c14fa85 100644 Binary files a/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1).png index 462c14fa85..f4f55adf41 100644 Binary files a/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/12 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/12 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/12 (1) (1) (1) (1) (1).png index f4f55adf41..6c787849a9 100644 Binary files a/docs/.gitbook/assets/12 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/12 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/12 (1) (1) (1) (1).png b/docs/.gitbook/assets/12 (1) (1) (1) (1).png index 6c787849a9..c14e645215 100644 Binary files a/docs/.gitbook/assets/12 (1) (1) (1) (1).png and b/docs/.gitbook/assets/12 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/12 (1) (1) (1).png b/docs/.gitbook/assets/12 (1) (1) (1).png index c14e645215..1b2a4b1535 100644 Binary files a/docs/.gitbook/assets/12 (1) (1) (1).png and b/docs/.gitbook/assets/12 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/12 (1) (1).png b/docs/.gitbook/assets/12 (1) (1).png index 1b2a4b1535..2aff118387 100644 Binary files a/docs/.gitbook/assets/12 (1) (1).png and b/docs/.gitbook/assets/12 (1) (1).png differ diff --git a/docs/.gitbook/assets/12 (1).png b/docs/.gitbook/assets/12 (1).png index 2aff118387..9009307886 100644 Binary files a/docs/.gitbook/assets/12 (1).png and b/docs/.gitbook/assets/12 (1).png differ diff --git a/docs/.gitbook/assets/12.png b/docs/.gitbook/assets/12.png index 9009307886..f61aca7c70 100644 Binary files a/docs/.gitbook/assets/12.png and b/docs/.gitbook/assets/12.png differ diff --git a/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..bfde5004ee Binary files /dev/null and b/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1) (1).png index bfde5004ee..72812077db 100644 Binary files a/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1).png index 72812077db..c7d3378bd5 100644 Binary files a/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/13 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/13 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/13 (1) (1) (1) (1) (1).png index c7d3378bd5..ab3d0f4eb2 100644 Binary files a/docs/.gitbook/assets/13 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/13 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/13 (1) (1) (1) (1).png b/docs/.gitbook/assets/13 (1) (1) (1) (1).png index ab3d0f4eb2..291b493997 100644 Binary files a/docs/.gitbook/assets/13 (1) (1) (1) (1).png and b/docs/.gitbook/assets/13 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/13 (1) (1) (1).png b/docs/.gitbook/assets/13 (1) (1) (1).png index 291b493997..2385ce99fe 100644 Binary files a/docs/.gitbook/assets/13 (1) (1) (1).png and b/docs/.gitbook/assets/13 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/13 (1) (1).png b/docs/.gitbook/assets/13 (1) (1).png index 2385ce99fe..a93764dd1a 100644 Binary files a/docs/.gitbook/assets/13 (1) (1).png and b/docs/.gitbook/assets/13 (1) (1).png differ diff --git a/docs/.gitbook/assets/13 (1).png b/docs/.gitbook/assets/13 (1).png index a93764dd1a..baa90aa16a 100644 Binary files a/docs/.gitbook/assets/13 (1).png and b/docs/.gitbook/assets/13 (1).png differ diff --git a/docs/.gitbook/assets/13.png b/docs/.gitbook/assets/13.png index baa90aa16a..0f173249b8 100644 Binary files a/docs/.gitbook/assets/13.png and b/docs/.gitbook/assets/13.png differ diff --git a/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..f6ea14710d Binary files /dev/null and b/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1) (1).png index f6ea14710d..a1541bc832 100644 Binary files a/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1).png index a1541bc832..70d79881de 100644 Binary files a/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/14 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/14 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/14 (1) (1) (1) (1) (1).png index 70d79881de..53d1fc841f 100644 Binary files a/docs/.gitbook/assets/14 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/14 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/14 (1) (1) (1) (1).png b/docs/.gitbook/assets/14 (1) (1) (1) (1).png index 53d1fc841f..68720d7b4e 100644 Binary files a/docs/.gitbook/assets/14 (1) (1) (1) (1).png and b/docs/.gitbook/assets/14 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/14 (1) (1) (1).png b/docs/.gitbook/assets/14 (1) (1) (1).png index 68720d7b4e..77aa742959 100644 Binary files a/docs/.gitbook/assets/14 (1) (1) (1).png and b/docs/.gitbook/assets/14 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/14 (1) (1).png b/docs/.gitbook/assets/14 (1) (1).png index 77aa742959..60a85d3ff7 100644 Binary files a/docs/.gitbook/assets/14 (1) (1).png and b/docs/.gitbook/assets/14 (1) (1).png differ diff --git a/docs/.gitbook/assets/14 (1).png b/docs/.gitbook/assets/14 (1).png index 60a85d3ff7..91e997ee03 100644 Binary files a/docs/.gitbook/assets/14 (1).png and b/docs/.gitbook/assets/14 (1).png differ diff --git a/docs/.gitbook/assets/14.png b/docs/.gitbook/assets/14.png index 91e997ee03..d829f48585 100644 Binary files a/docs/.gitbook/assets/14.png and b/docs/.gitbook/assets/14.png differ diff --git a/docs/.gitbook/assets/15 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/15 (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..5e63d70607 Binary files /dev/null and b/docs/.gitbook/assets/15 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/15 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/15 (1) (1) (1) (1) (1) (1).png index 5e63d70607..f79a719cf2 100644 Binary files a/docs/.gitbook/assets/15 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/15 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/15 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/15 (1) (1) (1) (1) (1).png index f79a719cf2..f64cb6b03f 100644 Binary files a/docs/.gitbook/assets/15 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/15 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/15 (1) (1) (1) (1).png b/docs/.gitbook/assets/15 (1) (1) (1) (1).png index f64cb6b03f..26e126c48e 100644 Binary files a/docs/.gitbook/assets/15 (1) (1) (1) (1).png and b/docs/.gitbook/assets/15 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/15 (1) (1) (1).png b/docs/.gitbook/assets/15 (1) (1) (1).png index 26e126c48e..d6b1f28214 100644 Binary files a/docs/.gitbook/assets/15 (1) (1) (1).png and b/docs/.gitbook/assets/15 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/15 (1) (1).png b/docs/.gitbook/assets/15 (1) (1).png index d6b1f28214..6aa4a57ccc 100644 Binary files a/docs/.gitbook/assets/15 (1) (1).png and b/docs/.gitbook/assets/15 (1) (1).png differ diff --git a/docs/.gitbook/assets/15 (1).png b/docs/.gitbook/assets/15 (1).png index 6aa4a57ccc..e9b2295c13 100644 Binary files a/docs/.gitbook/assets/15 (1).png and b/docs/.gitbook/assets/15 (1).png differ diff --git a/docs/.gitbook/assets/15.png b/docs/.gitbook/assets/15.png index e9b2295c13..39a1ed1d21 100644 Binary files a/docs/.gitbook/assets/15.png and b/docs/.gitbook/assets/15.png differ diff --git a/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..f9a7bbb685 Binary files /dev/null and b/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1) (1).png index f9a7bbb685..4cbed08115 100644 Binary files a/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1).png index 4cbed08115..879ada5ec2 100644 Binary files a/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1).png index 879ada5ec2..10b5ad32f6 100644 Binary files a/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/16 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/16 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/16 (1) (1) (1) (1) (1).png index 10b5ad32f6..cdbfe170bb 100644 Binary files a/docs/.gitbook/assets/16 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/16 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/16 (1) (1) (1) (1).png b/docs/.gitbook/assets/16 (1) (1) (1) (1).png index cdbfe170bb..0f6c0d1861 100644 Binary files a/docs/.gitbook/assets/16 (1) (1) (1) (1).png and b/docs/.gitbook/assets/16 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/16 (1) (1) (1).png b/docs/.gitbook/assets/16 (1) (1) (1).png index 0f6c0d1861..0c195f7484 100644 Binary files a/docs/.gitbook/assets/16 (1) (1) (1).png and b/docs/.gitbook/assets/16 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/16 (1) (1).png b/docs/.gitbook/assets/16 (1) (1).png index 0c195f7484..e099b6ba5d 100644 Binary files a/docs/.gitbook/assets/16 (1) (1).png and b/docs/.gitbook/assets/16 (1) (1).png differ diff --git a/docs/.gitbook/assets/16 (1).png b/docs/.gitbook/assets/16 (1).png index e099b6ba5d..464ca0d060 100644 Binary files a/docs/.gitbook/assets/16 (1).png and b/docs/.gitbook/assets/16 (1).png differ diff --git a/docs/.gitbook/assets/16.png b/docs/.gitbook/assets/16.png index 464ca0d060..a116e943f6 100644 Binary files a/docs/.gitbook/assets/16.png and b/docs/.gitbook/assets/16.png differ diff --git a/docs/.gitbook/assets/17 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/17 (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..c7ba172029 Binary files /dev/null and b/docs/.gitbook/assets/17 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/17 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/17 (1) (1) (1) (1) (1) (1).png index c7ba172029..784938494c 100644 Binary files a/docs/.gitbook/assets/17 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/17 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/17 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/17 (1) (1) (1) (1) (1).png index 784938494c..2e24d84e15 100644 Binary files a/docs/.gitbook/assets/17 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/17 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/17 (1) (1) (1) (1).png b/docs/.gitbook/assets/17 (1) (1) (1) (1).png index 2e24d84e15..2a06eb4c16 100644 Binary files a/docs/.gitbook/assets/17 (1) (1) (1) (1).png and b/docs/.gitbook/assets/17 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/17 (1) (1) (1).png b/docs/.gitbook/assets/17 (1) (1) (1).png index 2a06eb4c16..eb413efc81 100644 Binary files a/docs/.gitbook/assets/17 (1) (1) (1).png and b/docs/.gitbook/assets/17 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/17 (1) (1).png b/docs/.gitbook/assets/17 (1) (1).png index eb413efc81..7fadf417ed 100644 Binary files a/docs/.gitbook/assets/17 (1) (1).png and b/docs/.gitbook/assets/17 (1) (1).png differ diff --git a/docs/.gitbook/assets/17 (1).png b/docs/.gitbook/assets/17 (1).png index 7fadf417ed..e0ffbfca33 100644 Binary files a/docs/.gitbook/assets/17 (1).png and b/docs/.gitbook/assets/17 (1).png differ diff --git a/docs/.gitbook/assets/17.png b/docs/.gitbook/assets/17.png index e0ffbfca33..69b0174244 100644 Binary files a/docs/.gitbook/assets/17.png and b/docs/.gitbook/assets/17.png differ diff --git a/docs/.gitbook/assets/18 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/18 (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..449698c7f5 Binary files /dev/null and b/docs/.gitbook/assets/18 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/18 (1) (1) (1) (1).png b/docs/.gitbook/assets/18 (1) (1) (1) (1).png index 449698c7f5..13aea98325 100644 Binary files a/docs/.gitbook/assets/18 (1) (1) (1) (1).png and b/docs/.gitbook/assets/18 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/18 (1) (1) (1).png b/docs/.gitbook/assets/18 (1) (1) (1).png index 13aea98325..805571ffda 100644 Binary files a/docs/.gitbook/assets/18 (1) (1) (1).png and b/docs/.gitbook/assets/18 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/18 (1) (1).png b/docs/.gitbook/assets/18 (1) (1).png index 805571ffda..be7bec9371 100644 Binary files a/docs/.gitbook/assets/18 (1) (1).png and b/docs/.gitbook/assets/18 (1) (1).png differ diff --git a/docs/.gitbook/assets/18 (1).png b/docs/.gitbook/assets/18 (1).png index be7bec9371..c05612959d 100644 Binary files a/docs/.gitbook/assets/18 (1).png and b/docs/.gitbook/assets/18 (1).png differ diff --git a/docs/.gitbook/assets/18.png b/docs/.gitbook/assets/18.png index c05612959d..155e553b9c 100644 Binary files a/docs/.gitbook/assets/18.png and b/docs/.gitbook/assets/18.png differ diff --git a/docs/.gitbook/assets/19 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/19 (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..b4d505eba3 Binary files /dev/null and b/docs/.gitbook/assets/19 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/19 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/19 (1) (1) (1) (1) (1).png index b4d505eba3..ee87e7871b 100644 Binary files a/docs/.gitbook/assets/19 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/19 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/19 (1) (1) (1) (1).png b/docs/.gitbook/assets/19 (1) (1) (1) (1).png index ee87e7871b..97492333bf 100644 Binary files a/docs/.gitbook/assets/19 (1) (1) (1) (1).png and b/docs/.gitbook/assets/19 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/19 (1) (1) (1).png b/docs/.gitbook/assets/19 (1) (1) (1).png index 97492333bf..f1f1c7d4b3 100644 Binary files a/docs/.gitbook/assets/19 (1) (1) (1).png and b/docs/.gitbook/assets/19 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/19 (1) (1).png b/docs/.gitbook/assets/19 (1) (1).png index f1f1c7d4b3..a2543bae40 100644 Binary files a/docs/.gitbook/assets/19 (1) (1).png and b/docs/.gitbook/assets/19 (1) (1).png differ diff --git a/docs/.gitbook/assets/19 (1).png b/docs/.gitbook/assets/19 (1).png index a2543bae40..a86c954a0f 100644 Binary files a/docs/.gitbook/assets/19 (1).png and b/docs/.gitbook/assets/19 (1).png differ diff --git a/docs/.gitbook/assets/19.png b/docs/.gitbook/assets/19.png index a86c954a0f..7d4b5c52f2 100644 Binary files a/docs/.gitbook/assets/19.png and b/docs/.gitbook/assets/19.png differ diff --git a/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..5cf2a4dd49 Binary files /dev/null and b/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1) (1).png index 5cf2a4dd49..27ad7d378c 100644 Binary files a/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1).png index 27ad7d378c..cd4d124a8c 100644 Binary files a/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/2 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/2 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/2 (1) (1) (1) (1) (1).png index cd4d124a8c..085f8e6551 100644 Binary files a/docs/.gitbook/assets/2 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/2 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/2 (1) (1) (1) (1).png b/docs/.gitbook/assets/2 (1) (1) (1) (1).png index 085f8e6551..e45fa653f0 100644 Binary files a/docs/.gitbook/assets/2 (1) (1) (1) (1).png and b/docs/.gitbook/assets/2 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/2 (1) (1) (1).png b/docs/.gitbook/assets/2 (1) (1) (1).png index e45fa653f0..0f79835520 100644 Binary files a/docs/.gitbook/assets/2 (1) (1) (1).png and b/docs/.gitbook/assets/2 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/2 (1) (1).png b/docs/.gitbook/assets/2 (1) (1).png index 0f79835520..5cdf6cd443 100644 Binary files a/docs/.gitbook/assets/2 (1) (1).png and b/docs/.gitbook/assets/2 (1) (1).png differ diff --git a/docs/.gitbook/assets/2 (1).png b/docs/.gitbook/assets/2 (1).png index 5cdf6cd443..790f255304 100644 Binary files a/docs/.gitbook/assets/2 (1).png and b/docs/.gitbook/assets/2 (1).png differ diff --git a/docs/.gitbook/assets/2.png b/docs/.gitbook/assets/2.png index 790f255304..023b0aaa31 100644 Binary files a/docs/.gitbook/assets/2.png and b/docs/.gitbook/assets/2.png differ diff --git a/docs/.gitbook/assets/20 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/20 (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..bef966dff8 Binary files /dev/null and b/docs/.gitbook/assets/20 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/20 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/20 (1) (1) (1) (1) (1).png index bef966dff8..a285cca3a4 100644 Binary files a/docs/.gitbook/assets/20 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/20 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/20 (1) (1) (1) (1).png b/docs/.gitbook/assets/20 (1) (1) (1) (1).png index a285cca3a4..1ae8e8e627 100644 Binary files a/docs/.gitbook/assets/20 (1) (1) (1) (1).png and b/docs/.gitbook/assets/20 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/20 (1) (1) (1).png b/docs/.gitbook/assets/20 (1) (1) (1).png index 1ae8e8e627..da8f73c478 100644 Binary files a/docs/.gitbook/assets/20 (1) (1) (1).png and b/docs/.gitbook/assets/20 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/20 (1) (1).png b/docs/.gitbook/assets/20 (1) (1).png index da8f73c478..152f5be61e 100644 Binary files a/docs/.gitbook/assets/20 (1) (1).png and b/docs/.gitbook/assets/20 (1) (1).png differ diff --git a/docs/.gitbook/assets/20 (1).png b/docs/.gitbook/assets/20 (1).png index 152f5be61e..a86c954a0f 100644 Binary files a/docs/.gitbook/assets/20 (1).png and b/docs/.gitbook/assets/20 (1).png differ diff --git a/docs/.gitbook/assets/20.png b/docs/.gitbook/assets/20.png index a86c954a0f..a86005d4f3 100644 Binary files a/docs/.gitbook/assets/20.png and b/docs/.gitbook/assets/20.png differ diff --git a/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..61ba944fdd Binary files /dev/null and b/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1) (1).png index 61ba944fdd..529a820423 100644 Binary files a/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1).png index 529a820423..f69785d8bb 100644 Binary files a/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1).png index f69785d8bb..46a5470151 100644 Binary files a/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/3 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/3 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/3 (1) (1) (1) (1) (1).png index 46a5470151..661629cb46 100644 Binary files a/docs/.gitbook/assets/3 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/3 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/3 (1) (1) (1) (1).png b/docs/.gitbook/assets/3 (1) (1) (1) (1).png index 661629cb46..9bbb9f4c63 100644 Binary files a/docs/.gitbook/assets/3 (1) (1) (1) (1).png and b/docs/.gitbook/assets/3 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/3 (1) (1) (1).png b/docs/.gitbook/assets/3 (1) (1) (1).png index 9bbb9f4c63..9ed35042de 100644 Binary files a/docs/.gitbook/assets/3 (1) (1) (1).png and b/docs/.gitbook/assets/3 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/3 (1) (1).png b/docs/.gitbook/assets/3 (1) (1).png index 9ed35042de..0277d0c1d5 100644 Binary files a/docs/.gitbook/assets/3 (1) (1).png and b/docs/.gitbook/assets/3 (1) (1).png differ diff --git a/docs/.gitbook/assets/3 (1).png b/docs/.gitbook/assets/3 (1).png index 0277d0c1d5..055432dabf 100644 Binary files a/docs/.gitbook/assets/3 (1).png and b/docs/.gitbook/assets/3 (1).png differ diff --git a/docs/.gitbook/assets/3.png b/docs/.gitbook/assets/3.png index 055432dabf..6499c91496 100644 Binary files a/docs/.gitbook/assets/3.png and b/docs/.gitbook/assets/3.png differ diff --git a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..3e35cf3ea1 Binary files /dev/null and b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 3e35cf3ea1..ab0bac4778 100644 Binary files a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1).png index ab0bac4778..d084797ac1 100644 Binary files a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1).png index d084797ac1..4ed041bba6 100644 Binary files a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1).png index 4ed041bba6..df2d520907 100644 Binary files a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1).png index df2d520907..58263b38f9 100644 Binary files a/docs/.gitbook/assets/4 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/4 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/4 (1) (1) (1) (1).png b/docs/.gitbook/assets/4 (1) (1) (1) (1).png index 58263b38f9..b9f3c30e2b 100644 Binary files a/docs/.gitbook/assets/4 (1) (1) (1) (1).png and b/docs/.gitbook/assets/4 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/4 (1) (1) (1).png b/docs/.gitbook/assets/4 (1) (1) (1).png index b9f3c30e2b..e7a6b806d2 100644 Binary files a/docs/.gitbook/assets/4 (1) (1) (1).png and b/docs/.gitbook/assets/4 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/4 (1) (1).png b/docs/.gitbook/assets/4 (1) (1).png index e7a6b806d2..5621471d72 100644 Binary files a/docs/.gitbook/assets/4 (1) (1).png and b/docs/.gitbook/assets/4 (1) (1).png differ diff --git a/docs/.gitbook/assets/4 (1).png b/docs/.gitbook/assets/4 (1).png index 5621471d72..a6bffc2fef 100644 Binary files a/docs/.gitbook/assets/4 (1).png and b/docs/.gitbook/assets/4 (1).png differ diff --git a/docs/.gitbook/assets/4.png b/docs/.gitbook/assets/4.png index a6bffc2fef..749b49aa4e 100644 Binary files a/docs/.gitbook/assets/4.png and b/docs/.gitbook/assets/4.png differ diff --git a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..8c2ff12172 Binary files /dev/null and b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 8c2ff12172..466c6c67f3 100644 Binary files a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1).png index 466c6c67f3..5fa02c03c6 100644 Binary files a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1).png index 5fa02c03c6..0c21569d5b 100644 Binary files a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1).png index 0c21569d5b..494e567a68 100644 Binary files a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1).png index 494e567a68..fd570e81e9 100644 Binary files a/docs/.gitbook/assets/5 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/5 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/5 (1) (1) (1) (1).png b/docs/.gitbook/assets/5 (1) (1) (1) (1).png index fd570e81e9..b0d62a4409 100644 Binary files a/docs/.gitbook/assets/5 (1) (1) (1) (1).png and b/docs/.gitbook/assets/5 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/5 (1) (1) (1).png b/docs/.gitbook/assets/5 (1) (1) (1).png index b0d62a4409..339584a1b5 100644 Binary files a/docs/.gitbook/assets/5 (1) (1) (1).png and b/docs/.gitbook/assets/5 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/5 (1) (1).png b/docs/.gitbook/assets/5 (1) (1).png index 339584a1b5..8b37c3b8b6 100644 Binary files a/docs/.gitbook/assets/5 (1) (1).png and b/docs/.gitbook/assets/5 (1) (1).png differ diff --git a/docs/.gitbook/assets/5 (1).png b/docs/.gitbook/assets/5 (1).png index 8b37c3b8b6..cc78abf559 100644 Binary files a/docs/.gitbook/assets/5 (1).png and b/docs/.gitbook/assets/5 (1).png differ diff --git a/docs/.gitbook/assets/5.png b/docs/.gitbook/assets/5.png index cc78abf559..aac5872d3b 100644 Binary files a/docs/.gitbook/assets/5.png and b/docs/.gitbook/assets/5.png differ diff --git a/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..73658433d8 Binary files /dev/null and b/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1) (1).png index 73658433d8..aadd0c2aa9 100644 Binary files a/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1).png index aadd0c2aa9..5648b9c87b 100644 Binary files a/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1).png index 5648b9c87b..eaced7bb33 100644 Binary files a/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/6 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/6 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/6 (1) (1) (1) (1) (1).png index eaced7bb33..cb04eb3f7e 100644 Binary files a/docs/.gitbook/assets/6 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/6 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/6 (1) (1) (1) (1).png b/docs/.gitbook/assets/6 (1) (1) (1) (1).png index cb04eb3f7e..99ed751613 100644 Binary files a/docs/.gitbook/assets/6 (1) (1) (1) (1).png and b/docs/.gitbook/assets/6 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/6 (1) (1) (1).png b/docs/.gitbook/assets/6 (1) (1) (1).png index 99ed751613..bf25d35809 100644 Binary files a/docs/.gitbook/assets/6 (1) (1) (1).png and b/docs/.gitbook/assets/6 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/6 (1) (1).png b/docs/.gitbook/assets/6 (1) (1).png index bf25d35809..d0001775d7 100644 Binary files a/docs/.gitbook/assets/6 (1) (1).png and b/docs/.gitbook/assets/6 (1) (1).png differ diff --git a/docs/.gitbook/assets/6 (1).png b/docs/.gitbook/assets/6 (1).png index d0001775d7..950ea09796 100644 Binary files a/docs/.gitbook/assets/6 (1).png and b/docs/.gitbook/assets/6 (1).png differ diff --git a/docs/.gitbook/assets/6.png b/docs/.gitbook/assets/6.png index 950ea09796..1221ceaa5e 100644 Binary files a/docs/.gitbook/assets/6.png and b/docs/.gitbook/assets/6.png differ diff --git a/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..4e05db45ca Binary files /dev/null and b/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1) (1).png index 4e05db45ca..d7f7d2773f 100644 Binary files a/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1).png index d7f7d2773f..c7a57b5faa 100644 Binary files a/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/7 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/7 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/7 (1) (1) (1) (1) (1).png index c7a57b5faa..13588c83ed 100644 Binary files a/docs/.gitbook/assets/7 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/7 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/7 (1) (1) (1) (1).png b/docs/.gitbook/assets/7 (1) (1) (1) (1).png index 13588c83ed..a473cc7c76 100644 Binary files a/docs/.gitbook/assets/7 (1) (1) (1) (1).png and b/docs/.gitbook/assets/7 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/7 (1) (1) (1).png b/docs/.gitbook/assets/7 (1) (1) (1).png index a473cc7c76..7c0527595e 100644 Binary files a/docs/.gitbook/assets/7 (1) (1) (1).png and b/docs/.gitbook/assets/7 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/7 (1) (1).png b/docs/.gitbook/assets/7 (1) (1).png index 7c0527595e..10886e0070 100644 Binary files a/docs/.gitbook/assets/7 (1) (1).png and b/docs/.gitbook/assets/7 (1) (1).png differ diff --git a/docs/.gitbook/assets/7 (1).png b/docs/.gitbook/assets/7 (1).png index 10886e0070..c65a6c2b27 100644 Binary files a/docs/.gitbook/assets/7 (1).png and b/docs/.gitbook/assets/7 (1).png differ diff --git a/docs/.gitbook/assets/7.png b/docs/.gitbook/assets/7.png index c65a6c2b27..21617f874c 100644 Binary files a/docs/.gitbook/assets/7.png and b/docs/.gitbook/assets/7.png differ diff --git a/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..8d8f4f7e49 Binary files /dev/null and b/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1) (1).png index 8d8f4f7e49..ae641feced 100644 Binary files a/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1).png index ae641feced..e5d2532d19 100644 Binary files a/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/8 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/8 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/8 (1) (1) (1) (1) (1).png index e5d2532d19..cf7278cf38 100644 Binary files a/docs/.gitbook/assets/8 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/8 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/8 (1) (1) (1) (1).png b/docs/.gitbook/assets/8 (1) (1) (1) (1).png index cf7278cf38..e3f670f47b 100644 Binary files a/docs/.gitbook/assets/8 (1) (1) (1) (1).png and b/docs/.gitbook/assets/8 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/8 (1) (1) (1).png b/docs/.gitbook/assets/8 (1) (1) (1).png index e3f670f47b..ea9c638eb8 100644 Binary files a/docs/.gitbook/assets/8 (1) (1) (1).png and b/docs/.gitbook/assets/8 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/8 (1) (1).png b/docs/.gitbook/assets/8 (1) (1).png index ea9c638eb8..4853ba721b 100644 Binary files a/docs/.gitbook/assets/8 (1) (1).png and b/docs/.gitbook/assets/8 (1) (1).png differ diff --git a/docs/.gitbook/assets/8 (1).png b/docs/.gitbook/assets/8 (1).png index 4853ba721b..f7c5a18701 100644 Binary files a/docs/.gitbook/assets/8 (1).png and b/docs/.gitbook/assets/8 (1).png differ diff --git a/docs/.gitbook/assets/8.png b/docs/.gitbook/assets/8.png index f7c5a18701..bdb9f81b38 100644 Binary files a/docs/.gitbook/assets/8.png and b/docs/.gitbook/assets/8.png differ diff --git a/docs/.gitbook/assets/9 (1) (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/9 (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000000..606bb40e08 Binary files /dev/null and b/docs/.gitbook/assets/9 (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/9 (1) (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/9 (1) (1) (1) (1) (1) (1).png index 606bb40e08..12bbe199e4 100644 Binary files a/docs/.gitbook/assets/9 (1) (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/9 (1) (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/9 (1) (1) (1) (1) (1).png b/docs/.gitbook/assets/9 (1) (1) (1) (1) (1).png index 12bbe199e4..5f54b93c60 100644 Binary files a/docs/.gitbook/assets/9 (1) (1) (1) (1) (1).png and b/docs/.gitbook/assets/9 (1) (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/9 (1) (1) (1) (1).png b/docs/.gitbook/assets/9 (1) (1) (1) (1).png index 5f54b93c60..6fe4120ec4 100644 Binary files a/docs/.gitbook/assets/9 (1) (1) (1) (1).png and b/docs/.gitbook/assets/9 (1) (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/9 (1) (1) (1).png b/docs/.gitbook/assets/9 (1) (1) (1).png index 6fe4120ec4..047c9b25ac 100644 Binary files a/docs/.gitbook/assets/9 (1) (1) (1).png and b/docs/.gitbook/assets/9 (1) (1) (1).png differ diff --git a/docs/.gitbook/assets/9 (1) (1).png b/docs/.gitbook/assets/9 (1) (1).png index 047c9b25ac..54637cbabd 100644 Binary files a/docs/.gitbook/assets/9 (1) (1).png and b/docs/.gitbook/assets/9 (1) (1).png differ diff --git a/docs/.gitbook/assets/9 (1).png b/docs/.gitbook/assets/9 (1).png index 54637cbabd..bfbaafac50 100644 Binary files a/docs/.gitbook/assets/9 (1).png and b/docs/.gitbook/assets/9 (1).png differ diff --git a/docs/.gitbook/assets/9.png b/docs/.gitbook/assets/9.png index bfbaafac50..605a4e556c 100644 Binary files a/docs/.gitbook/assets/9.png and b/docs/.gitbook/assets/9.png differ diff --git a/docs/.gitbook/assets/Climate Action Reserve Workflow (3).png b/docs/.gitbook/assets/Climate Action Reserve Workflow (3).png new file mode 100644 index 0000000000..f188ae2642 Binary files /dev/null and b/docs/.gitbook/assets/Climate Action Reserve Workflow (3).png differ diff --git a/docs/.gitbook/assets/image (696).png b/docs/.gitbook/assets/image (696).png new file mode 100644 index 0000000000..fba0de575e Binary files /dev/null and b/docs/.gitbook/assets/image (696).png differ diff --git a/docs/.gitbook/assets/image (697).png b/docs/.gitbook/assets/image (697).png new file mode 100644 index 0000000000..9f7747fe58 Binary files /dev/null and b/docs/.gitbook/assets/image (697).png differ diff --git a/docs/.gitbook/assets/image (698).png b/docs/.gitbook/assets/image (698).png new file mode 100644 index 0000000000..19b6faf62c Binary files /dev/null and b/docs/.gitbook/assets/image (698).png differ diff --git a/docs/.gitbook/assets/image (699).png b/docs/.gitbook/assets/image (699).png new file mode 100644 index 0000000000..4abb76f69a Binary files /dev/null and b/docs/.gitbook/assets/image (699).png differ diff --git a/docs/.gitbook/assets/image (700).png b/docs/.gitbook/assets/image (700).png new file mode 100644 index 0000000000..fe568688cb Binary files /dev/null and b/docs/.gitbook/assets/image (700).png differ diff --git a/docs/.gitbook/assets/image (701).png b/docs/.gitbook/assets/image (701).png new file mode 100644 index 0000000000..9260272022 Binary files /dev/null and b/docs/.gitbook/assets/image (701).png differ diff --git a/docs/.gitbook/assets/image (702).png b/docs/.gitbook/assets/image (702).png new file mode 100644 index 0000000000..262b2f5363 Binary files /dev/null and b/docs/.gitbook/assets/image (702).png differ diff --git a/docs/.gitbook/assets/image (703).png b/docs/.gitbook/assets/image (703).png new file mode 100644 index 0000000000..c7e4622ca2 Binary files /dev/null and b/docs/.gitbook/assets/image (703).png differ diff --git a/docs/.gitbook/assets/image (704).png b/docs/.gitbook/assets/image (704).png new file mode 100644 index 0000000000..df21109d07 Binary files /dev/null and b/docs/.gitbook/assets/image (704).png differ diff --git a/docs/.gitbook/assets/image (705).png b/docs/.gitbook/assets/image (705).png new file mode 100644 index 0000000000..453e5290e5 Binary files /dev/null and b/docs/.gitbook/assets/image (705).png differ diff --git a/docs/.gitbook/assets/image (706).png b/docs/.gitbook/assets/image (706).png new file mode 100644 index 0000000000..cf207e85f2 Binary files /dev/null and b/docs/.gitbook/assets/image (706).png differ diff --git a/docs/.gitbook/assets/image (707).png b/docs/.gitbook/assets/image (707).png new file mode 100644 index 0000000000..323ababd7c Binary files /dev/null and b/docs/.gitbook/assets/image (707).png differ diff --git a/docs/.gitbook/assets/image (708).png b/docs/.gitbook/assets/image (708).png new file mode 100644 index 0000000000..030662bfc4 Binary files /dev/null and b/docs/.gitbook/assets/image (708).png differ diff --git a/docs/.gitbook/assets/image (709).png b/docs/.gitbook/assets/image (709).png new file mode 100644 index 0000000000..554dfce65e Binary files /dev/null and b/docs/.gitbook/assets/image (709).png differ diff --git a/docs/.gitbook/assets/image (710).png b/docs/.gitbook/assets/image (710).png new file mode 100644 index 0000000000..13998ff9d4 Binary files /dev/null and b/docs/.gitbook/assets/image (710).png differ diff --git a/docs/.gitbook/assets/image (711).png b/docs/.gitbook/assets/image (711).png new file mode 100644 index 0000000000..e18bab4e74 Binary files /dev/null and b/docs/.gitbook/assets/image (711).png differ diff --git a/docs/.gitbook/assets/image (712).png b/docs/.gitbook/assets/image (712).png new file mode 100644 index 0000000000..744074c372 Binary files /dev/null and b/docs/.gitbook/assets/image (712).png differ diff --git a/docs/.gitbook/assets/image (713).png b/docs/.gitbook/assets/image (713).png new file mode 100644 index 0000000000..8714d2d043 Binary files /dev/null and b/docs/.gitbook/assets/image (713).png differ diff --git a/docs/.gitbook/assets/image (714).png b/docs/.gitbook/assets/image (714).png new file mode 100644 index 0000000000..4025b4a1a7 Binary files /dev/null and b/docs/.gitbook/assets/image (714).png differ diff --git a/docs/.gitbook/assets/image (715).png b/docs/.gitbook/assets/image (715).png new file mode 100644 index 0000000000..9b5b6c5b45 Binary files /dev/null and b/docs/.gitbook/assets/image (715).png differ diff --git a/docs/.gitbook/assets/image (716).png b/docs/.gitbook/assets/image (716).png new file mode 100644 index 0000000000..e11db349a4 Binary files /dev/null and b/docs/.gitbook/assets/image (716).png differ diff --git a/docs/.gitbook/assets/image (717).png b/docs/.gitbook/assets/image (717).png new file mode 100644 index 0000000000..29d06bbbf8 Binary files /dev/null and b/docs/.gitbook/assets/image (717).png differ diff --git a/docs/.gitbook/assets/image (718).png b/docs/.gitbook/assets/image (718).png new file mode 100644 index 0000000000..832f4d7279 Binary files /dev/null and b/docs/.gitbook/assets/image (718).png differ diff --git a/docs/.gitbook/assets/image (719).png b/docs/.gitbook/assets/image (719).png new file mode 100644 index 0000000000..3e10cdb041 Binary files /dev/null and b/docs/.gitbook/assets/image (719).png differ diff --git a/docs/.gitbook/assets/image (720).png b/docs/.gitbook/assets/image (720).png new file mode 100644 index 0000000000..512bd747c2 Binary files /dev/null and b/docs/.gitbook/assets/image (720).png differ diff --git a/docs/.gitbook/assets/image (721).png b/docs/.gitbook/assets/image (721).png new file mode 100644 index 0000000000..78b3db545c Binary files /dev/null and b/docs/.gitbook/assets/image (721).png differ diff --git a/docs/.gitbook/assets/image (722).png b/docs/.gitbook/assets/image (722).png new file mode 100644 index 0000000000..ae46b516e7 Binary files /dev/null and b/docs/.gitbook/assets/image (722).png differ diff --git a/docs/.gitbook/assets/image (723).png b/docs/.gitbook/assets/image (723).png new file mode 100644 index 0000000000..566d324f94 Binary files /dev/null and b/docs/.gitbook/assets/image (723).png differ diff --git a/docs/.gitbook/assets/image (724).png b/docs/.gitbook/assets/image (724).png new file mode 100644 index 0000000000..512bd747c2 Binary files /dev/null and b/docs/.gitbook/assets/image (724).png differ diff --git a/docs/.gitbook/assets/image (725).png b/docs/.gitbook/assets/image (725).png new file mode 100644 index 0000000000..78b3db545c Binary files /dev/null and b/docs/.gitbook/assets/image (725).png differ diff --git a/docs/.gitbook/assets/image (726).png b/docs/.gitbook/assets/image (726).png new file mode 100644 index 0000000000..c5e8e1d2e5 Binary files /dev/null and b/docs/.gitbook/assets/image (726).png differ diff --git a/docs/.gitbook/assets/image (727).png b/docs/.gitbook/assets/image (727).png new file mode 100644 index 0000000000..72095dc812 Binary files /dev/null and b/docs/.gitbook/assets/image (727).png differ diff --git a/docs/.gitbook/assets/image (728).png b/docs/.gitbook/assets/image (728).png new file mode 100644 index 0000000000..2f8e3af664 Binary files /dev/null and b/docs/.gitbook/assets/image (728).png differ diff --git a/docs/.gitbook/assets/image (729).png b/docs/.gitbook/assets/image (729).png new file mode 100644 index 0000000000..aaf6929f02 Binary files /dev/null and b/docs/.gitbook/assets/image (729).png differ diff --git a/docs/.gitbook/assets/image (730).png b/docs/.gitbook/assets/image (730).png new file mode 100644 index 0000000000..5cbf37ab7a Binary files /dev/null and b/docs/.gitbook/assets/image (730).png differ diff --git a/docs/.gitbook/assets/image (731).png b/docs/.gitbook/assets/image (731).png new file mode 100644 index 0000000000..97c17ec2af Binary files /dev/null and b/docs/.gitbook/assets/image (731).png differ diff --git a/docs/.gitbook/assets/image (732).png b/docs/.gitbook/assets/image (732).png new file mode 100644 index 0000000000..7b78047dce Binary files /dev/null and b/docs/.gitbook/assets/image (732).png differ diff --git a/docs/.gitbook/assets/image (733).png b/docs/.gitbook/assets/image (733).png new file mode 100644 index 0000000000..bcde7e55ef Binary files /dev/null and b/docs/.gitbook/assets/image (733).png differ diff --git a/docs/.gitbook/assets/image (734).png b/docs/.gitbook/assets/image (734).png new file mode 100644 index 0000000000..bdf967493c Binary files /dev/null and b/docs/.gitbook/assets/image (734).png differ diff --git a/docs/.gitbook/assets/image (735).png b/docs/.gitbook/assets/image (735).png new file mode 100644 index 0000000000..3097a00229 Binary files /dev/null and b/docs/.gitbook/assets/image (735).png differ diff --git a/docs/.gitbook/assets/image (736).png b/docs/.gitbook/assets/image (736).png new file mode 100644 index 0000000000..6095592475 Binary files /dev/null and b/docs/.gitbook/assets/image (736).png differ diff --git a/docs/.gitbook/assets/image (737).png b/docs/.gitbook/assets/image (737).png new file mode 100644 index 0000000000..ef3faff354 Binary files /dev/null and b/docs/.gitbook/assets/image (737).png differ diff --git a/docs/.gitbook/assets/image (738).png b/docs/.gitbook/assets/image (738).png new file mode 100644 index 0000000000..77c4067c1e Binary files /dev/null and b/docs/.gitbook/assets/image (738).png differ diff --git a/docs/.gitbook/assets/image (739).png b/docs/.gitbook/assets/image (739).png new file mode 100644 index 0000000000..c460712c97 Binary files /dev/null and b/docs/.gitbook/assets/image (739).png differ diff --git a/docs/.gitbook/assets/image (740).png b/docs/.gitbook/assets/image (740).png new file mode 100644 index 0000000000..af99282f74 Binary files /dev/null and b/docs/.gitbook/assets/image (740).png differ diff --git a/docs/.gitbook/assets/image (741).png b/docs/.gitbook/assets/image (741).png new file mode 100644 index 0000000000..7643f355ee Binary files /dev/null and b/docs/.gitbook/assets/image (741).png differ diff --git a/docs/.gitbook/assets/image (742).png b/docs/.gitbook/assets/image (742).png new file mode 100644 index 0000000000..92ad92ce61 Binary files /dev/null and b/docs/.gitbook/assets/image (742).png differ diff --git a/docs/.gitbook/assets/image (743).png b/docs/.gitbook/assets/image (743).png new file mode 100644 index 0000000000..b44844a20a Binary files /dev/null and b/docs/.gitbook/assets/image (743).png differ diff --git a/docs/.gitbook/assets/image (744).png b/docs/.gitbook/assets/image (744).png new file mode 100644 index 0000000000..171bc81e14 Binary files /dev/null and b/docs/.gitbook/assets/image (744).png differ diff --git a/docs/.gitbook/assets/image (745).png b/docs/.gitbook/assets/image (745).png new file mode 100644 index 0000000000..15b1c0f259 Binary files /dev/null and b/docs/.gitbook/assets/image (745).png differ diff --git a/docs/.gitbook/assets/image (746).png b/docs/.gitbook/assets/image (746).png new file mode 100644 index 0000000000..5db818a635 Binary files /dev/null and b/docs/.gitbook/assets/image (746).png differ diff --git a/docs/.gitbook/assets/image (747).png b/docs/.gitbook/assets/image (747).png new file mode 100644 index 0000000000..3b4b74bf9d Binary files /dev/null and b/docs/.gitbook/assets/image (747).png differ diff --git a/docs/.gitbook/assets/image (748).png b/docs/.gitbook/assets/image (748).png new file mode 100644 index 0000000000..5dc3ee1aa9 Binary files /dev/null and b/docs/.gitbook/assets/image (748).png differ diff --git a/docs/.gitbook/assets/image (749).png b/docs/.gitbook/assets/image (749).png new file mode 100644 index 0000000000..e609f3b24f Binary files /dev/null and b/docs/.gitbook/assets/image (749).png differ diff --git a/docs/.gitbook/assets/image (750).png b/docs/.gitbook/assets/image (750).png new file mode 100644 index 0000000000..566fd73fba Binary files /dev/null and b/docs/.gitbook/assets/image (750).png differ diff --git a/docs/.gitbook/assets/image (751).png b/docs/.gitbook/assets/image (751).png new file mode 100644 index 0000000000..03e8a0d945 Binary files /dev/null and b/docs/.gitbook/assets/image (751).png differ diff --git a/docs/.gitbook/assets/image (752).png b/docs/.gitbook/assets/image (752).png new file mode 100644 index 0000000000..5e310b229b Binary files /dev/null and b/docs/.gitbook/assets/image (752).png differ diff --git a/docs/.gitbook/assets/image (753).png b/docs/.gitbook/assets/image (753).png new file mode 100644 index 0000000000..d5ba242dc8 Binary files /dev/null and b/docs/.gitbook/assets/image (753).png differ diff --git a/docs/.gitbook/assets/image (754).png b/docs/.gitbook/assets/image (754).png new file mode 100644 index 0000000000..6444543e28 Binary files /dev/null and b/docs/.gitbook/assets/image (754).png differ diff --git a/docs/.gitbook/assets/image (755).png b/docs/.gitbook/assets/image (755).png new file mode 100644 index 0000000000..fcc678d8ff Binary files /dev/null and b/docs/.gitbook/assets/image (755).png differ diff --git a/docs/.gitbook/assets/image (756).png b/docs/.gitbook/assets/image (756).png new file mode 100644 index 0000000000..d2bbd5e6b7 Binary files /dev/null and b/docs/.gitbook/assets/image (756).png differ diff --git a/docs/.gitbook/assets/image (757).png b/docs/.gitbook/assets/image (757).png new file mode 100644 index 0000000000..627a45bcdd Binary files /dev/null and b/docs/.gitbook/assets/image (757).png differ diff --git a/docs/.gitbook/assets/image (758).png b/docs/.gitbook/assets/image (758).png new file mode 100644 index 0000000000..e9744023d7 Binary files /dev/null and b/docs/.gitbook/assets/image (758).png differ diff --git a/docs/.gitbook/assets/image (759).png b/docs/.gitbook/assets/image (759).png new file mode 100644 index 0000000000..ba8bbcde0f Binary files /dev/null and b/docs/.gitbook/assets/image (759).png differ diff --git a/docs/.gitbook/assets/image (760).png b/docs/.gitbook/assets/image (760).png new file mode 100644 index 0000000000..f0027afa3f Binary files /dev/null and b/docs/.gitbook/assets/image (760).png differ diff --git a/docs/.gitbook/assets/image (761).png b/docs/.gitbook/assets/image (761).png new file mode 100644 index 0000000000..0558bb66b7 Binary files /dev/null and b/docs/.gitbook/assets/image (761).png differ diff --git a/docs/.gitbook/assets/image (762).png b/docs/.gitbook/assets/image (762).png new file mode 100644 index 0000000000..9340134d91 Binary files /dev/null and b/docs/.gitbook/assets/image (762).png differ diff --git a/docs/.gitbook/assets/image (763).png b/docs/.gitbook/assets/image (763).png new file mode 100644 index 0000000000..15f05d8535 Binary files /dev/null and b/docs/.gitbook/assets/image (763).png differ diff --git a/docs/.gitbook/assets/image (764).png b/docs/.gitbook/assets/image (764).png new file mode 100644 index 0000000000..163fe8f18d Binary files /dev/null and b/docs/.gitbook/assets/image (764).png differ diff --git a/docs/.gitbook/assets/image (765).png b/docs/.gitbook/assets/image (765).png new file mode 100644 index 0000000000..888583c11c Binary files /dev/null and b/docs/.gitbook/assets/image (765).png differ diff --git a/docs/.gitbook/assets/image (766).png b/docs/.gitbook/assets/image (766).png new file mode 100644 index 0000000000..06b1b33c32 Binary files /dev/null and b/docs/.gitbook/assets/image (766).png differ diff --git a/docs/.gitbook/assets/image (767).png b/docs/.gitbook/assets/image (767).png new file mode 100644 index 0000000000..16988640d0 Binary files /dev/null and b/docs/.gitbook/assets/image (767).png differ diff --git a/docs/.gitbook/assets/image (768).png b/docs/.gitbook/assets/image (768).png new file mode 100644 index 0000000000..a5d1d3b9cd Binary files /dev/null and b/docs/.gitbook/assets/image (768).png differ diff --git a/docs/.gitbook/assets/image (769).png b/docs/.gitbook/assets/image (769).png new file mode 100644 index 0000000000..9268e2c039 Binary files /dev/null and b/docs/.gitbook/assets/image (769).png differ diff --git a/docs/.gitbook/assets/image (770).png b/docs/.gitbook/assets/image (770).png new file mode 100644 index 0000000000..5bc22136d6 Binary files /dev/null and b/docs/.gitbook/assets/image (770).png differ diff --git a/docs/.gitbook/assets/image (771).png b/docs/.gitbook/assets/image (771).png new file mode 100644 index 0000000000..37717c838e Binary files /dev/null and b/docs/.gitbook/assets/image (771).png differ diff --git a/docs/.gitbook/assets/image (772).png b/docs/.gitbook/assets/image (772).png new file mode 100644 index 0000000000..37717c838e Binary files /dev/null and b/docs/.gitbook/assets/image (772).png differ diff --git a/docs/.gitbook/assets/image (773).png b/docs/.gitbook/assets/image (773).png new file mode 100644 index 0000000000..afdceae7c0 Binary files /dev/null and b/docs/.gitbook/assets/image (773).png differ diff --git a/docs/.gitbook/assets/image (774).png b/docs/.gitbook/assets/image (774).png new file mode 100644 index 0000000000..02a010a7a1 Binary files /dev/null and b/docs/.gitbook/assets/image (774).png differ diff --git a/docs/.gitbook/assets/image (775).png b/docs/.gitbook/assets/image (775).png new file mode 100644 index 0000000000..06cd0ec3bb Binary files /dev/null and b/docs/.gitbook/assets/image (775).png differ diff --git a/docs/.gitbook/assets/image (776).png b/docs/.gitbook/assets/image (776).png new file mode 100644 index 0000000000..7ffc9cf802 Binary files /dev/null and b/docs/.gitbook/assets/image (776).png differ diff --git a/docs/.gitbook/assets/image (777).png b/docs/.gitbook/assets/image (777).png new file mode 100644 index 0000000000..f8f738955a Binary files /dev/null and b/docs/.gitbook/assets/image (777).png differ diff --git a/docs/.gitbook/assets/image (778).png b/docs/.gitbook/assets/image (778).png new file mode 100644 index 0000000000..30ac942faf Binary files /dev/null and b/docs/.gitbook/assets/image (778).png differ diff --git a/docs/.gitbook/assets/image (779).png b/docs/.gitbook/assets/image (779).png new file mode 100644 index 0000000000..3ebbaac8ab Binary files /dev/null and b/docs/.gitbook/assets/image (779).png differ diff --git a/docs/.gitbook/assets/image (780).png b/docs/.gitbook/assets/image (780).png new file mode 100644 index 0000000000..3ebbaac8ab Binary files /dev/null and b/docs/.gitbook/assets/image (780).png differ diff --git a/docs/.gitbook/assets/image (781).png b/docs/.gitbook/assets/image (781).png new file mode 100644 index 0000000000..927aa241d0 Binary files /dev/null and b/docs/.gitbook/assets/image (781).png differ diff --git a/docs/.gitbook/assets/image (782).png b/docs/.gitbook/assets/image (782).png new file mode 100644 index 0000000000..70e6b0c52b Binary files /dev/null and b/docs/.gitbook/assets/image (782).png differ diff --git a/docs/.gitbook/assets/image (783).png b/docs/.gitbook/assets/image (783).png new file mode 100644 index 0000000000..632d413580 Binary files /dev/null and b/docs/.gitbook/assets/image (783).png differ diff --git a/docs/.gitbook/assets/image (784).png b/docs/.gitbook/assets/image (784).png new file mode 100644 index 0000000000..632d413580 Binary files /dev/null and b/docs/.gitbook/assets/image (784).png differ diff --git a/docs/.gitbook/assets/image (785).png b/docs/.gitbook/assets/image (785).png new file mode 100644 index 0000000000..3232407592 Binary files /dev/null and b/docs/.gitbook/assets/image (785).png differ diff --git a/docs/.gitbook/assets/image (786).png b/docs/.gitbook/assets/image (786).png new file mode 100644 index 0000000000..4a38b121d0 Binary files /dev/null and b/docs/.gitbook/assets/image (786).png differ diff --git a/docs/.gitbook/assets/image (787).png b/docs/.gitbook/assets/image (787).png new file mode 100644 index 0000000000..c1992d4903 Binary files /dev/null and b/docs/.gitbook/assets/image (787).png differ diff --git a/docs/.gitbook/assets/image (788).png b/docs/.gitbook/assets/image (788).png new file mode 100644 index 0000000000..78435c1e54 Binary files /dev/null and b/docs/.gitbook/assets/image (788).png differ diff --git a/docs/.gitbook/assets/image (789).png b/docs/.gitbook/assets/image (789).png new file mode 100644 index 0000000000..7505219d5b Binary files /dev/null and b/docs/.gitbook/assets/image (789).png differ diff --git a/docs/.gitbook/assets/image (790).png b/docs/.gitbook/assets/image (790).png new file mode 100644 index 0000000000..a8ba528c22 Binary files /dev/null and b/docs/.gitbook/assets/image (790).png differ diff --git a/docs/.gitbook/assets/image (791).png b/docs/.gitbook/assets/image (791).png new file mode 100644 index 0000000000..888163b379 Binary files /dev/null and b/docs/.gitbook/assets/image (791).png differ diff --git a/docs/.gitbook/assets/image (792).png b/docs/.gitbook/assets/image (792).png new file mode 100644 index 0000000000..888163b379 Binary files /dev/null and b/docs/.gitbook/assets/image (792).png differ diff --git a/docs/.gitbook/assets/image (793).png b/docs/.gitbook/assets/image (793).png new file mode 100644 index 0000000000..9183b5196d Binary files /dev/null and b/docs/.gitbook/assets/image (793).png differ diff --git a/docs/.gitbook/assets/image (794).png b/docs/.gitbook/assets/image (794).png new file mode 100644 index 0000000000..c336156935 Binary files /dev/null and b/docs/.gitbook/assets/image (794).png differ diff --git a/docs/.gitbook/assets/image (795).png b/docs/.gitbook/assets/image (795).png new file mode 100644 index 0000000000..7ed19cdf60 Binary files /dev/null and b/docs/.gitbook/assets/image (795).png differ diff --git a/docs/.gitbook/assets/image (796).png b/docs/.gitbook/assets/image (796).png new file mode 100644 index 0000000000..f51095f2a9 Binary files /dev/null and b/docs/.gitbook/assets/image (796).png differ diff --git a/docs/.gitbook/assets/image (797).png b/docs/.gitbook/assets/image (797).png new file mode 100644 index 0000000000..d59d37db49 Binary files /dev/null and b/docs/.gitbook/assets/image (797).png differ diff --git a/docs/.gitbook/assets/image (798).png b/docs/.gitbook/assets/image (798).png new file mode 100644 index 0000000000..a435652ccb Binary files /dev/null and b/docs/.gitbook/assets/image (798).png differ diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 889413a2d9..2464a5da7f 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -161,7 +161,7 @@ * [Delete the rule by its ID](guardian/standard-registry/schemas/schema-rules/apis-related-to-schema-rules/delete-the-rule-by-its-id.md) * [Activate the rule with the specified ID](guardian/standard-registry/schemas/schema-rules/apis-related-to-schema-rules/activate-the-rule-with-the-specified-id.md) * [Deactivate the rule with the specified ID](guardian/standard-registry/schemas/schema-rules/apis-related-to-schema-rules/deactivate-the-rule-with-the-specified-id.md) - * [List all the schemas and policy relevant to the rule with the specified ID](guardian/standard-registry/schemas/schema-rules/apis-related-to-schema-rules/list-all-the-schemas-and-policy-relevant-to-the-rule-with-the-specified-id.md) + * [List all the schemas and policy relevant to the rule with the specified ID](guardian/standard-registry/schemas/schema-rules/apis-related-to-schema-rules/list-all-the-schemas-and-policy-relevant-to-the-rule-with-the-specified-id.md) * [Retrieve all the data needed for evaluating the rules](guardian/standard-registry/schemas/schema-rules/apis-related-to-schema-rules/retrieve-all-the-data-needed-for-evaluating-the-rules.md) * [Create a new rule from the file](guardian/standard-registry/schemas/schema-rules/apis-related-to-schema-rules/create-a-new-rule-from-the-file.md) * [Load the file and return its preview](guardian/standard-registry/schemas/schema-rules/apis-related-to-schema-rules/load-the-file-and-return-its-preview.md) @@ -657,7 +657,7 @@ * [☘️ Carbon Offsets](guardian/demo-guide/carbon-offsets/README.md) * [📖 Introduction to Verra Redd+](guardian/demo-guide/carbon-offsets/introduction-to-verra-redd+.md) * [💻 Verra Redd VM0007 Demo UI Guide](guardian/demo-guide/carbon-offsets/verra-redd+-demo-guide.md) - * [💻 Verra Redd\_3 User Journey Demo UI Guide](guardian/demo-guide/carbon-offsets/verra-redd\_3-user-journey-demo-ui-guide.md) + * [💻 Verra Redd\_3 User Journey Demo UI Guide](guardian/demo-guide/carbon-offsets/verra-redd_3-user-journey-demo-ui-guide.md) * [🎍 VM0017 Adoption of Sustainable Agricultural Land Management, v1.0](guardian/demo-guide/carbon-offsets/verra-vm0017-redd+-methodology.md) * [🎍 VM0042 Methodology for Improved Agricultural Land Management](guardian/demo-guide/carbon-offsets/verra-vm0042-redd+-methodology.md) * [🌲 Verra VM0047 - Afforestation, Reforestation, and Revegetation (ARR) v0.1](guardian/demo-guide/carbon-offsets/verra-afforestation-reforestation-and-revegetation-arr-v0.1.md) @@ -704,6 +704,8 @@ * [🏭 Atma Scope 3 GHG Policy](guardian/demo-guide/carbon-emissions/atma-scope-3-ghg-policy.md) * [🏭 GHGP Corporate Standard](guardian/demo-guide/carbon-emissions/ghgp-corporate-standard.md) * [🏭 GHGP Corporate Standard V2](guardian/demo-guide/carbon-emissions/ghgp-corporate-standard-v2.md) + * [Climate Action Reserve’s U.S. Landfill Protocol Version 6.0](guardian/demo-guide/carbon-emissions/climate-action-reserves-u.s.-landfill-protocol-version-6.0.md) + * [Landfill Gas Destruction and Beneficial Use Projects, Version 2.0](guardian/demo-guide/carbon-emissions/landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md) * [❓ FAQs](guardian/faqs.md) * [👬 Community Standards](guardian/community-standards/README.md) * [Guardian Policy Standards (GPS)](guardian/community-standards/guardian-policy-standards-gps.md) diff --git a/docs/guardian/demo-guide/carbon-emissions/climate-action-reserves-u.s.-landfill-protocol-version-6.0.md b/docs/guardian/demo-guide/carbon-emissions/climate-action-reserves-u.s.-landfill-protocol-version-6.0.md new file mode 100644 index 0000000000..88906eab37 --- /dev/null +++ b/docs/guardian/demo-guide/carbon-emissions/climate-action-reserves-u.s.-landfill-protocol-version-6.0.md @@ -0,0 +1,204 @@ +--- +icon: mountain +--- + +# Climate Action Reserve’s U.S. Landfill Protocol Version 6.0 + +## Table of Contents + +[Introduction](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc1569113010) + +[Need and Use](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc182312046) + +[Monitoring and Quantification Approach](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc182312047) + +[Project Eligibility and Additionality](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc182312048) + +[Project Type](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc182312049) + +[Demo Video](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc80095333) + +[Policy Workflow](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc182312050) + +[Policy Import](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc182312051) + +[Available Roles](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc182312052) + +[Important Schemas](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc182312053) + +[Token (Climate Reserve Tonnes - CRTs)](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc182312054) + +[Step By Step](climate-action-reserves-u.s.-landfill-protocol-version-6.0.md#toc182312055) + +## **Introduction** + +The U.S. Landfill Protocol, developed by the Climate Action Reserve, is a standardized framework for quantifying, reporting, and verifying greenhouse gas (GHG) emission reductions from methane capture and destruction projects at U.S. landfills. Approved by the Integrity Council for the Voluntary Carbon Market (ICVCM), this protocol ensures that emission reductions meet high standards of environmental integrity, credibility, and transparency. This ICVCM approval reinforces the protocol’s alignment with global best practices and its credibility in voluntary carbon markets. + +## **Need and Use** + +The U.S. Landfill Protocol supports project developers in creating projects that effectively reduce emissions from landfill sites. It includes a framework for calculating and verifying emission reductions generated by capturing methane, a potent greenhouse gas, from landfills and using or destroying it. This protocol helps landfill operators and project developers earn credits that can be used to offset emissions in compliance and voluntary carbon markets. + +## **Monitoring and Quantification Approach** + +The U.S. Landfill Protocol specifies detailed requirements for calculating baseline and project emissions to assess net GHG emission reductions. Key components include: + +* **Methane Capture and Destruction**: Continuous monitoring of landfill gas (LFG) collection and destruction is required, using calibrated equipment to measure LFG flow and methane concentration, ensuring accurate quantification of emissions destroyed. +* **Baseline Emissions**: Baseline emissions are calculated based on the methane emissions that would have occurred without the project, minus any methane oxidized by soil bacteria or destroyed by any existing destruction devices. These calculations use specific discount factors for oxidation and other adjustments according to landfill characteristics and monitoring frequency. +* **Project Emissions**: Project emissions include any emissions from the energy used to operate the landfill gas collection and destruction systems, as well as emissions from fossil fuels or supplemental energy sources. +* **Emission Reductions**: Net emission reductions are calculated by subtracting project emissions from baseline emissions, providing a clear assessment of GHG reductions achieved through methane destruction. + +This structured approach allows for consistent, transparent, and conservative reporting of GHG emission reductions in line with the Climate Action Reserve's requirements. + +## **Project Eligibility and Additionality** + +Projects must meet specific eligibility requirements to qualify under this protocol: + +* **Location**: Projects must be located at landfills in the U.S., including tribal lands and territories. +* **Project Start Date**: The project start date should be defined by the first instance of landfill gas destruction, with project submission required within 12 months of this date. +* **Additionality** is demonstrated through the **performance standard test** (based on baseline conditions) and the **legal requirement test** (ensuring no regulatory mandates already require methane destruction). Only landfill projects that collect and destroy methane beyond regulatory requirements qualify for additionality, ensuring that GHG reductions are surplus to business-as-usual scenarios. + +## **Project Type** + +This protocol applies to projects that aim to reduce methane emissions from U.S. landfills by capturing and utilizing or destroying methane gas. Only projects that meet the Climate Action Reserve’s eligibility criteria and have not issued credits under other GHG programs are eligible. + +## **Demo Video** + +[**Youtube**](https://www.youtube.com/watch?v=fDTobFguBJE) + +## **Policy Workflow** + +The policy workflow replicates the procedural steps required for landfill gas projects, covering project registration, additionality demonstration, and the submission of monitoring reports to claim carbon credits. + +
+ +## **Policy Import** + +This policy is available for import via GitHub or IPFS timestamp. + +## **Available Roles** + +1. **Project Developer**: Responsible for overall project management, documentation submission, and coordination with verification bodies. +2. **Verifier(s)**: Independent third-party verifiers who assess project data and ensure compliance with protocol requirements. +3. **Standard Registry**: The governing body that maintains project records, manages reporting, and approves credit issuance. + +## **Important Schemas** + +* **Project Submission Form:** This form provides a comprehensive overview of the project, including landfill site details, baseline emissions, monitoring plans, and stakeholder consultations. It serves as the foundational document for project registration with the Climate Action Reserve. +* **Verification Report:** Submitted by an independent third-party verifier, this report evaluates the accuracy of the emissions reductions claimed by the project. It includes findings on project compliance, monitoring data, and any identified discrepancies or recommendations for improvement. +* **Emission Reductions Report:** This document provides a summary of the emission reductions accomplished by the project. It details the methodologies used, calculations used, and calculation results. +* **Attestation of Title Form:** Signed by the Project Developer, this form certifies ownership of the project’s GHG reductions. Clear ownership documentation ensures that CRTs are issued only to entities with verified rights to claim these reductions. +* **Attestation of Voluntary Implementation:** This attestation is signed by the Project Developer to confirm that the project’s landfill gas collection and destruction activities go beyond any regulatory requirements. It is submitted prior to verification, ensuring that GHG reductions are genuinely additional to what would have occurred under existing legal mandates. +* **Attestation of Regulatory Compliance:** This attestation confirms that the project complies with all applicable federal, state, and local laws and regulations (e.g., environmental, safety). The Project Developer must disclose any instances of non-compliance to the verifier, who assesses the impact on credit issuance. +* **Environmental Safeguards:** This schema ensures that project activities align with environmental best practices, minimizing unintended impacts on local ecosystems, air, water, and soil quality. The Project Developer must document steps taken to prevent adverse environmental effects, such as controlling potential pollutants, managing resource use, and protecting nearby habitats. This schema may also include periodic environmental impact assessments as part of ongoing compliance and verification. + +## **Token (**Climate Reserve Tonnes - CRTs**)** + +Each CRT represents one metric tonne of carbon dioxide equivalent (tCO₂e) reduced or avoided through the approved project activities. + +## **Step By Step** + +1. Import the policy using IPFS or Policy File. Once imported, you will be redirected to the policy configurator. + +
+ +
+ +
+ +2. Set the policy to Dry Run or Publish it using the dropdown. Then select “Go” or “Register”. + +
+ +
+ +3. Create a new user account and assign their role as the Project Developer. + +
+ +
+ +
+ +
+ +4. Log in to the administrator account to review and approve the Project Developer account. + +
+ +5. The Project Developer can click 'Create Project' to submit the Project Submission Form. + +
+ +
+ +6. The Project Developer can also submit a Project Diagram. + +
+ +
+ +7. Return to the administrator account to review the Project Submission Form and the Project Diagram for completeness and approve both submissions. + +
+ +
+ +8. Now, we will create a new user to add a verifier account. + +
+ +
+ +
+ +
+ +9. Log in to the Administrator account to review and approve the Verifier account. + +
+ +10. The Verifier must complete a NOVA/COI form and submit it to the Administrator. + +
+ +11. Log in to the Administrator account and approve the NOVA/COI form. This policy also allows the Administrator to identify a conflict of interest (COI) as outlined in the workflow above. + +
+ +12. Once the NOVA/COI form has been approved with no COIs identified you can log in to the Project Developer account and assign a Verifier to the project. This will allow the verifier to see the project submission form. + +
+ +
+ +
+ +13. The Project Developer can submit all the forms outlined in the project documents tab, assigning the third-party verifier to each form. + +
+ +
+ +14. Using the assigned Verifier account, they can now review and approve all the project documents. Once approved they can complete and submit the Verification Report. + +
+ +
+ +
+ +15. The Administrator must review the report for completeness and choose to approve or reject. + +
+ +16. The final step before issuing credits would be to approve the Emission Reductions from the Administrators account. + +
+ +17. The project owner and administrator will have access to the Verifiable Presentation (VP) and Trust Chain. + +
+ +
+ +
diff --git a/docs/guardian/demo-guide/carbon-emissions/ghgp-corporate-standard-v2.md b/docs/guardian/demo-guide/carbon-emissions/ghgp-corporate-standard-v2.md index b8b6ec0f57..f9744d5408 100644 --- a/docs/guardian/demo-guide/carbon-emissions/ghgp-corporate-standard-v2.md +++ b/docs/guardian/demo-guide/carbon-emissions/ghgp-corporate-standard-v2.md @@ -26,33 +26,55 @@ [Futureproofing (Automated GHG Inventories)](ghgp-corporate-standard-v2.md#toc146717959) -[TODO](ghgp-corporate-standard-v2.md#toc146717960) - ### Introduction -The GHG Protocol Corporate Accounting and Reporting Standard (GHGP Corporate Standard) is the world’s leading standard outlining requirements and guidance for corporate-level and organizational-level GHG emission inventories. As of 2016, approximately 92% of Fortune 500 companies responding to the CDP—an investor-led effort to increase corporate carbon disclosures—referenced the used the GHGP Corporate Standard to conduct their GHG inventories.\[1] Also, many other GHG-related standards—such as the Natural Capital Partner’s CarbonNeutral Protocol and the Science Based Targets Initiative (SBTi)—point to the Greenhouse Gas Protocol as the default standard for the quantification and accounting of corporate GHG emissions. As future regulations and standards are developed and implemented, they are likely to either prescribe or encourage the use of Greenhouse Gas Protocol standards. +The GHG Protocol Corporate Accounting and Reporting Standard (GHGP Corporate Standard) is the world’s leading standard outlining requirements and guidance for corporate-level and organizational-level GHG emission inventories. Approximately 92% of Fortune 500 companies responding to the CDP—an investor-led effort to increase corporate carbon disclosures—referenced the used the GHGP Corporate Standard to conduct their GHG inventories.\[1] Also, many other GHG-related standards—such as the Natural Capital Partner’s CarbonNeutral Protocol and the Science Based Targets Initiative (SBTi)—point to the Greenhouse Gas Protocol as the commonplace standard for the quantification and accounting of corporate GHG emissions. As future regulations and standards are developed and implemented, they may either prescribe or encourage the use of Greenhouse Gas Protocol standards. + +This Guardian Policy mints Carbon Emission Tokens (CETs) in accordance with the GHGP Corporate Standard, including the Scope 2 Guidance, which was later published as an amendment to the GHGP Corporate Standard. In addition, the policy includes functionality to attribute emissions to products and services and use this data to calculate and publish product carbon footprints (PCFs) in accordance with the Pathfinder Framework v2.0. The policy and methodologies are designed to calculate emissions based on MRV data that can either be input manually by the organization, or automatically through API and trusted external data sources. The policy is equipped with standard emission factors (such as eGRID emission rates) and Intergovernmental Panel on Climate Change (IPCC) global warming potentials (GWPs). + +The policy currently covers the following sources and future versions will have the ability add new modulated source categories and custom source schemas. + +Included Sources: + +\- Scope 1: Stationary Combustion + +\- Scope 1: Mobile Combustion + +\- Scope 1: Refrigerants -This Guardian Policy mints Carbon Emission Tokens (CETs) in accordance with the GHGP Corporate Standard, including the Scope 2 Guidance, which was later published as an amendment to the GHGP Corporate Standard. The policy and methodologies are designed to calculate emissions based on MRV data that can either be provided manually by the organization, or automatically sourced from devices such as IoT-enabled electricity meters. The policy is equipped with standard emission factors (such as eGRID emission rates) and Intergovernmental Panel on Climate Change (IPCC) global warming potentials (GWPs). +\- Scope 2: Purchased Electricity (Location-Based) -The policy currently covers emissions from grid electricity consumption (location and market-based calculations), natural gas consumption, mobile combustion, and refrigerants. The policy is designed to be dynamic, allowing organizations to assign entities to organizations, assets/emission generating objects (EGOs) to entities, and GHG sources to assets/EGOs in a hierarchical structure to dynamically tailor the policy and inventory to specific corporate structures and operations. +\- Scope 2: Purchased Electricity (Market-Based) + +\- Scope 3.1: Purchased Goods and Services + +\- Scope 3.4: Upstream Transportation and Distribution + +The policy is designed to be dynamic, allowing companies to assign entities to organizations, assets(facilities, vehicles, equipment, etc.) to entities, and GHG sources to assets/EGOs in a hierarchical structure to dynamically tailor the policy and inventory to specific corporate structures and operations. ### Need and Use for the GHGP Corporate Standard Policy -According to the IPCC, in order to avoid potentially irreversible impacts of climate change, global GHG emissions should be reduced by approximately 45% by 2030 (relative to 2010 levels) and achieve net zero by around 2050. Therefore, it comes as no surprise that the largest companies in the world are increasingly aligning their GHG reduction targets with the latest scientific models, in an effort to both exhibit their commitment to sustainability, as well as to remain viable in a low-carbon future. The number of companies working with the Science Based Targets initiative (SBTi) has increased nearly 1,900% between 2015 and 2020, with 1,039 cumulatively committed companies representing nearly 20% of global market capitalization (over $20.5 trillion USD). +According to the IPCC, in order to avoid potentially irreversible impacts of climate change, global GHG emissions should be reduced by approximately 45% by 2030 (relative to 2010 levels) and achieve net zero by around 2050. Therefore, it comes as no surprise that many of the largest companies in the world are increasingly aligning their GHG reduction targets with the latest scientific studies, in an effort to both exhibit their commitment to sustainability, as well as to remain viable in a low-carbon future. The number of companies working with the Science Based Targets initiative (SBTi) has increased nearly 1,900% between 2015 and 2020, with 1,039 cumulatively committed companies representing nearly 20% of global market capitalization (over $20.5 trillion USD). + +In addition to momentum in voluntary GHG commitments, there are several new regulations requiring the measuring and reporting of GHG emissions (outlined below): + +The Securities and Exchange Commission (SEC) Climate Disclosure Rules: On March 6th, 2024, the SEC adopted rules to enhance and standardize climate-related disclosures by public companies and in public offerings. The rules will require registrants to disclose climate-related risks, targets, mitigating strategic efforts, and \[for large, accelerated filers (LAFs) and accelerated filers (AFs) that are not otherwise exempted] scope 1 and 2 GHG emissions. + +The European Union Corporate Sustainability Reporting Directive (CSRD): On January 5th, 2023, the EU’s Corporate Sustainability Reporting Directive (CSRD) took effect, strengthening existing rules on social and environmental reporting \[including climate risks and impacts]. The rules will now apply to a broader set of companies, as well as non-EU companies generating over EUR 150 million on the EU market. -The increase in corporate and organizational commitments to measure, disclose, and reduce GHG emissions is likely to continue to increase for the foreseeable future as stakeholders, investors, and regulators place a stronger focus on climate impacts and performance. The United Nations Principles for Responsible Investment (UN PRI) forecasts a “general acceleration in \[climate] policy responses to 2025, driven in part by continuing pressure for change.” On March 21, 2022, the SEC proposed rules to enhance and standardize climate-related disclosures for investors. The proposed rule changes would require registrants to include certain climate-related disclosures in their registration statements and periodic reports. +California Climate Corporate Data Accountability Act: On Oct. 7th, 2023. California Gov. Gavin Newsom signed into law California’s Climate Corporate Data Accountability Act, requiring corporations that do business in California, with annual revenues over $1 billion, to publicly disclose scope 1 and scope 2 GHG emissions beginning in 2026, and scope 3 emissions in 2027. -Despite a growing interest in measuring, disclosing, and reducing GHG emissions from corporations, regulators, and investors alike, companies are struggling to accurately measure and report emissions. In general, current quantification methodologies are flawed, GHG accounting standards leave significant room for error, access to quality data is low, and there is a prevailing lack of GHG accounting expertise. As a result, high-profile companies have been exposed for incorrect GHG inventories and worse, misleading claims on carbon performance. According to an article by Bloomberg, ‘Corporate Greenhouse Gas Data Doesn’t Always Add Up,’ “As companies rush to set climate goals, some aren’t even getting the basics quite right when it comes to accounting for greenhouse-gas emissions. According to researchers in Ireland, the U.K. and Germany, based on decade’s worth of corporate emissions data, “when the numbers were tallied, many didn’t add up. They found instances of errors, omissions and rounding issues (often down rather than up).” +Despite a growing interest in measuring, disclosing, and reducing GHG emissions from corporations, regulators, and investors alike, companies are struggling to accurately measure and report emissions. In general, current quantification methodologies are flawed, GHG accounting standards leave significant room for error, access to quality data is low, and there is a prevailing lack of GHG accounting expertise. As a result, high-profile companies have been exposed for incorrect GHG inventories and worse, misleading claims on carbon performance. According to an article by Bloomberg, ‘Corporate Greenhouse Gas Data Doesn’t Always Add Up,’ “As companies rush to set climate goals, some aren’t even getting the basics quite right when it comes to accounting for greenhouse-gas emissions. According to researchers in Ireland, the U.K. and Germany, based on decade’s worth of corporate emissions data, “when the numbers were tallied, many didn’t add up. They found instances of errors, omissions and rounding issues (often down rather than up).” -The Guardian GHGP Corporate Policy offers a unique technical opportunity for companies to streamline, add robustness, and build trust and transparency into their GHG inventories. The policy allows user to dynamically add entities and EGOs to organizations and GHG sources to EGOs to build their inventories in alignment with their specific corporate structures. MRV data can then be sourced by the Guardian automatically (e.g., via API, IoT-enabled devices, etc.) or provided manually depending on the user’s level of digitization. The inventory is further streamlined through Guardian policies with built in auto-calculation blocks, emission factors, and GWPs. The results of the inventory can be immutably and transparently verified by third parties. Finally, the emissions are tokenized to allow for enhanced tracking, transparency, accounting, and reporting, with the results and data structured in accordance with GHGP reporting requirements. +The Guardian GHGP Corporate Policy offers a unique technical opportunity for companies to streamline, add robustness, and build trust and transparency into their GHG inventories. The policy allows users to dynamically add entities and assets to organizations and GHG sources to assets to build their inventories in alignment with their specific corporate and operational structures. MRV data can then be sourced by the Guardian automatically (e.g., via API, IoT-enabled devices, etc.) or provided manually depending on the user’s level of digitization. The inventory is further streamlined through Guardian policies with built in auto-calculation blocks, emission factors, and GWPs. The results of the inventory can be immutably and transparently verified by independent third parties. Finally, the emissions are tokenized to allow for enhanced tracking, transparency, accounting, and reporting, with the results and data structured in accordance with GHGP reporting requirements. ### Policy Workflow -
+
### Policy Guide -This policy is published to Hedera network and can either be imported via Github (.policy file) or IPSF timestamp. +This policy is published to Hedera network and can either be imported via Github (.policy file) or IPFS timestamp. Latest Version - 1707206253.006698003 @@ -62,16 +84,17 @@ Latest Version - 1707206253.006698003 **Organization** – Company or other organization generating, quantifying, and reporting GHG emissions. The organization also provides MRV data and receives CETs. -**VVB (Validation & Verification Body)** – Independent third party who audits organization’s critical documentation, MRV data and sources, and GHG inventories. Verification is optional for this policy as it is optional under the GHGP Corporate Standard. The workflow steps involving the VVBs will not block the subsequent steps or the minting of CETs, therefore they can be 1) executed according to the workflow above, 2) skipped, or 3) executed later in the workflow. +**VVB (Validation & Verification Body)** – Independent third party who audits organization’s critical documentation, MRV data and sources, and GHG inventories. Verification is optional for this policy as it is (as of this writing) optional under the GHGP Corporate Standard. The workflow steps involving the VVBs will not block the subsequent steps or the minting of CETs, therefore they can be 1) executed according to the workflow above, 2) skipped, or 3) executed later in the workflow. ### Important Documents & Schemas 1. Organizational Profile – The company or organization creates a profile of key information, targets, and reporting metrics. Entities (such as business units, subsidiaries, etc.) are assigned to the company or organization. -2. Entity Schema – The company profiles with key information for each entity. Assets and EGOs (such as facilities, vehicles, etc.) are assigned to entities. Together, the entities make up the corporate structure by which the inventory is based. +2. Entity Schema – The company profiles with key information for each entity. Assets (such as facilities, vehicles, etc.) are assigned to entities. Together, the entities make up the corporate structure by which the inventory is based. 3. Asset Schema — Information on company assets provided by the organization and GHG sources (such grid electricity, fuel consumption, etc.) are assigned to assets. 4. Source Schema — Aggregated activity data (such electrical consumption, fuel consumption, etc.) which are used to auto-calculate GHG emissions. 5. Raw Data Schema — Raw activity data sourced manually or automatically from APIs or devices such as IoT-enabled electricity meters. 6. Reporting Metrics — Key metrics to support reporting in alignment with the GHGP Corporate Standard. +7. Product Carbon Footprint (PCF): Data fields outlined by the Pathfinder Framework v 2.0. The PCF is publishable and can be referenced by supply chain partners to support improved scope 3 calculations. ### Token (Carbon Emission) @@ -101,11 +124,11 @@ The Organization is responsible for inputting key data and information and assig
-5. If the company or organization has already set GHG reduction targets, add them here and input the required and applicable details. It is generally best practice to set targets in alignment with the Science Based Targets Initiative (SBTi). +5. If the company or organization has already set GHG reduction targets, add them here and input the required and applicable details. It is generally best practice to set targets in alignment with the Science Based Targets initiative (SBTi).
-6. For each organizational entity, add all assets/EGOs that generate emissions (e.g., facilities, fleet vehicles, etc.). +6. For each organizational entity, add all assets that generate emissions (e.g., facilities, fleet vehicles, etc.).
@@ -113,12 +136,14 @@ The Organization is responsible for inputting key data and information and assig
-7. For each asset/EGO, add all applicable GHG sources and input the required and applicable fields. For example, common GHG sources for facilities are electricity, natural gas, and refrigerant consumption +7. For each asset, add all applicable GHG sources and input the required and applicable fields. For example, common GHG sources for facilities are electricity, natural gas, and refrigerant consumption
+
+ 8. For each GHG source, enter activity data such as electricity consumption (kWh) for facilities or distance traveled (miles) for vehicles. MRV data can be provided manually by the organization, or sourced automatically from APIs or verified monitoring devices such as IoT-enabled meters that are assigned to specific GHG sources. During this step, market-based instruments such as Renewable Energy Certificates (RECs) can be allocated to applicable GHG sources.
@@ -135,33 +160,31 @@ The Organization is responsible for inputting key data and information and assig
-10. Under the Token History tab, the user can view the Trust Chain, where all the collective VCs can be viewed. - -
+10. Once the reporting metrics have been calculated, a VVB can be assigned, and the metrics can be submitted for verification. This step is currently optional. -
+
-### VVB Flow +11. If applicable, the organization can create and publish digital PCFs in alignment with the Pathfinder Framework v2.0. The PCF is based on all emissions attributed to a specific product/service IDs and made relative to the declared unit. -1. Assign role as VVB and add VVB name +
-
+
-
+Supply chain partners can reference the PCF to support their scope 3 calculations. -2. All the GHG resources once viewed can be verified. +
-
+12. Under the Token History tab, the user can view the Trust Chain, where all the collective VCs can be viewed. -
+
-
+
-
+### VVB Flow -3. After verification of GHG resources, VVB reviews reporting metrics and approve/reject. +1. Once the organization assigns a VVB, the VVB will be able to approve or reject MRV data and GHG sources. The VVB will also be able to approve or reject the GHG inventory reporting metrics after it’s calculated by the Guardian. These steps are optional and can be skipped or executed later in the workflow. -
+
### Administrator (Registry) @@ -169,18 +192,10 @@ The Organization is responsible for inputting key data and information and assig
-2. Once it is approved, tokens are minted as shown: - -
- ### Futureproofing (Automated GHG Inventories) -Due to several factors such as lack of expertise, absent third-party assurance, and methodologies that leave significant room for error, corporate GHG inventories are often inaccurate and unreliable. In addition, manually collecting monitoring and activity data each year can be a cumbersome task. By automating and digitizing the collection of monitoring data, GHG quantification calculations, and (optionally) third-party verification of devices, data, and calculations, GHG inventories can be automated and streamlined to enhance trust, transparency, and efficiency. - -### TODO - -The policy currently covers emissions from grid electricity consumption (location and market-based calculations), natural gas consumption, mobile combustion, and refrigerants. In future iterations of the policy, GHG source schemas can be modulated, and new types of data sources can be added as necessary. The policy is designed to be dynamic, allowing organizations to assign entities to organizations, assets/EGOs to entities, and GHG sources to assets/EGOs in a hierarchical structure to dynamically tailor the inventory to specific corporate structures and operations. This aspect may also be modulated in future iterations of the policy. +In future iterations of the policy, GHG source schemas can be modulated, and new types of data sources can be added as necessary. In addition, new GHG source categories will be added, as well as an option to add custom source schemas and emission factors. These may be added to the Guardian policy in the form of policy modules. -The initial version of the GHGP Corporate Policy is includes schemas for some of the most common assets/EGOs (facilities and vehicles) and GHG sources (scope 1 - natural gas consumption, scope 1 - refrigerants, scope 1 - mobile combustion of fuel, and scope 2 - electrical consumption). However, there are other potential GHG sources that may be applicable to specific corporate GHG inventories. Further, scope 3 emissions are currently optional under the GHGP Corporate Standard, although companies may choose to include them as well. Going forward, schemas may be added for additional GHG sources and scope 3 GHG sources. These may be added to the Guardian policy in the form of policy modules. +The policy is designed to be dynamic, allowing organizations to assign entities to organizations, assets to entities, and GHG sources to assets in a hierarchical structure to dynamically tailor the inventory to specific corporate structures and operations. This aspect may also be modulated in future iterations of the policy. -1. [https://ghgprotocol.org/companies-and-organizations](https://ghgprotocol.org/companies-and-organizations) ↑ +GHGP v3 will include an optional tool to manage disclosures to the SEC in alignment with their Climate Disclosure Rules. diff --git a/docs/guardian/demo-guide/carbon-emissions/ghgp-corporate-standard.md b/docs/guardian/demo-guide/carbon-emissions/ghgp-corporate-standard.md index 8c654a9701..e83f964da3 100644 --- a/docs/guardian/demo-guide/carbon-emissions/ghgp-corporate-standard.md +++ b/docs/guardian/demo-guide/carbon-emissions/ghgp-corporate-standard.md @@ -60,7 +60,7 @@ The Guardian GHGP Corporate Policy offers a unique technical opportunity for com ## Policy Guide -This policy is published to Hedera network and can either be imported via Github (.policy file) or IPSF timestamp. +This policy is published to Hedera network and can either be imported via Github (.policy file) or IPFS timestamp. Latest Version - 1695216161.052983914 diff --git a/docs/guardian/demo-guide/carbon-emissions/landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md b/docs/guardian/demo-guide/carbon-emissions/landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md new file mode 100644 index 0000000000..e92880430e --- /dev/null +++ b/docs/guardian/demo-guide/carbon-emissions/landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md @@ -0,0 +1,380 @@ +--- +icon: monument +--- + +# Landfill Gas Destruction and Beneficial Use Projects, Version 2.0 + +## Table of Contents + +[Introduction](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184819174) + +[Need and Use](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812673) + +[U.S. Landfills and Methane Collection Benefits](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812674) + +[Monitoring and Quantification Approach](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812675) + +[Project Eligibility and Additionality](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812676) + +[Demo Video](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812677) + +[Policy Workflow](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812678) + +[Policy Import](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812679) + +[Available Roles](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812680) + + [1. Project Proponent](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812681) + + [2. Verifier(s)](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812682) + + [3. Standard Registry](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812683) + +[Important Schemas](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812684) + +[Token (Emission Reduction Ton)](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812685) + +[Step By Step](landfill-gas-destruction-and-beneficial-use-projects-version-2.0.md#toc184812686) + +## Introduction + +This document outlines the Guardian policy created I accordance to the ACR Landfill Gas Methodology v2.0, titled “Methodology for the Quantification, Monitoring, Reporting, and Verification of Greenhouse Gas Emissions Reductions and Removals from Landfill Gas Destruction and Beneficial Use Projects.” Developed by the American Carbon Registry (ACR), this methodology offers a comprehensive framework for quantifying emissions reductions through the destruction or utilization of landfill gas (LFG). By converting methane, a potent greenhouse gas, into energy or other beneficial uses, this methodology provides a robust pathway for generating high-quality carbon offset credits. + +## Need and Use + +This methodology supports project developers aiming to reduce methane emissions from municipal solid waste landfills by capturing and converting LFG. It establishes clear protocols for baseline emissions, additionality, monitoring, and verification, ensuring accurate accounting and credit generation. It also provides flexibility for the inclusion of innovative technologies, such as automated gas collection systems, to enhance collection efficiency. + +The framework enables projects to: + +a. Quantify methane destruction and beneficial uses. + +b. Generate credible and tradable carbon offset credits. + +c. Encourage environmentally sustainable and economically viable landfill management practices. + +## U.S. Landfills and Methane Collection Benefits + +Landfills in the United States are a significant source of methane emissions, a potent greenhouse gas with a global warming potential 28 to 36 times greater than carbon dioxide over 100 years. According to the U.S. Environmental Protection Agency (EPA), municipal solid waste landfills are the third-largest source of human-related methane emissions in the country. Capturing and utilizing landfill gas (LFG), which consists primarily of methane and carbon dioxide, offers substantial environmental and economic benefits. Methane collection systems reduce greenhouse gas emissions, improve local air quality, and mitigate odor issues. Additionally, captured methane can be converted into renewable energy or processed for injection into natural gas pipelines, providing a sustainable energy source while reducing reliance on fossil fuels. These practices not only contribute to climate change mitigation but also support a circular economy by turning waste into valuable resources. + +## Monitoring and Quantification Approach + +Key components of the monitoring and quantification process include: + +1. **LFG Collection and Destruction:** Continuous monitoring of gas flow and methane content using calibrated devices. +2. **Baseline Emissions:** Determined using modeled or measured methane generation and collection efficiency data. +3. **Emission Reductions:** Quantified by subtracting project emissions (e.g., from fossil fuel combustion or electricity use) from baseline emissions. +4. **Leakage:** Leakage emissions are deemed negligible under this methodology. + +The methodology provides default factors and customizable parameters, ensuring flexibility while maintaining data accuracy and transparency. + +## Project Eligibility and Additionality + +Eligible projects under this methodology include: + +* Destruction of LFG using open or enclosed flares. +* Conversion of LFG to energy in turbines, boilers, or engines. +* Injection of processed LFG into natural gas pipelines. +* Use of automated gas collection systems to enhance collection efficiency. + +Additionality must be demonstrated using one of the following approaches: + +* A performance-based standard combined with a regulatory surplus test. +* ACR’s three-prong additionality test, addressing regulatory surplus, common practice, and financial barriers. + +## Demo Video + +[Youtube](https://www.youtube.com/watch?v=fDTobFguBJE\&list=PLnld0e1pwLho3M7uAzcbyzyJobn-X9wG_\&index=2) + +## Policy Workflow + +![](../../../.gitbook/assets/0.png) + +## Policy Import + +This policy is published to Hedera network and can either be imported via Github (.policy file) or IPSF timestamp. + +Policy: + +## Available Roles + +#### **1. Project Proponent** + +The Project Proponent is responsible for the overall management and execution of the project. Key responsibilities include: + +* Submitting project submission reports and documentation to the Standard Registry and assigning Verifiers. +* Ensuring compliance with relevant methodologies and standards. +* Coordinating with stakeholders to facilitate project activities and reporting. + +#### **2. Verifier(s)** + +Verifiers are independent entities tasked with assessing the accuracy and validity of the project’s emissions reductions claims. Their key responsibilities include: + +* Conducting thorough reviews of project documentation and emissions data. +* Performing on-site inspections and audits as necessary. +* Providing verification reports to the Project Proponent and Standard Registry. +* Ensuring adherence to the agreed-upon methodologies and standards. + +#### **3. Standard Registry** + +The Standard Registry serves as the authoritative body for maintaining project records. Responsibilities include: + +* Managing the registration and tracking of approved projects. +* Overseeing compliance with established protocols and procedures. + +## Important Schemas + +**Project Proponent:** The Project Proponent is the individual or organization responsible for initiating and managing the emission reduction project. Their profile includes company information, such as legal name, registration details, and project-specific contacts, as well as personal information of key personnel involved in the project. + +**Verifier:** The Verifier is an independent third-party entity tasked with assessing the emission reduction project’s claims. Their form collects detailed information about the verifying organization, including its credentials, contact details, and the qualifications of the personnel conducting the verification. + +**Project Listing Form:** The Project Listing Form is a formal document that Project Proponents complete to outline the details of their emission reduction project. It typically includes project objectives, baseline emissions, methodologies to be used, and information on stakeholder consultations, serving as a foundational tool for project approval and registration. + +**Project Plan:** The Project Plan schema outlines the foundational details of a project, including its scope, objectives, implementation strategy, and monitoring framework. It serves as a comprehensive blueprint for the quantification, monitoring, and reporting of greenhouse gas (GHG) emissions reductions. Key components include: + +* Project location and boundary. +* Description of technology and methodology used. +* Baseline emissions determination. +* Data monitoring, collection, and reporting procedures. + +**Project Specific Conflict of Interest:** The Conflict of Interest (COI) Form schema ensures transparency and impartiality in the project validation and verification processes. It captures declarations from relevant stakeholders, particularly validators and verifiers, to identify and mitigate any potential conflicts of interest. Key fields include: + +* Declaration of relationships with the project developer or related entities. +* Financial or professional interests in the project’s outcomes. +* Past involvement in the project’s development or consultation. + +**Validation Report:** The Project Validation Report provides a comprehensive assessment of the emission reduction project after a validation process. It details the findings of the verifier, including compliance with methodologies, the accuracy of reported emission reductions, and any identified discrepancies or recommendations for improvement. + +**Validation Opinion:** The Validation Opinion schema documents the independent evaluation of a project’s design, ensuring it adheres to the applicable methodology, standards, and guidelines. + +**Monitoring Report:** The Monitoring Report is a periodic document prepared by the Project Proponent that tracks the project’s performance and emission reductions over time. It includes data on actual emissions, project activities, and compliance with monitoring requirements, ensuring that stakeholders are informed about ongoing progress and results. + +**Environmental and Social Impact Assessment:** The Environmental and Social Impact Assessment schema provides a structured framework to evaluate the potential environmental and social implications of a project. It ensures that project activities are sustainable and do not cause undue harm to local ecosystems or communities. Key sections include: + +* **Environmental Impacts:** Assessment of potential effects on air quality, water resources, soil, biodiversity, and climate, with proposed mitigation measures for negative impacts. +* **Social Impacts:** Evaluation of the project’s influence on local communities, including health, safety, livelihoods, cultural heritage, and public engagement. +* **Regulatory Compliance:** Confirmation of adherence to local and international environmental and social regulations and standards. +* **Monitoring and Mitigation Plan:** Detailed strategies to mitigate identified risks and monitor ongoing impacts throughout the project lifecycle. + +**Emission Reductions:** The Emission Reductions schema captures all data necessary for calculating greenhouse gas (GHG) emission reductions in line with the outlined policy and methodology. It integrates seamlessly with the Guardian platform, where all calculations are automated based on the defined policy workflow. This schema ensures accuracy and transparency while minimizing manual effort. Key components include: + +* **Baseline Emissions Data:** + * Baseline emission factors. + * Activity data, such as energy usage, waste quantities, or fuel consumption. + * Assumptions and default values used in baseline scenarios. +* **Project Emissions Data:** + * Monitoring inputs for project-related emissions, including energy use, fuel consumption, and electricity usage. + * Parameters like methane content, gas flow rates, and collection system efficiency. + * Calibration details for monitoring equipment. +* **Emission Reduction Calculations:** + * Quantification details based on policy-defined equations. + * Automated integration with Guardian to process and validate all inputs (ensures that all inputs adhere to the specified data type requirements, such as numerical values, string values, enumerated values, and others). + +**Verification Report:** The Verification Report is a formal document summarizing the verification of the emission reductions claimed by the Project Proponent. It outlines the verification process, findings, conclusions, and recommendations, providing stakeholders with confidence in the integrity and accuracy of the reported emission reductions. + +**Verification Opinion:** The Verification Opinion schema provides a detailed account of the project’s performance during a specific reporting period. It assesses whether the claimed GHG emissions reductions or removals align with the project’s design and monitoring plan. + +## Token (Emission Reduction Ton) + +Emission Reduction Ton (ERT), which represents a verified reduction of one metric ton of carbon dioxide equivalent. + +## Step By Step + +1. Import the policy using IPFS or Policy File. Once imported, you will be redirected to the policy configurator. + +![](../../../.gitbook/assets/1.png) + +![](../../../.gitbook/assets/2.png) + +![](../../../.gitbook/assets/3.png) + +![](../../../.gitbook/assets/4.png) + +2. Set the policy to Dry Run or Publish it using the dropdown. Then select “Go” or “Register”. + +![](../../../.gitbook/assets/5.png) + +![](../../../.gitbook/assets/6.png) + +3. Create a new user account and assign it to the Project Proponent. Ensure that the Project Proponent registration form is complete, then select ‘Submit’. + +
+ +![](../../../.gitbook/assets/8.png) + +![](../../../.gitbook/assets/9.png) + +![](../../../.gitbook/assets/10.png) + +4. Log in to the administrator account to review and approve the Project Proponent registration form. The administrator will have access to the submitted registration forms for each user and can choose to approve or reject them. + +![](../../../.gitbook/assets/11.png) + +5. The Project Proponent can click 'Create' to submit the Project Listing Form. + +![](../../../.gitbook/assets/12.png) + +![](../../../.gitbook/assets/13.png) + +![](../../../.gitbook/assets/14.png) + +6. Log in to the administrator account to review and approve the Project Listing Form. + +
+ +7. Create a new user account and assign it to the Verifier. Ensure that the Verifier registration form is complete, then select ‘Submit’. + +![](../../../.gitbook/assets/16.png) + +![](../../../.gitbook/assets/17.png) + +![](../../../.gitbook/assets/18.png) + +8. Log in to the administrator account to review and approve the Verifier registration form. The administrator will have access to the submitted registration forms for each user and can choose to approve or reject them. + +![](../../../.gitbook/assets/19.png) + +9. Navigate back to the Verifier account and submit a Project Specific Conflict of Interest (COI) form. + +![](../../../.gitbook/assets/20.png) + +10. Log in to the administrator account to review and approve the COI form. + +
+ +11. Log in to the Project Proponent account and assign the Project to the approved Verifier. Once assigned, submit a Project Plan and assign the Project Plan to the Verifier. + +
+ +
+ +
+ +
+ +
+ +12. Log in as the Verifier to review the Project documents and the Project Plan. You will see no ‘Approve’ or ‘Reject’ buttons for the Project form as it is view only. + +
+ +
+ +13. The Administrator will now be able to approve or reject the Project Plan. + +
+ +14. The Verifier can now submit a Validation Report and the Validation Opinion. Make sure to assign the Project Proponent once each form is submitted. + +
+ +
+ +
+ +
+ +
+ +
+ +15. Return to the Project Proponent’s account to review the Validation Report and Opinion before approving it for review from the Administrator. + +
+ +
+ +16. Once the Validation Report and Opinion are approved by the Project Proponent, the Administrator will gain access to review and either approve or reject them. + +
+ +
+ +17. The Project Proponent can now submit the Emission Reductions Form, Monitoring Report, and Environmental and Social Assessment. Ensure that a Verifier is assigned for the verification process. + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +18. Once submitted and assigned, the Verifier can review each document, provide a Verification Report and Opinion, and assign them to the Project Proponent as view-only documents. + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +19. The Project Proponent can view these documents; however, they will be sent to the Administrator for final approval. + +
+ +
+ +20. The Administrator can review the Verification Report and approve or reject it. + +
+ +21. The Administrator can review the Verification Opinion. The actions available for this document differ from the previous ones, as it is the document we will mint credits against. You’ll see three buttons: Mint, Close, and Reject. The Mint button allows you to select the Vintage for which you would like to mint credits. The Close button should be used once all applicable Vintages have been used for minting credits. The Reject button can be used if the Verification Opinion is not acceptable. Below, we will display an example to showcase what happens when we select ‘Mint’ and define a Vintage (e.g., 2021). + +
+ +
+ +In the image displayed below, you can see that the VC (document) for the Verification Opinion shows how many Emission Reductions or Removals (ERRs) have been approved and verified for that specific vintage. + +
+ +
+ +
+ +
+ +The VC file for the Verification Opinion in the Trust Chain will display the selected vintage and the number of credits associated with that vintage. + +
+ +
+ +22. In this next example, we will mint again, but the Vintage will be 2022. You’ll be able to see a new Verifiable Presentation (VP) for this issuance and a new Trust Chain. + +
+ +
+ +
+ +
+ +
+ +23. The final step is to select Close once all the vintages have been used to mint credits. + +
+ +
diff --git a/docs/guardian/demo-guide/carbon-offsets/ams-i.e-switch-from-non-renewable-biomass-for-thermal-applications-by-the-user.md b/docs/guardian/demo-guide/carbon-offsets/ams-i.e-switch-from-non-renewable-biomass-for-thermal-applications-by-the-user.md index 5b55d78c7c..fc3218c348 100644 --- a/docs/guardian/demo-guide/carbon-offsets/ams-i.e-switch-from-non-renewable-biomass-for-thermal-applications-by-the-user.md +++ b/docs/guardian/demo-guide/carbon-offsets/ams-i.e-switch-from-non-renewable-biomass-for-thermal-applications-by-the-user.md @@ -72,7 +72,7 @@ Various methodologies are used to quantify emissions reductions in cookstove pro ### Policy Import -This policy is published to Hedera network and can either be imported via Github (.policy file) or IPSF timestamp. +This policy is published to Hedera network and can either be imported via Github (.policy file) or IPFS timestamp. ### Available Roles diff --git a/docs/guardian/demo-guide/carbon-offsets/cdm-acm0006-electricity-and-heat-generation-from-biomass.md b/docs/guardian/demo-guide/carbon-offsets/cdm-acm0006-electricity-and-heat-generation-from-biomass.md index 34c277947e..36be4cc875 100644 --- a/docs/guardian/demo-guide/carbon-offsets/cdm-acm0006-electricity-and-heat-generation-from-biomass.md +++ b/docs/guardian/demo-guide/carbon-offsets/cdm-acm0006-electricity-and-heat-generation-from-biomass.md @@ -36,7 +36,7 @@ In the modern landscape of emission reduction initiatives, the value of transpar ### Policy Guide -This policy is published to Hedera network and can either be imported via Github (.policy file) or IPSF timestamp. +This policy is published to Hedera network and can either be imported via Github (.policy file) or IPFS timestamp. ### Available Roles diff --git a/docs/guardian/demo-guide/carbon-offsets/cdm-ams-i.c.-thermal-energy-production-with-or-without-electricity.md b/docs/guardian/demo-guide/carbon-offsets/cdm-ams-i.c.-thermal-energy-production-with-or-without-electricity.md index e5bca935b5..73f4cc4b11 100644 --- a/docs/guardian/demo-guide/carbon-offsets/cdm-ams-i.c.-thermal-energy-production-with-or-without-electricity.md +++ b/docs/guardian/demo-guide/carbon-offsets/cdm-ams-i.c.-thermal-energy-production-with-or-without-electricity.md @@ -44,7 +44,7 @@ This policy is a digitized version of the CDM’s methodology AMS IC: Thermal e ### Policy Guide -This policy is published to Hedera network and can either be imported via Github (.policy file) or IPSF timestamp. +This policy is published to Hedera network and can either be imported via Github (.policy file) or IPFS timestamp. ### Available Roles diff --git a/docs/guardian/demo-guide/carbon-offsets/cdm-ams-ii.g.md b/docs/guardian/demo-guide/carbon-offsets/cdm-ams-ii.g.md index 8533dd6531..0be0d9b881 100644 --- a/docs/guardian/demo-guide/carbon-offsets/cdm-ams-ii.g.md +++ b/docs/guardian/demo-guide/carbon-offsets/cdm-ams-ii.g.md @@ -54,7 +54,7 @@ AMS-II.G provides a standardized and measurable framework for clean cooking proj ## Policy Guide -This policy is published to Hedera network and can either be imported via Github (.policy file) or IPSF timestamp. +This policy is published to Hedera network and can either be imported via Github (.policy file) or IPFS timestamp. ### **Available Roles** diff --git a/docs/guardian/demo-guide/carbon-offsets/cdm-ams-iii.h.-methane-recovery-in-wastewater-treatment.md b/docs/guardian/demo-guide/carbon-offsets/cdm-ams-iii.h.-methane-recovery-in-wastewater-treatment.md index 72bf0ebab5..c990b1df58 100644 --- a/docs/guardian/demo-guide/carbon-offsets/cdm-ams-iii.h.-methane-recovery-in-wastewater-treatment.md +++ b/docs/guardian/demo-guide/carbon-offsets/cdm-ams-iii.h.-methane-recovery-in-wastewater-treatment.md @@ -36,7 +36,7 @@ In the modern landscape of emission reduction initiatives, transparency and cred ## Policy Guide -This policy is published to Hedera network and can either be imported via Github (.policy file) or IPSF timestamp. +This policy is published to Hedera network and can either be imported via Github (.policy file) or IPFS timestamp. ## Available Roles diff --git a/docs/guardian/demo-guide/carbon-offsets/gccm001-v.4-methodology-for-renewable-energy-generation-projects-supplying-electricity-to-grid.md b/docs/guardian/demo-guide/carbon-offsets/gccm001-v.4-methodology-for-renewable-energy-generation-projects-supplying-electricity-to-grid.md index 546c7d3eeb..77653fe4a7 100644 --- a/docs/guardian/demo-guide/carbon-offsets/gccm001-v.4-methodology-for-renewable-energy-generation-projects-supplying-electricity-to-grid.md +++ b/docs/guardian/demo-guide/carbon-offsets/gccm001-v.4-methodology-for-renewable-energy-generation-projects-supplying-electricity-to-grid.md @@ -80,13 +80,13 @@ The workflow outlined in this policy replicates the procedural steps required fo ## Demo Video -[Youtube](https://youtu.be/dD\_xRgTTQjY?si=tm1FlIs8g35MuGma) +[Youtube](https://youtu.be/dD_xRgTTQjY?si=tm1FlIs8g35MuGma) ![](../../../.gitbook/assets/0.jpeg) ## Policy Workflow -![](<../../../.gitbook/assets/1 (1).png>) +![](<../../../.gitbook/assets/1 (1) (1).png>) ## Policy Import @@ -156,59 +156,59 @@ Approved Carbon Credit (ACC), each equivalent to one tonne of CO2. 1. Import the policy using IPFS or Policy File. Once imported, you will be redirected to the policy configurator. -![](<../../../.gitbook/assets/2 (1).png>) +![](<../../../.gitbook/assets/2 (1) (1).png>) 2. Any tools used within the policy can be seen in the policy workflow blocks. -![](<../../../.gitbook/assets/3 (1).png>) +![](<../../../.gitbook/assets/3 (1) (1).png>) 3. Set the policy to Dry Run or Publish it using the dropdown. Then select “Go” or “Register”. -![](<../../../.gitbook/assets/4 (1).png>) +![](<../../../.gitbook/assets/4 (1) (1).png>) -![](<../../../.gitbook/assets/5 (1).png>) +![](<../../../.gitbook/assets/5 (1) (1).png>) 4. Create three new user accounts and assign each one a role: Project Owner, Verifier, and Steering Committee. Ensure that all user registration forms are completed. -![](<../../../.gitbook/assets/6 (1).png>) +![](<../../../.gitbook/assets/6 (1) (1).png>) -![](<../../../.gitbook/assets/7 (1).png>) +![](<../../../.gitbook/assets/7 (1) (1).png>) -![](<../../../.gitbook/assets/8 (1).png>) +![](<../../../.gitbook/assets/8 (1) (1).png>) -![](<../../../.gitbook/assets/9 (1).png>) +![](<../../../.gitbook/assets/9 (1) (1).png>) -![](<../../../.gitbook/assets/10 (1).png>) +![](<../../../.gitbook/assets/10 (1) (1).png>) -![](<../../../.gitbook/assets/11 (1).png>) +![](<../../../.gitbook/assets/11 (1) (1).png>) -![](<../../../.gitbook/assets/12 (1).png>) +![](<../../../.gitbook/assets/12 (1) (1).png>) 5. Log in to the administrator account to review and approve the Project Owner and Verifier accounts. The administrator will have access to the submitted registration forms for each user and can choose to approve or reject them. -![](<../../../.gitbook/assets/13 (1).png>) +![](<../../../.gitbook/assets/13 (1) (1).png>) -![](<../../../.gitbook/assets/14 (1).png>) +![](<../../../.gitbook/assets/14 (1) (1).png>) 6. The Project Owner can click 'Create Project' to submit the Project Submission Form. -![](<../../../.gitbook/assets/15 (1).png>) +![](<../../../.gitbook/assets/15 (1) (1).png>) -![](<../../../.gitbook/assets/16 (1).png>) +![](<../../../.gitbook/assets/16 (1) (1).png>) 7. The Project Owner can also submit an Investment Analysis, though this is optional. -![](<../../../.gitbook/assets/17 (1).png>) +![](<../../../.gitbook/assets/17 (1) (1).png>) 8. Return to the administrator account to review the Project Submission Form for completeness and assign a submission number after approving it. -![](<../../../.gitbook/assets/18 (1).png>) +![](<../../../.gitbook/assets/18 (1) (1).png>) -![](<../../../.gitbook/assets/19 (1).png>) +![](<../../../.gitbook/assets/19 (1) (1).png>) 9. Log in to the Project Owner account and assign a Verifier to the project for third party verification. -
+
10. Using the assigned Verifier account, they can now complete and submit the Project Verification Report. diff --git a/docs/guardian/demo-guide/carbon-offsets/gold-standard-carbon-sequestration-through-accelerated-carbonation-of-concrete-aggregate.md b/docs/guardian/demo-guide/carbon-offsets/gold-standard-carbon-sequestration-through-accelerated-carbonation-of-concrete-aggregate.md index 5f9e139b4d..3af6bbcc2c 100644 --- a/docs/guardian/demo-guide/carbon-offsets/gold-standard-carbon-sequestration-through-accelerated-carbonation-of-concrete-aggregate.md +++ b/docs/guardian/demo-guide/carbon-offsets/gold-standard-carbon-sequestration-through-accelerated-carbonation-of-concrete-aggregate.md @@ -79,11 +79,11 @@ Carbon sequestration projects play a crucial role in addressing global climate c ### Demo Video -[Youtube](https://youtu.be/bg7wQMkj1Zg?si=\_dUy4Ryj-oZZgs5A) +[Youtube](https://youtu.be/bg7wQMkj1Zg?si=_dUy4Ryj-oZZgs5A) ### Policy Workflow -
+
### Policy Guide @@ -124,69 +124,69 @@ Note: If you would like to organize your data before adding it to the project f 1. Create a new user and assign role as Project Proponent. -![](<../../../.gitbook/assets/1 (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/1 (1) (1) (1) (1) (1) (1).png>) -![](<../../../.gitbook/assets/2 (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/2 (1) (1) (1) (1) (1) (1).png>) 2. Create a New project by clicking on "New Project" button and enter all the required details. -![](<../../../.gitbook/assets/3 (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/3 (1) (1) (1) (1) (1) (1).png>) -![](<../../../.gitbook/assets/4 (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/4 (1) (1) (1) (1) (1) (1).png>) 3. Once project details are submitted, the Registry adds the project to the project pipeline. -![](<../../../.gitbook/assets/5 (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/5 (1) (1) (1) (1) (1) (1).png>) 4. Now, we create a new user and assign its role as VVB. -![](<../../../.gitbook/assets/6 (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/6 (1) (1) (1) (1) (1) (1).png>) -![](<../../../.gitbook/assets/7 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/7 (1) (1) (1) (1) (1).png>) 5. We need to set the VVB’s name. -![](<../../../.gitbook/assets/8 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/8 (1) (1) (1) (1) (1).png>) 6. Now we login as SR and approve VVB. -![](<../../../.gitbook/assets/9 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/9 (1) (1) (1) (1) (1).png>) 7. Now we login as the Project Proponent and assign project to VVB. -![](<../../../.gitbook/assets/10 (1) (1) (1).png>) +![](<../../../.gitbook/assets/10 (1) (1) (1) (1).png>) 8. Now we login as VVB and validate the project by viewing project document details. Once validated, VVB clicks on Validate button. -![](<../../../.gitbook/assets/11 (1) (1) (1).png>) +![](<../../../.gitbook/assets/11 (1) (1) (1) (1).png>) 9. Login as the SR and add the project to the project registry. -![](<../../../.gitbook/assets/12 (1) (1) (1).png>) +![](<../../../.gitbook/assets/12 (1) (1) (1) (1).png>) 10. At this point the Technical Advisory Committee and the NGO Supporters have a commenting feature available. An account can be created and assigned to each role. This can be used to review the project data and leave a comment. It is optional. -![](<../../../.gitbook/assets/13 (1) (1) (1).png>) +![](<../../../.gitbook/assets/13 (1) (1) (1) (1).png>) -![](<../../../.gitbook/assets/14 (1) (1) (1).png>) +![](<../../../.gitbook/assets/14 (1) (1) (1) (1).png>) -![](<../../../.gitbook/assets/15 (1) (1) (1).png>) +![](<../../../.gitbook/assets/15 (1) (1) (1) (1).png>) -![](<../../../.gitbook/assets/16 (1) (1) (1).png>) +![](<../../../.gitbook/assets/16 (1) (1) (1) (1).png>) 11. Once validated, we login as Project Proponent and Add Monitoring Report. -![](<../../../.gitbook/assets/17 (1) (1) (1).png>) +![](<../../../.gitbook/assets/17 (1) (1) (1) (1).png>) -![](<../../../.gitbook/assets/18 (1) (1) (1).png>) +![](<../../../.gitbook/assets/18 (1) (1) (1) (1).png>) 12. Once the report is submitted, we now login as VVB and validate the monitoring report by clicking on Verify button. -![](<../../../.gitbook/assets/19 (1) (1) (1).png>) +![](<../../../.gitbook/assets/19 (1) (1) (1) (1).png>) 13. Once the monitoring report is validated, we login as SR and click on Approve then the Mint button should appear which can then be used to mint the tokens. -![](<../../../.gitbook/assets/20 (1) (1) (1).png>) +![](<../../../.gitbook/assets/20 (1) (1) (1) (1).png>) 14. Once minting is completed, we can view tokens in Token History tab diff --git a/docs/guardian/demo-guide/carbon-offsets/goldstandard-metered-energy-cooking.md b/docs/guardian/demo-guide/carbon-offsets/goldstandard-metered-energy-cooking.md index 14a2392928..0804ee80c6 100644 --- a/docs/guardian/demo-guide/carbon-offsets/goldstandard-metered-energy-cooking.md +++ b/docs/guardian/demo-guide/carbon-offsets/goldstandard-metered-energy-cooking.md @@ -59,7 +59,7 @@ This approach is more precise than traditional methodologies, which rely on more ### Policy Guide -This policy is published to Hedera network and can either be imported via Github(.policy file) or IPSF timestamp. +This policy is published to Hedera network and can either be imported via Github(.policy file) or IPFS timestamp. Latest Version - 0.0.3 Hedera Topic - [0.0.3972127](https://explore.lworks.io/testnet/topics/0.0.3972127) diff --git a/docs/guardian/demo-guide/carbon-offsets/methane-emission-reduction-by-adjusted-water-management-practice-in-rice-cultivation.md b/docs/guardian/demo-guide/carbon-offsets/methane-emission-reduction-by-adjusted-water-management-practice-in-rice-cultivation.md index ed3c888390..5ca267d336 100644 --- a/docs/guardian/demo-guide/carbon-offsets/methane-emission-reduction-by-adjusted-water-management-practice-in-rice-cultivation.md +++ b/docs/guardian/demo-guide/carbon-offsets/methane-emission-reduction-by-adjusted-water-management-practice-in-rice-cultivation.md @@ -42,15 +42,11 @@ The Methane Emission Reduction in Rice Cultivation methodology offers a comprehe ## Demo Video -[Youtube](https://www.youtube.com/watch?v=UjngB\_hnUUs) +[Youtube](https://www.youtube.com/watch?v=UjngB_hnUUs) ## Policy Workflow -
- - - -
+
## Policy Guide diff --git a/docs/guardian/demo-guide/carbon-offsets/verra-vm0041.md b/docs/guardian/demo-guide/carbon-offsets/verra-vm0041.md index 98c6a8a0d5..eccfef7254 100644 --- a/docs/guardian/demo-guide/carbon-offsets/verra-vm0041.md +++ b/docs/guardian/demo-guide/carbon-offsets/verra-vm0041.md @@ -62,7 +62,7 @@ VM0041 represents a pivotal methodology in addressing methane emissions within t ### Demo Video -[Youtube](https://youtu.be/yym5TjkxQAs?si=\_N-sE8IvMJS030Xk) +[Youtube](https://youtu.be/yym5TjkxQAs?si=_N-sE8IvMJS030Xk) ### Policy Workflow @@ -94,60 +94,60 @@ Verified Carbon Unit (VCU) credits, each equivalent to one tonne of CO2. 1. Create a new user and assign role as Project Proponent. -![](<../../../.gitbook/assets/2 (1) (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/2 (1) (1) (1) (1) (1) (1) (1).png>) 2. Create a New project by clicking on "New Project" button and enter all the required details. -![](<../../../.gitbook/assets/3 (1) (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1).png>) -![](<../../../.gitbook/assets/4 (1) (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1).png>) 3. Once project details are submitted, Verra adds the project to the project pipeline. -![](<../../../.gitbook/assets/5 (1) (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1).png>) 4. Now, we create a new user and assign its role as VVB -![](<../../../.gitbook/assets/6 (1) (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1).png>) 5. We need to set VVB name -![](<../../../.gitbook/assets/7 (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/7 (1) (1) (1) (1) (1) (1).png>) 6. Once VVB name is set, it waits for SR to approve it. -![](<../../../.gitbook/assets/8 (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/8 (1) (1) (1) (1) (1) (1).png>) 7. Now we login as SR and approve VVB. -![](<../../../.gitbook/assets/9 (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/9 (1) (1) (1) (1) (1) (1).png>) 8. Now we login as the Project Proponent and assign project to VVB. -![](<../../../.gitbook/assets/10 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/10 (1) (1) (1) (1) (1).png>) 9. Now we login as VVB and validate the project by viewing project document details. Once validated, VVB clicks on Validate button. -![](<../../../.gitbook/assets/11 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/11 (1) (1) (1) (1) (1).png>) 10. Once validated, we login as Project Proponent and Add Monitoring Report. -![](<../../../.gitbook/assets/12 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/12 (1) (1) (1) (1) (1).png>) 11. Once report is submitted, we now login as VVB and validate the monitoring report by clicking on Verify button. -![](<../../../.gitbook/assets/13 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/13 (1) (1) (1) (1) (1).png>) 12. Once monitoring report is validated, we login as SR and click on Mint to mint the tokens. -![](<../../../.gitbook/assets/14 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/14 (1) (1) (1) (1) (1).png>) 13. Once minting is completed, we can view tokens in Token History tab -![](<../../../.gitbook/assets/15 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/15 (1) (1) (1) (1) (1).png>) 14. Trustchain can also be viewed by clicking on View TrustChain button: -![](<../../../.gitbook/assets/16 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/16 (1) (1) (1) (1) (1).png>) -![](<../../../.gitbook/assets/17 (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/17 (1) (1) (1) (1) (1).png>) diff --git a/docs/guardian/demo-guide/carbon-offsets/verra-vmr0006-energy-efficiency-and-fuel-switch-measures-in-thermal-applications.md b/docs/guardian/demo-guide/carbon-offsets/verra-vmr0006-energy-efficiency-and-fuel-switch-measures-in-thermal-applications.md index bfa40cf314..ed704ef5c7 100644 --- a/docs/guardian/demo-guide/carbon-offsets/verra-vmr0006-energy-efficiency-and-fuel-switch-measures-in-thermal-applications.md +++ b/docs/guardian/demo-guide/carbon-offsets/verra-vmr0006-energy-efficiency-and-fuel-switch-measures-in-thermal-applications.md @@ -62,7 +62,7 @@ Various methodologies are used to quantify emissions reductions in cookstove pro ### Policy Import -This policy is published to Hedera network and can either be imported via Github (.policy file) or IPSF timestamp. +This policy is published to Hedera network and can either be imported via Github (.policy file) or IPFS timestamp. ### Available Roles diff --git a/docs/guardian/readme/getting-started/installation/upgrading.md b/docs/guardian/readme/getting-started/installation/upgrading.md index c7ddec33b4..97e2b41ad2 100644 --- a/docs/guardian/readme/getting-started/installation/upgrading.md +++ b/docs/guardian/readme/getting-started/installation/upgrading.md @@ -1,4 +1,4 @@ -# ⬆ Upgrading +# ⬆️ Upgrading ## Introduction @@ -38,8 +38,6 @@ The migration process guides the team to produce artifacts that will help to cor In this case the migration that we account for is an homogeneous migration: a migration from source databases to target databases where the source and target databases are of the same database management system. During upgrading the system, the schemas for the source and target databases are almost identical except for changes in some of the fields, collections and documents. For changing data the source databases must be transformed during migration. -
- #### 1) Data Migration Profiling: Without a good understanding of the Data model the organization could run into a critical flaw that halts the system and brings Guardian to stop for data corruption and inconsistency. This phase would have “Data Migration Model” as output. This document outlines all the data that needs to be migrated, the complete mapping between the Data Source and Data Destination and every transformation in terms of: @@ -257,7 +255,7 @@ Service1 2.1.3 is compatible with only with version 3.2.x of service3 and just b Service 2.1.3 is backward compatible with with all versions of service6 until 4.x.x -Service 3.2.3 ……\\ +Service 3.2.3 …… |


| **service1** | **service2** | **service3** | **service4** | **service5** | **service6** | | -------------------------------------------------------------- | ------------ | ------------------------ | ----------------------- | ------------ | ------------ | ------------ | @@ -350,8 +348,6 @@ Guardian migration consists of a small script that runs as the first step of eve Guardian already deals with this problem: Due to the long-term nature of some sustainability projects, Policy Engine (PE) maintains unlimited ‘read’ backward compatibility with 'old’ schema definition language elements. In other words, new PE versions will recognize and be able to process all existing valid policies with schemas defined starting from the beginning of Guardian existence. ([https://docs.hedera.com/guardian/guardian/standard-registry/schemas/schema-versioning-and-deprecation-policy](https://docs.hedera.com/guardian/guardian/standard-registry/schemas/schema-versioning-and-deprecation-policy)) -
- **Guardian dials with Schema breaking changes** * Removing or renaming an element; @@ -402,8 +398,6 @@ All microservices should make it clear what version of a different microservice A good way of versioning is through semantic versioning, that is, keeping versions as a set of numbers that make it clear when a breaking change happens (for instance, one number can mean that the API has been modified). -
- **Version Technique** * URI versioning: In this approach, developers add version information directly to a service's [URI](https://www.techtarget.com/whatis/definition/URI-Uniform-Resource-Identifier), which provides a quick way to identify a specific version of the service by simply glancing at either the [URL or URN](https://www.cbtnuggets.com/blog/technology/networking/networking-basics-whats-the-difference-between-uri-url-and-urn). Here's an example of how that looks: @@ -416,7 +410,7 @@ A good way of versioning is through semantic versioning, that is, keeping versio Application processes can be shut down on purpose or through an unexpected event. An application process should be completely disposable without any unwanted side-effects. Moreover, processes should start quickly. An important part of managing dependencies has to do with what happens when a service is updated to fit new requirements or solve a design issue. **Other microservices may depend on the semantics of the old version or worse: depend on the way data is modeled in the database.**\ -As microservices are developed in isolation, this means a team usually cannot wait for another team to make the necessary changes to a dependent service before going live. The way to solve this is through versioning. **All microservices should make it clear what version of a different microservice they require and what version they are.**\\ +As microservices are developed in isolation, this means a team usually cannot wait for another team to make the necessary changes to a dependent service before going live. The way to solve this is through versioning. **All microservices should make it clear what version of a different microservice they require and what version they are.** #### 6) Microservice apps are expected to run in an execution environment as stateless processes. @@ -443,10 +437,7 @@ Although cloud targets infrastructures, **Azure** and **AWS**, namely, offer the * Azure App Services, optimized for web services **enables the deployment**: * From source code (gain cloud dependency); * From docker image; - * From the docker-compose.yml file (the docker containers are inside a single AppService,single POD, rather than multiple AppServices as one might expect.) - -and - + * From the docker-compose.yml file (the docker containers are inside a single AppService,single POD, rather than multiple AppServices as one might expect.) and * Amazon elastic container registry. At the same time, they offer services that grant direct access to Kubernetes: Azure has its **Azure Kubernetes Service (AKS)** while AWS has Amazon **EKS (and obviously on EC2)**. @@ -489,9 +480,7 @@ For the Guardian Upgrade process the Green Instance will be the copy on which al ### Review the release notes and documentation -Thoroughly review the release notes and documentation provided for the target version. These resources will help you understand the changes, new features, and any potential breaking changes in the upgraded version.\\ - -
+Thoroughly review the release notes and documentation provided for the target version. These resources will help you understand the changes, new features, and any potential breaking changes in the upgraded version. You can find the installation guide and release notes for the target version in the Hedera Guardian [documentation](https://docs.hedera.com/guardian/guardian/readme/getting-started) and in the Guardian [official repository](https://github.com/hashgraph/guardian/releases). @@ -499,7 +488,7 @@ You can find the installation guide and release notes for the target version in It is essential to create a complete backup of the existing Hedera Guardian application and its associated databases before proceeding with the upgrade. This ensures that the application data is safeguarded and can be restored if needed. -Refer to this document, [Backup tool](https://docs.google.com/document/d/1PG7dKgKHigNBS-Bs5lHIdgwvObKzAWwkTLk1XY\_9M0s/edit), for more details. +Refer to this document, [Backup tool](https://docs.google.com/document/d/1PG7dKgKHigNBS-Bs5lHIdgwvObKzAWwkTLk1XY_9M0s/edit), for more details. While backing up consider that until release 2.13.0 environment was described by **.env.docker** @@ -515,7 +504,7 @@ At folder: ./guardian/configs At folder: ./guardian/\/configs/ -Make sure to back up all these files. As for an example, starting from the implementation provided at [Backup tool](https://docs.google.com/document/d/1PG7dKgKHigNBS-Bs5lHIdgwvObKzAWwkTLk1XY\_9M0s/edit): +Make sure to back up all these files. As for an example, starting from the implementation provided at [Backup tool](https://docs.google.com/document/d/1PG7dKgKHigNBS-Bs5lHIdgwvObKzAWwkTLk1XY_9M0s/edit): 1. configure /usr/local/bin to contain the whole guardian tree folders. 2. change line 6 of script configs-backup.sh from: @@ -599,7 +588,7 @@ If the prior version of the Hedera Guardian application has been customized by y #### Identify performance behavior -Collect metrics from the current Guardian running instance to analyze performance, logs, and metrics to identify current instance behavior as of monitoring[ tools](https://docs.hedera.com/guardian/monitoring-tools) available for Guardian since release 2.12.1. +Collect metrics from the current Guardian running instance to analyze performance, logs, and metrics to identify current instance behavior as of [monitoring tools](../../../../guardian-in-production/monitoring-tools.md) available for Guardian since release 2.12.1. ### Tasks Checklist during the upgrade @@ -711,7 +700,7 @@ Once testing is successfully completed: #### Monitor and Rollback if Needed -Continuously monitor the green environment's performance, logs, and metrics to identify any issues or anomalies. Compare the result of previous metrics to the new revealed metrics as per the [monitoring tools](https://docs.hedera.com/guardian/monitoring-tools) available for Guardian since release 2.12.1. +Continuously monitor the green environment's performance, logs, and metrics to identify any issues or anomalies. Compare the result of previous metrics to the new revealed metrics as per the [monitoring tools](../../../../guardian-in-production/monitoring-tools.md) available for Guardian since release 2.12.1. If any critical issues arise, you can quickly rollback by switching the load balancer to route all traffic back to the blue environment. diff --git a/docs/guardian/standard-registry/fireblocks-raw-signing/fireblocks-signing-in-guardian-ui.md b/docs/guardian/standard-registry/fireblocks-raw-signing/fireblocks-signing-in-guardian-ui.md index 4650697835..eef60af2f7 100644 --- a/docs/guardian/standard-registry/fireblocks-raw-signing/fireblocks-signing-in-guardian-ui.md +++ b/docs/guardian/standard-registry/fireblocks-raw-signing/fireblocks-signing-in-guardian-ui.md @@ -69,6 +69,6 @@ When creating a user, select the “**Use fireblocks signing**” option and pop * Fireblocks API Key * Fireblocks Private Key -![](<../../../.gitbook/assets/0 (1) (1).png>) +![](<../../../.gitbook/assets/0 (1) (1) (1).png>) Users, which have been created with this option enabled to remotely sign their Hedera transactions using Fireblocks API instead of via the built-in Guardian signing workflow. diff --git a/docs/guardian/standard-registry/mobile-support-for-data-interface/mobile-operation-for-the-standard-registry.md b/docs/guardian/standard-registry/mobile-support-for-data-interface/mobile-operation-for-the-standard-registry.md index b782ff1d3c..b3fc0dd75a 100644 --- a/docs/guardian/standard-registry/mobile-support-for-data-interface/mobile-operation-for-the-standard-registry.md +++ b/docs/guardian/standard-registry/mobile-support-for-data-interface/mobile-operation-for-the-standard-registry.md @@ -26,7 +26,7 @@ Also some information about the user is also presented, such as the name of the Some screens for the Standard Registry were also adapted, starting with the registration into Guardian after creating a username and password and also the mobile adaptation to associate Hedera credentials and initial form upon creating an account. -
+
### Standard Registry creating / editing a token @@ -38,7 +38,7 @@ Below are the images show the creation of a "New Token" form for the Standard Re Here below are the images to show the creation of a "Edit Token" form for the Standard Registry. On the left for a non published and on the right for a published token. -![](<../../../.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1).png>) ![](<../../../.gitbook/assets/17 (6).png>) +![](<../../../.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1) (1).png>) ![](<../../../.gitbook/assets/17 (6).png>) ### Standard Registry importing policies flow (from IPFS) diff --git a/docs/guardian/standard-registry/notifications/user-guide.md b/docs/guardian/standard-registry/notifications/user-guide.md index e18cda62d1..e4752bfb42 100644 --- a/docs/guardian/standard-registry/notifications/user-guide.md +++ b/docs/guardian/standard-registry/notifications/user-guide.md @@ -9,7 +9,7 @@ Added notification icon and also tooltip with count of unread notifications: -![image4.png](<../../../.gitbook/assets/0 (1) (1) (1) (1) (1).png>) +![image4.png](<../../../.gitbook/assets/0 (1) (1) (1) (1) (1) (1).png>) ### 2. View : diff --git a/docs/guardian/standard-registry/policies/library-of-policy-examples/creating-and-using-roles.md b/docs/guardian/standard-registry/policies/library-of-policy-examples/creating-and-using-roles.md index de288424ce..5dcfcaad86 100644 --- a/docs/guardian/standard-registry/policies/library-of-policy-examples/creating-and-using-roles.md +++ b/docs/guardian/standard-registry/policies/library-of-policy-examples/creating-and-using-roles.md @@ -8,7 +8,7 @@ For a demo example of following steps, here is the policy timestamp: **167516453 1. Switch to the Roles tab -![Roles Tab](<../../../../.gitbook/assets/0 (1) (1) (1) (1) (1) (1).png>) +![Roles Tab](<../../../../.gitbook/assets/0 (1) (1) (1) (1) (1) (1) (1).png>) 2. Create 2 new roles called ‘**Example role 1**_’ and_ ‘_**Example role 2**_’ @@ -70,4 +70,4 @@ Select ‘**Example role 1**_’ and_ ‘**Example role 2**_’_ 3. The owner of the Policy (the Standard Registry user) upon executing the policy would skip the role selection form and would immediately end-up in the corresponding container -![For Standard Registry](<../../../../.gitbook/assets/13 (1) (1) (1) (1) (1) (1) (1).png>) +![For Standard Registry](<../../../../.gitbook/assets/13 (1) (1) (1) (1) (1) (1) (1) (1).png>) diff --git a/docs/guardian/standard-registry/policies/library-of-policy-examples/data-input-via-forms-using-roles-to-partition-user-activities..md b/docs/guardian/standard-registry/policies/library-of-policy-examples/data-input-via-forms-using-roles-to-partition-user-activities..md index 8c79a847f0..86ded99c30 100644 --- a/docs/guardian/standard-registry/policies/library-of-policy-examples/data-input-via-forms-using-roles-to-partition-user-activities..md +++ b/docs/guardian/standard-registry/policies/library-of-policy-examples/data-input-via-forms-using-roles-to-partition-user-activities..md @@ -29,7 +29,7 @@ See detailed information about the Roles in [Example 1](creating-and-using-roles 1.1 Go to ‘Schemas’ tab and create a new schema -![Creating new Schema](<../../../../.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1).png>) +![Creating new Schema](<../../../../.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1) (1).png>) 1.2 To make sure there is some demo/test data content in this schema create 3 fields: @@ -46,39 +46,39 @@ See detailed information about the Roles in [Example 1](creating-and-using-roles For this ‘**interfaceStepBlock**’ is required with ‘**Cyclic**’ option enabled. This will allow to return to the initial state after the document was saved. -![InterfaceStepBlock is added as cyclic\_container](<../../../../.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1) (1).png>) +![InterfaceStepBlock is added as cyclic\_container](<../../../../.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) 2.2 Add ‘**requestVcDocumentBlock**’ into the ‘_cyclic\_container_’ -![Adding requestVcDocumentBlock into cyclic\_container](<../../../../.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1).png>) +![Adding requestVcDocumentBlock into cyclic\_container](<../../../../.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) 2.3 Then select the previously created Schema -![Selecting already created Schema](<../../../../.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1).png>) +![Selecting already created Schema](<../../../../.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) 2.4 Select ‘New UUID’ to configure automatic generation of unique IDs for each document -![Selecting UUID](<../../../../.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1).png>) +![Selecting UUID](<../../../../.gitbook/assets/6 (1) (1) (1) (1) (1) (1) (1) (1).png>) 2.5 By default ‘**requestVcDocumentBlock**’ is displayed as a Form covering the entire page. To prevent this choose ‘**DIALOG**’ value for the field ‘Type’. -![Selecting DIALOG as Type](<../../../../.gitbook/assets/7 (1) (1) (1) (1) (1) (1).png>) +![Selecting DIALOG as Type](<../../../../.gitbook/assets/7 (1) (1) (1) (1) (1) (1) (1).png>) #### 3. Save documents in the Database. 3.1 Add ‘**sendToGuardianBlock**’ into the container ‘_cyclic\_container’_ immediately after ‘_create\_new\_document’_ -![Adding sendToGuardianBlock in container cyclic\_container](<../../../../.gitbook/assets/8 (1) (1) (1) (1) (1) (1) (1).png>) +![Adding sendToGuardianBlock in container cyclic\_container](<../../../../.gitbook/assets/8 (1) (1) (1) (1) (1) (1) (1) (1).png>) 3.2 Select data type and where to store the document -![Selecting Data Source and Type](<../../../../.gitbook/assets/9 (1) (1) (1) (1) (1) (1).png>) +![Selecting Data Source and Type](<../../../../.gitbook/assets/9 (1) (1) (1) (1) (1) (1) (1).png>) 3.3 Create appropriate attributes to capture/store document status Add ‘Status’ attribute and set the initial ‘New’ value for new documents -![Adding Status Attribute with New Value](<../../../../.gitbook/assets/10 (1) (1) (1) (1) (1) (1).png>) +![Adding Status Attribute with New Value](<../../../../.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1).png>) ### **Displaying the documents** @@ -86,7 +86,7 @@ Add ‘Status’ attribute and set the initial ‘New’ value for new documents 1.1 Add ’**interfaceDocumentsSourceBlock**_’_ into the ‘**user\_roles**_’_ container -![Adding interfaceDocumentsSourceBlock into user\_roles container](<../../../../.gitbook/assets/11 (1) (1) (1) (1) (1).png>) +![Adding interfaceDocumentsSourceBlock into user\_roles container](<../../../../.gitbook/assets/11 (1) (1) (1) (1) (1) (1).png>) 1.2 Specify the needed columns, their titles and where the values will be taken for display @@ -96,11 +96,11 @@ Add ‘Status’ attribute and set the initial ‘New’ value for new documents 1.3.1 Add ‘**documentsSourceAddon**_’ to the_ ‘**user\_grid**_’_ -![Adding documentsSourceAddon to retrieve data](<../../../../.gitbook/assets/13 (1) (1) (1) (1) (1).png>) +![Adding documentsSourceAddon to retrieve data](<../../../../.gitbook/assets/13 (1) (1) (1) (1) (1) (1).png>) 1.3.2 Select where to retrieve the documents from -![Selecting VC Document](<../../../../.gitbook/assets/14 (1) (1) (1) (1) (1) (1).png>) +![Selecting VC Document](<../../../../.gitbook/assets/14 (1) (1) (1) (1) (1) (1) (1).png>) 1.3.3 Select the schema upon which the selected documents should be based on @@ -108,7 +108,7 @@ Add ‘Status’ attribute and set the initial ‘New’ value for new documents 1.3.4 Select _‘_**Owned by User**_’_ checkbox which would filter in only the documents that are created by this user (this will disable the ability to view other documents) -![Selecting Owned by User checkbox](<../../../../.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1) (1).png>) +![Selecting Owned by User checkbox](<../../../../.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) ### **Approving the documents** @@ -128,7 +128,7 @@ Configure both ‘**documentSourceAddon**’ blocks similarly to how it was in t 1.4 Separate the documents by status by means of creating the corresponding filters -![Creating Equal status filter](<../../../../.gitbook/assets/19 (1) (1) (1) (1) (1).png>) +![Creating Equal status filter](<../../../../.gitbook/assets/19 (1) (1) (1) (1) (1) (1).png>) ![Creating not equal status filter](<../../../../.gitbook/assets/20 (3).png>) diff --git a/docs/guardian/standard-registry/policies/library-of-policy-examples/mrv-document-operations.md b/docs/guardian/standard-registry/policies/library-of-policy-examples/mrv-document-operations.md index 624f2bf4f2..de9beaf741 100644 --- a/docs/guardian/standard-registry/policies/library-of-policy-examples/mrv-document-operations.md +++ b/docs/guardian/standard-registry/policies/library-of-policy-examples/mrv-document-operations.md @@ -92,15 +92,15 @@ Record value from **assignedTo** _into_ **Field** (This field will be changing o 1.4.5 Use ‘**documentsSourceAddon**’ for data for **Dropdown**_**.**_ -![adding documentSourceAddon](<../../../../.gitbook/assets/14 (1) (1) (1) (1) (1) (1) (1) (1).png>) +![adding documentSourceAddon](<../../../../.gitbook/assets/14 (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) 1.4.6 Save the changed document -![Saving the documents](<../../../../.gitbook/assets/15 (1) (1) (1) (1) (1) (1).png>) +![Saving the documents](<../../../../.gitbook/assets/15 (1) (1) (1) (1) (1) (1) (1).png>) 1.4.7 As ‘**documentsSourceAddon**’ does not have default events, we need manually add them. -![Adding events](<../../../../.gitbook/assets/16 (1) (1) (1) (1) (1) (1).png>) +![Adding events](<../../../../.gitbook/assets/16 (1) (1) (1) (1) (1) (1) (1).png>) 1.4.8 Return to grid settings and add **Dropdown** into the target column. @@ -110,7 +110,7 @@ Record value from **assignedTo** _into_ **Field** (This field will be changing o 1.5.1 To select only the projects assigned to the current Approver set the ‘**Assigned to User**’ flag -![Setting up Assigned to User flag](<../../../../.gitbook/assets/18 (1) (1) (1) (1) (1).png>) +![Setting up Assigned to User flag](<../../../../.gitbook/assets/18 (1) (1) (1) (1) (1) (1).png>) 1.5.2 Add document approval block @@ -120,7 +120,7 @@ _(Please see_ [_example 2_](data-input-via-forms-using-roles-to-partition-user-a 1.5.3 Add Approve button into the grid -![Adding Approve button to the grid](<../../../../.gitbook/assets/20 (1) (1) (1) (1) (1).png>) +![Adding Approve button to the grid](<../../../../.gitbook/assets/20 (1) (1) (1) (1) (1) (1).png>) 1.5.4 After the Approve, setup the KYC for the account connected to the project @@ -220,12 +220,4 @@ To enable report creation only for approved projects, add create button into the
-
- -
- - - -
- -
+
diff --git a/docs/guardian/standard-registry/policies/library-of-policy-examples/token-operations.md b/docs/guardian/standard-registry/policies/library-of-policy-examples/token-operations.md index a7a81ff539..9631d6dedf 100644 --- a/docs/guardian/standard-registry/policies/library-of-policy-examples/token-operations.md +++ b/docs/guardian/standard-registry/policies/library-of-policy-examples/token-operations.md @@ -14,7 +14,7 @@ Second step of policy execution is data input and document submission. To enable To enable document submission we will use document input block (**requestVcDocumentBlock**) and document persistence block (**sendToGuardianBlock**) -![creating new\_user\_registration Block](<../../../../.gitbook/assets/0 (1) (1) (1) (1) (1) (1) (1).png>) +![creating new\_user\_registration Block](<../../../../.gitbook/assets/0 (1) (1) (1) (1) (1) (1) (1) (1).png>) **Please see** [**example 2**](data-input-via-forms-using-roles-to-partition-user-activities..md) **for the more in-depth guide of working with documents in Guardian Policies.** @@ -46,7 +46,7 @@ Switch to the ‘**Tokens**’ tab and create a new token 2.2.2 Select token and the action type -![Selecting Token and Action Type](<../../../../.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) +![Selecting Token and Action Type](<../../../../.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) 3. User ‘**tokenActionBlock**_**’**_ to mint tokens @@ -56,7 +56,7 @@ Switch to the ‘**Tokens**’ tab and create a new token 3.2 Select token which will be minted -![Selecting Token from dropdown](<../../../../.gitbook/assets/7 (1) (1) (1) (1) (1) (1) (1).png>) +![Selecting Token from dropdown](<../../../../.gitbook/assets/7 (1) (1) (1) (1) (1) (1) (1) (1).png>) 3.3 Configure the formula which would define the amount of tokens minted @@ -72,19 +72,19 @@ Switch to the ‘**Tokens**’ tab and create a new token 1.1 Add a new container in which the grid containing results would be placed -![Adidng Container Block](<../../../../.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1) (1).png>) +![Adidng Container Block](<../../../../.gitbook/assets/10 (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) 1.2 Ensure that ‘_documents’ and ‘tokens’ are displayed in separate tabs_ 1.2.1 In the parent block set property ‘**Type’** to ‘Tabs’ -![Setting the Property Type to TABS](<../../../../.gitbook/assets/11 (1) (1) (1) (1) (1) (1) (1).png>) +![Setting the Property Type to TABS](<../../../../.gitbook/assets/11 (1) (1) (1) (1) (1) (1) (1) (1).png>) 1.2.2 Set the property ‘**Title’** to configure tab titles 1.3 Add **‘interfaceDocumentsSourceBlock**_**’** into the ‘tokens’_ container and configure its columns -![Adding interfaceDocumentsSourceBlock](<../../../../.gitbook/assets/12 (1) (1) (1) (1) (1) (1) (1).png>) +![Adding interfaceDocumentsSourceBlock](<../../../../.gitbook/assets/12 (1) (1) (1) (1) (1) (1) (1) (1).png>) 1.4 Use ‘_**documentsSourceAddon’**_ block to retrieve data from the database. diff --git a/docs/guardian/standard-registry/policies/modules/modules-differentiation/module-differentiation-using-ui.md b/docs/guardian/standard-registry/policies/modules/modules-differentiation/module-differentiation-using-ui.md index b67b88dac0..4b965c94f5 100644 --- a/docs/guardian/standard-registry/policies/modules/modules-differentiation/module-differentiation-using-ui.md +++ b/docs/guardian/standard-registry/policies/modules/modules-differentiation/module-differentiation-using-ui.md @@ -47,7 +47,7 @@ Once, compare button is clicked, we need to select the first and second modules Block comparison structure can be expanded to view the comparison of their Properties: -![image4.png](<../../../../../.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1).png>) +![image4.png](<../../../../../.gitbook/assets/3 (1) (1) (1) (1) (1) (1) (1) (1).png>) * * diff --git a/docs/guardian/standard-registry/policies/policy-differentiation/global-search-and-comparison-ui.md b/docs/guardian/standard-registry/policies/policy-differentiation/global-search-and-comparison-ui.md index 8108d41dce..c159715ff0 100644 --- a/docs/guardian/standard-registry/policies/policy-differentiation/global-search-and-comparison-ui.md +++ b/docs/guardian/standard-registry/policies/policy-differentiation/global-search-and-comparison-ui.md @@ -9,7 +9,7 @@ Global policy search and comparison relies on Indexer for some of its functionality. Such Indexer can be deployed locally, or run elsewhere so long as there is an HTTP access path which must be specified in the _ANALYTICS\_SERVICE_ parameter in the .env configuration file:\ \ -_Example:_ +&#xNAN;_Example:_ _"ANALYTICS\_SERVICE": "http://localhost:3021",_ diff --git a/docs/guardian/standard-registry/policies/record-replay/README.md b/docs/guardian/standard-registry/policies/record-replay/README.md index f1f1e03278..ce2353b0dd 100644 --- a/docs/guardian/standard-registry/policies/record-replay/README.md +++ b/docs/guardian/standard-registry/policies/record-replay/README.md @@ -1,6 +1,6 @@ # 📁 Record/Replay -**“**Record/Run” options provide facilities to capture policy execution events, save and/or export them in a records file, which can then be replayed in the context of a different policy. +**“**Record/Run” options provide facilities to capture policy execution events, save and/or export them in a records file, which can then be replayed in the context of a different policy. {% hint style="info" %} Note: This functionality currently works in a Dry Run mode only. diff --git a/docs/guardian/standard-registry/policies/tagging/tagging-using-ui.md b/docs/guardian/standard-registry/policies/tagging/tagging-using-ui.md index 8430a78ba2..a39880ed0d 100644 --- a/docs/guardian/standard-registry/policies/tagging/tagging-using-ui.md +++ b/docs/guardian/standard-registry/policies/tagging/tagging-using-ui.md @@ -58,11 +58,11 @@ Tags can be created by clicking on "Create Tag" button. Tag can be created with label and the description as shown below: -![Label and Description](<../../../../.gitbook/assets/1 (1) (1) (1) (1) (1) (1).png>) +![Label and Description](<../../../../.gitbook/assets/1 (1) (1) (1) (1) (1) (1) (1).png>) An additional document can be added/linked with the tag using _**Add Document** button and then selecting a suitable document schema_ -![Adding Document](<../../../../.gitbook/assets/2 (1) (1) (1) (1) (1) (1) (1).png>) +![Adding Document](<../../../../.gitbook/assets/2 (1) (1) (1) (1) (1) (1) (1) (1).png>) #### **2.2 Remove** @@ -74,11 +74,11 @@ Users (DIDs) who created a tag are able to remove it later. For documents displayed in the grid only the first (alphabetically) tag is shown. -![Documents display](<../../../../.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1).png>) +![Documents display](<../../../../.gitbook/assets/4 (1) (1) (1) (1) (1) (1) (1) (1).png>) Users can click on the tag icon to show the detailed information about all tag assigned to the document. -![All the tags assigned to the document](<../../../../.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1).png>) +![All the tags assigned to the document](<../../../../.gitbook/assets/5 (1) (1) (1) (1) (1) (1) (1) (1).png>) Tags are grounded by labels. When a label is selected then a detailed information about all tags with this label is displayed below. @@ -94,7 +94,7 @@ Tags which have been imported with the Policy or Schema are marked as _**History Any credentialed entity can create/remove a tag on any object at any point of time independently from the Guardian instance where this tagable object (document etc) has been created. This presents a challenge for displaying the up-to-date state of 3rd party tags associated with the object, since continuous search and import/updates of such tags can affect UI responsiveness and general UX. Guardian users can refresh (or ‘pull’) 3rd party tags and update their display in their local Guardian instance by clicking on the corresponding icon (highlighted on the screenshot below). -![synchronization icon](<../../../../.gitbook/assets/8 (1) (1) (1) (1) (1) (1).png>) +![synchronization icon](<../../../../.gitbook/assets/8 (1) (1) (1) (1) (1) (1) (1).png>) ## 2. Demo Video diff --git a/docs/guardian/standard-registry/project-comparison/project-comparison-using-ui.md b/docs/guardian/standard-registry/project-comparison/project-comparison-using-ui.md index f4bf2e18e0..d405d202b3 100644 --- a/docs/guardian/standard-registry/project-comparison/project-comparison-using-ui.md +++ b/docs/guardian/standard-registry/project-comparison/project-comparison-using-ui.md @@ -1,7 +1,7 @@ # 💻 Project Comparison using UI 1. [Step By Step Process](project-comparison-using-ui.md#id-1.-step-by-step-process) -2. Demo Video +2. [Demo Video](project-comparison-using-ui.md#id-2.-demo-video) ## 1. Step By Step Process @@ -55,4 +55,4 @@ Document comparison includes examination of the VP documents generated by both p ## 2. Demo Video -Coming Soon +[Youtube](https://www.youtube.com/live/WpV2lvNBWMo?si=T4cqx1YfsM6eumpn) diff --git a/docs/guardian/standard-registry/schemas/schema-predefined-values-using-ui.md b/docs/guardian/standard-registry/schemas/schema-predefined-values-using-ui.md index 23632015c2..7ded2c2c45 100644 --- a/docs/guardian/standard-registry/schemas/schema-predefined-values-using-ui.md +++ b/docs/guardian/standard-registry/schemas/schema-predefined-values-using-ui.md @@ -4,6 +4,11 @@ icon: sidebar-flip # Schema Predefined Values using UI +1. [Step By Step Process](schema-predefined-values-using-ui.md#id-1.-step-by-step-process) +2. [Demo Video](schema-predefined-values-using-ui.md#id-2.-demo-video) + +## 1. Step By Step Process + ## 1. Schema Predefined Values Predefined schema values allow users to set up values for each field in schema (number, string, GeoJSON, or other nested schema) and use them in policy while displaying request blocks. There are 3 types of predefined values: @@ -49,3 +54,7 @@ Predefined values can also be used in more complex cases such as multiple fields ![](<../../../.gitbook/assets/6 (21).png>) ![](<../../../.gitbook/assets/7 (21).png>) + +## 2. Demo Video + +[Youtube](https://youtu.be/wFRk9uHRXss?si=2Gx2FNq6Tk9PnkIR\&t=104) diff --git a/docs/guardian/standard-registry/schemas/schema-rules/defining-schema-rules-using-ui.md b/docs/guardian/standard-registry/schemas/schema-rules/defining-schema-rules-using-ui.md index e902294ef8..8680c9213e 100644 --- a/docs/guardian/standard-registry/schemas/schema-rules/defining-schema-rules-using-ui.md +++ b/docs/guardian/standard-registry/schemas/schema-rules/defining-schema-rules-using-ui.md @@ -4,6 +4,11 @@ icon: computer # Defining Schema Rules using UI +1. [Step By Step Process](defining-schema-rules-using-ui.md#id-1.-step-by-step-process) +2. [Demo Video](defining-schema-rules-using-ui.md#id-2.-demo-video) + +## 1. Step By Step Process + ## **Schema rules** Schema rules have been created to enable authorised policy users to offer assistance to other users (and/or themselves) with data input and/or data evaluation. Schema rules define acceptable values and their ranges for schema fields (and correspondingly input fields in Guardian forms). They are activated in the UI whenever the form is viewed by users, and re-evaluated every time any of the values on the form is changed. Rules can contain mathematical formulas and logical if-then-else flow, and source data from any field in the current schema as well as any other schemas/documents that are present in the corresponding policy. When rules are evaluated they produce a binary ‘pass/fail’ output, which is displayed in the UI as green and amber field highlights correspondingly. @@ -14,56 +19,56 @@ Schema rules have been created to enable authorised policy users to offer assist Each Policy can have associated by Schema rules. The list of schema rules is displayed in the corresponding section of the UI, which provides the facility to enable/disable each of them individually. -![](../../../../.gitbook/assets/0.png) +![](<../../../../.gitbook/assets/0 (1).png>) #### **1.2 Creation** To initiate the creation of a new schema rules users need to click on the ‘Create New’ button in the corresponding UI section. -
+
-
+
#### **1.3 Configuration** After a rule has been created it should be configured to be meaningful, the process can be started by clicking the edit icon in the rules grid. -![](../../../../.gitbook/assets/3.png) +![](<../../../../.gitbook/assets/3 (1).png>) **1.3.1 General configuration** Specifying the rules name and its ‘target’ policy is mandatory. -![](../../../../.gitbook/assets/4.png) +![](<../../../../.gitbook/assets/4 (1).png>) **1.3.2 Configuring fields and schema** To source data from documents rule creators need to specify which fields from which schemas should be retrieved. Schema tree view shows policy schemas in a hierarchical structure, and allows to select the target fields. -![](../../../../.gitbook/assets/5.png) +![](<../../../../.gitbook/assets/5 (1).png>) **1.3.2.1 Search** In complex policies the complexity of schema structures can be difficult to navigate, rules creators could use search tool to optimize their work.\ -
+
**1.3.2.2 Selection** Clicking on a schema box opens the side menu which lists all the fields available in the selected schema. -![](../../../../.gitbook/assets/7.png) +![](<../../../../.gitbook/assets/7 (1).png>) \ -_Note: sub-schemas do not produce corresponding document, when such sub-schema is selected in the schema view the right hand panel shows the fields from the parent schema of which this sub-schema is a part._ +&#xNAN;_Note: sub-schemas do not produce corresponding document, when such sub-schema is selected in the schema view the right hand panel shows the fields from the parent schema of which this sub-schema is a part._ **1.3.2.3 Properties** By default searching for fields is performed on the basis of the values in their description field, however it is possible to search for matches in their ‘property’ values by navigating into the corresponding tab.\ -
+
_Note: some schema fields might not have or have empty property fields, such cases are displayed as greyed-out items in the list and their ‘description’ field is shown instead_ @@ -73,16 +78,16 @@ The selected schemas and their fields constitute ‘input’ data for the rules. The system automatically creates short variable names for the target fields, each of which then can be used as a rule target (for which to specify the acceptable values/ranged) or used in a formula to specify those for another field variable. -![](../../../../.gitbook/assets/9.png) +![](<../../../../.gitbook/assets/9 (1).png>) **1.3.3.1 Editing rules** -
+
There are a number of templates that can be used when configuring or editing rules. When a template is not selected for an existing rule it indicates that the rule is effectively non-existent for this field.\ -
+
**1.3.3.1 Templates** @@ -92,13 +97,13 @@ Formula is the most flexible and most powerful rule template. Formulas must be configured such that their evaluation results in a true or false values (or numerical 0/1). Formulas support mathematical operations from [https://mathjs.org/](https://mathjs.org/) and Microsoft Excel function as supported by [https://formulajs.info/functions/](https://formulajs.info/functions/). Formulas can feature any or all fields which have been selected in the previous steps. -
+
* **Range** Ranges are simplified rules which verify that the value of the target field falls between the two borderline values specified. -![](../../../../.gitbook/assets/13.png) +![](<../../../../.gitbook/assets/13 (1).png>) * **Condition** @@ -110,7 +115,7 @@ This template allows for configuration of logical flows which can evaluate condi _Note: in cases where more than one ‘if’ condition would resolve to true only the first ‘then’ gets applied_ -
+
The conditions are specified as formulas, which are subject for the principles and conventions specified above. @@ -120,28 +125,28 @@ Formulas support notations for the following typical operations: * **Range –** simplified notation to check if the value is in the specified range * **Enum –** if the field of a type ‘enum’ this option allows the selection of a single or multiple values from the enum for matching. If any of these values match the formula is considered to have been resolved to ‘true’. -
+
**1.3.3.3 Preview** Preview option helps users to test the behaviour of the formulas during their configuration. -![](../../../../.gitbook/assets/16.png) +![](<../../../../.gitbook/assets/16 (1).png>) \ Users are required to manually populate the values for the ‘input’ fields so to trigger the evaluation of the formulas. -![](../../../../.gitbook/assets/17.png) +![](<../../../../.gitbook/assets/17 (1).png>) If the formula contains an error, or the system is unable to calculate the resulting value the result field would be highlighted in red. -![](../../../../.gitbook/assets/18.png) +![](<../../../../.gitbook/assets/18 (1).png>) If the evaluation was successful the result field would be highlighted in amber (if the value ‘failed’ the evaluation) or in green (if it was a ‘success’). -![](../../../../.gitbook/assets/19.png) +![](<../../../../.gitbook/assets/19 (1).png>) -![](../../../../.gitbook/assets/20.png) +![](<../../../../.gitbook/assets/20 (1).png>) Once all editing is done the template must be saved. @@ -174,79 +179,6 @@ Schema rules can be exported to and imported from files. When importing the rules they effectively become the rules of the importing Guardian instance with no dependency or relations to the instances that originally produced and exported the rules. -1. **API** - -Post _/api/v1/schema-rules/_ - -Permissions: SCHEMAS\_RULE\_CREATE - -Creation of the new schema rule - -Get _/api/v1/schema-rules/_ - -Permissions: SCHEMAS\_RULE\_READ - -Retrieve the schema rules. - -Get _/api/v1/schema-rules/:ruleId_ - -Permissions: SCHEMAS\_RULE\_READ - -Retrieve the configuration of the rule by its ID - -Put _/api/v1/schema-rules/:ruleId_ - -Permissions: SCHEMAS\_RULE\_CREATE - -Update the configuration of the rule with the corresponding ID - -Delete _/api/v1/schema-rules/:ruleId_ - -Permissions: SCHEMAS\_RULE\_CREATE - -Delete the rule by its ID - -Put _/api/v1/schema-rules/:ruleId/activate_ - -Permissions: SCHEMAS\_RULE\_CREATE - -Activate the rule with the specified ID - -\ -Put _/api/v1/schema-rules/:ruleId/inactivate_ - -Permissions: SCHEMAS\_RULE\_CREATE - -Deactivate the rule with the specified ID\ - - -Get _/api/v1/schema-rules/:ruleId/relationships_ - -Permissions: SCHEMAS\_RULE\_READ - -List all the schemas and policy relevant to the rule with the specified ID - -Post _/api/v1/schema-rules/data_ - -Permissions: SCHEMAS\_RULE\_EXECUTE - -Retrieve all the data needed for evaluating the rules - -Post _/api/v1/schema-rules/:policyId/import/file_ - -Permissions: SCHEMAS\_RULE\_CREATE - -Create a new rule from the file - -\ -Post _/api/v1/schema-rules/import/file/preview_ - -Permissions: SCHEMAS\_RULE\_CREATE - -Load the file and return its preview - -Get _/api/v1/policy-statistics/:ruleId/export/file_ - -Permissions: SCHEMAS\_RULE\_READ +## 2. Demo Video -Export the selected rule (by ID) into the file +[Youtube](https://youtu.be/RQYxEh_cmSU?si=MJUlII3Tl4KTXfd0\&t=91) diff --git a/docs/guardian/users/bottom-up-data-traceability/bottom-up-data-traceability-using-ui.md b/docs/guardian/users/bottom-up-data-traceability/bottom-up-data-traceability-using-ui.md index 776eaf67cf..db3d83225e 100644 --- a/docs/guardian/users/bottom-up-data-traceability/bottom-up-data-traceability-using-ui.md +++ b/docs/guardian/users/bottom-up-data-traceability/bottom-up-data-traceability-using-ui.md @@ -4,6 +4,11 @@ icon: chart-line-up # Bottom Up Data Traceability using UI +1. [Step By Step Process](bottom-up-data-traceability-using-ui.md#id-1.-step-by-step-process) +2. [Demo Video](bottom-up-data-traceability-using-ui.md#id-2.-demo-video) + +## 1. Step By Step Process + ## Statistics Terminology * Statistics **Definition** – a template which specifies schema/document fields, rules and formulas for creation of the Statistics. @@ -143,7 +148,7 @@ To enable the use of **Definitions** for creating **Assessments** of real data, #### **3.1 Creation** -Published **Definitions** can be used for creating an **Assessment** by pressing the **Create** button for the corresponding Statistics **Definition** which launches the **Assessment** wizard**.** +Published **Definitions** can be used for creating an **Assessment** by pressing the **Create** button for the corresponding Statistics **Definition** which launches the **Assessment** wizard**.** ![](<../../../.gitbook/assets/16 (13).png>) @@ -240,3 +245,7 @@ Example Hedera message on the publication of a new Statistics **Assessment** "uri": "ipfs://bafkreigrylqfyzqifhloklsftmcw7obtqidx64vhti4hfmbnpbrnathuty" } ``` + +## 2. Demo Video + +[Youtube](https://youtu.be/tYLsr4rxw58?si=XNRvpap7aosnwuhh\&t=107) diff --git a/docs/guardian/users/mobile-support-for-data-interface/mobile-operation-for-the-user.md b/docs/guardian/users/mobile-support-for-data-interface/mobile-operation-for-the-user.md index 11f27246ce..7b40526b52 100644 --- a/docs/guardian/users/mobile-support-for-data-interface/mobile-operation-for-the-user.md +++ b/docs/guardian/users/mobile-support-for-data-interface/mobile-operation-for-the-user.md @@ -39,7 +39,7 @@ The images below are the registration forms which have been redesigned The "Create Retire Request" form was also adapted, as can be seen below. -![](<../../../.gitbook/assets/10 (1) (1) (1) (1) (1).png>) +![](<../../../.gitbook/assets/10 (1) (1) (1) (1) (1) (1).png>) ### User Create / Join Multi Policy diff --git a/frontend/package-lock.json b/frontend/package-lock.json index bc705165de..8c514c9d04 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "guardian", - "version": "2.27.1", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "guardian", - "version": "2.27.1", + "version": "3.0.0", "license": "Apache-2.0", "dependencies": { "@angular-material-components/datetime-picker": "^16.0.0", @@ -72,7 +72,8 @@ } }, "../interfaces": { - "version": "2.27.1", + "name": "@guardian/interfaces", + "version": "3.0.0", "license": "Apache-2.0", "dependencies": { "gulp": "^4.0.2", diff --git a/frontend/src/app/modules/analytics/compare-document/compare-document.component.ts b/frontend/src/app/modules/analytics/compare-document/compare-document.component.ts index 4882242472..dd29005d74 100644 --- a/frontend/src/app/modules/analytics/compare-document/compare-document.component.ts +++ b/frontend/src/app/modules/analytics/compare-document/compare-document.component.ts @@ -137,9 +137,10 @@ export class CompareDocumentComponent implements OnInit { if (!this.customColumnSize) { const k = (this.customColumnSize) ? this.customColumnSize : Math.round(100 / this.size); - this._gridStyle = `max(calc(${k}vw - 80px), 680px)`; + const m = Math.round(280 / this.size); + this._gridStyle = `max(calc(${k}vw - 120px - ${m}px), 695px)`; for (let i = 1; i < this.size; i++) { - this._gridStyle += ` 35px max(calc(${k}vw - 45px), 720px)`; + this._gridStyle += ` 35px max(calc(${k}vw - 90px - ${m}px), 725px)`; } } diff --git a/frontend/src/app/modules/common/common-components.module.ts b/frontend/src/app/modules/common/common-components.module.ts index fa3a7b2709..211545ec84 100644 --- a/frontend/src/app/modules/common/common-components.module.ts +++ b/frontend/src/app/modules/common/common-components.module.ts @@ -39,6 +39,7 @@ import { GuardianSwitchButton } from './guardian-switch-button/guardian-switch-b import { ImportEntityDialog } from './import-entity-dialog/import-entity-dialog.component'; import { DialogService, DynamicDialogModule } from 'primeng/dynamicdialog'; import { TabViewModule } from 'primeng/tabview'; +import { TransactionDialogComponent } from './transaction-dialog/transaction-dialog'; @NgModule({ declarations: [ @@ -66,7 +67,8 @@ import { TabViewModule } from 'primeng/tabview'; CustomCustomDialogComponent, TreeGraphComponent, GuardianSwitchButton, - ImportEntityDialog + ImportEntityDialog, + TransactionDialogComponent ], imports: [ CommonModule, diff --git a/frontend/src/app/modules/common/transaction-dialog/transaction-dialog.html b/frontend/src/app/modules/common/transaction-dialog/transaction-dialog.html new file mode 100644 index 0000000000..b2b5fe8d1d --- /dev/null +++ b/frontend/src/app/modules/common/transaction-dialog/transaction-dialog.html @@ -0,0 +1,36 @@ +
+
+
{{ title }}
+
+
+ +
+
+
+
+
+
+
+
{{ transaction.type }}
+ + {{ transaction.transactionId }} + + + {{ transaction.transactionId }} + +
+
+
+
+
+ diff --git a/frontend/src/app/modules/common/transaction-dialog/transaction-dialog.scss b/frontend/src/app/modules/common/transaction-dialog/transaction-dialog.scss new file mode 100644 index 0000000000..bc3c1b71c4 --- /dev/null +++ b/frontend/src/app/modules/common/transaction-dialog/transaction-dialog.scss @@ -0,0 +1,84 @@ +.context { + position: relative; + overflow-y: auto; + padding: 0px 0px 20px 0px; + display: flex; + flex-direction: column; + height: 100%; + font-family: Inter, serif; + font-style: normal; + + .view-dialog-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + height: 60px; + overflow: hidden; + + .toggle-container { + display: flex; + column-gap: 10px; + justify-content: flex-start; + align-items: center; + grid-column: 2; + margin-bottom: 30px; + } + } + + .view-dialog-content { + max-height: calc(90vh - 280px); + overflow-y: auto; + padding-right: 8px; + + .json { + word-break: keep-all; + white-space: pre; + font-family: monospace; + cursor: text; + height: 100%; + width: 100%; + overflow: auto; + border: 1px solid #eee; + border-radius: 4px; + padding: 10px; + max-height: calc(90vh - 280px); + box-sizing: border-box; + } + } +} + +.action-buttons { + display: flex; + justify-content: flex-end; + user-select: none; + + & > div { + margin-left: 15px; + margin-right: 0px; + } +} + +.close-icon-color { + fill: #848FA9; + color: #848FA9; +} + +.transaction-container { + +} + +.transaction-item { + margin-bottom: 10px; + display: flex; + justify-content: space-between; +} + +@media (max-width: 810px) { + .view-dialog-content { + max-height: calc(100vh - 255px); + + .json { + max-height: calc(100vh - 265px); + } + } +} diff --git a/frontend/src/app/modules/common/transaction-dialog/transaction-dialog.ts b/frontend/src/app/modules/common/transaction-dialog/transaction-dialog.ts new file mode 100644 index 0000000000..de4d781edb --- /dev/null +++ b/frontend/src/app/modules/common/transaction-dialog/transaction-dialog.ts @@ -0,0 +1,46 @@ +import { Component } from '@angular/core'; +import { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog'; +import { UserPermissions } from '@guardian/interfaces'; +import { SchemaService } from '../../../services/schema.service'; +import { ProfileService } from 'src/app/services/profile.service'; + +/** + * Dialog for display json + */ +@Component({ + selector: 'transactions-dialog', + templateUrl: './transaction-dialog.html', + styleUrls: ['./transaction-dialog.scss'] +}) +export class TransactionDialogComponent{ + public title: string = ''; + public transactions: any[] + public user: UserPermissions = new UserPermissions(); + + constructor( + public dialogRef: DynamicDialogRef, + public dialogConfig: DynamicDialogConfig, + private schemaService: SchemaService, + private profileService: ProfileService, + ) { + } + + ngOnInit() { + const { + title, + transactions + } = this.dialogConfig.data; + + this.title = title; + this.transactions = transactions; + } + + formattedTransaction(transactionId: string) { + console.log(this.transactions); + return transactionId.replace(/^(\d\.\d\.\d+)@(\d+)\.(\d+)$/, '$1-$2-$3'); + } + + public onClose(): void { + this.dialogRef.close(null); + } +} diff --git a/frontend/src/app/modules/policy-engine/helpers/select-block/select-block.component.ts b/frontend/src/app/modules/policy-engine/helpers/select-block/select-block.component.ts index 3e3aee9354..e1f75c12fa 100644 --- a/frontend/src/app/modules/policy-engine/helpers/select-block/select-block.component.ts +++ b/frontend/src/app/modules/policy-engine/helpers/select-block/select-block.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Inject, Input, Output, SimpleChanges } from '@angular/core'; +import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, SimpleChanges } from '@angular/core'; import { RegisteredService } from '../../services/registered.service'; import { PolicyBlock, PolicyFolder } from '../../structures'; @@ -9,6 +9,7 @@ type ValueType = string | PolicyBlock | null | undefined; */ @Component({ selector: 'select-block', + changeDetection: ChangeDetectionStrategy.OnPush, templateUrl: './select-block.component.html', styleUrls: ['./select-block.component.scss'] }) diff --git a/frontend/src/app/modules/policy-engine/helpers/select-schema/select-schema.component.ts b/frontend/src/app/modules/policy-engine/helpers/select-schema/select-schema.component.ts index 60e977bab8..1f60fede21 100644 --- a/frontend/src/app/modules/policy-engine/helpers/select-schema/select-schema.component.ts +++ b/frontend/src/app/modules/policy-engine/helpers/select-schema/select-schema.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core'; +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core'; import { PolicyBlock, SchemaVariables } from '../../structures'; /** @@ -6,6 +6,7 @@ import { PolicyBlock, SchemaVariables } from '../../structures'; */ @Component({ selector: 'select-schema', + changeDetection: ChangeDetectionStrategy.OnPush, templateUrl: './select-schema.component.html', styleUrls: ['./select-schema.component.scss'] }) diff --git a/frontend/src/app/modules/policy-engine/policies/policies.component.ts b/frontend/src/app/modules/policy-engine/policies/policies.component.ts index 28e2ef3c2a..530b449847 100644 --- a/frontend/src/app/modules/policy-engine/policies/policies.component.ts +++ b/frontend/src/app/modules/policy-engine/policies/policies.component.ts @@ -32,6 +32,7 @@ import { NewImportFileDialog } from '../dialogs/new-import-file-dialog/new-impor import { PublishPolicyDialog } from '../dialogs/publish-policy-dialog/publish-policy-dialog.component'; import { WebSocketService } from 'src/app/services/web-socket.service'; import { IImportEntityResult, ImportEntityDialog, ImportEntityType } from '../../common/import-entity-dialog/import-entity-dialog.component'; +import { TransactionDialogComponent } from '../../common/transaction-dialog/transaction-dialog'; class MenuButton { public readonly visible: boolean; @@ -415,6 +416,19 @@ export class PoliciesComponent implements OnInit { click: () => this.comparePolicy(policy) }) ] + }, { + tooltip: 'Transactions', + group: false, + visible: true, + buttons: [ + new MenuButton({ + visible: true, + disabled: false, + tooltip: 'Show transactions', + icon: 'search', + click: () => this.onShowTransactions(policy) + }) + ] }, { tooltip: 'Test', group: false, @@ -1443,4 +1457,19 @@ export class PoliciesComponent implements OnInit { test.progress = event.progress; test.status = event.status; } + + public onShowTransactions(element: any): void { + this.policyEngineService.getPolicyTransactions(element.id).subscribe((res) => { + const dialogRef = this.dialogService.open(TransactionDialogComponent, { + showHeader: false, + width: '1000px', + styleClass: 'guardian-dialog', + data: { + transactions: res + } + }); + dialogRef.onClose.subscribe(async (result) => { + }); + }); + } } diff --git a/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/filters-addon-config/filters-addon-config.component.html b/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/filters-addon-config/filters-addon-config.component.html index dab94aaf8b..e3bb8e9afe 100644 --- a/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/filters-addon-config/filters-addon-config.component.html +++ b/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/filters-addon-config/filters-addon-config.component.html @@ -6,6 +6,25 @@ Dropdown + Datepicker + Input + + + + + + Query Type + + + Equal + Not Equal + In + Not In + Greater Than + Greater Than or Equal + Less Than + Less Than or Equal + User Defined diff --git a/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/filters-addon-config/filters-addon-config.component.ts b/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/filters-addon-config/filters-addon-config.component.ts index 7e9be8db30..1c31af88eb 100644 --- a/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/filters-addon-config/filters-addon-config.component.ts +++ b/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/filters-addon-config/filters-addon-config.component.ts @@ -49,7 +49,7 @@ export class FiltersAddonConfigComponent implements OnInit { this.properties = block.properties; this.properties.uiMetaData = this.properties.uiMetaData || {}; this.properties.uiMetaData.options = this.properties.uiMetaData.options || []; - this.properties.type = 'dropdown'; + this.properties.type = this.properties.type || 'dropdown'; } onHide(item: any, prop: any) { diff --git a/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/source-addon-config/source-addon-config.component.html b/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/source-addon-config/source-addon-config.component.html index 8560b9937d..f1826eff0a 100644 --- a/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/source-addon-config/source-addon-config.component.html +++ b/frontend/src/app/modules/policy-engine/policy-configuration/blocks/documents/source-addon-config/source-addon-config.component.html @@ -113,6 +113,13 @@ Not Equal In Not In + + Greater Than + Greater Than or Equal + Less Than + Less Than or Equal + + User Defined diff --git a/frontend/src/app/modules/policy-engine/policy-configuration/policy-configuration/policy-configuration.component.html b/frontend/src/app/modules/policy-engine/policy-configuration/policy-configuration/policy-configuration.component.html index 015cb32279..40dcb6cca5 100644 --- a/frontend/src/app/modules/policy-engine/policy-configuration/policy-configuration/policy-configuration.component.html +++ b/frontend/src/app/modules/policy-engine/policy-configuration/policy-configuration/policy-configuration.component.html @@ -77,13 +77,17 @@
{{errorsCount}}
-
- double_arrow - Go -
+ +
+ double_arrow + Go +
-
+
+
diff --git a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/documents-source-block/documents-source-block.component.scss b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/documents-source-block/documents-source-block.component.scss index 2d3d1f905e..f8138ae179 100644 --- a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/documents-source-block/documents-source-block.component.scss +++ b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/documents-source-block/documents-source-block.component.scss @@ -25,6 +25,13 @@ height: 80%; } +.grid-filters { + display: flex; + gap: 16px; + background-color: #f9fafc; + flex-wrap: wrap; +} + .table-container { overflow: scroll; diff --git a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.html b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.html index f4a484c548..03abbeef3e 100644 --- a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.html +++ b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.html @@ -2,14 +2,70 @@ --> -
+
- {{content}}: + {{content}}
-
- - {{item.name}} - +
+
+ + + Type + {{ selectedOption.name }} + Not selected + + +
+
+ Equal + Equal + Not Equal + In + Not In + Greater Than + Greater Than or Equal + Less Than + Less Than or Equal +
+ +
+ + + {{ selectedOption.name }} + Not selected + + +
+
+ + +
+
+ +
diff --git a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.scss b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.scss index 9fb8bf6ede..763708f1d8 100644 --- a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.scss +++ b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.scss @@ -24,11 +24,8 @@ } .content { - box-shadow: 0px 3px 6px #00000020; - background: #e5e5e5; + background: #f9fafc; display: inline-block; - margin: 7px; - padding: 10px 10px 6px 10px; } .content-name { @@ -37,6 +34,100 @@ } .content-select { + min-width: 265px; + display: flex; + flex-direction: column; + align-self: flex-end; + flex: 1; + height: 38px; +} + +.grouped-content { + display: flex; + align-items: flex-start; +} + +.type-select { + min-width: 265px; + display: flex; + flex-direction: column; + align-self: flex-end; + flex: 1; + height: 38px; +} + +p-dropdown, +p-calendar { + height: 40px; +} + +.common-prefix-dropdown { + background-color: white; + display: block; + height: 38px; + border: 1px solid #ced4da; + padding: 9px 6px 9px 12px; + color: #848FA9; + font-size: 14px; + box-sizing: border-box; + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; + border-right: 0; + white-space: nowrap; +} + +.prefix-dropdown { + font-size: 14px; + color: #848FA9; display: inline-block; - width: 190px; + margin-right: 5px; +} + +::ng-deep .p-dropdown-label { + font-size: 14px; + color: #23252E; +} + +::ng-deep .p-component { + border-radius: 8px; + outline: none; + box-shadow: none; +} + +::ng-deep .filter-dropdown .p-dropdown { + border-radius: 0 8px 8px 0; + border-left: 0; +} + +::ng-deep .calendar-filter .p-inputtext { + padding: 8px 8px 11px 16px; + border-radius: 0 8px 8px 0; + border-left: 0; + height: 37px; +} + +::ng-deep .calendar-filter .p-datepicker-trigger { + position: absolute; + top: 50%; + right: 8px; + transform: translateY(-50%); + pointer-events: none; + background-color: white; + color: gray; + border: none; + padding: 0; +} + +.input-filter { + background-color: white; + display: block; + height: 38px; + border: 1px solid #ced4da; + padding: 9px 6px 9px 12px; + font-size: 14px; + box-sizing: border-box; + border-top-right-radius: 8px; + border-bottom-right-radius: 8px; + border-left: 0; + outline: none; } \ No newline at end of file diff --git a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.ts b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.ts index 1004912b67..8ad347cb0f 100644 --- a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.ts +++ b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/filters-addon-block/filters-addon-block.component.ts @@ -3,6 +3,7 @@ import { PolicyEngineService } from 'src/app/services/policy-engine.service'; import { PolicyHelper } from 'src/app/services/policy-helper.service'; import { WebSocketService } from 'src/app/services/web-socket.service'; import { HttpErrorResponse } from '@angular/common/http'; +import moment from 'moment'; /** * Component for display block of 'requestVcDocument' type. @@ -27,6 +28,19 @@ export class FiltersAddonBlockComponent implements OnInit { target: any; filters: any; currentValue: any; + currentType: string = 'eq'; + queryType: string = 'equal'; + + userDefinedOptions = [ + { name: 'Equal', value: 'eq' }, + { name: 'Not Equal', value: 'ne' }, + { name: 'In', value: 'in' }, + { name: 'Not In', value: 'nin' }, + { name: 'Greater Than', value: 'gt' }, + { name: 'Greater Than or Equal', value: 'gte' }, + { name: 'Less Than', value: 'lt' }, + { name: 'Less Than or Equal', value: 'lte' } + ]; constructor( private policyEngineService: PolicyEngineService, @@ -84,6 +98,39 @@ export class FiltersAddonBlockComponent implements OnInit { } } + private parseFilterValue(value: string): [string, string] { + if (typeof value === 'string') { + if (value.startsWith('eq:')) { + return ['eq', value.substring('eq'.length + 1)]; + } + if (value.startsWith('ne:')) { + return ['ne', value.substring('ne'.length + 1)]; + } + if (value.startsWith('in:')) { + return ['in', value.substring('in'.length + 1)]; + } + if (value.startsWith('nin:')) { + return ['nin', value.substring('nin'.length + 1)]; + } + if (value.startsWith('gt:')) { + return ['gt', value.substring('gt'.length + 1)]; + } + if (value.startsWith('gte:')) { + return ['gte', value.substring('gte'.length + 1)]; + } + if (value.startsWith('lt:')) { + return ['lt', value.substring('lt'.length + 1)]; + } + if (value.startsWith('lte:')) { + return ['lte', value.substring('lte'.length + 1)]; + } + if (value.startsWith('regex:')) { + return ['eq', value.substring('regex'.length + 1)]; + } + } + return ['eq', value]; + } + setData(data: any) { this.currentValue = null; if (data) { @@ -92,7 +139,15 @@ export class FiltersAddonBlockComponent implements OnInit { this.target = data.targetBlock; this.content = data.uiMetaData.content; this.filters = data.filters; - this.currentValue = data.filterValue; + this.queryType = data.queryType; + if (this.queryType === 'user_defined') { + const [type, value] = this.parseFilterValue(data.filterValue); + this.currentType = type; + this.currentValue = value; + } else { + this.currentType = this.queryType || 'eq'; + this.currentValue = data.filterValue; + } if (this.type == 'unelected') { } @@ -102,14 +157,17 @@ export class FiltersAddonBlockComponent implements OnInit { this.options = []; if (data.canBeEmpty) { this.options.push({ - name: "", + name: "Not selected", value: null, }); } if (options) { for (let i = 0; i < options.length; i++) { const item = options[i]; - this.options.push(item); + this.options.push({ + name: item.name, + value: String(item.value) + }) } } } @@ -118,10 +176,22 @@ export class FiltersAddonBlockComponent implements OnInit { } } - onFilters() { + onFilters(event: any) { + if(this.type === 'datepicker'){ + this.currentValue = moment(this.currentValue).format('YYYY-MM-DD'); + } + this.loading = true; + const options: any = { filterValue: null }; + if(this.currentValue) { + if (this.queryType === 'user_defined') { + options.filterValue = this.currentType + ':' + this.currentValue; + } else { + options.filterValue = this.currentValue; + } + } this.policyEngineService - .setBlockData(this.id, this.policyId, { filterValue: this.currentValue }) + .setBlockData(this.id, this.policyId, options) .subscribe(() => { this.loading = false; }, (e) => { @@ -129,4 +199,4 @@ export class FiltersAddonBlockComponent implements OnInit { this.loading = false; }); } -} +} \ No newline at end of file diff --git a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/report-block/report-block.component.scss b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/report-block/report-block.component.scss index 878deb4f49..88314b007c 100644 --- a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/report-block/report-block.component.scss +++ b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/report-block/report-block.component.scss @@ -517,7 +517,7 @@ a.open-vp { .active-multiple-document { transform: translate(0, 0); - z-index: 3; + z-index: 3 !important; border: 2px solid gray; } @@ -525,7 +525,7 @@ a.open-vp { position: absolute; left: 0; bottom: 0; - z-index: 2; + z-index: 2 !important; transform: translate(-7px, -7px); border: 2px solid #9d9d9d; } @@ -534,17 +534,17 @@ a.open-vp { position: absolute; left: 0; bottom: 0; - z-index: 1; + z-index: 1 !important; transform: translate(-14px, -14px); border: 2px solid #bfbfbf; } .single-multiple-document { - z-index: 1; + z-index: 1 !important; } .hide-multiple-document { - display: none; + display: none !important; } .multiple-documents-count { diff --git a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/request-document-block/request-document-block.component.html b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/request-document-block/request-document-block.component.html index 8fdcc2b813..f7994046d5 100644 --- a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/request-document-block/request-document-block.component.html +++ b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/request-document-block/request-document-block.component.html @@ -70,6 +70,7 @@

{{ title }}

submitText="Create" [rules]="rulesResults" [paginationHidden]="false" + (buttons)="onChangeButtons($event)" >
diff --git a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/request-document-block/request-document-block.component.ts b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/request-document-block/request-document-block.component.ts index 43884aefef..c06f2c1427 100644 --- a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/request-document-block/request-document-block.component.ts +++ b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/request-document-block/request-document-block.component.ts @@ -301,4 +301,16 @@ export class RequestDocumentBlockComponent public onCancelPage(value: boolean) { this.router.navigate(['/policy-viewer']); } + + public onChangeButtons($event: any) { + if (Array.isArray($event)) { + for (const item of $event) { + if (item.id === 'submit') { + item.disabled = () => { + return !this.dataForm.valid || this.loading; + } + } + } + } + } } diff --git a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/step-block/step-block.component.scss b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/step-block/step-block.component.scss index 5a98c32c16..3f078b9b2e 100644 --- a/frontend/src/app/modules/policy-engine/policy-viewer/blocks/step-block/step-block.component.scss +++ b/frontend/src/app/modules/policy-engine/policy-viewer/blocks/step-block/step-block.component.scss @@ -6,6 +6,7 @@ top: 0; display: block; background: #fff; + width: fit-content; } .loading { diff --git a/frontend/src/app/modules/policy-engine/policy-viewer/policy-viewer/policy-viewer.component.html b/frontend/src/app/modules/policy-engine/policy-viewer/policy-viewer/policy-viewer.component.html index 848194e6e4..a47c5ea779 100644 --- a/frontend/src/app/modules/policy-engine/policy-viewer/policy-viewer/policy-viewer.component.html +++ b/frontend/src/app/modules/policy-engine/policy-viewer/policy-viewer/policy-viewer.component.html @@ -50,25 +50,27 @@
-
- radio_button_checked - Record -
+ +
+ radio_button_checked + Record +
-
- play_arrow - Run -
+
+ play_arrow + Run +
-
+
+
{ + this.permissions = new UserPermissions(profile); this.isConfirmed = !!(profile && profile.confirmed); this.role = profile ? profile.role : null; if (this.isConfirmed) { @@ -316,7 +318,7 @@ export class PolicyViewerComponent implements OnInit, OnDestroy { type: 'JSON', } }); - dialogRef.onClose.subscribe(async (result) => {}); + dialogRef.onClose.subscribe(async (result) => { }); } public onPage(event: any): void { diff --git a/frontend/src/app/modules/policy-statistics/statistic-assessments/statistic-assessments.component.ts b/frontend/src/app/modules/policy-statistics/statistic-assessments/statistic-assessments.component.ts index 197677cbf2..4977a084d9 100644 --- a/frontend/src/app/modules/policy-statistics/statistic-assessments/statistic-assessments.component.ts +++ b/frontend/src/app/modules/policy-statistics/statistic-assessments/statistic-assessments.component.ts @@ -71,13 +71,13 @@ export class StatisticAssessmentsComponent implements OnInit { id: 'target', title: 'Target', type: 'text', - size: '200', + size: '220', tooltip: false }, { id: 'messageId', title: 'Message ID', type: 'text', - size: '200', + size: '220', tooltip: false }, { id: 'options', diff --git a/frontend/src/app/modules/policy-statistics/statistic-definition-configuration/statistic-definition-configuration.component.ts b/frontend/src/app/modules/policy-statistics/statistic-definition-configuration/statistic-definition-configuration.component.ts index d56b40976f..18a4d302bc 100644 --- a/frontend/src/app/modules/policy-statistics/statistic-definition-configuration/statistic-definition-configuration.component.ts +++ b/frontend/src/app/modules/policy-statistics/statistic-definition-configuration/statistic-definition-configuration.component.ts @@ -576,13 +576,16 @@ export class StatisticDefinitionConfigurationComponent implements OnInit { }); } - public getRelationshipsName(id: string) { - const variable = this.variables.get(id); - if (variable) { - return `${variable.id} - ${variable.fieldDescription}`; - } else { - return id; + public getRelationshipsName(item: any) { + if (item) { + const variable = this.variables.get(item.id); + if (variable) { + return `${variable.id} - ${variable.fieldDescription}`; + } else { + return item.id; + } } + return item; } public onSave() { diff --git a/frontend/src/app/modules/schema-engine/field-control.ts b/frontend/src/app/modules/schema-engine/field-control.ts index 26fcd8ec3d..72ca042b0e 100644 --- a/frontend/src/app/modules/schema-engine/field-control.ts +++ b/frontend/src/app/modules/schema-engine/field-control.ts @@ -44,7 +44,6 @@ export class FieldControl { entityType?: UntypedFormControl, name?: string ) { - console.log(field); this._defaultFieldMap = defaultFieldMap; this._entityType = entityType; this.name = `field${Date.now()}${Math.floor(Math.random() * 1000000)}`; diff --git a/frontend/src/app/modules/schema-engine/schema-configuration/schema-configuration.component.ts b/frontend/src/app/modules/schema-engine/schema-configuration/schema-configuration.component.ts index f010f7d60d..b7daac89cf 100644 --- a/frontend/src/app/modules/schema-engine/schema-configuration/schema-configuration.component.ts +++ b/frontend/src/app/modules/schema-engine/schema-configuration/schema-configuration.component.ts @@ -718,7 +718,6 @@ export class SchemaConfigurationComponent implements OnInit { } public buildSchemaField(fieldConfig: FieldControl, data: any): SchemaField { - console.log(data, fieldConfig); const { key, title, @@ -877,7 +876,6 @@ export class SchemaConfigurationComponent implements OnInit { schema.update(fields, conditions); schema.updateRefs(this.subSchemas); - console.log(schema); return schema; } diff --git a/frontend/src/app/modules/schema-engine/schema-engine.module.ts b/frontend/src/app/modules/schema-engine/schema-engine.module.ts index 6b4dbd9985..7bcee301e8 100644 --- a/frontend/src/app/modules/schema-engine/schema-engine.module.ts +++ b/frontend/src/app/modules/schema-engine/schema-engine.module.ts @@ -42,6 +42,9 @@ import { SentinelHubTypeComponent } from './sentinel-hub-type/sentinel-hub-type. import { TooltipModule } from 'primeng/tooltip'; import { SelectButtonModule } from 'primeng/selectbutton'; import { AccordionModule } from 'primeng/accordion'; +import { DateTimeComponent } from './schema-form/controls/date-time/date-time.component'; +import { EnumComponent } from './schema-form/controls/enum/enum'; +import { InputComponent } from './schema-form/controls/input/input'; @NgModule({ declarations: [ @@ -64,7 +67,10 @@ import { AccordionModule } from 'primeng/accordion'; DeleteSchemaDialogComponent, ServiceUnavailableDialog, SchemaTreeComponent, - SchemaFormDialog + SchemaFormDialog, + DateTimeComponent, + EnumComponent, + InputComponent ], imports: [ CommonModule, diff --git a/frontend/src/app/modules/schema-engine/schema-form-view/schema-form-view.component.html b/frontend/src/app/modules/schema-engine/schema-form-view/schema-form-view.component.html index 755dab480e..ea66b5e14f 100644 --- a/frontend/src/app/modules/schema-engine/schema-form-view/schema-form-view.component.html +++ b/frontend/src/app/modules/schema-engine/schema-form-view/schema-form-view.component.html @@ -15,7 +15,7 @@
{{item.unit}}
-
-
@@ -66,19 +66,19 @@
{{item.unit}}
-
- -
@@ -92,8 +92,8 @@ The field type does not match the field type in the schema
-
@@ -103,7 +103,7 @@
{{item.unit}}
-
-
@@ -171,17 +171,22 @@
- - + + @@ -198,12 +203,17 @@ - + + diff --git a/frontend/src/app/modules/schema-engine/schema-form/controls/controls.module.ts b/frontend/src/app/modules/schema-engine/schema-form/controls/controls.module.ts new file mode 100644 index 0000000000..598750e4bc --- /dev/null +++ b/frontend/src/app/modules/schema-engine/schema-form/controls/controls.module.ts @@ -0,0 +1,50 @@ +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { DateTimeComponent } from './date-time/date-time.component'; +import { EnumComponent } from './enum/enum'; +import { InputComponent } from './input/input'; +import { InputTextModule } from 'primeng/inputtext'; +import { CalendarModule } from 'primeng/calendar'; +import { InputTextareaModule } from 'primeng/inputtextarea'; +import { InputNumberModule } from 'primeng/inputnumber'; +import { CheckboxModule } from 'primeng/checkbox'; +import { DropdownModule } from 'primeng/dropdown'; +import { NgxMatDatetimePickerModule, NgxMatNativeDateModule, NgxMatTimepickerModule, } from '@angular-material-components/datetime-picker'; +import { MaterialModule } from '../../../common/material.module'; +import { CommonComponentsModule } from '../../../common/common-components.module'; +import { ArtifactEngineModule } from '../../../artifact-engine/artifact-engine.module'; +import { CodemirrorModule } from '@ctrl/ngx-codemirror'; +import { GoogleMapsModule } from '@angular/google-maps'; + +NgModule({ + declarations: [ + DateTimeComponent, + EnumComponent, + InputComponent + ], + exports: [ + DateTimeComponent, + EnumComponent, + InputComponent + ], + imports: [ + CommonComponentsModule, + CodemirrorModule, + ArtifactEngineModule, + GoogleMapsModule, + MaterialModule, + NgxMatDatetimePickerModule, + NgxMatNativeDateModule, + NgxMatTimepickerModule, + InputTextModule, + FormsModule, + CalendarModule, + InputTextareaModule, + CheckboxModule, + DropdownModule, + InputNumberModule + ] +}) + +export class ControlsModule{ +} diff --git a/frontend/src/app/modules/schema-engine/schema-form/controls/date-time/date-time.component.html b/frontend/src/app/modules/schema-engine/schema-form/controls/date-time/date-time.component.html new file mode 100644 index 0000000000..b90b10294e --- /dev/null +++ b/frontend/src/app/modules/schema-engine/schema-form/controls/date-time/date-time.component.html @@ -0,0 +1,9 @@ + diff --git a/frontend/src/app/modules/schema-engine/schema-form/controls/date-time/date-time.component.scss b/frontend/src/app/modules/schema-engine/schema-form/controls/date-time/date-time.component.scss new file mode 100644 index 0000000000..196da3acc0 --- /dev/null +++ b/frontend/src/app/modules/schema-engine/schema-form/controls/date-time/date-time.component.scss @@ -0,0 +1,20 @@ +.type-selector { + width: 100%; +} + +.google-map-container { + margin-bottom: 20px; + margin-top: 5px; + box-shadow: 0px 0px 21px 0px rgba(34, 60, 80, 0.2); + border-radius: 5px; +} + +:host .google-map-container ::ng-deep .map-container { + border-radius: 5px; +} + +.switch-btn { + width: 180px; + height: 32px; + margin-bottom: 15px; +} diff --git a/frontend/src/app/modules/schema-engine/schema-form/controls/date-time/date-time.component.ts b/frontend/src/app/modules/schema-engine/schema-form/controls/date-time/date-time.component.ts new file mode 100644 index 0000000000..df746c38ea --- /dev/null +++ b/frontend/src/app/modules/schema-engine/schema-form/controls/date-time/date-time.component.ts @@ -0,0 +1,102 @@ +import { AfterViewInit, Component, Input, NgZone, OnChanges, OnDestroy, OnInit, ViewChild } from '@angular/core'; +import { UntypedFormControl } from '@angular/forms'; +import * as moment from 'moment'; +import { Subject, Subscription } from 'rxjs'; + +type InputType = 'default' | 'test' | 'suggest'; + +@Component({ + selector: 'date-time-control', + templateUrl: './date-time.component.html', + styleUrls: ['./date-time.component.scss'], +}) +export class DateTimeComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy{ + @Input('control') control: UntypedFormControl; + @Input('showIcon') showIcon: boolean = true; + @Input('showSeconds') showSeconds: boolean = true; + @Input('showTime') showTime: boolean; + @Input('timeOnly') timeOnly: boolean = false; + @Input('dateFormat') dateFormat: string = 'yy-mm-dd'; + @Input('item') item: any; + @Input('isMany') isMany: boolean = false; + @Input('index') isDisabled?: number; + @Input('update') update?: Subject; + @Input('value') value?: string; + @Input('type') type?: InputType; + + @ViewChild('calendar') calendar: any + + private subscription = new Subscription(); + + constructor( + private ngZone: NgZone, + ) { + } + + ngOnInit() { + // if (this.item.subject) { + this.subscription.add( + this.control.valueChanges.subscribe(() => { + this.fillField(); + }) + ); + // } + } + + ngOnDestroy() { + this.subscription.unsubscribe(); + } + + ngAfterViewInit() { + (this.calendar?.el.nativeElement.querySelector('input') as HTMLInputElement).readOnly = true; + // if (this.isMany) { + this.fillField(); + // } + } + + ngOnChanges() { + this.fillField(); + } + + fillField() { + const comment = this.item?.field?.comment && JSON.parse(this.item.field.comment); + let value: any = null; + if (this.timeOnly && this.type && comment && comment[this.type]) { + value = comment[this.type]; + } else if (this.calendar?.value) { + value = this.calendar?.value; + } else if (this.item.value) { + value = this.item.value; + } else if (this.item.preset) { + value = this.item.preset; + } + + setTimeout(() => { + const input = this.calendar?.el.nativeElement.querySelector('input'); + if (input && value) { + if (this.timeOnly) { + const date = moment(value, 'hh:mm:ss'); + this.control.setValue(date.format('HH:mm:ss'), { + emitEvent: false, + emitModelToViewChange: false + }); + input.value = moment(value, 'hh:mm:ss').format('HH:mm:ss'); + } else if (!this.showTime) { + const date = moment(value, 'YYYY-MM-DD'); + this.control.setValue(date.format('YYYY-MM-DD'), { + emitEvent: false, + emitModelToViewChange: false + }); + input.value = moment(value, 'YYYY-MM-DD').format('YYYY-MM-DD'); + } else { + const date = moment(value); + this.control.setValue(date.toISOString(), { + emitEvent: false, + emitModelToViewChange: false + }) + input.value = moment(value).toISOString(); + } + } + }, 100) + } +} diff --git a/frontend/src/app/modules/schema-engine/schema-form/controls/enum/enum.html b/frontend/src/app/modules/schema-engine/schema-form/controls/enum/enum.html new file mode 100644 index 0000000000..276400ba64 --- /dev/null +++ b/frontend/src/app/modules/schema-engine/schema-form/controls/enum/enum.html @@ -0,0 +1,9 @@ + diff --git a/frontend/src/app/modules/schema-engine/schema-form/controls/enum/enum.scss b/frontend/src/app/modules/schema-engine/schema-form/controls/enum/enum.scss new file mode 100644 index 0000000000..196da3acc0 --- /dev/null +++ b/frontend/src/app/modules/schema-engine/schema-form/controls/enum/enum.scss @@ -0,0 +1,20 @@ +.type-selector { + width: 100%; +} + +.google-map-container { + margin-bottom: 20px; + margin-top: 5px; + box-shadow: 0px 0px 21px 0px rgba(34, 60, 80, 0.2); + border-radius: 5px; +} + +:host .google-map-container ::ng-deep .map-container { + border-radius: 5px; +} + +.switch-btn { + width: 180px; + height: 32px; + margin-bottom: 15px; +} diff --git a/frontend/src/app/modules/schema-engine/schema-form/controls/enum/enum.ts b/frontend/src/app/modules/schema-engine/schema-form/controls/enum/enum.ts new file mode 100644 index 0000000000..a22f484ba2 --- /dev/null +++ b/frontend/src/app/modules/schema-engine/schema-form/controls/enum/enum.ts @@ -0,0 +1,82 @@ +import { AfterViewInit, Component, Input, NgZone, OnChanges, OnDestroy, OnInit, ViewChild } from '@angular/core'; +import { UntypedFormControl } from '@angular/forms'; +import * as moment from 'moment'; +import { Subject, Subscription } from 'rxjs'; + +@Component({ + selector: 'enum-control', + templateUrl: './enum.html', + styleUrls: ['./enum.scss'], +}) +export class EnumComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy{ + @Input('control') control: UntypedFormControl; + @Input('showIcon') showIcon: boolean = true; + @Input('showSeconds') showSeconds: boolean = true; + @Input('showTime') showTime: boolean = true; + @Input('timeOnly') timeOnly: boolean = false; + @Input('dateFormat') dateFormat: string = 'yy-mm-dd'; + @Input('item') item: any; + @Input('isMany') isMany: boolean = false; + @Input('index') isDisabled?: number; + @Input('update') update?: Subject; + @Input('value') value?: string; + + @ViewChild('calendar') calendar: any + + private subscription = new Subscription(); + + constructor( + private ngZone: NgZone, + ) { + } + + ngOnInit() { + if (this.item.subject) { + this.item.subject.subscribe(() => { + this.fillField(); + }) + } + } + + ngOnDestroy() { + this.subscription.unsubscribe(); + } + + ngAfterViewInit() { + // if (this.isMany) { + this.fillField(); + // } + } + + ngOnChanges() { + this.fillField(); + } + + fillField() { + const comment = this.item?.field?.comment && JSON.parse(this.item.field.comment); + let value: any = null; + if (this.value) { + value = this.value; + } else if (this.timeOnly && comment?.suggest) { + value = comment.suggest; + } else if (this.calendar?.value) { + value = this.calendar?.value; + } else if (this.item.value) { + value = this.item.value; + } + + const input = this.calendar?.el.nativeElement.querySelector('input') + + setTimeout(() => { + if (input && value) { + if (this.timeOnly) { + const date = moment(value, 'hh-mm-ss').toDate(); + this.control.setValue(date); + input.value = value; + } else { + input.value = moment(value).format('YYYY-MM-DD HH:mm:ss'); + } + } + }) + } +} diff --git a/frontend/src/app/modules/schema-engine/schema-form/controls/input/input.html b/frontend/src/app/modules/schema-engine/schema-form/controls/input/input.html new file mode 100644 index 0000000000..276400ba64 --- /dev/null +++ b/frontend/src/app/modules/schema-engine/schema-form/controls/input/input.html @@ -0,0 +1,9 @@ + diff --git a/frontend/src/app/modules/schema-engine/schema-form/controls/input/input.scss b/frontend/src/app/modules/schema-engine/schema-form/controls/input/input.scss new file mode 100644 index 0000000000..196da3acc0 --- /dev/null +++ b/frontend/src/app/modules/schema-engine/schema-form/controls/input/input.scss @@ -0,0 +1,20 @@ +.type-selector { + width: 100%; +} + +.google-map-container { + margin-bottom: 20px; + margin-top: 5px; + box-shadow: 0px 0px 21px 0px rgba(34, 60, 80, 0.2); + border-radius: 5px; +} + +:host .google-map-container ::ng-deep .map-container { + border-radius: 5px; +} + +.switch-btn { + width: 180px; + height: 32px; + margin-bottom: 15px; +} diff --git a/frontend/src/app/modules/schema-engine/schema-form/controls/input/input.ts b/frontend/src/app/modules/schema-engine/schema-form/controls/input/input.ts new file mode 100644 index 0000000000..c0908ce2ce --- /dev/null +++ b/frontend/src/app/modules/schema-engine/schema-form/controls/input/input.ts @@ -0,0 +1,82 @@ +import { AfterViewInit, Component, Input, NgZone, OnChanges, OnDestroy, OnInit, ViewChild } from '@angular/core'; +import { UntypedFormControl } from '@angular/forms'; +import * as moment from 'moment'; +import { Subject, Subscription } from 'rxjs'; + +@Component({ + selector: 'input-control', + templateUrl: './input.html', + styleUrls: ['./input.scss'], +}) +export class InputComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy{ + @Input('control') control: UntypedFormControl; + @Input('showIcon') showIcon: boolean = true; + @Input('showSeconds') showSeconds: boolean = true; + @Input('showTime') showTime: boolean = true; + @Input('timeOnly') timeOnly: boolean = false; + @Input('dateFormat') dateFormat: string = 'yy-mm-dd'; + @Input('item') item: any; + @Input('isMany') isMany: boolean = false; + @Input('index') isDisabled?: number; + @Input('update') update?: Subject; + @Input('value') value?: string; + + @ViewChild('calendar') calendar: any + + private subscription = new Subscription(); + + constructor( + private ngZone: NgZone, + ) { + } + + ngOnInit() { + if (this.item.subject) { + this.item.subject.subscribe(() => { + this.fillField(); + }) + } + } + + ngOnDestroy() { + this.subscription.unsubscribe(); + } + + ngAfterViewInit() { + // if (this.isMany) { + this.fillField(); + // } + } + + ngOnChanges() { + this.fillField(); + } + + fillField() { + const comment = this.item?.field?.comment && JSON.parse(this.item.field.comment); + let value: any = null; + if (this.value) { + value = this.value; + } else if (this.timeOnly && comment?.suggest) { + value = comment.suggest; + } else if (this.calendar?.value) { + value = this.calendar?.value; + } else if (this.item.value) { + value = this.item.value; + } + + const input = this.calendar?.el.nativeElement.querySelector('input') + + setTimeout(() => { + if (input && value) { + if (this.timeOnly) { + const date = moment(value, 'hh-mm-ss').toDate(); + this.control.setValue(date); + input.value = value; + } else { + input.value = moment(value).format('YYYY-MM-DD HH:mm:ss'); + } + } + }) + } +} diff --git a/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.html b/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.html index 4ee1bf96ff..73acec0558 100644 --- a/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.html +++ b/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.html @@ -13,12 +13,12 @@
-
* {{ item.description }}
- +
* @@ -27,20 +27,22 @@
-
Suggestion: {{item.suggest}}
-
+
- -
{{ item.unit }}
-
- +
- +
- +
-
-
-
@@ -122,9 +107,9 @@
@@ -138,19 +123,19 @@
{{item.unit}}
-
- -
@@ -172,22 +157,24 @@
-
Suggestion: {{item.suggest}}
-
+
-
{{ item.unit }}
-
- +
- +
- +
-
-
- @@ -271,7 +245,7 @@ class="guardian-dropdown" [formControl]="listItem.control" [options]="item.enumValues" - [showClear]="false" + [showClear]="false" appendTo="body" placeholder="Not selected" panelStyleClass="guardian-dropdown-panel"> @@ -285,12 +259,12 @@
{{item.unit}}
- +
-
- @@ -301,9 +275,9 @@
{{getInvalidMessageByFieldType(item)}}
-
@@ -354,28 +331,28 @@
- - - @@ -384,7 +361,7 @@
-
+
@@ -426,7 +405,8 @@ Please make sure all fields in schemas contain a valid value
-
@@ -440,9 +420,9 @@
- @@ -454,28 +434,28 @@
- - - @@ -489,9 +469,9 @@
- diff --git a/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.scss b/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.scss index ce651cca32..fd9b8a2ef1 100644 --- a/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.scss +++ b/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.scss @@ -6,6 +6,10 @@ form { .form-field-container { margin-bottom: 24px; + ::ng-deep .p-inputtext.ng-dirty.ng-invalid { + border-color: #f44336; + } + &:last-child { margin-bottom: 0px; } @@ -391,4 +395,4 @@ form { display: block; } } -} \ No newline at end of file +} diff --git a/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.ts b/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.ts index 924662d05e..fb4da118d2 100644 --- a/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.ts +++ b/frontend/src/app/modules/schema-engine/schema-form/schema-form.component.ts @@ -51,6 +51,7 @@ enum ErrorArrayMessageByFieldType { class IButton { id: string; visible: () => boolean; + disabled: () => boolean; text: string; class: string; type: string; @@ -144,6 +145,9 @@ export class SchemaFormComponent implements OnInit { } return this.currentIndex === 0 && !this.cancelHidden; }, + disabled: () => { + return false; + }, text: this.cancelText, class: 'p-button-outlined', type: 'secondary', @@ -159,6 +163,9 @@ export class SchemaFormComponent implements OnInit { } return this.currentIndex !== 0; }, + disabled: () => { + return false; + }, text: 'Previous', class: 'p-button-outlined', type: 'secondary', @@ -174,6 +181,9 @@ export class SchemaFormComponent implements OnInit { } return !this.isShown[this.fields.length - 1]; }, + disabled: () => { + return false; + }, text: 'Next', class: 'p-button', type: 'primary', @@ -189,6 +199,9 @@ export class SchemaFormComponent implements OnInit { } return !!this.isShown[this.fields.length - 1] && !this.submitHidden; }, + disabled: () => { + return false; + }, text: this.submitText, class: 'p-button', type: 'primary', @@ -303,13 +316,7 @@ export class SchemaFormComponent implements OnInit { return new UntypedFormArray([]); } - private createSubSchemaControl(item: IFieldControl): UntypedFormControl | UntypedFormGroup | UntypedFormArray { - if (item.customType === 'geo' || item.customType === 'sentinel') { - return new UntypedFormControl({}) - } else { - return new UntypedFormGroup({}); - } - } + private trigger = true; private updateButton() { this.buttons.emit(this.buttonsConfig); @@ -463,6 +470,25 @@ export class SchemaFormComponent implements OnInit { return listItem; } + parseDate(item: string | string[], calendar: any, index?: number) { + setTimeout(() => { + if (calendar.dateParsed) { + return; + } + if (Array.isArray(item) && (index !== undefined) && item[index]) { + if (!calendar.el.nativeElement.querySelector('input').value) { + calendar.el.nativeElement.querySelector('input').value = moment(item[index]).format('YYYY-MM-DD HH:mm:ss'); + } + } else if (item) { + if (!calendar.el.nativeElement.querySelector('input').value) { + calendar.el.nativeElement.querySelector('input').value = moment(item).format('YYYY-MM-DD HH:mm:ss'); + } + } + calendar.dateParsed = true; + }, 50); + + } + public removeGroup(item: IFieldControl, event: any) { if (event?.stopPropagation) { event.stopPropagation(); @@ -652,6 +678,22 @@ export class SchemaFormComponent implements OnInit { return item.type === 'null'; } + suggestIsObject(item: any): boolean { + return typeof item === 'object'; + } + + public parseSuggest(item: any): string { + return this.findString(item); + } + + private findString(item: any): string { + if (typeof item === 'object') { + return this.findString(Object.values(item)[0]); + } else { + return item as string; + } + } + public isTime(item: SchemaField): boolean { return item.type === 'string' && item.format === 'time'; } @@ -700,7 +742,7 @@ export class SchemaFormComponent implements OnInit { valueToSet = ""; } } else if (format === 'time') { - const momentDate = moment(val); + const momentDate = moment(val, 'hh:mm:ss'); if (momentDate.isValid()) { momentDate.milliseconds(0); valueToSet = momentDate.format('HH:mm:ss'); @@ -898,13 +940,14 @@ export class SchemaFormComponent implements OnInit { item.list = []; let count = suggest.length; while (count-- > 0) { - const control = this.createListControl(item); + const control = this.createListControl(item, Array.isArray(suggest) ? suggest[count] : undefined); item.list.push(control); (item.control as UntypedFormArray).push(control.control); } } item.control?.patchValue(suggest); item.control?.markAsDirty(); + (item as any).subject.next(); } public isEmpty(value: any): boolean { @@ -924,6 +967,9 @@ export class SchemaFormComponent implements OnInit { if (field.customType === 'geo') { return Object.keys(value).length === 0; } + if (field.customType === 'sentinel') { + return JSON.stringify(value) === '{"layers":"NATURAL-COLOR","format":"image/jpeg","maxcc":null,"width":null,"height":null,"bbox":"","time":null}'; + } if (field.fields) { for (const _field of field.fields) { if (_field.isRef && !this.isEmptyRef(value[_field.name], _field)) { @@ -1068,6 +1114,7 @@ export class SchemaFormComponent implements OnInit { item.control?.disable(); }); } + (item as any).subject = new Subject(); return item; } @@ -1079,6 +1126,14 @@ export class SchemaFormComponent implements OnInit { return !item.isArray && !item.isRef; } + private createSubSchemaControl(item: IFieldControl): UntypedFormControl | UntypedFormGroup | UntypedFormArray { + if (item.customType === 'geo') { + return new UntypedFormControl({}) + } else { + return new UntypedFormGroup({}); + } + } + public ifSubSchema(item: IFieldControl): boolean { return !item.isArray && item.isRef; } diff --git a/frontend/src/app/modules/schema-engine/sentinel-hub-type/sentinel-hub-type.component.scss b/frontend/src/app/modules/schema-engine/sentinel-hub-type/sentinel-hub-type.component.scss index ebd85a083c..b2f32e482f 100644 --- a/frontend/src/app/modules/schema-engine/sentinel-hub-type/sentinel-hub-type.component.scss +++ b/frontend/src/app/modules/schema-engine/sentinel-hub-type/sentinel-hub-type.component.scss @@ -25,3 +25,9 @@ display: block; margin: auto; } + +::ng-deep .mat-datepicker-popup { + background: #ffffff; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); +} diff --git a/frontend/src/app/modules/schema-engine/sentinel-hub-type/sentinel-hub-type.component.ts b/frontend/src/app/modules/schema-engine/sentinel-hub-type/sentinel-hub-type.component.ts index dbfd753e59..d75e18d6ed 100644 --- a/frontend/src/app/modules/schema-engine/sentinel-hub-type/sentinel-hub-type.component.ts +++ b/frontend/src/app/modules/schema-engine/sentinel-hub-type/sentinel-hub-type.component.ts @@ -4,6 +4,7 @@ import { NGX_MAT_DATE_FORMATS, NgxMatDateAdapter } from '@angular-material-compo import { NgxMatMomentAdapter } from '@angular-material-components/moment-adapter'; import { Subscription } from 'rxjs'; import { MapService } from '../../../services/map.service'; +import * as moment from 'moment'; const MY_FORMATS = { parse: { @@ -30,7 +31,19 @@ export class SentinelHubTypeComponent implements OnInit, OnChanges, AfterViewIni public key: string; subscription = new Subscription(); @Input('formGroup') control: UntypedFormGroup; - public formattedImageLink = '' + + public get formattedImageLink(): string { + if (!this.key) { + return ''; + } + + if (this.control.valid) { + const value = this.control.value; + return `https://services.sentinel-hub.com/ogc/wms/${this.key}?REQUEST=GetMap&BBOX=${value.bbox}&FORMAT=${value.format}&LAYERS=${value.layers}&MAXCC=${value.maxcc}&WIDTH=${value.width}&HEIGHT=${value.height}&TIME=${value.time}` + } + + return ''; + } @Input('preset') presetDocument: any = null; @Input('disabled') isDisabled: boolean = false; public datePicker = new UntypedFormGroup({ @@ -65,51 +78,62 @@ export class SentinelHubTypeComponent implements OnInit, OnChanges, AfterViewIni } ngOnInit(): void { + if (!this.control) { + this.control = new UntypedFormGroup({}); + } + this.control.registerControl('layers', new UntypedFormControl('NATURAL-COLOR', Validators.required)); this.control.registerControl('format', new UntypedFormControl('image/jpeg', Validators.required)); - this.control.registerControl('maxcc', new UntypedFormControl(30, Validators.required)); - this.control.registerControl('width', new UntypedFormControl(512, Validators.required)); - this.control.registerControl('height', new UntypedFormControl(512, Validators.required)); + this.control.registerControl('maxcc', new UntypedFormControl(undefined, Validators.required)); + this.control.registerControl('width', new UntypedFormControl(undefined, Validators.required)); + this.control.registerControl('height', new UntypedFormControl(undefined, Validators.required)); this.control.registerControl('bbox', new UntypedFormControl('', Validators.required)); this.control.registerControl('time', new UntypedFormControl(undefined, Validators.required)); this.subscription.add( this.mapService.getSentinelKey().subscribe(value => { - this.key = value; - if (this.presetDocument) { - this.generateImageLink(this.control.value, true); + this.key = value; } - }) + ) ) + if (this.presetDocument) { + this.control.patchValue(this.presetDocument); + let [from, to] = this.control.get('time')?.value?.split('/') || []; + + const _from = from; + const _to = to; + if (!/(\d+)-(\d+)-(\d+)/.test(_from)) { + from = moment(_from, 'YYYY-MM-DD'); + } + if (!/(\d+)-(\d+)-(\d+)/.test(_to)) { + to = moment(_to, 'YYYY-MM-DD'); + } + if (/(\d+)/.test(_from)) { + from = moment(_from); + } + if (/(\d+)/.test(_to)) { + to = moment(_to); + } + this.datePicker.patchValue({from, to}); + + } + this.subscription.add( this.datePicker.valueChanges.subscribe(value => { - this.getControlByName('time').setValue(value.from?.format('YYYY-MM-DD') + '/' + value.to?.format('YYYY-MM-DD')) + if (!value.from || !value.to) { + return; + } + this.getControlByName('time').setValue(value.from?.format('YYYY-MM-DD') + '/' + value.to?.format('YYYY-MM-DD')); }) ); - this.subscription.add( - this.control.valueChanges.subscribe(value => this.generateImageLink(value)) - ) + // this.subscription.add( + // this.control.valueChanges.subscribe(value => this.generateImageLink(value)) + // ); } ngAfterViewInit(): void { - if (this.presetDocument) { - this.control.patchValue(this.presetDocument); - const [from, to] = this.control.get('time')?.value?.split('/') || []; - this.datePicker.patchValue({from, to}); - this.generateImageLink(this.control.value, true); - } - } - - generateImageLink(value: any, skipValidation = false): void { - if (!this.key) { - this.formattedImageLink = ''; - return; - } - - if (skipValidation || this.control.valid) { - this.formattedImageLink = `https://services.sentinel-hub.com/ogc/wms/${this.key}?REQUEST=GetMap&BBOX=${value.bbox}&FORMAT=${value.format}&LAYERS=${value.layers}&MAXCC=${value.maxcc}&WIDTH=${value.width}&HEIGHT=${value.height}&TIME=${value.time}` - } + // this.generateImageLink(this.control.value, true); } } diff --git a/frontend/src/app/modules/schema-engine/vc-dialog/vc-dialog.component.html b/frontend/src/app/modules/schema-engine/vc-dialog/vc-dialog.component.html index 5291f5d01e..a545ac396e 100644 --- a/frontend/src/app/modules/schema-engine/vc-dialog/vc-dialog.component.html +++ b/frontend/src/app/modules/schema-engine/vc-dialog/vc-dialog.component.html @@ -8,7 +8,10 @@
-
+
+
+
+
{ - if (data.schema) { - const document = new Schema(data.schema).document; + this.loading = true; + const requests = [this.profileService.getProfile()]; - this.json = document ? JSON.stringify((document), null, 4) : '' - this.document = document - } - }); + if (id && topicId && category) { + requests.push(this.schemaService.getSchemaWithSubSchemas(category, id, topicId)); } + + forkJoin(requests).subscribe(([profile, data]: any[]) => { + this.user = new UserPermissions(profile); + if (data && data.schema) { + const document = new Schema(data.schema).document; + this.json = document ? JSON.stringify((document), null, 4) : '' + this.document = document + } + this.loading = false; + }, (error) => { + this.loading = false; + console.error(error); + }); } } diff --git a/frontend/src/app/services/message-translation-service/message-store.ts b/frontend/src/app/services/message-translation-service/message-store.ts index ab51438b6d..9fbd7e14b4 100644 --- a/frontend/src/app/services/message-translation-service/message-store.ts +++ b/frontend/src/app/services/message-translation-service/message-store.ts @@ -1,18 +1,18 @@ import { HederaResponseCode } from "@guardian/interfaces"; export const MessagesMap = new Map(); -MessagesMap.set(HederaResponseCode.INVALID_TRANSACTION, 'For any error not handled by specific error codes listed below.'); -MessagesMap.set(HederaResponseCode.PAYER_ACCOUNT_NOT_FOUND, 'Payer account does not exist.'); -MessagesMap.set(HederaResponseCode.INVALID_NODE_ACCOUNT, 'Node Account provided does not match the node account of the node the transaction was submitted to.'); -MessagesMap.set(HederaResponseCode.TRANSACTION_EXPIRED, 'Pre-Check error when TransactionValidStart + transactionValidDuration is less than current consensus time.'); +MessagesMap.set(HederaResponseCode.INVALID_TRANSACTION, 'For any error not handled by specific error codes listed below'); +MessagesMap.set(HederaResponseCode.PAYER_ACCOUNT_NOT_FOUND, 'Payer account does not exist'); +MessagesMap.set(HederaResponseCode.INVALID_NODE_ACCOUNT, 'Node Account provided does not match the node account of the node the transaction was submitted to'); +MessagesMap.set(HederaResponseCode.TRANSACTION_EXPIRED, 'Pre-Check error when TransactionValidStart + transactionValidDuration is less than current consensus time'); MessagesMap.set(HederaResponseCode.INVALID_TRANSACTION_START, 'Transaction start time is greater than current consensus time'); -MessagesMap.set(HederaResponseCode.INVALID_TRANSACTION_DURATION, 'valid transaction duration is a positive non zero number that does not exceed 120 seconds'); +MessagesMap.set(HederaResponseCode.INVALID_TRANSACTION_DURATION, 'Valid transaction duration is a positive non zero number that does not exceed 120 seconds'); MessagesMap.set(HederaResponseCode.INVALID_SIGNATURE, 'The transaction signature is not valid'); MessagesMap.set(HederaResponseCode.MEMO_TOO_LONG, 'Transaction memo size exceeded 100 bytes'); MessagesMap.set(HederaResponseCode.INSUFFICIENT_TX_FEE, 'The fee provided in the transaction is insufficient for this type of transaction'); MessagesMap.set(HederaResponseCode.INSUFFICIENT_PAYER_BALANCE, 'The payer account has insufficient cryptocurrency to pay the transaction fee'); MessagesMap.set(HederaResponseCode.DUPLICATE_TRANSACTION, 'This transaction ID is a duplicate of one that was submitted to this node or reached consensus in the last 180 seconds (receipt period)'); -MessagesMap.set(HederaResponseCode.BUSY, 'If API is throttled out'); +MessagesMap.set(HederaResponseCode.BUSY, 'The API is throttled out'); MessagesMap.set(HederaResponseCode.NOT_SUPPORTED, 'The API is not currently supported'); MessagesMap.set(HederaResponseCode.INVALID_FILE_ID, 'The file id is invalid or does not exist'); MessagesMap.set(HederaResponseCode.INVALID_ACCOUNT_ID, 'The account id is invalid or does not exist'); @@ -21,75 +21,75 @@ MessagesMap.set(HederaResponseCode.INVALID_TRANSACTION_ID, 'Transaction id is no MessagesMap.set(HederaResponseCode.RECEIPT_NOT_FOUND, 'Receipt for given transaction id does not exist'); MessagesMap.set(HederaResponseCode.RECORD_NOT_FOUND, 'Record for given transaction id does not exist'); MessagesMap.set(HederaResponseCode.INVALID_SOLIDITY_ID, 'The solidity id is invalid or entity with this solidity id does not exist'); -MessagesMap.set(HederaResponseCode.UNKNOWN, 'This node has submitted this transaction to the network. Status of the transaction is currently unknown.'); +MessagesMap.set(HederaResponseCode.UNKNOWN, 'This node has submitted this transaction to the network. Status of the transaction is currently unknown'); MessagesMap.set(HederaResponseCode.SUCCESS, 'The transaction succeeded'); -MessagesMap.set(HederaResponseCode.FAIL_INVALID, 'There was a system error and the transaction failed because of invalid request parameters.'); -MessagesMap.set(HederaResponseCode.FAIL_FEE, 'There was a system error while performing fee calculation, reserved for future.'); -MessagesMap.set(HederaResponseCode.FAIL_BALANCE, 'There was a system error while performing balance checks, reserved for future.'); +MessagesMap.set(HederaResponseCode.FAIL_INVALID, 'There was a system error and the transaction failed because of invalid request parameters'); +MessagesMap.set(HederaResponseCode.FAIL_FEE, 'There was a system error while performing fee calculation, reserved for future'); +MessagesMap.set(HederaResponseCode.FAIL_BALANCE, 'There was a system error while performing balance checks, reserved for future'); MessagesMap.set(HederaResponseCode.KEY_REQUIRED, 'Key not provided in the transaction body'); MessagesMap.set(HederaResponseCode.BAD_ENCODING, 'Unsupported algorithm/encoding used for keys in the transaction'); MessagesMap.set(HederaResponseCode.INSUFFICIENT_ACCOUNT_BALANCE, 'When the account balance is not sufficient for the transfer'); MessagesMap.set(HederaResponseCode.INVALID_SOLIDITY_ADDRESS, 'During an update transaction when the system is not able to find the Users Solidity address'); MessagesMap.set(HederaResponseCode.INSUFFICIENT_GAS, 'Not enough gas was supplied to execute transaction'); -MessagesMap.set(HederaResponseCode.CONTRACT_SIZE_LIMIT_EXCEEDED, 'contract byte code size is over the limit'); -MessagesMap.set(HederaResponseCode.LOCAL_CALL_MODIFICATION_EXCEPTION, 'local execution (query) is requested for a function which changes state'); +MessagesMap.set(HederaResponseCode.CONTRACT_SIZE_LIMIT_EXCEEDED, 'Contract byte code size is over the limit'); +MessagesMap.set(HederaResponseCode.LOCAL_CALL_MODIFICATION_EXCEPTION, 'Local execution (query) is requested for a function which changes state'); MessagesMap.set(HederaResponseCode.CONTRACT_REVERT_EXECUTED, 'Contract REVERT OPCODE executed'); -MessagesMap.set(HederaResponseCode.CONTRACT_EXECUTION_EXCEPTION, 'For any contract execution related error not handled by specific error codes listed above.'); +MessagesMap.set(HederaResponseCode.CONTRACT_EXECUTION_EXCEPTION, 'For any contract execution related error not handled by specific error codes listed above'); MessagesMap.set(HederaResponseCode.INVALID_RECEIVING_NODE_ACCOUNT, 'In Query validation, account with +ve(amount) value should be Receiving node account, the receiver account should be only one account in the list'); MessagesMap.set(HederaResponseCode.MISSING_QUERY_HEADER, 'Header is missing in Query request'); MessagesMap.set(HederaResponseCode.ACCOUNT_UPDATE_FAILED, 'The update of the account failed'); MessagesMap.set(HederaResponseCode.INVALID_KEY_ENCODING, 'Provided key encoding was not supported by the system'); MessagesMap.set(HederaResponseCode.NULL_SOLIDITY_ADDRESS, 'null solidity address'); -MessagesMap.set(HederaResponseCode.CONTRACT_UPDATE_FAILED, 'update of the contract failed'); -MessagesMap.set(HederaResponseCode.INVALID_QUERY_HEADER, 'the query header is invalid'); +MessagesMap.set(HederaResponseCode.CONTRACT_UPDATE_FAILED, 'Update of the contract failed'); +MessagesMap.set(HederaResponseCode.INVALID_QUERY_HEADER, 'The query header is invalid'); MessagesMap.set(HederaResponseCode.INVALID_FEE_SUBMITTED, 'Invalid fee submitted'); MessagesMap.set(HederaResponseCode.INVALID_PAYER_SIGNATURE, 'Payer signature is invalid'); -MessagesMap.set(HederaResponseCode.KEY_NOT_PROVIDED, 'The keys were not provided in the request.'); -MessagesMap.set(HederaResponseCode.INVALID_EXPIRATION_TIME, 'Expiration time provided in the transaction was invalid.'); +MessagesMap.set(HederaResponseCode.KEY_NOT_PROVIDED, 'The keys were not provided in the request'); +MessagesMap.set(HederaResponseCode.INVALID_EXPIRATION_TIME, 'Expiration time provided in the transaction was invalid'); MessagesMap.set(HederaResponseCode.NO_WACL_KEY, 'WriteAccess Control Keys are not provided for the file'); -MessagesMap.set(HederaResponseCode.FILE_CONTENT_EMPTY, 'The contents of file are provided as empty.'); +MessagesMap.set(HederaResponseCode.FILE_CONTENT_EMPTY, 'The contents of file are provided as empty'); MessagesMap.set(HederaResponseCode.INVALID_ACCOUNT_AMOUNTS, 'The crypto transfer credit and debit do not sum equal to 0'); MessagesMap.set(HederaResponseCode.EMPTY_TRANSACTION_BODY, 'Transaction body provided is empty'); MessagesMap.set(HederaResponseCode.INVALID_TRANSACTION_BODY, 'Invalid transaction body provided'); -MessagesMap.set(HederaResponseCode.INVALID_SIGNATURE_TYPE_MISMATCHING_KEY, 'the type of key (base ed25519 key, KeyList, or ThresholdKey) does not match the type of signature (base ed25519 signature, SignatureList, or ThresholdKeySignature)'); -MessagesMap.set(HederaResponseCode.INVALID_SIGNATURE_COUNT_MISMATCHING_KEY, 'the number of key (KeyList, or ThresholdKey) does not match that of signature (SignatureList, or ThresholdKeySignature). e.g. if a keyList has 3 base keys, then the corresponding signatureList should also have 3 base signatures.'); -MessagesMap.set(HederaResponseCode.EMPTY_LIVE_HASH_BODY, 'the livehash body is empty'); -MessagesMap.set(HederaResponseCode.EMPTY_LIVE_HASH, 'the livehash data is missing'); -MessagesMap.set(HederaResponseCode.EMPTY_LIVE_HASH_KEYS, 'the key list is empty'); -MessagesMap.set(HederaResponseCode.INVALID_LIVE_HASH_SIZE, 'the livehash data is not the output of a SHA-384 digest'); -MessagesMap.set(HederaResponseCode.EMPTY_QUERY_BODY, 'the query body is empty'); -MessagesMap.set(HederaResponseCode.EMPTY_LIVE_QUERY, 'the query body is empty'); -MessagesMap.set(HederaResponseCode.LIVE_HASH_NOT_FOUND, 'the livehash is not present'); -MessagesMap.set(HederaResponseCode.ACCOUNT_ID_DOES_NOT_EXIST, 'the account id passed has not yet been created.'); -MessagesMap.set(HederaResponseCode.LIVE_HASH_ALREADY_EXISTS, 'the livehash already exists for a given account'); +MessagesMap.set(HederaResponseCode.INVALID_SIGNATURE_TYPE_MISMATCHING_KEY, 'The type of key (base ed25519 key, KeyList, or ThresholdKey) does not match the type of signature (base ed25519 signature, SignatureList, or ThresholdKeySignature)'); +MessagesMap.set(HederaResponseCode.INVALID_SIGNATURE_COUNT_MISMATCHING_KEY, 'The number of key (KeyList, or ThresholdKey) does not match that of signature (SignatureList, or ThresholdKeySignature). e.g. if a keyList has 3 base keys, then the corresponding signatureList should also have 3 base signatures'); +MessagesMap.set(HederaResponseCode.EMPTY_LIVE_HASH_BODY, 'The livehash body is empty'); +MessagesMap.set(HederaResponseCode.EMPTY_LIVE_HASH, 'The livehash data is missing'); +MessagesMap.set(HederaResponseCode.EMPTY_LIVE_HASH_KEYS, 'The key list is empty'); +MessagesMap.set(HederaResponseCode.INVALID_LIVE_HASH_SIZE, 'The livehash data is not the output of a SHA-384 digest'); +MessagesMap.set(HederaResponseCode.EMPTY_QUERY_BODY, 'The query body is empty'); +MessagesMap.set(HederaResponseCode.EMPTY_LIVE_QUERY, 'The query body is empty'); +MessagesMap.set(HederaResponseCode.LIVE_HASH_NOT_FOUND, 'The livehash is not present'); +MessagesMap.set(HederaResponseCode.ACCOUNT_ID_DOES_NOT_EXIST, 'The account id passed has not yet been created'); +MessagesMap.set(HederaResponseCode.LIVE_HASH_ALREADY_EXISTS, 'The livehash already exists for a given account'); MessagesMap.set(HederaResponseCode.INVALID_FILE_WACL, 'File WACL keys are invalid'); MessagesMap.set(HederaResponseCode.SERIALIZATION_FAILED, 'Serialization failure'); MessagesMap.set(HederaResponseCode.TRANSACTION_OVERSIZE, 'The size of the Transaction is greater than transactionMaxBytes'); MessagesMap.set(HederaResponseCode.TRANSACTION_TOO_MANY_LAYERS, 'The Transaction has more than 50 levels'); MessagesMap.set(HederaResponseCode.CONTRACT_DELETED, 'Contract is marked as deleted'); -MessagesMap.set(HederaResponseCode.PLATFORM_NOT_ACTIVE, 'the platform node is either disconnected or lagging behind.'); -MessagesMap.set(HederaResponseCode.KEY_PREFIX_MISMATCH, 'one public key matches more than one prefixes on the signature map'); +MessagesMap.set(HederaResponseCode.PLATFORM_NOT_ACTIVE, 'The platform node is either disconnected or lagging behind'); +MessagesMap.set(HederaResponseCode.KEY_PREFIX_MISMATCH, 'One public key matches more than one prefixes on the signature map'); MessagesMap.set(HederaResponseCode.PLATFORM_TRANSACTION_NOT_CREATED, 'Transaction not created by platform due to large backlog'); -MessagesMap.set(HederaResponseCode.INVALID_RENEWAL_PERIOD, 'auto renewal period is not a positive number of seconds'); -MessagesMap.set(HederaResponseCode.INVALID_PAYER_ACCOUNT_ID, 'the response code when a smart contract id is passed for a crypto API request'); -MessagesMap.set(HederaResponseCode.ACCOUNT_DELETED, 'the account has been marked as deleted'); -MessagesMap.set(HederaResponseCode.FILE_DELETED, 'the file has been marked as deleted'); -MessagesMap.set(HederaResponseCode.ACCOUNT_REPEATED_IN_ACCOUNT_AMOUNTS, 'same accounts repeated in the transfer account list'); -MessagesMap.set(HederaResponseCode.SETTING_NEGATIVE_ACCOUNT_BALANCE, 'attempting to set negative balance value for crypto account'); -MessagesMap.set(HederaResponseCode.OBTAINER_REQUIRED, 'when deleting smart contract that has crypto balance either transfer account or transfer smart contract is required'); -MessagesMap.set(HederaResponseCode.OBTAINER_SAME_CONTRACT_ID, 'when deleting smart contract that has crypto balance you can not use the same contract id as transferContractId as the one being deleted'); -MessagesMap.set(HederaResponseCode.OBTAINER_DOES_NOT_EXIST, 'transferAccountId or transferContractId specified for contract delete does not exist'); -MessagesMap.set(HederaResponseCode.MODIFYING_IMMUTABLE_CONTRACT, 'attempting to modify (update or delete a immutable smart contract, i.e. one created without a admin key)'); +MessagesMap.set(HederaResponseCode.INVALID_RENEWAL_PERIOD, 'Auto renewal period is not a positive number of seconds'); +MessagesMap.set(HederaResponseCode.INVALID_PAYER_ACCOUNT_ID, 'The response code when a smart contract id is passed for a crypto API request'); +MessagesMap.set(HederaResponseCode.ACCOUNT_DELETED, 'The account has been marked as deleted'); +MessagesMap.set(HederaResponseCode.FILE_DELETED, 'The file has been marked as deleted'); +MessagesMap.set(HederaResponseCode.ACCOUNT_REPEATED_IN_ACCOUNT_AMOUNTS, 'Same accounts repeated in the transfer account list'); +MessagesMap.set(HederaResponseCode.SETTING_NEGATIVE_ACCOUNT_BALANCE, 'Attempting to set negative balance value for crypto account'); +MessagesMap.set(HederaResponseCode.OBTAINER_REQUIRED, 'When deleting smart contract that has crypto balance either transfer account or transfer smart contract is required'); +MessagesMap.set(HederaResponseCode.OBTAINER_SAME_CONTRACT_ID, 'When deleting smart contract that has crypto balance you can not use the same contract id as transferContractId as the one being deleted'); +MessagesMap.set(HederaResponseCode.OBTAINER_DOES_NOT_EXIST, 'TransferAccountId or transferContractId specified for contract delete does not exist'); +MessagesMap.set(HederaResponseCode.MODIFYING_IMMUTABLE_CONTRACT, 'Attempting to modify (update or delete a immutable smart contract, i.e. one created without a admin key)'); MessagesMap.set(HederaResponseCode.FILE_SYSTEM_EXCEPTION, 'Unexpected exception thrown by file system functions'); -MessagesMap.set(HederaResponseCode.AUTORENEW_DURATION_NOT_IN_RANGE, 'the duration is not a subset of [MINIMUM_AUTORENEW_DURATION,MAXIMUM_AUTORENEW_DURATION]'); -MessagesMap.set(HederaResponseCode.ERROR_DECODING_BYTESTRING, 'Decoding the smart contract binary to a byte array failed. Check that the input is a valid hex string.'); +MessagesMap.set(HederaResponseCode.AUTORENEW_DURATION_NOT_IN_RANGE, 'The duration is not a subset of [MINIMUM_AUTORENEW_DURATION,MAXIMUM_AUTORENEW_DURATION]'); +MessagesMap.set(HederaResponseCode.ERROR_DECODING_BYTESTRING, 'Decoding the smart contract binary to a byte array failed. Check that the input is a valid hex string'); MessagesMap.set(HederaResponseCode.CONTRACT_FILE_EMPTY, 'File to create a smart contract was of length zero'); MessagesMap.set(HederaResponseCode.CONTRACT_BYTECODE_EMPTY, 'Bytecode for smart contract is of length zero'); MessagesMap.set(HederaResponseCode.INVALID_INITIAL_BALANCE, 'Attempt to set negative initial balance'); -MessagesMap.set(HederaResponseCode.INVALID_RECEIVE_RECORD_THRESHOLD, 'attempt to set negative receive record threshold'); -MessagesMap.set(HederaResponseCode.INVALID_SEND_RECORD_THRESHOLD, 'attempt to set negative send record threshold'); +MessagesMap.set(HederaResponseCode.INVALID_RECEIVE_RECORD_THRESHOLD, 'Attempt to set negative receive record threshold'); +MessagesMap.set(HederaResponseCode.INVALID_SEND_RECORD_THRESHOLD, 'Attempt to set negative send record threshold'); MessagesMap.set(HederaResponseCode.ACCOUNT_IS_NOT_GENESIS_ACCOUNT, 'Special Account Operations should be performed by only Genesis account, return this code if it is not Genesis Account'); -MessagesMap.set(HederaResponseCode.PAYER_ACCOUNT_UNAUTHORIZED, 'The fee payer account doesn\'t have permission to submit such Transaction'); +MessagesMap.set(HederaResponseCode.PAYER_ACCOUNT_UNAUTHORIZED, 'The fee payer account doesn\'T have permission to submit such Transaction'); MessagesMap.set(HederaResponseCode.INVALID_FREEZE_TRANSACTION_BODY, 'FreezeTransactionBody is invalid'); MessagesMap.set(HederaResponseCode.FREEZE_TRANSACTION_BODY_NOT_FOUND, 'FreezeTransactionBody does not exist'); MessagesMap.set(HederaResponseCode.TRANSFER_LIST_SIZE_LIMIT_EXCEEDED, 'Exceeded the number of accounts (both from and to) allowed for crypto transfer list'); @@ -101,7 +101,7 @@ MessagesMap.set(HederaResponseCode.INVALID_FEE_FILE, 'Failed to update fee file' MessagesMap.set(HederaResponseCode.INVALID_EXCHANGE_RATE_FILE, 'Failed to update exchange rate file'); MessagesMap.set(HederaResponseCode.INSUFFICIENT_LOCAL_CALL_GAS, 'Payment tendered for contract local call cannot cover both the fee and the gas'); MessagesMap.set(HederaResponseCode.ENTITY_NOT_ALLOWED_TO_DELETE, 'Entities with Entity ID below 1000 are not allowed to be deleted'); -MessagesMap.set(HederaResponseCode.AUTHORIZATION_FAILED, 'Violating one of these rules: 1) treasury account can update all entities below 0.0.1000, 2) account 0.0.50 can update all entities from 0.0.51 - 0.0.80, 3) Network Function Master Account A/c 0.0.50 - Update all Network Function accounts & perform all the Network Functions listed below, 4) Network Function Accounts: i) A/c 0.0.55 - Update Address Book files (0.0.101/102), ii) A/c 0.0.56 - Update Fee schedule (0.0.111), iii) A/c 0.0.57 - Update Exchange Rate (0.0.112).'); +MessagesMap.set(HederaResponseCode.AUTHORIZATION_FAILED, 'Violating one of these rules: 1) treasury account can update all entities below 0.0.1000, 2) account 0.0.50 can update all entities from 0.0.51 - 0.0.80, 3) Network Function Master Account A/c 0.0.50 - Update all Network Function accounts & perform all the Network Functions listed below, 4) Network Function Accounts: i) A/c 0.0.55 - Update Address Book files (0.0.101/102), ii) A/c 0.0.56 - Update Fee schedule (0.0.111), iii) A/c 0.0.57 - Update Exchange Rate (0.0.112)'); MessagesMap.set(HederaResponseCode.FILE_UPLOADED_PROTO_INVALID, 'Fee Schedule Proto uploaded but not valid (append or update is required)'); MessagesMap.set(HederaResponseCode.FILE_UPLOADED_PROTO_NOT_SAVED_TO_DISK, 'Fee Schedule Proto uploaded but not valid (append or update is required)'); MessagesMap.set(HederaResponseCode.FEE_SCHEDULE_FILE_PART_UPLOADED, 'Fee Schedule Proto File Part uploaded'); @@ -109,16 +109,16 @@ MessagesMap.set(HederaResponseCode.EXCHANGE_RATE_CHANGE_LIMIT_EXCEEDED, 'The cha MessagesMap.set(HederaResponseCode.MAX_CONTRACT_STORAGE_EXCEEDED, 'Contract permanent storage exceeded the currently allowable limit'); MessagesMap.set(HederaResponseCode.MAX_GAS_LIMIT_EXCEEDED, 'Gas exceeded currently allowable gas limit per transaction'); MessagesMap.set(HederaResponseCode.MAX_FILE_SIZE_EXCEEDED, 'File size exceeded the currently allowable limit'); -MessagesMap.set(HederaResponseCode.INVALID_TOPIC_ID, 'The Topic ID specified is not in the system.'); +MessagesMap.set(HederaResponseCode.INVALID_TOPIC_ID, 'The Topic ID specified is not in the system'); MessagesMap.set(HederaResponseCode.INVALID_ADMIN_KEY, 'A provided admin key was invalid'); MessagesMap.set(HederaResponseCode.INVALID_SUBMIT_KEY, 'A provided submit key was invalid'); -MessagesMap.set(HederaResponseCode.UNAUTHORIZED, 'An attempted operation was not authorized (ie - a deleteTopic for a topic with no adminKey).'); -MessagesMap.set(HederaResponseCode.INVALID_TOPIC_MESSAGE, 'A ConsensusService message is empty.'); -MessagesMap.set(HederaResponseCode.INVALID_AUTORENEW_ACCOUNT, 'The autoRenewAccount specified is not a valid, active account.'); -MessagesMap.set(HederaResponseCode.AUTORENEW_ACCOUNT_NOT_ALLOWED, 'An adminKey was not specified on the topic, so there must not be an autoRenewAccount.'); -MessagesMap.set(HederaResponseCode.TOPIC_EXPIRED, 'The topic has expired, was not automatically renewed, and is in a 7 day grace period before the topic will be deleted unrecoverably. This error response code will not be returned until autoRenew functionality is supported by HAPI.'); +MessagesMap.set(HederaResponseCode.UNAUTHORIZED, 'An attempted operation was not authorized (ie - a deleteTopic for a topic with no adminKey)'); +MessagesMap.set(HederaResponseCode.INVALID_TOPIC_MESSAGE, 'A ConsensusService message is empty'); +MessagesMap.set(HederaResponseCode.INVALID_AUTORENEW_ACCOUNT, 'The autoRenewAccount specified is not a valid, active account'); +MessagesMap.set(HederaResponseCode.AUTORENEW_ACCOUNT_NOT_ALLOWED, 'An adminKey was not specified on the topic, so there must not be an autoRenewAccount'); +MessagesMap.set(HederaResponseCode.TOPIC_EXPIRED, 'The topic has expired, was not automatically renewed, and is in a 7 day grace period before the topic will be deleted unrecoverably. This error response code will not be returned until autoRenew functionality is supported by HAPI'); MessagesMap.set(HederaResponseCode.INVALID_CHUNK_NUMBER, 'Chunk number must be from 1 to total (chunks) inclusive'); -MessagesMap.set(HederaResponseCode.INVALID_CHUNK_TRANSACTION_ID, 'For every chunk, the payer account that is part of initialTransactionID must match the Payer Account of this transaction. The entire initialTransactionID should match the transactionID of the first chunk, but this is not checked or enforced by Hedera except when the chunk number is 1.'); +MessagesMap.set(HederaResponseCode.INVALID_CHUNK_TRANSACTION_ID, 'For every chunk, the payer account that is part of initialTransactionID must match the Payer Account of this transaction. The entire initialTransactionID should match the transactionID of the first chunk, but this is not checked or enforced by Hedera except when the chunk number is 1'); MessagesMap.set(HederaResponseCode.INVALID_RECEIVE_RECORD_THRESHOLD, '[Deprecated v0.8.0] Attempt to set negative receive record threshold'); MessagesMap.set(HederaResponseCode.INVALID_SEND_RECORD_THRESHOLD, '[Deprecated v0.8.0] Attempt to set negative send record threshold'); MessagesMap.set(HederaResponseCode.ACCOUNT_FROZEN_FOR_TOKEN, 'Account is frozen and cannot transact with the token'); @@ -170,7 +170,7 @@ MessagesMap.set(HederaResponseCode.IDENTICAL_SCHEDULE_ALREADY_CREATED, 'A schedu MessagesMap.set(HederaResponseCode.INVALID_ZERO_BYTE_IN_STRING, 'A string field in the transaction has a UTF-8 encoding with the prohibited zero byte'); MessagesMap.set(HederaResponseCode.SCHEDULE_ALREADY_DELETED, 'A schedule being signed or deleted has already been deleted'); MessagesMap.set(HederaResponseCode.SCHEDULE_ALREADY_EXECUTED, 'A schedule being signed or deleted has already been executed'); -MessagesMap.set(HederaResponseCode.MESSAGE_SIZE_TOO_LARGE, 'ConsensusSubmitMessage request\'s message size is larger than allowed.'); +MessagesMap.set(HederaResponseCode.MESSAGE_SIZE_TOO_LARGE, 'ConsensusSubmitMessage request\'s message size is larger than allowed'); MessagesMap.set(HederaResponseCode.OPERATION_REPEATED_IN_BUCKET_GROUPS, 'An operation was assigned to more than one throttle group in a given bucket'); MessagesMap.set(HederaResponseCode.BUCKET_CAPACITY_OVERFLOW, 'The capacity needed to satisfy all opsPerSec groups in a bucket overflowed a signed 8-byte integral type'); MessagesMap.set(HederaResponseCode.NODE_CAPACITY_NOT_SUFFICIENT_FOR_OPERATION, 'Given the network size in the address book, the node-level capacity for an operation would never be enough to accept a single request; usually means a bucket burstPeriod should be increased'); @@ -181,9 +181,9 @@ MessagesMap.set(HederaResponseCode.UNPARSEABLE_THROTTLE_DEFINITIONS, 'The new co MessagesMap.set(HederaResponseCode.INVALID_THROTTLE_DEFINITIONS, 'The new throttle definitions system file were invalid, and no more specific error could be divined'); MessagesMap.set(HederaResponseCode.ACCOUNT_EXPIRED_AND_PENDING_REMOVAL, 'The transaction references an account which has passed its expiration without renewal funds available, and currently remains in the ledger only because of the grace period given to expired entities'); MessagesMap.set(HederaResponseCode.INVALID_TOKEN_MAX_SUPPLY, 'Invalid token max supply'); -MessagesMap.set(HederaResponseCode.INVALID_TOKEN_NFT_SERIAL_NUMBER, 'Invalid token nft serial number'); -MessagesMap.set(HederaResponseCode.INVALID_NFT_ID, 'Invalid nft id'); -MessagesMap.set(HederaResponseCode.METADATA_TOO_LONG, 'Nft metadata is too long'); +MessagesMap.set(HederaResponseCode.INVALID_TOKEN_NFT_SERIAL_NUMBER, 'Invalid token NFT serial number'); +MessagesMap.set(HederaResponseCode.INVALID_NFT_ID, 'Invalid NFT id'); +MessagesMap.set(HederaResponseCode.METADATA_TOO_LONG, 'NFT metadata is too long'); MessagesMap.set(HederaResponseCode.BATCH_SIZE_LIMIT_EXCEEDED, 'Repeated operations count exceeds the limit'); MessagesMap.set(HederaResponseCode.INVALID_QUERY_RANGE, 'The range of data to be gathered is out of the set boundaries'); MessagesMap.set(HederaResponseCode.FRACTION_DIVIDES_BY_ZERO, 'A custom fractional fee set a denominator of zero'); @@ -213,47 +213,47 @@ MessagesMap.set(HederaResponseCode.CUSTOM_FEE_CHARGING_EXCEEDED_MAX_ACCOUNT_AMOU MessagesMap.set(HederaResponseCode.INSUFFICIENT_SENDER_ACCOUNT_BALANCE_FOR_CUSTOM_FEE, 'The sender account in the token transfer transaction could not afford a custom fee'); MessagesMap.set(HederaResponseCode.SERIAL_NUMBER_LIMIT_REACHED, 'Currently, no more than 4,294,967,295 NFTs may be minted for a given unique token type'); MessagesMap.set(HederaResponseCode.CUSTOM_ROYALTY_FEE_ONLY_ALLOWED_FOR_NON_FUNGIBLE_UNIQUE, 'Only tokens of type NON_FUNGIBLE_UNIQUE can have royalty fees'); -MessagesMap.set(HederaResponseCode.NO_REMAINING_AUTOMATIC_ASSOCIATIONS, 'The account has reached the limit on the automatic associations count.'); +MessagesMap.set(HederaResponseCode.NO_REMAINING_AUTOMATIC_ASSOCIATIONS, 'The account has reached the limit on the automatic associations count'); MessagesMap.set(HederaResponseCode.EXISTING_AUTOMATIC_ASSOCIATIONS_EXCEED_GIVEN_LIMIT, 'Already existing automatic associations are more than the new maximum automatic associations'); MessagesMap.set(HederaResponseCode.REQUESTED_NUM_AUTOMATIC_ASSOCIATIONS_EXCEEDS_ASSOCIATION_LIMIT, 'Cannot set the number of automatic associations for an account more than the maximum allowed token associations tokens.maxPerAccount'); MessagesMap.set(HederaResponseCode.TOKEN_IS_PAUSED, 'Token is paused. This Token cannot be a part of any kind of Transaction until unpaused'); MessagesMap.set(HederaResponseCode.TOKEN_HAS_NO_PAUSE_KEY, 'Pause key is not set on token'); MessagesMap.set(HederaResponseCode.INVALID_PAUSE_KEY, 'The provided pause key was invalid'); -MessagesMap.set(HederaResponseCode.FREEZE_UPDATE_FILE_DOES_NOT_EXIST, 'The update file in a freeze transaction body must exist.'); -MessagesMap.set(HederaResponseCode.FREEZE_UPDATE_FILE_HASH_DOES_NOT_MATCH, 'The hash of the update file in a freeze transaction body must match the in-memory hash.'); -MessagesMap.set(HederaResponseCode.NO_UPGRADE_HAS_BEEN_PREPARED, 'A FREEZE_UPGRADE transaction was handled with no previous update prepared.'); -MessagesMap.set(HederaResponseCode.NO_FREEZE_IS_SCHEDULED, 'A FREEZE_ABORT transaction was handled with no scheduled freeze.'); -MessagesMap.set(HederaResponseCode.UPDATE_FILE_HASH_CHANGED_SINCE_PREPARE_UPGRADE, 'The update file hash when handling a FREEZE_UPGRADE transaction differs from the file hash at the time of handling the PREPARE_UPGRADE transaction.'); -MessagesMap.set(HederaResponseCode.FREEZE_START_TIME_MUST_BE_FUTURE, 'The given freeze start time was in the (consensus) past.'); -MessagesMap.set(HederaResponseCode.PREPARED_UPDATE_FILE_IS_IMMUTABLE, 'The prepared update file cannot be updated or appended until either the upgrade has been completed, or a FREEZE_ABORT has been handled.'); -MessagesMap.set(HederaResponseCode.FREEZE_ALREADY_SCHEDULED, 'Once a freeze is scheduled, it must be aborted before any other type of freeze can be performed.'); +MessagesMap.set(HederaResponseCode.FREEZE_UPDATE_FILE_DOES_NOT_EXIST, 'The update file in a freeze transaction body must exist'); +MessagesMap.set(HederaResponseCode.FREEZE_UPDATE_FILE_HASH_DOES_NOT_MATCH, 'The hash of the update file in a freeze transaction body must match the in-memory hash'); +MessagesMap.set(HederaResponseCode.NO_UPGRADE_HAS_BEEN_PREPARED, 'A FREEZE_UPGRADE transaction was handled with no previous update prepared'); +MessagesMap.set(HederaResponseCode.NO_FREEZE_IS_SCHEDULED, 'A FREEZE_ABORT transaction was handled with no scheduled freeze'); +MessagesMap.set(HederaResponseCode.UPDATE_FILE_HASH_CHANGED_SINCE_PREPARE_UPGRADE, 'The update file hash when handling a FREEZE_UPGRADE transaction differs from the file hash at the time of handling the PREPARE_UPGRADE transaction'); +MessagesMap.set(HederaResponseCode.FREEZE_START_TIME_MUST_BE_FUTURE, 'The given freeze start time was in the (consensus) past'); +MessagesMap.set(HederaResponseCode.PREPARED_UPDATE_FILE_IS_IMMUTABLE, 'The prepared update file cannot be updated or appended until either the upgrade has been completed, or a FREEZE_ABORT has been handled'); +MessagesMap.set(HederaResponseCode.FREEZE_ALREADY_SCHEDULED, 'Once a freeze is scheduled, it must be aborted before any other type of freeze can be performed'); MessagesMap.set(HederaResponseCode.FREEZE_UPGRADE_IN_PROGRESS, 'If an NMT upgrade has been prepared, the following operation must be a FREEZE_UPGRADE. (To issue a FREEZE_ONLY, submit a FREEZE_ABORT first.)'); -MessagesMap.set(HederaResponseCode.UPDATE_FILE_ID_DOES_NOT_MATCH_PREPARED, 'If an NMT upgrade has been prepared, the subsequent FREEZE_UPGRADE transaction must confirm the id of the file to be used in the upgrade.'); -MessagesMap.set(HederaResponseCode.UPDATE_FILE_HASH_DOES_NOT_MATCH_PREPARED, 'If an NMT upgrade has been prepared, the subsequent FREEZE_UPGRADE transaction must confirm the hash of the file to be used in the upgrade.'); +MessagesMap.set(HederaResponseCode.UPDATE_FILE_ID_DOES_NOT_MATCH_PREPARED, 'If an NMT upgrade has been prepared, the subsequent FREEZE_UPGRADE transaction must confirm the id of the file to be used in the upgrade'); +MessagesMap.set(HederaResponseCode.UPDATE_FILE_HASH_DOES_NOT_MATCH_PREPARED, 'If an NMT upgrade has been prepared, the subsequent FREEZE_UPGRADE transaction must confirm the hash of the file to be used in the upgrade'); MessagesMap.set(HederaResponseCode.CONSENSUS_GAS_EXHAUSTED, 'Consensus throttle did not allow execution of this transaction. System is throttled at'); -MessagesMap.set(HederaResponseCode.REVERTED_SUCCESS, 'A precompiled contract succeeded, but was later reverted.'); -MessagesMap.set(HederaResponseCode.MAX_STORAGE_IN_PRICE_REGIME_HAS_BEEN_USED, 'All contract storage allocated to the current price regime has been consumed.'); -MessagesMap.set(HederaResponseCode.INVALID_ALIAS_KEY, 'An alias used in a CryptoTransfer transaction is not the serialization of a primitive Key message--that is, a Key with a single Ed25519 or ECDSA(secp256k1) public key and no unknown protobuf fields.'); -MessagesMap.set(HederaResponseCode.UNEXPECTED_TOKEN_DECIMALS, 'A fungible token transfer expected a different number of decimals than the involved type actually has.'); +MessagesMap.set(HederaResponseCode.REVERTED_SUCCESS, 'A precompiled contract succeeded, but was later reverted'); +MessagesMap.set(HederaResponseCode.MAX_STORAGE_IN_PRICE_REGIME_HAS_BEEN_USED, 'All contract storage allocated to the current price regime has been consumed'); +MessagesMap.set(HederaResponseCode.INVALID_ALIAS_KEY, 'An alias used in a CryptoTransfer transaction is not the serialization of a primitive Key message--that is, a Key with a single Ed25519 or ECDSA(secp256k1) public key and no unknown protobuf fields'); +MessagesMap.set(HederaResponseCode.UNEXPECTED_TOKEN_DECIMALS, 'A fungible token transfer expected a different number of decimals than the involved type actually has'); MessagesMap.set(HederaResponseCode.INVALID_PROXY_ACCOUNT_ID, 'The proxy account id is invalid or does not exist'); MessagesMap.set(HederaResponseCode.INVALID_TRANSFER_ACCOUNT_ID, 'The transfer account id in CryptoDelete transaction is invalid or does not exist'); MessagesMap.set(HederaResponseCode.INVALID_FEE_COLLECTOR_ACCOUNT_ID, 'The fee collector account id in TokenFeeScheduleUpdate is invalid or does not exist'); -MessagesMap.set(HederaResponseCode.ALIAS_IS_IMMUTABLE, 'The alias already set on an account cannot be updated using CryptoUpdate transaction.'); -MessagesMap.set(HederaResponseCode.SPENDER_ACCOUNT_SAME_AS_OWNER, 'An approved allowance specifies a spender account that is the same as the hbar/token owner account.owner account.'); -MessagesMap.set(HederaResponseCode.AMOUNT_EXCEEDS_TOKEN_MAX_SUPPLY, 'The establishment or adjustment of an approved allowance cause the token allowance to exceed the token maximum supply.'); -MessagesMap.set(HederaResponseCode.NEGATIVE_ALLOWANCE_AMOUNT, 'The specified amount for an approved allowance cannot be negative.'); -MessagesMap.set(HederaResponseCode.CANNOT_APPROVE_FOR_ALL_FUNGIBLE_COMMON, 'The approveForAll flag cannot be set for a fungible token.'); -MessagesMap.set(HederaResponseCode.SPENDER_DOES_NOT_HAVE_ALLOWANCE, 'The spender does not have an existing approved allowance with the hbar/token owner.'); -MessagesMap.set(HederaResponseCode.AMOUNT_EXCEEDS_ALLOWANCE, 'The transfer amount exceeds the current approved allowance for the spender account.'); -MessagesMap.set(HederaResponseCode.MAX_ALLOWANCES_EXCEEDED, 'The payer account of an approveAllowances or adjustAllowance transaction is attempting to go beyond the maximum allowed number of allowances.'); -MessagesMap.set(HederaResponseCode.EMPTY_ALLOWANCES, 'No allowances have been specified in the approval transaction.'); -MessagesMap.set(HederaResponseCode.SPENDER_ACCOUNT_REPEATED_IN_ALLOWANCES, 'Spender is repeated more than once in Crypto or Token or NFT allowance lists in a single CryptoApproveAllowance transaction.'); -MessagesMap.set(HederaResponseCode.REPEATED_SERIAL_NUMS_IN_NFT_ALLOWANCES, 'Serial numbers are repeated in nft allowance for a single spender account'); +MessagesMap.set(HederaResponseCode.ALIAS_IS_IMMUTABLE, 'The alias already set on an account cannot be updated using CryptoUpdate transaction'); +MessagesMap.set(HederaResponseCode.SPENDER_ACCOUNT_SAME_AS_OWNER, 'An approved allowance specifies a spender account that is the same as the hbar/token owner account.owner account'); +MessagesMap.set(HederaResponseCode.AMOUNT_EXCEEDS_TOKEN_MAX_SUPPLY, 'The establishment or adjustment of an approved allowance cause the token allowance to exceed the token maximum supply'); +MessagesMap.set(HederaResponseCode.NEGATIVE_ALLOWANCE_AMOUNT, 'The specified amount for an approved allowance cannot be negative'); +MessagesMap.set(HederaResponseCode.CANNOT_APPROVE_FOR_ALL_FUNGIBLE_COMMON, 'The approveForAll flag cannot be set for a fungible token'); +MessagesMap.set(HederaResponseCode.SPENDER_DOES_NOT_HAVE_ALLOWANCE, 'The spender does not have an existing approved allowance with the hbar/token owner'); +MessagesMap.set(HederaResponseCode.AMOUNT_EXCEEDS_ALLOWANCE, 'The transfer amount exceeds the current approved allowance for the spender account'); +MessagesMap.set(HederaResponseCode.MAX_ALLOWANCES_EXCEEDED, 'The payer account of an approveAllowances or adjustAllowance transaction is attempting to go beyond the maximum allowed number of allowances'); +MessagesMap.set(HederaResponseCode.EMPTY_ALLOWANCES, 'No allowances have been specified in the approval transaction'); +MessagesMap.set(HederaResponseCode.SPENDER_ACCOUNT_REPEATED_IN_ALLOWANCES, 'Spender is repeated more than once in Crypto or Token or NFT allowance lists in a single CryptoApproveAllowance transaction'); +MessagesMap.set(HederaResponseCode.REPEATED_SERIAL_NUMS_IN_NFT_ALLOWANCES, 'Serial numbers are repeated in NFT allowance for a single spender account'); MessagesMap.set(HederaResponseCode.FUNGIBLE_TOKEN_IN_NFT_ALLOWANCES, 'Fungible common token used in NFT allowances'); MessagesMap.set(HederaResponseCode.NFT_IN_FUNGIBLE_TOKEN_ALLOWANCES, 'Non fungible token used in fungible token allowances'); -MessagesMap.set(HederaResponseCode.INVALID_ALLOWANCE_OWNER_ID, 'The account id specified as the owner is invalid or does not exist.'); -MessagesMap.set(HederaResponseCode.INVALID_ALLOWANCE_SPENDER_ID, 'The account id specified as the spender is invalid or does not exist.'); -MessagesMap.set(HederaResponseCode.REPEATED_ALLOWANCES_TO_DELETE, 'If the CryptoDeleteAllowance transaction has repeated crypto or token or Nft allowances to delete.'); -MessagesMap.set(HederaResponseCode.INVALID_DELEGATING_SPENDER, 'If the account Id specified as the delegating spender is invalid or does not exist.'); -MessagesMap.set(HederaResponseCode.DELEGATING_SPENDER_CANNOT_GRANT_APPROVE_FOR_ALL, 'The delegating Spender cannot grant approveForAll allowance on a NFT token type for another spender.'); -MessagesMap.set(HederaResponseCode.DELEGATING_SPENDER_DOES_NOT_HAVE_APPROVE_FOR_ALL, 'The delegating Spender cannot grant allowance on a NFT serial for another spender as it doesnt not have approveForAll granted on token-owner.'); +MessagesMap.set(HederaResponseCode.INVALID_ALLOWANCE_OWNER_ID, 'The account id specified as the owner is invalid or does not exist'); +MessagesMap.set(HederaResponseCode.INVALID_ALLOWANCE_SPENDER_ID, 'The account id specified as the spender is invalid or does not exist'); +MessagesMap.set(HederaResponseCode.REPEATED_ALLOWANCES_TO_DELETE, 'If the CryptoDeleteAllowance transaction has repeated crypto or token or NFT allowances to delete'); +MessagesMap.set(HederaResponseCode.INVALID_DELEGATING_SPENDER, 'If the account Id specified as the delegating spender is invalid or does not exist'); +MessagesMap.set(HederaResponseCode.DELEGATING_SPENDER_CANNOT_GRANT_APPROVE_FOR_ALL, 'The delegating Spender cannot grant approveForAll allowance on a NFT token type for another spender'); +MessagesMap.set(HederaResponseCode.DELEGATING_SPENDER_DOES_NOT_HAVE_APPROVE_FOR_ALL, 'The delegating Spender cannot grant allowance on a NFT serial for another spender as it doesnt not have approveForAll granted on token-owner'); diff --git a/frontend/src/app/services/policy-engine.service.ts b/frontend/src/app/services/policy-engine.service.ts index 924446166e..da51ec35df 100644 --- a/frontend/src/app/services/policy-engine.service.ts +++ b/frontend/src/app/services/policy-engine.service.ts @@ -365,4 +365,8 @@ export class PolicyEngineService { } return this.http.post(`${this.url}/${policyId}/test/`, formData); } + + getPolicyTransactions(id: string) { + return this.http.get(`${this.url}/${id}/transactions`); + } } diff --git a/frontend/src/app/services/schema.service.ts b/frontend/src/app/services/schema.service.ts index 989d652a16..f4c3892406 100644 --- a/frontend/src/app/services/schema.service.ts +++ b/frontend/src/app/services/schema.service.ts @@ -195,6 +195,10 @@ export class SchemaService { return this.http.get(`${this.singleSchemaUrl}/${id}/parents`); } + public getSchemaTransactions(id: string): Observable { + return this.http.get(`${this.singleSchemaUrl}/${id}/transactions`); + } + public getSchemaTree(id: string): Observable { return this.http.get(`${this.singleSchemaUrl}/${id}/tree`); } diff --git a/frontend/src/app/services/token.service.ts b/frontend/src/app/services/token.service.ts index 23e1123ca6..8413a32884 100644 --- a/frontend/src/app/services/token.service.ts +++ b/frontend/src/app/services/token.service.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { IToken, ITokenInfo, IUser } from '@guardian/interfaces'; +import { IToken, ITokenInfo } from '@guardian/interfaces'; import { Observable } from 'rxjs'; import { API_BASE_URL } from './api'; import { headersV2 } from '../constants'; @@ -129,4 +129,8 @@ export class TokenService { public menuList(): Observable { return this.http.get(`${this.url}/menu/all`); } + + public getTokenTransactions(id: string) { + return this.http.get(`${this.url}/${id}/transactions`); + } } diff --git a/frontend/src/app/utils/permissions-interface.ts b/frontend/src/app/utils/permissions-interface.ts index 7ef2295b37..1eaf075441 100644 --- a/frontend/src/app/utils/permissions-interface.ts +++ b/frontend/src/app/utils/permissions-interface.ts @@ -121,7 +121,8 @@ export const entityNames = new Map([ [PermissionEntities.THEME, 'Theme'], [PermissionEntities.TOKEN, 'Token'], [PermissionEntities.TRUST_CHAIN, 'Trust Chain'], - [PermissionEntities.ROLE, 'Role'] + [PermissionEntities.ROLE, 'Role'], + [PermissionEntities.STATISTIC, 'Statistic'] ]) export const actionIndexes = new Map([ diff --git a/frontend/src/app/views/new-header/new-header.component.html b/frontend/src/app/views/new-header/new-header.component.html index 9a7f239caf..6336689c3f 100644 --- a/frontend/src/app/views/new-header/new-header.component.html +++ b/frontend/src/app/views/new-header/new-header.component.html @@ -57,17 +57,6 @@
-
- - - Balance - {{ balance }} - -
-
-
-
+
+ + Balance {{ balance }} +
+
+
+
+
span { + display: flex; + justify-content: space-between; + width: 100%; + } + + &.collapsed-item { + div, + span { + display: none; + } + } +} + + .boundary-box { height: 78px; display: flex; diff --git a/frontend/src/app/views/schemas/schemas.component.html b/frontend/src/app/views/schemas/schemas.component.html index b4a8a1e9b1..28e3d0f249 100644 --- a/frontend/src/app/views/schemas/schemas.component.html +++ b/frontend/src/app/views/schemas/schemas.component.html @@ -230,7 +230,7 @@
-
+
-
+
-
+
-
+
Schema + +