{"_id":"@marcos_feitoza/personal-finance-backend-trades-assets","_rev":"31-9105bd788f5c740630db56bed4b501cd","name":"@marcos_feitoza/personal-finance-backend-trades-assets","dist-tags":{"latest":"1.12.0"},"versions":{"1.0.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.0.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.0.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"093c1f7b3a774d344e8cbb0cb594b72717ca3e22","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.0.0.tgz","fileCount":22,"integrity":"sha512-dxeGclpibpNPv1/D+zxpqaEXB6ldgCKRD1a9j3I2DLfsLFZsxbUhqzTz2IBWVR7REIQHnyvp9ZhPwVabAjLeIA==","signatures":[{"sig":"MEUCIBddhTDoRb4iSOIIMaHXc4BMAcein6hMTkeFWq86HEP4AiEA6wDOHl189AWnnvoLoeYBBMCIPcVWO8xaPnWccrpNlOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33432},"gitHead":"5a851d8e6e24c0ef898215e2b4effea65b076d72","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.0.0_1758319353569_0.5876210564302005","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.0.1","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.0.1","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"7d58a89b29bb80592646c42443e1a69d4821139c","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.0.1.tgz","fileCount":22,"integrity":"sha512-u/gb3gE/CHdndCr/zspFpxGhz6Hoc1bqR5Zh0wo6N3BVeAbWa7hTgwFzPH9DAmicImgC+KJEjy8Glrw5XFg2oA==","signatures":[{"sig":"MEUCIQC1csoA3lJI1cIiySUK7kI5cixbSypKNOgwnadUwjGcNQIgTD2FHGXryxMKLO3ONmTkGfCptBbvIThHDNstMBPbmN8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36226},"gitHead":"3acfcd178d1d94824a142cc9b146674e0d3eaf40","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.0.1_1760742485897_0.030609424175439326","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.0.2","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.0.2","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"5697f60b5036528178a46aa1466be187d216c59d","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.0.2.tgz","fileCount":22,"integrity":"sha512-hGWDiHFsaS/MKoLrp6mnHypvr5wgvZz7jmwoXZD34MKX+hOk1PJDPzWp5lVG4Ve1/JfKApvwIF63Abqfl2xmmw==","signatures":[{"sig":"MEUCIHA3Mu/mKh/oFwOAfTvZDB/S9Wwem8U8QoBDhuwQClSkAiEAp8os0gijU5jy5SxuEjf++fqJ0+pM93CRy269TJrxP/0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36687},"gitHead":"77adc5d069fee78c93c2420cc0be282cdcb147d9","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.0.2_1761239375315_0.20976059233984845","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.0.3","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.0.3","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"ad0af64f9cbc80fa82b19f59a258b5e210c72d4a","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.0.3.tgz","fileCount":22,"integrity":"sha512-aagRv12adkBOXdF5tgoNH49K6Gq+DM6QPHJEL8AywBR47MRbumVzS40Ej5DwYEP1KzroQm2Mii9rC8E98DuARg==","signatures":[{"sig":"MEYCIQDj2T5aqSifEi71OekWJARR3p0YX/NI6AbIspjWRNAe8AIhANKvF0+LhO3R5Qv4vj9+cn8ldJmRq5I9U4GYwYWwpn+S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36962},"gitHead":"74572c6077995749eee6214f452a36d31f973317","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.0.3_1761257142499_0.7304680915272304","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.0.4","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.0.4","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"7b7162643ee253bdbc96b019a6557175ea8a6cff","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.0.4.tgz","fileCount":22,"integrity":"sha512-HlBO6tXRPUwI8x+hnUp5/839RUa1lyw4ZYfFJnYl4DrrV9uZepI41ZA086qJU+x0glqylmUNWkWDP5fhUfk4Rw==","signatures":[{"sig":"MEUCIQDrucKJHKLnSF7n4nxfe+OlL0hk7lRuTcbQ6AF6tzHbZAIgMTrC+7m/b1hsiyxSq7zmjL5+j81pBQTQ76OmTd4Aajk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37209},"gitHead":"7829c294477492fbb95aeee534a85a2b0ae4101f","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.0.4_1762630047690_0.6572379006740214","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.0.5","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.0.5","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"6dbad04c303521740fb93a9df8cfe1d863ce6401","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.0.5.tgz","fileCount":24,"integrity":"sha512-l9tifgltcW82FNKUR/Rg8Jex0UWJttKhlN4CAhKHG62c2LWRblev7fcsFbxb2RNu6XknMqnEozbcwDgX1ASjpA==","signatures":[{"sig":"MEUCIQDDYqmHlnZeT5GvTeDamfqP4JaPAiq2kSxgzqNLAjPvEAIgS7McEVVZE2md084Lm+To0kmhQb1PHNoHYrzKCjwJS74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49040},"gitHead":"7b8771b4709097de80ec935e5e54545117735760","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.0.5_1763766199402_0.405255083504646","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.1.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.1.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"100b6d402baab7f05f03a87ac3fb498e6d7aed03","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.1.0.tgz","fileCount":32,"integrity":"sha512-kFb9XGh9uDLxpnnxs8nmm58z8czc5WQXvrB67z7ztizKrrJ+SFCQ8/j+mNox80Ac8Wra6oA14s9KOEay1nWzew==","signatures":[{"sig":"MEUCIAfI6LdC+28KQSKPm/YdElkIDj13caBv2BL4XUcsf7p/AiEAlLJl9XiszFuODub50VTJpOEwtaHJGWnTGkU2THbCowA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73712},"gitHead":"3d96bd8695b1693906ec22f0a081cca70b92bd31","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.1.0_1763847614216_0.20768999698207136","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.2.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.2.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"a0bcd4044f9db7ffb28569875305746296da6430","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.2.0.tgz","fileCount":33,"integrity":"sha512-eKQrDpYXWPsOogD+7wiMAsWkz0/nm9jfK+GXS4tRbRQoEc8MkyGhZocr5XpMWKc0c8yZc83zDesIUD1y0T7yoQ==","signatures":[{"sig":"MEQCIA5E8d1sovxDdqwu/QxXtjb9ImUzsZyVAq2NKKMSpXeVAiAsuOIk64Y71YXscvTBB2QzkLDmWhhhXb7QFVg502EiaQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79382},"gitHead":"4684285c84439ccbe4de709714c36530348e5812","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.2.0_1764116648285_0.04992194261402805","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.3.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.3.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"f0827af9d0125fd301c42cbb1ba6171243f60b64","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.3.0.tgz","fileCount":35,"integrity":"sha512-4BuqmxVG1HBynPo6qxo3a7nJq+ODuhDvUlSLA+z/dA8oG2mYMkeHULjdycOw3Y1RvX33aet2wjhE7zoOQuvqIg==","signatures":[{"sig":"MEQCICS8J7lBl/lmh/f1P10LqI3A637qX/bhtECPY9Fj4x/gAiA9Tj4Pr3qa4ukBoW5VR8Df23qScY7DGzmCExSUnMyNww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85116},"gitHead":"2c860c801febe407c47c1a9e3bde4436d9d1dfa1","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.3.0_1764352657819_0.9193626739337115","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.3.1","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.3.1","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"b905d3cb33af0a2d62dc42619ec883586f96a5c7","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.3.1.tgz","fileCount":33,"integrity":"sha512-qGjS3GbIIZZ2ax2qCQksCdUF7KrSTIJG9q5ty3knHr7O1bvM2kjPvr/vh98R5RMUsCwF3mSt3uNwXNHoHaFEqQ==","signatures":[{"sig":"MEUCIAJeQHsdgJlGl84XTdkxed51zFltySlG4KtmB3DQv6uDAiEAwt+cZvNQVCy8JVOglSiT8gfTMXv0rvnmt0TJmhRGKO0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83019},"gitHead":"db6984ae19fb4a1f0daf536261158853293e5da0","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.3.1_1764369924718_0.9585960545256709","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.3.2","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.3.2","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"21d2b8ae6274a4d94f11816a1729cb964af5d656","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.3.2.tgz","fileCount":33,"integrity":"sha512-3SOUfgSqk2UB1I47QxtpKyQSaMoHt8xwGOTjlaXjp08d1k6SjXq77s3lYe8rsjWrnY9gAUidxC8F4ch6srlOTg==","signatures":[{"sig":"MEQCIAervvXYmGegwDHi0xjD/ULdg8zOELSMirQpLkvNzritAiB0X5UEpc9p3rIBybAt9tnSc4EdeExNwv28rfi7XXnv/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83709},"gitHead":"adc6204b2e8b52e0669dd00fb2cac9707b5b1951","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.3.2_1764427703975_0.7289712841412215","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.3.3","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.3.3","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"a54948be65ad53f2e1adda0752455b3207895ba2","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.3.3.tgz","fileCount":33,"integrity":"sha512-r4V5dZQA0FQQLJ2Ak3AY5XvM2e42GkV94nvUDrX4aZtBRzsGlIQM502N6/aZz3P/xA7cNw+b/zoPJUwFFVsluA==","signatures":[{"sig":"MEUCIGgoxnpkYRGWURy0Gyalijbqr5yghMmI9Qo9Sthdj7JFAiEAtek0HL9otApRO4kBQnwfxAIyfbgAHHG0wV420ZU94Ps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84715},"gitHead":"091d6b3a167686a27a35b68f310e7c26bc2bb5df","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.3.3_1764428915358_0.06516720135986853","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.3.4","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.3.4","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"857e37a3cd6d1501eee79f7ac536c78fda14d6fe","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.3.4.tgz","fileCount":33,"integrity":"sha512-hZ1edvDboEY9c83hbMaF1QAjT5z0B7Ui8ZkFlVhHNjRJ9JJQxNlCNiCdiPSdcYpgs5nMbxSmTBY4mO0GuqZTqg==","signatures":[{"sig":"MEUCIEx3ToSt8TI59k6r69/idUSOa4m4qNpHmLBYt8TGVPWKAiEAp810m0iJROhnbq9AHX+Ti+BpbSZi4gdL9JtlxtHvLV0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84970},"gitHead":"88d7dd692828c2e86a98fa8499f57f8e2dea3e7d","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.3.4_1764600722117_0.28877642785548807","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.3.5","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.3.5","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"4ccb12e1305b3fe77beb42ed8aed17d0d8152dde","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.3.5.tgz","fileCount":33,"integrity":"sha512-fIXwR8onke0xYaUKE9inqy+lcWj8fsUUe2i01/ySn059ge/qsFP5AeqdwBi9eFv7jdyaHl3MZ8v9VQAPwktqKQ==","signatures":[{"sig":"MEUCIHSdKpefchqT/OhnwQ6arYHdcX89nS672zTjpXqIqx5EAiEAr4cCj2RQoV55wKy+6H3ZL1MAsKijMPOyt7MVIJh8Szo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84196},"gitHead":"5c4e88b3bb9abc29ae3c2a68ab89117b647a3302","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.3.5_1764604541057_0.5576181631611066","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.4.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.4.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"258ecaf8df2f93442e9e67d667c8bef9360b1d3e","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.4.0.tgz","fileCount":34,"integrity":"sha512-WhqUzYjpc0NmUg65qFkjez2zsSZH3sRuU+CGGw6XtK0ZPxaH+OZvc7jM2pFpZmjVOC/IVDrZ6//UhOMf3fFYHg==","signatures":[{"sig":"MEYCIQDDWAHSz0rpWFW/KOIRrZMJ1k7AfMrtokCQwcUvzKPG+gIhAKMYxkTstsbVaQ100m9dUDmanJWW57ewqfApRadIoFo5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85649},"gitHead":"8edb84cbe35827b345b6bc698745a501e484b374","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.4.0_1764790604159_0.7387651882709061","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.5.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.5.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"f00bc1c8ddad321262c17a0dad9b548f6415de5f","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.5.0.tgz","fileCount":34,"integrity":"sha512-zGCaO9H1+0zoBQFVaWXrVJqP51NxiPPsBbxpnRSRnH6DM0sShAJjApc365pD6KVlJ/ioxFRGbTlWR7x3FzkAJQ==","signatures":[{"sig":"MEUCIQD8kglbYXOufoizyuaN8hF/rLv3QN/rBIp+5OdvRPmZmgIgNnuu+YwsRqOGxKZW0picxjAStFEROzdc+OU3H96uV68=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86859},"gitHead":"487a2edfb94d509500d173b560fba587e089ebfa","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.5.0_1765041670739_0.03364745542663239","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.6.1","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.6.1","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"091df364f2ad891bed88e26b2239bb275316c158","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.6.1.tgz","fileCount":39,"integrity":"sha512-PVLfsOngxeZoMj26mvfMnYhrrGii/SS+UjfyZyIhH9x3AQvaEa9AhNw0CADQwhKTDNcrpol0KpjQlUPviNjl9A==","signatures":[{"sig":"MEQCICHICLIi2XF51L0pE05k08ln6AtP3h/sUWFWY2izVRHxAiB58LhQ/ck+bJ72YpytulTjjHxUhMuog5HfO/V1nUZanA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104655},"gitHead":"32e561aa0808f3c2cd9d008b1ea957825fe0d906","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.6.1_1769703116932_0.7527482155905743","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.6.2","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.6.2","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"abfccd747ac537176f65addaa60c03c76a1873da","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.6.2.tgz","fileCount":39,"integrity":"sha512-yxNdOc6FQ8AibmMRxVX6FTJ/ekeP9rwBEYTMctWhrSWQv+4f1KO/6t4YHlfZjXqO2h/aI/bIJ3m3n51NjvOHvg==","signatures":[{"sig":"MEYCIQCjptN/Sz8ElR3AWw+TNgS21A/ckxhchrNoM8Xe1DklZAIhANujJ8b1ZMxSdrOl4YPgZzlAWUogbV37QrFy6aDfeqef","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105360},"gitHead":"e951c6bcbba3b50c7be28cc71690194c49affadd","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.6.2_1769805325547_0.09655704508621032","host":"s3://npm-registry-packages-npm-production"}},"1.6.3":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.6.3","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.6.3","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"86e18b518eb5438b842e1ebf4cb52379fdd54366","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.6.3.tgz","fileCount":41,"integrity":"sha512-0u3PQG3GfB2poVZgp03yEZKkTuvob44uMtXMc6v+0R/VqVrj1FmpxV8hl6O11NW2hx/ZSxhZPjma4Hk6bX6ORA==","signatures":[{"sig":"MEQCIAcYoI5AYmS5se17s/PLHjBZyIxtgr6PI3w77kAXsOZqAiAVR/pdxP6alrHpr8X8RHKv6vEiRmv2Rq183w2dkP8+Gw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125427},"gitHead":"654dce81d9e6710e74747fa5d67752fd3added2a","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.6.3_1769975725169_0.5281189195256508","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.6.4","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.6.4","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"c4e0bbad0be7116a1aa469b3a97a6ff22967e2be","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.6.4.tgz","fileCount":41,"integrity":"sha512-MzEHWkXZ81XkRmcbZ3Ra/30DPtKW+Vd6zUu5RaDfiWXldXwqL9s9TQy97D98uVC/t18aogj8i499m0RQCHyfEw==","signatures":[{"sig":"MEUCIFbo+4iKm+YH8ZOPxzSfw6uZwjb5DLnTR0VcdGFdwlraAiEAqw32m1FAOd80Sske/6Z3TyTQafP/WCZA7zRubbl0YMw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138290},"gitHead":"a648deedd8f1651eddaba1d5ef277c547cf367c9","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.6.4_1769982020016_0.11915043160672378","host":"s3://npm-registry-packages-npm-production"}},"1.6.5":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.6.5","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.6.5","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"bd0a08077ddcfe8959d55a6ca0b21bbd80b59dc2","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.6.5.tgz","fileCount":43,"integrity":"sha512-DMTNlhkBF6a978TxT4yHLh3dwO3LldQsOGTjgfvA5jTf+dbIyNazBZL6LEKCV5WWW1MEbRLbnabKYf+2qODWwg==","signatures":[{"sig":"MEUCIA+JZtcn9NW3WpCBK8y39+djy75eTxIu1ncl4DeyAuXwAiEA5FrpxbXDujONtMbQnh4Cd0l/mDC4R0sHa+x3uIA3RYc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":143818},"gitHead":"ae8d41843aadb4f455107f045286cdf9dc5ccaa5","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.6.5_1770065744680_0.547554278823364","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.7.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.7.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"11dc417bd834989338eeae04c8f214eca953218d","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.7.0.tgz","fileCount":44,"integrity":"sha512-PqeZxoRVjJApvq0tuo7YUSQ5Xo8gfl5j6T73aSJHpCwlQOcZZrVpVlVIcbnKRKvEr3dEM8wwsUmwmUajI1YWzA==","signatures":[{"sig":"MEQCIEbVlr0HFttoo9Scevy62xyRbK9xHFqYYV4FUJDvBHOgAiBR7AT3IDMckng+iiKgzP+ez2piJKbWYggmYmwqSMq/dg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151795},"gitHead":"d16d948fd2fefe734a72719544d908c59cd14a71","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.7.0_1770238132035_0.7248856561233614","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.7.1","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.7.1","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"0aef3ebd74d4c9c0e3ff1605d26c47db30987a44","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.7.1.tgz","fileCount":44,"integrity":"sha512-Aiy0TJ8TCBHbB1+rN6XwV5IuIEu6vthcP1u/NtZVexgO9fYYTXxCvpKf/a8h/t7S76+iWigOgZlGip30zMVVTQ==","signatures":[{"sig":"MEUCIQCX8uko5w8/9yITSOqlg3IaMAd5OFCtNXU+VA5/0moC5gIgM7Jhi+e1XTq0BDPhbGXQRfff3GKNjVBo6cIst7Flchg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151748},"gitHead":"88b628a40f2a1344cf6a42d1f712ab3f5aaf1a35","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.7.1_1770239563372_0.8495531822034683","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.8.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.8.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"97044bb2a07c83fdfbe75a89c4d0ce7b0fa99cb6","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.8.0.tgz","fileCount":45,"integrity":"sha512-7+esdYnmQaExtgrS3molJUba7Kldc/K9H2L5uFiqpjX87Dq/v1BmouXVsOaPDbpao1jRApOwH9TR8KxH1fOxPQ==","signatures":[{"sig":"MEUCIQDCL61FlGDs8Hcd1EzkOuMUNUwL1PSC3KJ9Q4En1siYOgIgfbJO2MJIJxaJbsed2Zbhnu1dOb7DOWTmNlX5HUsPY7Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158737},"gitHead":"68cdcee513ecb64e24b3b5c5219dae03a4441eb1","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Este projeto é o microsserviço principal e o coração do backend de finanças pessoais, atuando como a API Gateway principal para o frontend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.8.0_1770921363319_0.287937780820821","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.9.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.9.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"16f45cbe20add42a26a5b7b4d66ae6d7a12141e5","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.9.0.tgz","fileCount":46,"integrity":"sha512-AFT07I/G6j+oWzqhWUQSVqctZna3HfHB2qeLfZO/B34OHEFyQObp8FXqWTQTdEhKWF3/89L5wfBUZD2ZTX6y/g==","signatures":[{"sig":"MEUCIBYi4xMPdd3aUeuITBnV6162MjQgHc0xytwk/rWWZWsUAiEAmsff69udg1hyMQUUIEu84u4J/s9DR/eNT+VWiUhvg9k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":180408},"gitHead":"81be7bae3d774e8d106ac683d4cc375b23d7daac","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Main API gateway and orchestration service for the Personal Finance backend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.9.0_1771112359214_0.847496763742781","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.9.1","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.9.1","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"7492136579d8ed81ec1d43cf2cb088ddffffd8ec","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.9.1.tgz","fileCount":48,"integrity":"sha512-JMsSPhvuk7PLrUUZU6Q3uT8k1sROZhC3yYGM0OMrOLTRUNnjR1xvEByOiofQbRsbN0aD+ees5HPJs6jVVrOprw==","signatures":[{"sig":"MEQCIA89/N8LTSansOOlkICSS8hi8G5dVw9WWXnwCxj/L1cyAiBiRLfPd4rk4RwhIuiT5Rb0uuqciF41WbyMTAiekgFAjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":197562},"gitHead":"c4f72ed305681c51cede4e1d2e5effef07040ec4","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Main API gateway and orchestration service for the Personal Finance backend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.9.1_1771162639414_0.00026640026737623224","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.10.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.10.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"58411d4cc690925c57baae30581409cb0d77f15c","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.10.0.tgz","fileCount":57,"integrity":"sha512-/OUiQbHJsKxBCUQPMUY7qIAzyBlWEZGRgn67dLq3u0rpfwQKYqg7ZLJCTiwHZESKUVdFuqt4iybBrVVce7//jA==","signatures":[{"sig":"MEUCIEsi9Jes/lbFKCK08omdyEYERs7Pz4gnhCOKPTOyJ5x1AiEA5AAb+fmooQwt7L9jepHaiBQKM4HwT6Dds4usGsLu8ds=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":262574},"gitHead":"9722a0c5cb678e2b3f5aad960b55a6b604834437","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Main API gateway and orchestration service for the Personal Finance backend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.10.0_1771349105926_0.015209997982911672","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.10.1","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.10.1","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"5a99db97c964128be0f1dd56820f146ef3fcc199","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.10.1.tgz","fileCount":57,"integrity":"sha512-fcX0zvRsqfyo5ORNCBLEwwGlrzTumqZw+okj7LJPVeb19rcOe/C0o7Rz5Ypn7d/14PjouRdwHljUrNQQGaZO3A==","signatures":[{"sig":"MEUCIEE7+ai7m50l9G/njQ61k73MOBtCQLTeAOQ6LJsDKmdKAiEA3IUlz+I9eTh7S42eNyEvTItC1/ntbKqsKvxuTsyY/Mg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":264520},"gitHead":"ffe8a5ee7f85f851b6a3837d0b54565a5122b380","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Main API gateway and orchestration service for the Personal Finance backend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.10.1_1771349560754_0.08707611812316385","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.11.0","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.11.0","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"2239d15d65916db5a813f6c6ab906b4e9e55beff","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.11.0.tgz","fileCount":58,"integrity":"sha512-vdiOBgRH2QjN1t8NRIbVMAR0lOp1OQH3dlr1NoYve7DsZp/lA6p9Kc5MaHN84tTVY1M+EPn+XDuV5eccgg0t+Q==","signatures":[{"sig":"MEUCIQC9BTGx8forZwGH3CvwAEQRSHBhSE/o2ucW10/vSUSzrwIgKDpVBwS3aoLrLzmqOclDV4G6x9Gucv6iO3GRplOOFDQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323278},"gitHead":"46a145f2b84659c99256bc2ef6e3f318ed5e1c53","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Main API gateway and orchestration service for the Personal Finance backend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.11.0_1771874878668_0.06783833090463176","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.11.1","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.11.1","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"dist":{"shasum":"ac24e41e08fd19c8995b757ca49b48ee12354d9a","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.11.1.tgz","fileCount":58,"integrity":"sha512-cCNPKTXpqcR7zTKXsV2bwnOuJC97IszRMDCQp8vko/W5aqIKRx6Y6c3OFm/yBCiKqOqcscPKv4q1A9YLUMYreg==","signatures":[{"sig":"MEUCIAgaTcx26Si9OACGmJMT06yY+I+v8oDEOfJea4V9vgxRAiEA30EuT7E3g/LVAWWhpB64mpNoaBQxgP2RUW7M9I/xuTI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":328126},"gitHead":"0e61ccbf1189cc6620f5b052476db53d6c8f2fd1","release":{"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"],"branches":["main"]},"scripts":{"release":"semantic-release"},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"_npmVersion":"7.24.2","description":"Main API gateway and orchestration service for the Personal Finance backend.","directories":{},"_nodeVersion":"17.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0","@semantic-release/changelog":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/personal-finance-backend-trades-assets_1.11.1_1772115191381_0.17263481542728187","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@marcos_feitoza/personal-finance-backend-trades-assets","version":"1.12.0","publishConfig":{"access":"public"},"scripts":{"release":"semantic-release"},"devDependencies":{"semantic-release":"^18.0.0","@semantic-release/changelog":"^6.0.0","@semantic-release/git":"^10.0.0","@semantic-release/github":"^8.0.0"},"release":{"branches":["main"],"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog","@semantic-release/npm","@semantic-release/github","@semantic-release/git"]},"gitHead":"a0a9f1adaee3e624e89d8e24b01e70c793451523","description":"Main API gateway and orchestration service for the Personal Finance backend.","_id":"@marcos_feitoza/personal-finance-backend-trades-assets@1.12.0","_nodeVersion":"17.2.0","_npmVersion":"7.24.2","dist":{"integrity":"sha512-OWmTJcE2Spvoeuoo0hNpfaGrrVnL4PY6F6YNCTC33As+vqS5O52Ytg7WVcpdTCCeVf4TWx3EKESZvfroZgXw/A==","shasum":"3cac25743fe31775e30771cad2bf5194faf55434","tarball":"https://registry.npmjs.org/@marcos_feitoza/personal-finance-backend-trades-assets/-/personal-finance-backend-trades-assets-1.12.0.tgz","fileCount":59,"unpackedSize":335893,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG5012LKroJy/mng+s/CXJD0hExLZ/G8wlIWKoI+BlcbAiAOA9V8rS4XMSw27MH//VBu8FbI/WmkDuAYkBw4nQ7Jiw=="}]},"_npmUser":{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"},"directories":{},"maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/personal-finance-backend-trades-assets_1.12.0_1773445344273_0.751584286169267"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-19T22:02:33.490Z","modified":"2026-03-13T23:42:24.519Z","1.0.0":"2025-09-19T22:02:33.756Z","1.0.1":"2025-10-17T23:08:06.156Z","1.0.2":"2025-10-23T17:09:35.553Z","1.0.3":"2025-10-23T22:05:42.730Z","1.0.4":"2025-11-08T19:27:27.887Z","1.0.5":"2025-11-21T23:03:19.607Z","1.1.0":"2025-11-22T21:40:14.408Z","1.2.0":"2025-11-26T00:24:08.570Z","1.3.0":"2025-11-28T17:57:38.016Z","1.3.1":"2025-11-28T22:45:24.916Z","1.3.2":"2025-11-29T14:48:24.174Z","1.3.3":"2025-11-29T15:08:35.546Z","1.3.4":"2025-12-01T14:52:02.306Z","1.3.5":"2025-12-01T15:55:41.251Z","1.4.0":"2025-12-03T19:36:44.361Z","1.5.0":"2025-12-06T17:21:10.895Z","1.6.1":"2026-01-29T16:11:57.084Z","1.6.2":"2026-01-30T20:35:25.749Z","1.6.3":"2026-02-01T19:55:25.326Z","1.6.4":"2026-02-01T21:40:20.171Z","1.6.5":"2026-02-02T20:55:44.843Z","1.7.0":"2026-02-04T20:48:52.199Z","1.7.1":"2026-02-04T21:12:43.527Z","1.8.0":"2026-02-12T18:36:03.503Z","1.9.0":"2026-02-14T23:39:19.352Z","1.9.1":"2026-02-15T13:37:19.551Z","1.10.0":"2026-02-17T17:25:06.077Z","1.10.1":"2026-02-17T17:32:40.904Z","1.11.0":"2026-02-23T19:27:58.812Z","1.11.1":"2026-02-26T14:13:11.530Z","1.12.0":"2026-03-13T23:42:24.413Z"},"description":"Main API gateway and orchestration service for the Personal Finance backend.","maintainers":[{"name":"marcos_feitoza","email":"marcos.a.feitoza@gmail.com"}],"readme":"# Backend Core - Personal Finance\n\nMain API gateway and orchestration service for the Personal Finance backend.\n\n## Purpose\n\n`backend-core` is the entry point used by frontend clients. It centralizes authentication, business routing, and internal service proxying.\n\nFor AI capabilities, it is the official boundary in front of `ai-insights`.\n\n## AI Integration (Updated)\n\n`backend-core` proxies all AI endpoints and forwards:\n\n- `Authorization: Bearer <token>`\n- `X-Correlation-ID`\n\nAI proxy endpoints currently supported:\n\n- `GET /api/ai/health`\n- `GET /api/ai/insights`\n- `POST /api/ai/chat`\n- `POST /api/ai/feedback`\n- `POST /api/ai/simulate`\n- `POST /api/ai/plan/monthly`\n- `GET /api/ai/observability/summary`\n- `GET /api/ai/usage/summary`\n- `POST /api/ai/notifications/generate`\n- `GET /api/ai/notifications`\n- `GET /api/ai/notifications/unread-count`\n- `GET /api/ai/notifications/schedule`\n- `POST /api/ai/notifications/{notification_id}/read`\n- `POST /api/ai/notifications/read-all`\n- `POST /api/ai/advisor/report/monthly-deliver` (proxy to advisor orchestrator)\n- `POST /api/ai/advisor/simulate` (proxy to advisor orchestrator)\n- `POST /api/ai/advisor/feedback` (proxy to advisor orchestrator)\n- `GET /api/ai/advisor/health` (proxy to advisor orchestrator)\n- `POST /api/ai/advisor/chat` (proxy to advisor orchestrator)\n- `POST /api/ai/advisor/report` (proxy to advisor orchestrator)\n- `POST /api/ai/advisor/plan` (proxy to advisor orchestrator)\n- `POST /api/ai/advisor/suggestions/click` (tracks suggested prompt click analytics)\n- `GET /api/ai/advisor/observability/summary` (proxy to advisor orchestrator)\n- `POST /api/ai/advisor/notifications/generate` (proxy to advisor orchestrator)\n- `GET /api/ai/advisor/notifications` (proxy to advisor orchestrator)\n\nMarket/Crypto proxy endpoints currently supported:\n\n- `GET /api/core-market-data/stocks`\n- `GET /api/core-market-data/search`\n- `GET /api/core-crypto/prices`\n- `GET /api/core-crypto/validate/{query}`\n- `POST /api/core-crypto/log`\n\n\n## Responsabilidades Principais\n\n- **Autenticação de Usuários**: Gerencia registro (`/register`) e login (`/token`) de usuários.\n- authentication (register/login/refresh/logout)\n- **Orquestração de Transações**: Lida com a criação, leitura e exclusão de transações financeiras, contribuições RRSP e dividendos.\n- orchestration for transactions/investments/metadata\n- **Orquestração de Trades e Ativos**: Utiliza a biblioteca `trades-assets` para gerenciar a compra e venda de ativos.\n- integration with balance/market/ai services\n- consistent API boundary for frontend\n- **Orquestração de Balanços**: Expõe endpoints que se comunicam com o `balance-service` para obter os saldos das contas.\n\n- **Gerenciamento de Investimentos**: Processa as movimentações de dinheiro entre contas (ex: de CASH para TFSA).\n\n## Tecnologias\n\n- **Framework**: FastAPI\n- **Banco de Dados**: PostgreSQL (acessado via `personal-finance-backend-shared`)\n- **Dependências Locais**:\n  - `personal-finance-backend-shared`: Para acesso aos modelos, `crud` e utilitários.\n  - `personal-finance-backend-trades-assets`: Para a lógica de trades e ativos.\n- **Deploy**: Docker & Kubernetes (via Helm)\n\n## Important Environment Variables\n\n- `JWT_SECRET_KEY`\n- `BALANCE_SERVICE_URL`\n- `MARKET_DATA_SERVICE_URL`\n- `MARKET_DATA_CRYPTO_SERVICE_URL`\n- `AI_INSIGHTS_SERVICE_URL`\n- `AI_ADVISOR_ORCHESTRATOR_SERVICE_URL`\n- `AI_ADVISOR_HTTP_TIMEOUT_SECONDS`\n- `AI_ADVISOR_HTTP_RETRY_ATTEMPTS`\n- `AI_ADVISOR_ROLLOUT_ENABLED`\n- `AI_ADVISOR_ROLLOUT_ALLOWED_PLANS`\n- `AI_ADVISOR_ROLLOUT_PERCENT`\n- `AI_ADVISOR_ROLLOUT_ALLOW_USER_IDS`\n- `AI_ADVISOR_ROLLOUT_DENY_USER_IDS`\n- `AI_ADVISOR_ROLLOUT_CHAT_FALLBACK_ENABLED`\n- `AI_ADVISOR_EXPOSE_ROUTING_METADATA`\n- `AI_ADVISOR_LIMIT_FREE_DAILY`\n- `AI_ADVISOR_LIMIT_FREE_MONTHLY`\n- `AI_ADVISOR_LIMIT_PLUS_DAILY`\n- `AI_ADVISOR_LIMIT_PLUS_MONTHLY`\n- `AI_ADVISOR_LIMIT_PRO_DAILY`\n- `AI_ADVISOR_LIMIT_PRO_MONTHLY`\n- `AI_ADVISOR_BUDGET_FREE_MONTHLY_USD`\n- `AI_ADVISOR_BUDGET_PLUS_MONTHLY_USD`\n- `AI_ADVISOR_BUDGET_PRO_MONTHLY_USD`\n- `AI_ADVISOR_COST_POLICY_ACTION`\n\n## AI Advisor Rollout Variables (usabilidade)\n\nAs variáveis abaixo controlam o rollout de `/api/ai/advisor/*` no `backend-core`:\n\n- `AI_ADVISOR_ROLLOUT_ENABLED`:\n  - `true`: rollout ativo\n  - `false`: desliga advisor para todos (exceto allowlist)\n- `AI_ADVISOR_ROLLOUT_ALLOWED_PLANS`:\n  - lista CSV de planos elegíveis (`free,plus,pro`)\n  - exemplo: `plus,pro`\n- `AI_ADVISOR_ROLLOUT_PERCENT`:\n  - percentual de coorte por `user_id % 100`\n  - exemplo: `10` ativa ~10% dos usuários elegíveis\n- `AI_ADVISOR_ROLLOUT_ALLOW_USER_IDS`:\n  - CSV de users sempre habilitados (bypass de plano/coorte)\n  - exemplo: `2,15,99`\n- `AI_ADVISOR_ROLLOUT_DENY_USER_IDS`:\n  - CSV de users sempre bloqueados (precedência mais alta)\n  - exemplo: `7,8`\n- `AI_ADVISOR_ROLLOUT_CHAT_FALLBACK_ENABLED`:\n  - `true`: quando usuário não elegível no advisor chat, faz fallback para `/api/ai/chat` legado\n  - `false`: retorna `403 advisor_rollout_not_enabled`\n- `AI_ADVISOR_EXPOSE_ROUTING_METADATA`:\n  - `false` (recomendado): não expõe metadados internos de roteamento/rollout no payload para usuário comum\n  - `true`: expõe metadados (`rollout`, `advisor_routed_to`) para todos os usuários autenticados\n- Limites por plano (chat advisor):\n  - `AI_ADVISOR_LIMIT_FREE_DAILY` / `AI_ADVISOR_LIMIT_FREE_MONTHLY`\n  - `AI_ADVISOR_LIMIT_PLUS_DAILY` / `AI_ADVISOR_LIMIT_PLUS_MONTHLY`\n  - `AI_ADVISOR_LIMIT_PRO_DAILY` / `AI_ADVISOR_LIMIT_PRO_MONTHLY`\n  - valor `-1` pode ser usado para desativar um limite específico\n- Orçamento de custo por plano (USD/mês, chat advisor):\n  - `AI_ADVISOR_BUDGET_FREE_MONTHLY_USD`\n  - `AI_ADVISOR_BUDGET_PLUS_MONTHLY_USD`\n  - `AI_ADVISOR_BUDGET_PRO_MONTHLY_USD`\n  - valor `< 0` desativa orçamento para o plano\n  - `AI_ADVISOR_COST_POLICY_ACTION`:\n    - `block`: retorna `429 advisor_cost_budget_reached` ao exceder orçamento\n    - `warn_only`: não bloqueia (apenas registra evento de orçamento excedido)\n\nPrecedência do gate:\n1. `DENY_USER_IDS`\n2. `ALLOW_USER_IDS`\n3. `AI_ADVISOR_ROLLOUT_ENABLED`\n4. `AI_ADVISOR_ROLLOUT_ALLOWED_PLANS`\n5. `AI_ADVISOR_ROLLOUT_PERCENT` (bucket)\n\nComportamento no response de `/api/ai/advisor/chat`:\n- Por padrão (`AI_ADVISOR_EXPOSE_ROUTING_METADATA=false`), payload para usuário comum não inclui metadados internos de rollout/routing.\n- Admin/support_admin ainda recebem metadados internos para troubleshooting.\n- Com `AI_ADVISOR_EXPOSE_ROUTING_METADATA=true`, qualquer usuário autenticado recebe `advisor_routed_to` e `rollout`.\n\nComportamento de limite:\n- quando o usuário atinge limite diário ou mensal, `/api/ai/advisor/chat` retorna `429` com `code=advisor_usage_limit_reached`\n- o evento é registrado em `ai_usage_events` com `endpoint=ai.advisor.chat` e `error_type=advisor_usage_limit_reached`\n\nComportamento de orçamento (USD):\n- quando o custo mensal acumulado atinge o orçamento do plano:\n  - com `AI_ADVISOR_COST_POLICY_ACTION=block`: `/api/ai/advisor/chat` retorna `429` com `code=advisor_cost_budget_reached`\n  - com `AI_ADVISOR_COST_POLICY_ACTION=warn_only`: não bloqueia request, mas registra evento operacional\n- o evento é registrado em `ai_usage_events` com `error_type=advisor_cost_budget_reached`\n\nMetering LLM (advisor):\n- o proxy persiste em `ai_usage_events` os campos de metering recebidos do orchestrator:\n  - `provider`\n  - `model`\n  - `prompt_tokens`\n  - `completion_tokens`\n  - `total_tokens`\n  - `cost_estimate`\n\nAdmin observability (advisor):\n- `/api/admin/ai-observability/summary` agora separa:\n  - `total_errors` (HTTP >= 400, inclui bloqueios de política)\n  - `total_policy_blocks` (`advisor_usage_limit_reached`, `advisor_cost_budget_reached`, `advisor_rollout_not_enabled`)\n  - `total_technical_errors` (5xx e falhas técnicas de proxy/upstream)\n  - `technical_error_rate_percent` (indicador principal para qualidade operacional)\n- o payload também inclui agregação por `mode` (`by_mode`) com `p95_latency_ms`.\n\n\nprod-var.yaml\n```yaml\n  - name: AI_ADVISOR_LIMIT_FREE_DAILY\n    value: \"20\"\n  - name: AI_ADVISOR_LIMIT_FREE_MONTHLY\n    value: \"300\"\n  - name: AI_ADVISOR_LIMIT_PLUS_DAILY\n    value: \"100\"\n  - name: AI_ADVISOR_LIMIT_PLUS_MONTHLY\n    value: \"3000\"\n  - name: AI_ADVISOR_LIMIT_PRO_DAILY\n    value: \"300\"\n  - name: AI_ADVISOR_LIMIT_PRO_MONTHLY\n    value: \"10000\"\n  - name: AI_ADVISOR_BUDGET_FREE_MONTHLY_USD\n    value: \"0.50\"\n  - name: AI_ADVISOR_BUDGET_PLUS_MONTHLY_USD\n    value: \"5.00\"\n  - name: AI_ADVISOR_BUDGET_PRO_MONTHLY_USD\n    value: \"20.00\"\n  - name: AI_ADVISOR_COST_POLICY_ACTION\n    value: \"block\"\n```\n\nValores padrão (prod)\n\nfree: 20/dia, 300/mês\nplus: 100/dia, 3000/mês\npro: 300/dia, 10000/mês\n\n\n20/dia e 300/mês = quantidade de requests ao endpoint /api/ai/advisor/chat por usuário.\n\nfree: 20/dia\nCada usuário free pode fazer até 20 perguntas por dia no AI Advisor chat.\n\nfree: 300/mês\nCada usuário free pode fazer até 300 perguntas por mês no AI Advisor chat.\n\nQuando bate qualquer um dos dois limites, a API retorna 429 advisor_usage_limit_reached.\n\n\n```sql\n-- Listar usuários com plano\nSELECT id, email, role, plan, account_status, created_at\nFROM users\nORDER BY id;\n\n-- Ver 1 usuário específico\nSELECT id, email, role, plan, account_status\nFROM users\nWHERE id = 2;\n\n-- Alterar plano de um usuário (exemplo: user_id=2 para pro)\nUPDATE users\nSET plan = 'pro'\nWHERE id = 2;\n\n-- Conferir se alterou\nSELECT id, email, plan\nFROM users\nWHERE id = 2;\n\n\n```\n\n\n\nExemplos de configuração:\n\n- Full rollout:\n  - `AI_ADVISOR_ROLLOUT_ALLOWED_PLANS=free,plus,pro`\n  - `AI_ADVISOR_ROLLOUT_PERCENT=100`\n\n- Rollout seguro inicial:\n  - `AI_ADVISOR_ROLLOUT_ALLOWED_PLANS=plus,pro`\n  - `AI_ADVISOR_ROLLOUT_PERCENT=10`\n  - `AI_ADVISOR_ROLLOUT_CHAT_FALLBACK_ENABLED=true`\n\n## Local Run\n\n```bash\npip install -r personal-finance-backend-core/requirements.txt\nuvicorn personal-finance-backend-core.app.main:app --reload --app-dir .\n```\n\n## Deployment\n\n- container build via `dockerbuild.sh` or monorepo `podman-build.sh`\n- Helm deployment managed by Argo CD\n\n## Notes\n\n- Frontend should call AI endpoints only through `backend-core`, not directly to `ai-insights`.\n- This keeps auth, tracing, and future policy controls centralized.\n- Frontend should call market/crypto through `backend-core` (`/api/core-market-data/*`, `/api/core-crypto/*`) instead of direct service exposure.\n- AI Advisor scorecard oficial (metas/go-no-go/revisão semanal): `personal-finance-backend-ai-advisor-orchestrator/AI-Scorecard.md`.\n\n## Autenticação (JWT)\n\n### Visão geral\n\nO serviço `backend-core` implementa autenticação via **JWT (access token)** e protege a maioria dos endpoints com o header:\n\n```http\nAuthorization: Bearer <access_token>\n```\n\n### Endpoints\n\n- **Login**: `POST /api/auth/token`\n  - Envia credenciais no formato `application/x-www-form-urlencoded`:\n    - `username=<email>`\n    - `password=<senha>`\n  - Retorna:\n    ```json\n    {\"access_token\": \"...\", \"refresh_token\": \"...\", \"token_type\": \"bearer\"}\n    ```\n\n- **Refresh**: `POST /api/auth/refresh`\n  - Body:\n    ```json\n    {\"refresh_token\": \"...\"}\n    ```\n  - Retorna um novo par (rotaciona o refresh token):\n    ```json\n    {\"access_token\": \"...\", \"refresh_token\": \"...\", \"token_type\": \"bearer\"}\n    ```\n\n- **Logout**: `POST /api/auth/logout`\n  - Body:\n    ```json\n    {\"refresh_token\": \"...\"}\n    ```\n  - Revoga o refresh token (logout idempotente)\n\n- **Registro**: `POST /api/auth/register`\n\n### Claims atuais do token\n\nNo estado atual do projeto, o access token inclui:\n\n- `sub`: email do usuário\n- `user_id`: id do usuário\n- `role`: role do usuário (ex.: `user`, `admin`)\n- `plan`: plano do usuário (ex.: `free`, `plus`, `pro`)\n- `iat`: timestamp de emissão\n- `jti`: id único do token\n- `iss`: issuer (quando `JWT_ISSUER` estiver configurada)\n- `aud`: audience (quando `JWT_AUDIENCE` estiver configurada)\n- `exp`: expiração do token\n\n### Expiração\n\nO access token expira em **30 minutos** (ver `ACCESS_TOKEN_EXPIRE_MINUTES` em `personal-finance-backend-shared/personal_finance_shared/auth_utils.py`).\n\nO refresh token expira por padrão em **30 dias** (ver `REFRESH_TOKEN_EXPIRE_DAYS` em `personal-finance-backend-shared/personal_finance_shared/auth_utils.py`).\n\n### Variáveis de ambiente\n\nObrigatórias:\n\n- `JWT_SECRET_KEY`: segredo do JWT (HS256)\n\nReservadas para hardening futuro (Fase 0/1 do plano de JWT):\n\n- `JWT_ISSUER`: issuer (ex.: `personal-finance-backend-core`)\n- `JWT_AUDIENCE`: audience (ex.: `personal-finance-frontend`)\n- `JWT_REFRESH_SECRET_KEY`: reservado para implementação de refresh token\n\nObrigatória para refresh token (Fase 3):\n\n- `JWT_REFRESH_SECRET_KEY`: segredo usado para assinar/validar refresh tokens.\n\nOpcional:\n\n- `REFRESH_TOKEN_EXPIRE_DAYS`: dias de expiração do refresh token (default 30).\n\nOpcional (recomendado em produção):\n\n- `JWT_STRICT_ISS_AUD`: se `true`, rejeita tokens sem `iss/aud` (tokens legados)\n\n## Estrutura da API\n\nEste serviço expõe e orquestra os seguintes grupos de endpoints:\n\n- `/api/auth`: Autenticação de usuários.\n- `/api/transactions`: Operações de crédito e débito.\n- `/api/investments`: Movimentações entre contas.\n- `/api/accounts`: Obtenção de balanços de contas.\n- `/api/dividends`: Gerenciamento de dividendos.\n- `/api/rrsp-contributions`: Gerenciamento de contribuições RRSP.\n- `/api/trades`: Operações de compra e venda de ativos (da biblioteca `trades-assets`).\n- `/api/assets`: Gerenciamento de ativos (da biblioteca `trades-assets`).\n- `/api/ai`: Proxy para o serviço de insights de IA (`/health`, `/insights`).\n\n## Planos e Controle de Acesso\n\nO `backend-core` agora separa:\n\n- `role` para autorização administrativa (`user`/`support_admin`/`admin`)\n- `plan` para monetização (`free`/`plus`/`pro`)\n\nComportamento atual:\n\n- usuários novos são criados com `plan=free`\n- endpoints de investimentos são bloqueados para `free` (mínimo `plus`)\n- endpoints administrativos concentram operação de usuários, segurança, créditos, auditoria e observability\n\nAdmin endpoints relevantes:\n\n- `GET /api/admin/users` (retorna `id`, `email`, `role`, `plan`, status e flags de segurança)\n- `PUT /api/admin/users/{user_id}/plan?plan=free|plus|pro`\n- `PUT /api/admin/users/{user_id}/role?role=user|support_admin|admin`\n- `PUT /api/admin/users/{user_id}/status?status=active|suspended&reason=...`\n- `POST /api/admin/users/{user_id}/security/revoke-sessions`\n- `PUT /api/admin/users/{user_id}/security/force-password-change?enabled=true|false&revoke_sessions=true|false`\n- `POST /api/admin/users/{user_id}/security/reset-mfa` (placeholder)\n- `GET /api/admin/users/{user_id}/ai-credits`\n- `GET /api/admin/users/{user_id}/ai-credits/ledger?limit=50`\n- `POST /api/admin/users/{user_id}/ai-credits/adjust?delta=10&reason=manual_topup`\n- `POST /api/admin/users/{user_id}/ai-credits/promo-grant?...`\n- `POST /api/admin/ai-credits/topup-monthly?period=YYYY-MM`\n- `GET /api/admin/audit-logs?...`\n- `GET /api/admin/ai-observability/summary?hours=24&user_id=<optional>`\n\nQuando bloqueado por plano, a API retorna `403` com:\n\n- `code: \"plan_upgrade_required\"`\n- `current_plan`\n- `required_plan`\n\n### Créditos de Overage (base preparada)\n\nPara suportar overage de AI, o core expõe endpoints administrativos de crédito:\n\n- consultar saldo de créditos AI por usuário\n- listar ledger de movimentações de crédito\n- ajustar crédito manualmente (`delta` positivo/negativo)\n\nEssa base prepara o próximo passo de cobrança: consumo automático de créditos quando a quota mensal do plano for excedida.\n\n### Metadata (categorias / subcategorias / payment methods)\n\nPara iniciar a migração de listas estáticas para dinâmicas no frontend (dropdowns), o backend-core expõe endpoints read-only:\n\n- `GET /api/metadata/categories`\n- `GET /api/metadata/payment-methods`\n\n#### Estratégia (dropdowns limpos)\n\n- Dropdowns retornam apenas:\n  - categorias/subcategorias **custom** do usuário (persistidas)\n  - + categorias/subcategorias **aprendidas** das transações do usuário (distinct)\n\nO template demo **não aparece automaticamente** nos dropdowns.\nEle pode ser visto via endpoint read-only e importado para a lista do usuário.\n\n#### Contratos (respostas)\n\n`GET /api/metadata/categories`\n\n```json\n{\n  \"categories\": {\n    \"MOTO\": [\"roda\"],\n    \"LEISURE\": [\"Bar\"]\n  }\n}\n```\n\n`GET /api/metadata/demo-categories`\n\n```json\n{\n  \"categories\": {\n    \"HOUSE\": [\"Rent\", \"Net\"],\n    \"LEISURE\": [\"Bar\"]\n  }\n}\n```\n\n`GET /api/metadata/categories`\n\n```json\n{\n  \"payment_methods\": [\"CASH\", \"RBC\", \"BMO\"]\n}\n```\n\n#### CRUD (Fase 1)\n\nCRUD de categorias/subcategorias por usuário (persistência dedicada).\n\n---\n\n## Metadata (categorias/subcategorias) — CRUD (Fase 1)\n\nPara suportar personalização pelo usuário (via tela de Settings/Profile no frontend), foram adicionados endpoints CRUD.\n\n### Migration\n\n- Migration Alembic: `1f2a3b4c5d6e_add_user_categories_and_subcategories.py`\n- Tabelas:\n  - `user_categories`\n  - `user_subcategories`\n\n### Regras\n\n- **Categoria case-insensitive**: normalizada em uppercase e com unicidade por usuário.\n- **Subcategoria case-insensitive dentro da categoria**: normalizada (lowercase) e com unicidade por categoria.\n- A mesma subcategoria pode existir em categorias diferentes.\n\n### Endpoints\n\nAlém dos read-only:\n\n- `GET /api/metadata/categories` (custom + learned from transactions)\n- `GET /api/metadata/payment-methods`\n- `GET /api/metadata/demo-categories` (template demo, read-only)\n\nCRUD:\n\n- `GET /api/metadata/user-categories` — retorna apenas categorias/subcategorias criadas pelo usuário (sem defaults)\n- `POST /api/metadata/categories` — cria categoria\n  - body: `{ \"name\": \"HOUSE\" }`\n- `DELETE /api/metadata/categories/{category_name}` — apaga categoria (cascade nas subcategorias)\n- `POST /api/metadata/categories/{category_name}/subcategories` — cria subcategoria\n  - body: `{ \"name\": \"Rent\" }`\n- `DELETE /api/metadata/categories/{category_name}/subcategories/{subcategory_name}` — apaga subcategoria\n\nExtra (UX):\n\n- `POST /api/metadata/user-categories/import-defaults` — copia o template demo (DEFAULT_CATEGORIES) para a lista do usuário (idempotente)\n- `GET /api/metadata/transaction-categories` — retorna apenas categorias/subcategorias aprendidas das transações (sem defaults, sem user-defined)\n- `GET /api/metadata/demo-categories` — retorna o template demo (read-only)\n\n### Rotas administrativas (RBAC)\n\nEste projeto possui um router administrativo separado em `/api/admin/*`.\n\n- **Acesso**: requer autenticação + role `admin` ou `support_admin`.\n- **Objetivo**: concentrar tarefas de suporte/operacional (administração de usuários, manutenção), sem misturar com as rotas de domínio do usuário.\n\nEndpoints atuais:\n\n- `GET /api/admin/health` — sanity-check do RBAC (não-admin recebe 403)\n- `GET /api/admin/users` — lista usuários (plano, status e segurança)\n- `PUT /api/admin/users/{user_id}/role?role=user|support_admin|admin` — altera role de um usuário\n- `GET /api/admin/audit-logs` — trilha de auditoria administrativa\n- `GET /api/admin/ai-observability/summary` — observability AI centralizada por janela e usuário\n\n> Nota: se ainda não existir usuário com role administrativo (`admin` ou `support_admin`), essas rotas retornarão 403 até que você promova um usuário.\n\n### Auditoria administrativa\n\nToda ação administrativa relevante gera registro em `admin_audit_log`, incluindo:\n\n- quem executou (`admin_user_id`)\n- quando (`created_at`)\n- alvo (`target_user_id`, quando aplicável)\n- endpoint/método\n- IP e `request_id` (`X-Correlation-ID`)\n- estado antes/depois (`before_state` / `after_state`)\n\n### Segurança administrativa (sessão e senha)\n\nO admin pode:\n\n- revogar todas as sessões de um usuário (refresh tokens + invalidação imediata por `session_revoked_at`)\n- forçar troca de senha no próximo login/uso (`force_password_change`)\n\nQuando `force_password_change=true`, o usuário precisa alterar senha (`/api/users/me/password`) antes de usar outras rotas protegidas.\n\n## Logging\n\nO serviço utiliza um sistema de **logging estruturado (JSON)** centralizado na `personal-finance-backend-shared`.\n\n- **Correlation ID**: Todas as requisições recebem um `X-Correlation-ID` (seja um novo ou o que foi propagado). Este ID é adicionado a todas as linhas de log, permitindo rastrear uma operação através de todos os microsserviços.\n- **Filtragem**: Por ser JSON, os logs são facilmente pesquisáveis e filtráveis em ferramentas de monitoramento por campos como `level`, `logger_name`, `user_id`, `correlation_id`, etc.\n\n### Helper `log_ctx()` (padrão de campos)\n\nPara evitar repetição e garantir consistência de campos nos logs, existe o helper `log_ctx()` em:\n\n`personal-finance-backend-shared/personal_finance_shared/logging_utils.py`\n\nExemplo:\n\n```py\nfrom personal_finance_shared.logging_utils import get_logger, log_ctx\n\nlogger = get_logger(\"accounts\")\n\nlogger.info(\n    \"Forwarding request\",\n    extra=log_ctx(endpoint=\"accounts.balance_v2\", user_id=current_user.id, account=account_name),\n)\n```\n\nCampos suportados:\n- `endpoint` (obrigatório)\n- `user_id` (opcional)\n- `account` (opcional)\n- quaisquer outros campos via `**extra` (ex.: `status_code`, `latency_ms`, etc.)\n\n### Níveis de log (dev vs prod)\n\nO logging é configurado via `personal_finance_shared.logging_utils.setup_logging()`.\n\nVariáveis de ambiente suportadas:\n\n- `LOG_LEVEL` (default: `INFO`): nível do root logger (`DEBUG|INFO|WARNING|ERROR`).\n- `APP_ENV` (default: `prod`): controla o ruído de loggers externos.\n  - Em `prod`: reduz ruído de `uvicorn.access`, `httpx/httpcore` e `sqlalchemy`.\n  - Em `dev`: permite mais logs para debugging.\n\nExemplo (dev):\n\n```bash\nexport APP_ENV=dev\nexport LOG_LEVEL=DEBUG\n```\n\nend\n","readmeFilename":"README.md"}