{"id":25393725,"url":"https://github.com/undp/undp-carbon-registry","last_synced_at":"2025-04-06T00:09:19.971Z","repository":{"id":64652662,"uuid":"507142361","full_name":"undp/undp-carbon-registry","owner":"undp","description":"National Carbon Credit Registry Digital Public Good (DPG) by Digital For Climate (D4C) collaboration. Code coordinated by ExO/CDO \u0026 BPPS/Climate.","archived":false,"fork":false,"pushed_at":"2025-02-11T08:36:21.000Z","size":619429,"stargazers_count":53,"open_issues_count":19,"forks_count":45,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-03-13T11:19:45.559Z","etag":null,"topics":["carbon-emissions","climate","digital-public-goods","sustainable-development-goals"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/undp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-24T20:57:37.000Z","updated_at":"2025-03-03T07:03:43.000Z","dependencies_parsed_at":"2023-09-21T19:47:36.926Z","dependency_job_id":"38f99def-0c42-4a58-a368-5a5fbde3c5a5","html_url":"https://github.com/undp/undp-carbon-registry","commit_stats":{"total_commits":2362,"total_committers":27,"mean_commits":87.48148148148148,"dds":0.5402201524132091,"last_synced_commit":"c60484db27e451cc05f7893facad5521864609e5"},"previous_names":["undp/undp-carbon-registry","undp/carbon-registry"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/undp%2Fundp-carbon-registry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/undp%2Fundp-carbon-registry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/undp%2Fundp-carbon-registry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/undp%2Fundp-carbon-registry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/undp","download_url":"https://codeload.github.com/undp/undp-carbon-registry/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243507684,"owners_count":20301878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["carbon-emissions","climate","digital-public-goods","sustainable-development-goals"],"created_at":"2025-02-15T18:22:38.606Z","updated_at":"2025-04-06T00:09:19.964Z","avatar_url":"https://github.com/undp.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![GitHub last commit](https://img.shields.io/github/last-commit/undp/carbon-registry)\n![Uptime](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/undp/carbon-registry-status/master/api/carbon-registry/uptime.json)\n![GitHub Workflow Status (with branch)](https://img.shields.io/github/actions/workflow/status/undp/carbon-registry/server-deployments.yml?branch=main\u0026label=server%20build)\n ![GitHub Workflow Status (with branch)](https://img.shields.io/github/actions/workflow/status/undp/carbon-registry/frontend-deployment-prod.yml?branch=main\u0026label=frontend%20build)\n[![](https://img.shields.io/badge/chat-SparkBlue-blue)](https://www.sparkblue.org/group/keeping-track-digital-public-goods-paris-agreement)\n[![](https://img.shields.io/badge/Digital%20Public%20Good-Certified-blueviolet)](https://app.digitalpublicgoods.net/a/10403)\n\n\u003ca name=\"about\"\u003e\u003c/a\u003e\n\n# National Carbon Credit Registry (NEW RELEASE END OF APRIL 2025) \n\nCURRENTLY UNDER CONSTRUCTION. New updated release end of April 2025 will include improvements for UI/UX, credit serialisation and issuance, as well as reporting modules. Please check back then.\n\n\n\n\n\n# About\nThe National Carbon Credit Registry is an open-source toolkit developed by UNDP to help countries develop a national registry to fulfil the requirements of Article 6 (Paris Agreement). \n\nIt allows countries to track, record, issue, monitor, and trade credits from various mitigation activities, all while ensuring data integrity through a secure ledger. The system tracks the entire process of carbon credits, from issuance to retirement, and makes the data publicly available to enhance transparency. \n\nThe UNDP hosts and maintains a free standard code base on this Github, with basic feature functionality. Countries can customize and deploy their version of the registry, so that it meets national requirements, linking it to other national and international systems. Using open-source code helps reduce costs, avoid duplication, and ensure compatibility with existing systems, simplifying the creation of domestic carbon markets.  \n\nMore information about the project’s background, vision, policy context, support provided can be found in the demo site https://www.demo.carbreg.org/. Please contact the UNDP DPG team digital4planet@undp.org to request a walkthrough demonstration and to discuss further support and collaboration. \n\n**:red_circle: ANNOUNCEMENT**: Following recent announcements and outcomes of COP29, the open-source carbon registry will undergo updates to align with the latest requirements and guidelines under Article 6 of the Paris Agreement. These updates aim to enhance transparency, interoperability, and environmental integrity in international carbon transactions, as well as to support Parties in meeting their Nationally Determined Contributions (NDCs) more effectively.\n\n\n\n## Index\n* [About](#about)\n* [Standards and License](#standards)\n* [Changelog](#changelog)\n* [Features and User flow](#userflow)\n* [Demo](#demo)\n* [Architecture](#architecture)\n* [Project Structure](#structure)\n* [Run as Containers](#container)\n* [Run Services Locally](#local)\n* [Run Services on Cloud](#cloud)\n* [User Onboarding](#user)\n* [Web Frontend](#frontend)\n* [Localization](#localization)\n* [API](#api)\n* [Status Page](#status)\n* [Governance \u0026 Support](#support)\n\n\u003ca name=\"standards\"\u003e\u003c/a\u003e\n## Standards and License\nThis codebase follows the digital public goods standard: https://digitalpublicgoods.net/standard/ It is built according to the Principles for Digital Development: https://digitalprinciples.org/ \n\nThe tool is developed and maintained by UNDP and is licensed under the GNU Affero General Public License (AGPL-3.0), which permits free use, modification, and sharing of the software.  \n\nWe kindly ask users to inform us of your usage by contacting digital4planet@undp.org, as this helps us track the tool’s impact and guide future improvements.  \n\nUnder AGPL-3.0, any modifications to the code must be made publicly available by creating a new branch on GitHub. The software cannot be relicensed under more restrictive terms without adhering to the AGPL-3.0 guidelines. \n\n\u003ca name=\"changelog\"\u003e\u003c/a\u003e\n## Changelog\nCURRENTLY UNDER CONSTRUCTION. NEW RELEASE PLANNED FOR APRIL 2025. \n[Learn about the latest improvements.](./CHANGES.md)\n\n\u003ca name=\"userflow\"\u003e\u003c/a\u003e\n## Features and User Flow \nEvery country has distinct carbon market policies, processes, and governance structures and will need to customize the Carbon Registry to accommodate local needs.  \n\nThe open-source code (demo version) includes the following common set of steps (features) that will be needed in most countries.\n\n- **User registration**: Users (within government, certifiers, project developers, ministries) can register and be approved for the tool.\n\n- **Project registration**: Projects aimed at reducing or removing carbon emissions are registered. Baseline emissions and expected credits are calculated, and ownership is determined.\n\n- **Validation by Third Parties**: Independent entities validate and approve the projects, authorizing them for publication in the registry.\n\n- **Monitoring \u0026 Reporting**: Once projects are implemented, emissions reductions are monitored and reported. Verified carbon credits are issued based on these results.\n\n- **Trading \u0026 Tracking**: Issued credits can be traded, tracked, and retired within the registry, ensuring proper ownership transfer and preventing double counting.\n\nThe demo version provides an example user flow that can act as a starting point for customization: \n![Example Carbon Registry Workflows](https://raw.githubusercontent.com/undp/carbon-registry/bfec4de960ba9faf1df08689049f148fc05ae9bc/documention/Example%20Carbon%20Registry%20Workflows.png)\n\nKey features of the software include:  \n- **Issuing Carbon Credits:** Each verified project credit is assigned a unique serial number, based on UNFCCC-CDM methodology. All transfers and retirements are immutably recorded, enhancing the efficiency and reliability of carbon credit transactions. This ensures transparency and accountability in the carbon market. \n\n- **Dashboard and Insights:** Users can access an interactive dashboard with dynamic data visualizations, including graphs, maps, and regional statistics. This provides a clear overview of progress and trends, along with a visual timeline of activities for each project, showing a detailed history of actions and users involved. \n\n- **Interoperable and Exportable data:** The Carbon Registry's data model is aligned with the CAD Trust Data Model, ensuring interoperability. It can also integrate with the ITMO Voluntary Bilateral Cooperation Platform, managed by UNDP. An open RESTful API allows for the development of innovative transparency tools and seamless integration with other external systems. \n\n\u003ca name=\"demo\"\u003e\u003c/a\u003e\n## Demo Site \nA demo site at https://www.demo.carbreg.org/login illustrates the basic functionality of the carbon registry for your country. Please contact the UNDP DPG team to request a walkthrough of the demo and to be added to the user list for the demo site. \n\n\u003ca name=\"architecture\"\u003e\u003c/a\u003e\n## System Architecture\nUNDP Carbon Registry is based on service oriented architecture (SOA). Following diagram visualize the basic components in the system.\n\n![alt text](./documention/imgs/System%20Architecture.svg)\n\n\u003ca name=\"services\"\u003e\u003c/a\u003e\n### **System Services**\n#### *National Service*\n\nAuthenticate, Validate and Accept user (Government, Project Developer/Certifier) API requests related to the following functionalities,\n- User and company CRUD operations.\n- User authentication.\n- Project life cycle management. \n- Credit life cycle management.\n\nService is horizontally scalable and state maintained in the following locations,\n- File storage.\n- Operational Database.\n- Ledger Database.\n\nUses the Carbon Credit Calculator and Serial Number Generator node modules to estimate the project carbon credit amount and issue a serial number.\nUses Ledger interface to persist project and credit life cycles.\n\n#### *Analytics Service*\nServe all the system analytics. Generate all the statistics using the operational database. \nHorizontally scalable. \n\n#### *Replicator Service*\nAsynchronously replicate ledger database events in to the operational database. During the replication process it injects additional information to the data for query purposes (Eg: Location information). \nCurrently implemented for QLDB and PostgresSQL ledgers. By implementing [replicator interface](./backend/services/src/ledger-replicator/replicator-interface.service.ts) can support more ledger replicators. \nReplicator select based on the `LEDGER_TYPE` environment variable. Support types `QLDB`, `PGSQL(Default)`.\n\n### **Deployment**\nSystem services can deploy in 2 ways.\n- **As a Container** - Each service boundary containerized in to a docker container and can deploy on any container orchestration service. [Please refer Docker Compose file](./docker-compose.yml)\n- **As a Function** - Each service boundary packaged as a function (Serverless) and host on any Function As A Service (FaaS) stack. [Please refer Serverless configuration file](./backend/services/serverless.yml)\n\n### **External Service Providers**\nAll the external services access through a generic interface. It will decouple the system implementation from the external services and enable extendability to multiple services.\n\n**Geo Location Service** \n\nCurrently implemented for 2 options.\n1. File based approach. User has to manually add the regions with the geo coordinates. [Sample File](./backend/services/regions.csv). To apply new file changes, replicator service needs to restart. \n2. [Mapbox](https://mapbox.com). Dynamically query geo coordinates from the Mapbox API. \n\nCan add more options by implementing [location interface](./backend/services/src/shared/location/location.interface.ts)\n\nChange by environment variable `LOCATION_SERVICE`. Supported types `MAPBOX`, `FILE(Default)`\n\n**File Service**\n\nImplemented 2 options for static file hosting.\n1. NestJS static file hosting using the local storage and container volumes.\n2. AWS S3 file storage.\n\nCan add more options by implementing [file handler interface](./backend/services/src/shared/file-handler/filehandler.interface.ts)\n\nChange by environment variable `FILE_SERVICE`. Supported types `S3`, `LOCAL(Default)`\n\n### **Database Architecture**\nPrimary/secondary database architecture used to store carbon project and account balances. \nLedger database is the primary database. Add/update projects and update account balances in a single transaction. Currently implemented only for AWS QLDB\n\nOperational Database is the secondary database. Eventually replicated to this from primary database via data stream. Implemented based on PostgresSQL\n\n**Why Two Database Approach?**\n1. Cost and Query capabilities - Ledger database (blockchain) read capabilities can be limited and costly. To support rich statistics and minimize the cost, data is replicated in to a cheap query database.\n2. Disaster recovery\n3. Scalability - Primary/secondary database architecture is scalable since additional secondary databases can be added as needed to handle more read operations.\n\n**Why Ledger Database?**\n1. Immutable and Transparent - Track and maintain a sequenced history of every carbon project and credit change. \n2. Data Integrity (Cryptographic verification by third party).\n3. Reconcile carbon credits and company account balance.\n\n**Ledger Database Interface**\n\nThis enables the capability to add any blockchain or ledger database support to the carbon registry without functionality module changes. Currently implemented for PostgresSQL and AWS QLDB.\n\n**PostgresSQL Ledger Implementation** storage all the carbon project and credit events in a separate event database with the sequence number. Support all the ledger functionalities except immutability.  \n\n\nSingle database approach used for user and company management. \n\n### **Ledger Layout**\nCarbon Registry contains 3 ledger tables.\n1. Project ledger - Contains all the project and credit transactions.\n2. Company Account Ledger (Credit) - Contains company accounts credit transactions.\n3. Country Account Ledger (Credit) - Contains country credit transactions.\n\nThe below diagram demonstrates the the ledger behavior of project create, authorise, issue and transfer processes. Blue color document icon denotes a single data block in a ledger.\n\n![alt text](./documention/imgs/Ledger.svg)\n\n### **Authentication**\n- JWT Authentication - All endpoints based on role permissions.\n- API Key Authentication - MRV System connectivity.\n\n\u003ca name=\"structure\"\u003e\u003c/a\u003e\n## Project Structure\n\n    .\n    ├── .github                         # CI/CD [Github Actions files]\n    ├── deployment                      # Declarative configuration files for initial resource creation and setup [AWS Cloudformation]\n    ├── backend                         # System service implementation\n        ├── services                    # Services implementation [NestJS application]\n            ├── src\n                ├── national-api        # National API [NestJS module]      \n                ├── stats-api           # Statistics API [NestJS module]\n                ├── ledger-replicator   # Blockchain Database data replicator [QLDB to Postgres]\n                ├── shared              # Shared resources [NestJS module]     \n            ├── serverless.yml          # Service deployment scripts [Serverless + AWS Lambda]\n    ├── libs\n        ├── carbon-credit-calculator    # Implementation for the Carbon credit calculation library [Node module + Typescript]\n        ├── serial-number-gen           # Implementation for the carbon project serial number calculation [Node module + Typescript]\n    ├── web                             # System web frontend implementation [ReactJS]\n    ├── .gitignore\n    ├── docker-compose.yml              # Docker container definitions\n    └── README.md\n\n\u003ca name=\"container\"\u003e\u003c/a\u003e\n## Run Services As Containers\n- Update [docker compose file](./docker-compose.yml) env variables as required.\n    - Currently all the emails are disabled using env variable `IS_EMAIL_DISABLED`. When the emails are disabled email payload will be printed on the console. User account passwords needs to extract from this console log. Including root user account, search for a log line starting with ```Password (temporary)``` on national container (`docker logs -f undp-carbon-registry-national-1`). \n    - Add / update following environment variables to enable email functionality.\n        - `IS_EMAIL_DISABLED`=false\n        - `SOURCE_EMAIL` (Sender email address)\n        - `SMTP_ENDPOINT`\n        - `SMTP_USERNAME`\n        - `SMTP_PASSWORD`\n    - Use `DB_PASSWORD` env variable to change PostgresSQL database password\n    - Configure system root account email by updating environment variable `ROOT EMAIL`. If the email service is enabled, on the first docker start, this email address will receive a new email with the root user password.\n    - By default frontend does not show map images on dashboard and project view. To enable them please update `REACT_APP_MAP_TYPE` env variable to `Mapbox` and add new env variable `REACT_APP_MAPBOXGL_ACCESS_TOKEN` with [MapBox public access token](https://docs.mapbox.com/help/tutorials/get-started-tokens-api/) in web container. \n- Add user data\n  - Update [organisations.csv](./organisations.csv) file to add organisations.\n  - Update [users.csv](./users.csv) file to add users.\n  - When updating files keep the header and replace existing dummy data with your data.\n  - These users and companys add to the system each docker restart.\n- Run `docker-compose up -d --build`. This will build and start containers for following services,\n    - PostgresDB container\n    - National service\n    - Analytics service\n    - Replicator service\n    - React web server with Nginx. \n- Web frontend on http://localhost:3030/\n- API Endpoints,\n  - http://localhost:3000/national#/\n  - http://localhost:3100/stats#/\n\n\u003ca name=\"local\"\u003e\u003c/a\u003e\n## Run Services Locally\n- Setup postgreSQL locally and create a new database.\n- Update following DB configurations in the .env.local file (If the file does not exist please create a new .env.local)\n    - DB_HOST (Default localhost)\n    - DB_PORT (Default 5432)\n    - DB_USER (Default root)\n    - DB_PASSWORD\n    - DB_NAME (Default carbondbdev)\n- Move to folder `cd backend/service`\n- Run `yarn run sls:install `\n- Initial user data setup `serverless invoke local --stage=local --function setup --data '{\"rootEmail\": \"\u003cRoot user email\u003e\",\"systemCountryCode\": \"\u003cSystem country Alpha 2 code\u003e\", \"name\": \"\u003cSystem country name\u003e\", \"logoBase64\": \"\u003cSystem country logo base64\u003e\"}'`\n- Start all the services by executing `sls offline --stage=local`\n- Now all the system services are up and running. Swagger documentation will be available on `http://localhost:3000/local/national`\n\n\u003ca name=\"cloud\"\u003e\u003c/a\u003e\n## Deploy System on the AWS Cloud\n- Execute to create all the required resources on the AWS.\n    ```\n    aws cloudformation deploy --template-file ./deployment/aws-formation.yml --stack-name carbon-registry-basic --parameter-overrides EnvironmentName=\u003cstage\u003e DBPassword=\u003cpassword\u003e --capabilities CAPABILITY_NAMED_IAM\n    ```\n- Setup following Github Secrets to enable CI/CD\n    - AWS_ACCESS_KEY_ID\n    - AWS_SECRET_ACCESS_KEY\n- Run it manually to deploy all the lambda services immediately. It will create 2 lambda layers and following lambda functions,\n    - national-api: Handle all carbon registry user and program creation. Trigger by external http request.\n    - replicator: Replicate Ledger database entries in to Postgres database for analytics. Trigger by new record on the Kinesis stream.\n    - setup: Function to add initial system user data.\n- Create initial user data in the system by invoking setup lambda function by executing\n    ```\n    aws lambda invoke \\\n        --function-name carbon-registry-services-dev-setup --cli-binary-format raw-in-base64-out\\\n        --payload '{\"rootEmail\": \"\u003cRoot user email\u003e\",\"systemCountryCode\": \"\u003cSystem country Alpha 2 code\u003e\", \"name\": \"\u003cSystem country name\u003e\", \"logoBase64\": \"\u003cSystem country logo base64\u003e\"}' \\\n        response.json\n    ```\n\n\u003ca name=\"external\"\u003e\u003c/a\u003e\n## External Connectivity\n\n### UNDP'S ITMO Platform\nThe Carbon Registry is designed to be linked to the ITMO Voluntary Bilateral Cooperation Platform, https://carboncooperation.undp.org/, managed by UNDP. This enables countries to automatically sync projects created/authorised and credits issued within its national registry to the international trading platform. The system does this by: \n1. Carbon Registry make a daily to the retrieve ITMO platform projects.\n2. Projects create in the Carbon Registry when projects are authorized in the ITMO Platform \n3. The Carbon Registry update when the projects are Issued with credits in the ITMO Platform \n\n#### \u003cb\u003eLifecycle\u003c/b\u003e\n![alt text](./documention/imgs/ITMOxCARBON_LifeCycle.svg)\n\n#### \u003cb\u003eProject Creation and Authorisation\u003c/b\u003e\n- Authorisation of projects in the ITMO Platform identified by the event name: \"ITMO-Design Document (DD) \u0026 Validation Report / Upload on National Public Registry\". \n- If the Company Tax Id doesn’t exist in the Carbon Registry, that company created in the Carbon Registry.\n- When creating the project: \n    - The project created with the state “Pending”  \n    - The credit estimate set to 100 by default\n    - The company percentage set to 100% \n    - The serial number for the project generated the same as any other project in the Carbon Registry. \n- Projects retrieved from the ITMO Platform and created in the Carbon Registry can Authorised/Rejected by a Government user the same as any other project in the Carbon Registry\n- When a project is authorised, the authorised credits will be the default credit estimate mentioned above. The project can be issued with credits by a Government user the same as any other project in the Carbon Registry. \n\n#### \u003cb\u003eCredit Issuance\u003c/b\u003e\n- Credits can be issued for projects retrieved from the ITMO Platform and created in the Carbon Registry in two ways; \n    - By a Government user the same as any other project. \n    - Credit issuance in the ITMO Platform which should be reflected in the Carbon Registry. \n- In the case of 2 above, \n    - Credit issuance identified by the event name: \"Upload Final Monitoring Report\" in the ITMO Platform. \n\n#### \u003cb\u003eField Mapping\u003c/b\u003e\n\n\u003cb\u003eCompany\u003c/b\u003e\n| **Name in the Carbon Registry**   | **Mandatory in the Carbon Registry**   | **Name in the ITMO Platform**   |\n| --- | --- | --- |\n| Tax ID (_taxId_)  | Yes  | company  |\n| Name (_name_)  | Yes  | company  |\n| Email (_email_)  | Yes  | Set default : nce.digital+[_organisation_]@undp.org  |\n| Phone Number (_phoneNo_)  | Yes  | Set default : 00  |\n| Website  |   |   |\n| Address  |   | Set default : Country if the Registry  |\n| Logo  |   |   |\n| Country (_country_)  |   | Set default : Country of the Registry  |\n| Role (_companyRole_)  | Yes  | Set default : ProgrammeDeveloper  |\n\n\u003cbr\u003e\u003cb\u003eUser\u003c/b\u003e\n| Name in the Carbon Registry | Mandatory in the Carbon Registry | Name in the ITMO Platform |\n| --- | --- | --- |\n| Email (_email_)  | Yes  | Set default : nce.digital+[_organisation_]@undp.org  |\n| Role (_role_)  | Yes  | Set default : Admin  |\n| Phone Number (_phoneNo_)  |   | Set default : 00  |\n\n\u003cbr\u003e\u003cb\u003eProject\u003c/b\u003e\n| **Name in the Carbon Registry**   | **Mandatory in the Carbon Registry**   | **Name in the ITMO Platform**   |\n| --- | --- | --- |\n| Project Name (title)  | Yes  | Name  |\n| External ID (externalId)  | Yes  | id  |\n| Credit Issuance Serial Number   |   |   |\n| Current Status   |   | Set default : Pending  |\n| Applicant Type   |   | Set default : Project Developer  |\n| Sector (_sector_)  | Yes  | [Sector](#itmo-sector-mapping)  |\n| Sectoral Scope (_sectoralScope_)  | Yes  | [Sector](#itmo-sector-mapping)|\n| Project Start Date (_startTime_)  | Yes  | createdAt  |\n| Project End Date  (_endTime_)  | Yes  | createdAt + 10 years  |\n| Geographical Location (Regional) (_geographicalLocation_)  | Yes  | country _(Name not mentioned as ISO3 or actual name)_  |\n| Buyer Country Eligibility   |   |   |\n| Project Cost (USD) (_programmeCostUSD_)  | Yes  | Set default : Null  |\n| Financing Type   |   |   |\n| Grant Equivalent Amount   |   |   |\n| Carbon Price (Dollars per ton)   |   |   |\n| Company   |   | company  |\n| Company Tax ID (_proponentTaxVatId_)  | Yes  | company  |\n| Company Percentage (_proponentPercentage_)  | Yes  | Set default : 100%  |\n| Type of Mitigation Action/Activity (_typeOfMitigation_)  | Yes  | [Sector](#itmo-sector-mapping) |\n| GHGs Covered (_greenHouseGasses_)  | Yes  | Set default :  CO2  |\n| Credits Authorised  |   | Set default : 100  |\n| Credits Issued   |   | Set default : 10   |\n| Credits Transferred   |   |   |\n| Credits Frozen   |   |   |\n| Credits Retired   |   |   |\n| Credits authorised for international transfer and use (Total cumulative maximum amount of Mitigation Outcomes for which international transfer and use is authorized)   |   |   |\n| Crediting Period (years)   |   |   |\n| Project Materials   |   | Files \\*   |\n| Project Materials  |   | Files \\*  |\n| **Credit Calculation Fields / Mitigation Type Calculation**    |   |   |\n| **Agriculture**   |   |   |\n| Land Area  |   |   |\n| Land Area Unit  |   |   |\n| **Solar**   |   |   |\n| energy generation  |   |   |\n| energy generation unit  |   |   |\n| consumer group  |   |   |\n\n#### \u003cb\u003eITMO Sector Mapping\u003c/b\u003e\n|ITMO Sector Field Value|Sector|Sectoral Scope|Type Of Mitigation|\n| -- | -- | -- | -- |\n|energy-distribution|Energy|Energy Distribution|Energy Distribution\n|agriculture|Agriculture|Agriculture|Agriculture|\n|energy-industries|Energy|Energy Industry|EE Industry\n|Default|Other|Energy Industry|EE Industry\n\n\n#### \u003cb\u003eAssumptions\u003c/b\u003e\n- Project estimated credit amount is 100.\n- Project issued credit amount is always 10.\n\n#### \u003cb\u003eDocker Integration Setup\u003c/b\u003e\n1. Append `data-importer` to `docker-compose` file `replicator` service `RUN_MODULE` env variable with comma separated. \n2. Update following env variables in the `docker-compose` file `replicator` service.\n    - ITMO_API_KEY\n    - ITMO_EMAIL\n    - ITMO_PASSWORD\n    - ITMO_ENDPOINT\n3. Projects will import on each docker restart. \n\n\u003ca name=\"user\"\u003e\u003c/a\u003e\n## User Onboarding and Permissions Model\n\n### User Roles\nSystem pre-defined user roles are as follows,\n- Root\n- Company Level (National Government, Project and Certification Company come under this level) \n    - Admin \n    - Manager \n    - View Only \n\n### User Onboarding Process\n1. After the system setup, the system have a Root User for the setup email (one Root User for the system) \n2. Root User is responsible for creating the Government entity and the Admin of the Government \n3. The Government Admin is responsible for creating the other companies and Admins of each company. \n4. Admin of the company has the authority to add the remaining users (Admin, Managers, View Only Users) to the company. \n5. When a user is added to the system, a confirmation email should be sent to users including the login password. \n\n### User Management \n\nAll the CRUD operations can be performed as per the following table,\n\n| Company Role | New User Role | Authorized User Roles (Company) |\n| --- | --- | --- |\n| Government | Root | Cannot create new one other than the default system user and Can manage all the users in the system |\n| Government | Admin\u003cbr\u003eManager\u003cbr\u003eView Only | Root\u003cbr\u003eAdmin(Government) |\n| All other Company Roles | Admin\u003cbr\u003eManager\u003cbr\u003eView Only | Root\u003cbr\u003eAdmin(Government)\u003cbr\u003eAdmin(Company) |\n\n- All users can edit own user account except Role and Email.\n- Users are not allowed to delete the own account from the system.\n\n\u003ca name=\"frontend\"\u003e\u003c/a\u003e\n### Web Frontend\nWeb frontend implemented using ReactJS framework. Please refer [getting started with react app](./web/README.md) for more information.\n\n\u003ca name=\"localization\"\u003e\u003c/a\u003e\n### Localization\n* Languages (Current): English\n* Languages (In Progress): French. Spanish \nPlease refer [here](./web/public/locales/i18n/README.md) for adding a new language translation file.\n\n\u003ca name=\"api\"\u003e\u003c/a\u003e\n### Application Programming Interface (API)\nFor integration, reference RESTful Web API Documentation documentation via Swagger. To access\n- National API: api.APP_URL/national\n- Status API: api.APP_URL/stats\n\n\u003ca name=\"resource\"\u003e\u003c/a\u003e\n### Resource Requirements\n\n| Resource | Minimum | Recommended |\n| :---         |           ---: |          ---: |\n| Memory   | 4 GB    | 8 GB    |\n| CPU     | 4 Cores       |   4 Cores   |\n| Storage     |  20 GB       |   50 GB   |\n| OS     | Linux \u003cbr\u003e Windows Server 2016 and later versions.      |      |\n\nNote: Above resource requirement mentioned for a single instance from each microservice.\n\n\u003ca name=\"status\"\u003e\u003c/a\u003e\n### Status Page\nFor transparent uptime monitoring go to status.APP_URL\nOpen source code available at https://github.com/undp/carbon-registry-status\n\n\u003ca name=\"support\"\u003e\u003c/a\u003e\n### Governance and Support\n\nThe United Nations Development Program (UNDP) is responsible for managing the application. To ensure alignment with international demand, Digital For Climate (D4C) will act as an advisory body to the Digital Public Good Carbon Registry codebase. D4C is a collaboration between [European Bank for Reconstruction and Development (EBRD)](https://www.ebrd.com), [United Nations Development Program (UNDP)](https://www.undp.org), [United Nations Framework Convention on Climate Change (UNFCCC)](https://www.unfccc.int), [International Emissions Trading Association (IETA)](https://www.ieta.org), [European Space Agency (ESA)](https://www.esa.int), and [World Bank Group](https://www.worldbank.org)  that aims to coordinate respective workflows and create a modular and interoperable end-to-end digital ecosystem for the carbon market. The overarching goal is to support a transparent, high integrity global carbon market that can channel capital for impactful climate action and low-carbon development.\n\nThis code is managed by [United Nations Development Programme](https://www.undp.org) as custodian, detailed in the press release. For technical questions, please visit the community of practice [‘Keeping Track of the Paris Agreement’](https://unfccc.int/news/paris-agreement-progress-tracker](https://www.sparkblue.org/group/keeping-track-digital-public-goods-paris-agreement/content/fourth-community-practice-meeting)) or submit through the [open forum](https://github.com/undp/carbon-registry/discussions). For any other questions, contact us at digital4planet@undp.org. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fundp%2Fundp-carbon-registry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fundp%2Fundp-carbon-registry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fundp%2Fundp-carbon-registry/lists"}